Line 5: |
Line 5: |
| ==For translators== | | ==For translators== |
| ===How translations work=== | | ===How translations work=== |
− | Each mod has an <tt>i18n</tt> folder containing the translation files (if it supports translation), which you can open in a normal text editor like Notepad. The folder always has a <tt>default.json</tt> (which has the default English text), plus any of these files: | + | Each mod has an <samp>i18n</samp> folder containing the translation files (if it supports translation), which you can open in a normal text editor like Notepad. The folder always has a <samp>default.json</samp> (which has the default English text), plus any of these files: |
| | | |
| {| class="wikitable" | | {| class="wikitable" |
Line 11: |
Line 11: |
| ! Language | | ! Language |
| ! File name | | ! File name |
− | ! Notes
| |
| |- | | |- |
| | Chinese | | | Chinese |
− | | <tt>zh.json</tt> | + | | <samp>zh.json</samp> |
− | |
| |
| |- | | |- |
| | French | | | French |
− | | <tt>fr.json</tt> | + | | <samp>fr.json</samp> |
− | | [https://www.reddit.com/r/StardewValley/comments/ajf8jd/beta_branch_v1335_bugsdiscussion_new_languages/ 1.3.35 beta] only.
| |
| |- | | |- |
| | German | | | German |
− | | <tt>de.json</tt> | + | | <samp>de.json</samp> |
− | |
| |
| |- | | |- |
| | Hungarian | | | Hungarian |
− | | <tt>hu.json</tt> | + | | <samp>hu.json</samp> |
− | | [https://www.reddit.com/r/StardewValley/comments/ajf8jd/beta_branch_v1335_bugsdiscussion_new_languages/ 1.3.35 beta] only.
| |
| |- | | |- |
| | Italian | | | Italian |
− | | <tt>it.json</tt> | + | | <samp>it.json</samp> |
− | | [https://www.reddit.com/r/StardewValley/comments/ajf8jd/beta_branch_v1335_bugsdiscussion_new_languages/ 1.3.35 beta] only.
| |
| |- | | |- |
| | Japanese | | | Japanese |
− | | <tt>ja.json</tt> | + | | <samp>ja.json</samp> |
− | |
| |
| |- | | |- |
| | Korean | | | Korean |
− | | <tt>ko.json</tt> | + | | <samp>ko.json</samp> |
− | | [https://www.reddit.com/r/StardewValley/comments/ajf8jd/beta_branch_v1335_bugsdiscussion_new_languages/ 1.3.35 beta] only.
| |
| |- | | |- |
| | Portuguese | | | Portuguese |
− | | <tt>pt.json</tt> | + | | <samp>pt.json</samp> |
− | |
| |
| |- | | |- |
| | Russian | | | Russian |
− | | <tt>ru.json</tt> | + | | <samp>ru.json</samp> |
− | |
| |
| |- | | |- |
| | Spanish | | | Spanish |
− | | <tt>es.json</tt> | + | | <samp>es.json</samp> |
− | |
| |
| |- | | |- |
| | Turkish | | | Turkish |
− | | <tt>tr.json</tt> | + | | <samp>tr.json</samp> |
− | | [https://www.reddit.com/r/StardewValley/comments/ajf8jd/beta_branch_v1335_bugsdiscussion_new_languages/ 1.3.35 beta] only. | + | |- |
| + | | custom languages |
| + | | ''file name matches the language's <samp>LanguageCode</samp> field'' |
| |} | | |} |
| | | |
| Each file contains text that looks like this: | | Each file contains text that looks like this: |
− | <source lang="javascript"> | + | <syntaxhighlight lang="javascript"> |
| { | | { |
| "translation-key": "simple translatable text", | | "translation-key": "simple translatable text", |
| "translation-key-2": "translatable text with a {{token}} value" | | "translation-key-2": "translatable text with a {{token}} value" |
| } | | } |
− | </source> | + | </syntaxhighlight> |
| | | |
| The first part (before <code>:</code>) is the unique key for the translation. This is how the mod identifies the translation, so you shouldn't change it. | | The first part (before <code>:</code>) is the unique key for the translation. This is how the mod identifies the translation, so you shouldn't change it. |
Line 72: |
Line 63: |
| ===How to translate a mod=== | | ===How to translate a mod=== |
| # Install the mod normally. | | # Install the mod normally. |
− | # Open the file you want to edit in its <tt>i18n</tt> folder. (If the file doesn't exist for your language yet, just copy <tt>default.json</tt> and rename it.) | + | # Open the file you want to edit in its <samp>i18n</samp> folder. (If the file doesn't exist for your language yet, just copy <samp>default.json</samp> and rename it.) |
| # Edit the translations as needed (see ''[[#How translations work|how translations work]]'' above). | | # Edit the translations as needed (see ''[[#How translations work|how translations work]]'' above). |
| # Launch the game and choose your language. The mod should show the translation text you entered. | | # Launch the game and choose your language. The mod should show the translation text you entered. |
Line 80: |
Line 71: |
| * If you see broken symbols in-game, try saving the translation file with UTF-8 encoding. | | * If you see broken symbols in-game, try saving the translation file with UTF-8 encoding. |
| * You can test translation changes in-game without restarting the game. Enter <code>reload_i18n</code> into the SMAPI console to reload translations. (If a mod internally cached a translation, it may not be updated.) | | * You can test translation changes in-game without restarting the game. Enter <code>reload_i18n</code> into the SMAPI console to reload translations. (If a mod internally cached a translation, it may not be updated.) |
| + | * There's an [https://www.nexusmods.com/stardewvalley/mods/21317 Internationalization] mod in development that aims to simplify the translation process. In particular updating existing translations. It replaces steps 2-4 above. If you install that and run the game, you can open a page in your web browser to update translations of your installed mods live. It takes care of the json & utf-8 encoding so you don't have to. It's very new, so it might still have bugs. |
| | | |
| ===How to provide mod translations=== | | ===How to provide mod translations=== |
Line 100: |
Line 92: |
| ===Using translations=== | | ===Using translations=== |
| For help using translations, see [[Modding:Modder Guide/APIs/Translation]]. | | For help using translations, see [[Modding:Modder Guide/APIs/Translation]]. |
| + | |
| + | ===Translation summary=== |
| + | If your mod is [[Modding:Open source|open-source]], you can add a translation summary to your repository's <samp>README.md</samp> file ([https://github.com/Pathoschild/StardewMods/#translating-the-mods see an example]). This makes it much more likely that translators will contribute translations for your mod since it... |
| + | * indicates that contributions are welcome; |
| + | * explains how to provide translations; |
| + | * and provides a summary of each mod's translation status and links. |
| + | |
| + | You can [https://gist.github.com/Pathoschild/040ff6c8dc863ed2a7a828aa04447033 auto-generate the translation summary using a script]. |
| | | |
| ===Request translations=== | | ===Request translations=== |
| <ol> | | <ol> |
| <li>Before you start: | | <li>Before you start: |
− | # Your mod '''must''' be open-source on a public site like [https://github.com/ GitHub].<br />''This is important for the modders curating the request list, since it lets them (a) check the current status of your mod translations to keep requests up-to-date, (b) answer questions from translators if needed, and (c) submit a pull request with any translations received when the ticket is closed if you stop responding.'' | + | # Your mod '''must''' be [[Modding:Open source|open-source]] on a public site like [https://github.com/ GitHub].<br />''This is important for the modders curating the request list, since it lets them (a) check the current status of your mod translations to keep requests up-to-date, (b) answer questions from translators if needed, and (c) submit a pull request with any translations received when the ticket is closed if you stop responding.'' |
− | # If you have partial translations, copy any missing translations into all translation files and mark them with <code>// TODO</code>. (That way translators only need to look at their language's file, they don't need to compare it with <tt>default.json</tt>.) | + | # If you have partial translations, copy any missing translations into all translation files and mark them with <code>// TODO</code>. (That way translators only need to look at their language's file, they don't need to compare it with <samp>default.json</samp>.) |
| # Make sure you watch the request and you have time to reply to questions! Your request will be closed if you don't respond to a question on the ticket within 72 hours. | | # Make sure you watch the request and you have time to reply to questions! Your request will be closed if you don't respond to a question on the ticket within 72 hours. |
− | # The <tt>default.json</tt> must be complete and in English. If your main language isn't English and you need help preparing it, we can help! Just create a request the same way below, but choose <code>needs: English copyediting</code> as the label instead. | + | # The <samp>default.json</samp> must be complete and in English. If your main language isn't English and you need help preparing it, we can help! Just create a request the same way below, but choose <code>needs: English copyediting</code> as the label instead. |
| </li> | | </li> |
| | | |
Line 133: |
Line 133: |
| <li>Watch your notifications so you know when someone contributes translations or answers a question!</li> | | <li>Watch your notifications so you know when someone contributes translations or answers a question!</li> |
| </ol> | | </ol> |
| + | |
| + | ==See also== |
| + | * [[Modding:Custom languages]] |
| | | |
| [[Category:Modding]] | | [[Category:Modding]] |
| | | |
| + | [[es:Modding:Traducciones]] |
| [[pt:Modificações:Traduções]] | | [[pt:Modificações:Traduções]] |
| + | [[ru:Модификации:Руководство по переводу модификаций]] |
| + | [[zh:模组:翻译模组]] |