diff --git a/.github/ISSUE_TEMPLATE/i18n.yml b/.github/ISSUE_TEMPLATE/i18n.yml new file mode 100644 index 000000000..c2e5541b0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/i18n.yml @@ -0,0 +1,54 @@ +name: 🌐 Internationalization (i18n) +description: Contribute to or report issues with translations +title: "[i18n]: " +labels: ["i18n", "triage"] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to contribute to our internationalization efforts! + + Before proceeding, please check our [i18n Contribution Guidelines](https://github.com/RSSNext/Follow/blob/dev/wiki/contribute-i18n.md) for detailed instructions. + - type: dropdown + id: type + attributes: + label: Type of i18n contribution + options: + - New language support + - Update existing translations + - Report incorrect translation + - Other i18n-related issue + validations: + required: true + - type: input + id: language + attributes: + label: Language + description: What language are you contributing to or reporting about? + placeholder: e.g., Spanish, French, Japanese + validations: + required: true + - type: textarea + id: description + attributes: + label: Description + description: Please provide details about your contribution or the issue you're reporting. + placeholder: | + For new languages: List any specific challenges or considerations. + For updates: Describe what you're changing and why. + For issues: Provide the incorrect translation and suggest a correction. + validations: + required: true + - type: textarea + id: additional-context + attributes: + label: Additional context + description: Add any other context, screenshots, or file references here. + - type: checkboxes + id: terms + attributes: + label: Code of Conduct + description: By submitting this issue, you agree to follow our [Code of Conduct](https://example.com/code-of-conduct) + options: + - label: I agree to follow this project's Code of Conduct + required: true diff --git a/package.json b/package.json index 1200168d1..1348c65bf 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "dev:debug": "export DEBUG=true && vite --debug", "dev:web": "vite", "format": "prettier --write .", + "generator:i18n-template": "tsx scripts/generate-i18n-locale.ts", "lint": "eslint", "lint:fix": "eslint --fix", "polyfill-optimize": "pnpx nolyfill install", @@ -192,6 +193,7 @@ "simple-git-hooks": "2.11.1", "tailwindcss": "3.4.11", "tailwindcss-animate": "1.0.7", + "tsx": "4.19.1", "typescript": "^5.6.2", "vite": "^5.4.4", "vite-bundle-analyzer": "0.10.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e8fe25a68..82021cb2e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -495,6 +495,9 @@ importers: tailwindcss-animate: specifier: 1.0.7 version: 1.0.7(tailwindcss@3.4.11) + tsx: + specifier: 4.19.1 + version: 4.19.1 typescript: specifier: ^5.6.2 version: 5.6.2 @@ -7857,8 +7860,8 @@ packages: tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - tsx@4.19.0: - resolution: {integrity: sha512-bV30kM7bsLZKZIOCHeMNVMJ32/LuJzLVajkQI/qf92J2Qr08ueLQvW00PUZGiuLPP760UINwupgUj8qrSCPUKg==} + tsx@4.19.1: + resolution: {integrity: sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==} engines: {node: '>=18.0.0'} hasBin: true @@ -14620,7 +14623,7 @@ snapshots: jiti: 2.0.0-beta.3 jiti-v1: jiti@1.21.6 pathe: 1.1.2 - tsx: 4.19.0 + tsx: 4.19.1 transitivePeerDependencies: - supports-color @@ -17290,7 +17293,7 @@ snapshots: tslib@2.7.0: {} - tsx@4.19.0: + tsx@4.19.1: dependencies: esbuild: 0.23.1 get-tsconfig: 4.8.0 diff --git a/wiki/contribute-i18n.md b/wiki/contribute-i18n.md new file mode 100644 index 000000000..ef163f2a9 --- /dev/null +++ b/wiki/contribute-i18n.md @@ -0,0 +1,54 @@ +# Contributing to Internationalization (i18n) + +We welcome contributions to our internationalization efforts! This guide will help you get started with adding or updating translations for our project. + +## Adding a New Language + +To add support for a new language: + +1. Run the following command in the project root: + + ```bash + npm run generator:i18n-template + ``` + +2. Select the desired locale from the list. + +3. The script will: + - Create new resource files for the selected locale + - Update the necessary configuration files + +4. Open your editor and navigate to the `locales/` directory. You'll find new JSON files for the selected locale. + +5. Translate the keys in these JSON files to the target language. + +## Updating Existing Translations + +To update or improve existing translations: + +1. Navigate to the `locales/` directory. +2. Find the JSON files for the language you want to update. +3. Edit the translations as needed. + +## Translation Guidelines + +- Maintain the same structure and keys as the original English version. +- Ensure translations are culturally appropriate and context-aware. +- Use gender-neutral language where possible. +- Keep special placeholders (e.g., `{{variable}}`) intact. + +## Testing Your Translations + +After making changes: + +1. Run the application locally. +2. Switch to the language you've edited. +3. Navigate through the app to verify your translations in context. + +## Submitting Your Contribution + +1. Create a new branch for your changes. +2. Commit your changes with a clear, descriptive message. +3. Open a pull request with details about the languages and sections you've updated. + +Thank you for helping make our project more accessible to users worldwide!