diff --git a/docs/guides-translation.md b/docs/guides-translation.md index 67bb33533e6a..fca3ab50f3ba 100644 --- a/docs/guides-translation.md +++ b/docs/guides-translation.md @@ -93,6 +93,41 @@ The script will include text from the following places: * header link `label` strings in `siteConfig.js` * strings wrapped in the `` tag in any `.js` files inside `pages` +### Custom Translation Strings + +If you want to add additional custom translation strings, or override any of the strings that get produced by the script that creates the `website/i18n/en.json` file, you can add a `website/data/custom-translation-strings.json` file. The file should have form of: + +```json +{ + "localized-strings": { + "id": "string", + "id2": "string2" + }, + "pages-strings" : { + "id3": "string3", + "id4": "string4" + } +} +``` + +where `localized-strings` represent strings in your documentation content and `pages-strings` represents metadata in your documentation (e.g., title, links, etc). + +Here is an example: + +```json +{ + "_comment": "This file is used to provide custom strings for translations, including overriding defaults", + "localized-strings": { + "translation": "Translations and Localization" + }, + "pages-strings" : { + "Help Translate|recruit community translators for your project": "Help Us Translate" + } +} +``` + +See the generated `website/i18n/en.json` for an example. + ## How Strings Get Translated Docusaurus itself does not do any translation from one language to another. Instead, it integrates [Crowdin](https://crowdin.com/) to upload translations and then downloads the appropriately translated files from Crowdin. diff --git a/lib/write-translations.js b/lib/write-translations.js index 4bbfc73b722a..c7826c428bce 100755 --- a/lib/write-translations.js +++ b/lib/write-translations.js @@ -20,13 +20,13 @@ const babylon = require('babylon'); const traverse = require('babel-traverse').default; const sidebars = require(CWD + '/sidebars.json'); -let currentTranslations = { +let customTranslations = { 'localized-strings': {}, 'pages-strings': {}, }; -if (fs.existsSync(CWD + '/i18n/en.json')) { - currentTranslations = JSON.parse( - fs.readFileSync(CWD + '/i18n/en.json', 'utf8') +if (fs.existsSync(CWD + '/data/custom-translation-strings.json')) { + customTranslations = JSON.parse( + fs.readFileSync(CWD + '/data/custom-translation-strings.json', 'utf8') ); } @@ -158,11 +158,11 @@ function execute() { 'Translate'; translations['pages-strings'] = Object.assign( translations['pages-strings'], - currentTranslations['pages-strings'] + customTranslations['pages-strings'] ); translations['localized-strings'] = Object.assign( translations['localized-strings'], - currentTranslations['localized-strings'] + customTranslations['localized-strings'] ); writeFileAndCreateFolder( CWD + '/i18n/en.json', diff --git a/website/data/custom-translation-strings.json b/website/data/custom-translation-strings.json new file mode 100644 index 000000000000..4f663211b775 --- /dev/null +++ b/website/data/custom-translation-strings.json @@ -0,0 +1,9 @@ +{ + "_comment": "This file is used to provide custom strings for translations, including overriding defaults", + "localized-strings": { + "translation": "Translations and Localization" + }, + "pages-strings" : { + "Help Translate|recruit community translators for your project": "Help Us Translate" + } +}