chore(i18n,docs): processed translations (#44907)
This commit is contained in:
@ -459,7 +459,7 @@ Provisioning VMs with the Code
|
|||||||
7. Build the server
|
7. Build the server
|
||||||
|
|
||||||
```console
|
```console
|
||||||
npm run ensure-env && npm run build:curriculum && npm run build:server
|
npm run create:config && npm run build:curriculum && npm run build:server
|
||||||
```
|
```
|
||||||
|
|
||||||
8. Start Instances
|
8. Start Instances
|
||||||
@ -502,7 +502,7 @@ npm ci
|
|||||||
3. Build the server
|
3. Build the server
|
||||||
|
|
||||||
```console
|
```console
|
||||||
npm run ensure-env && npm run build:curriculum && npm run build:server
|
npm run create:config && npm run build:curriculum && npm run build:server
|
||||||
```
|
```
|
||||||
|
|
||||||
4. Start Instances
|
4. Start Instances
|
||||||
|
@ -117,32 +117,157 @@ Crowdin 將文檔分成可翻譯的“字符串”,通常是句子。 每個
|
|||||||
|
|
||||||
> [!NOTE] 我們的貢獻文檔由 ` docsify ` 提供支持,並且我們對消息框(比如這份文檔裏的)進行了特殊的解析。 如果你看到以 `[!NOTE]`、`[!WARNING]` 或 `[!TIP]` 開頭的字符串,請注意不要翻譯這些單詞。
|
> [!NOTE] 我們的貢獻文檔由 ` docsify ` 提供支持,並且我們對消息框(比如這份文檔裏的)進行了特殊的解析。 如果你看到以 `[!NOTE]`、`[!WARNING]` 或 `[!TIP]` 開頭的字符串,請注意不要翻譯這些單詞。
|
||||||
|
|
||||||
## 給譯文評分
|
## Translate the LearnToCode RPG
|
||||||
|
|
||||||
Crowdin 允許你對已有的建議譯文進行評分。 在你嘗試保存譯文的時候,你可能會看到一條消息,提示你無法保存重複的譯文——這意味着另一位貢獻者已經建議了相同的譯文。 如果你贊同那個譯文,可以點擊 `+` 按鈕來投票贊同它。
|
The LearnToCode RPG runs on Ren'Py, which uses special syntax for translated strings: (See [Ren'Py Text documentation](https://www.renpy.org/doc/html/text.html))
|
||||||
|
|
||||||
如果你認爲譯文不正確或與源文件字符串的意思不一致,請單擊 `-` 按鈕投反對票。
|
- The sentences to be translated are always between `""`. These are dialogues or UI strings. The keywords that come before or after the dialogue are game engine control keywords and will be explained in details in subsequent rules. Please note that this first rule governs all subsequent rules listed.
|
||||||
|
- In case of `new "..."` Do not translate the `new` keyword.
|
||||||
|
- Prefixes like `player`, `annika`, `layla`, `marco` (or variants like `player happy`, `player @ happy`) should not be translated. These are control keywords to correctly display the character sprite in the game.
|
||||||
|
- Postfixes like `nointeract` should not be translated.
|
||||||
|
- Do not translate things between `[]` and `{}`. These are variable interpolations and text tags. These must remain halfwidth parentheses `[]` and `{}` instead of their fullwidth counterparts `【】` and `「」`
|
||||||
|
- Do not translate the `nointeract` keyword at the end of the sentence.
|
||||||
|
- If we try to use fullwidth parentheses `()`, a QA warning will show. To avoid the QA warning, use halfwidth parentheses `()`
|
||||||
|
|
||||||
Crowdin 通過這些投票爲一個字符串的每個建議譯文給出一個分數,這有助於校對團隊確定哪個譯文是最準確的。
|
### Examples
|
||||||
|
|
||||||
## 質量保證檢查
|
---
|
||||||
|
|
||||||
我們採用了一些質量保證步驟,以確保譯文儘可能準確——這有助於我們的校對貢獻者審覈建議的譯文。
|
#### Before translation
|
||||||
|
|
||||||
當你嘗試保存翻譯時,你可能會看到一條警告消息,其中包含關於你所建議的翻譯的通知。
|
```renpy
|
||||||
|
# "[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that."
|
||||||
|
"[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that." <--- this is the line that needs to be translated. see translation below
|
||||||
|
```
|
||||||
|
|
||||||

|
#### After translation
|
||||||
|
|
||||||
當 Crowdin 的質量保證檢查系統在建議的譯文中發現可能的錯誤時,將顯示此消息。 在這個例子中,我們修改了 `<code>` 標籤的文本內容,Crowdin 會發現這個問題。
|
```renpy
|
||||||
|
# "[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that."
|
||||||
|
"[player_name]?好巧,我們的VIP隊友{a=[vip_profile_url]}[player_name]{/a}會很高興的。"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: The `[]` and `{}` tags should be left intact.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
old "{icon=icon-fast-forward} Skip"
|
||||||
|
new "{icon=icon-fast-forward} Skip" <-- translate this line, see below
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
old "{icon=icon-fast-forward} Skip"
|
||||||
|
new "{icon=icon-fast-forward} 跳過"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: Again, the `new` prefix and the `{icon=icon-fast-forward}` tag should be left intact.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
|
||||||
|
layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
|
||||||
|
layla @ neutral "哈哈,[player_name],你真有趣。我相信你一定會喜歡你的開發者工作的。"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: `layla @ neutral` and `[player_name]` are left unchanged.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# player "Maybe this is all a dream?" nointeract
|
||||||
|
player "Maybe this is all a dream?" nointeract
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# player "Maybe this is all a dream?" nointeract
|
||||||
|
player "也許這都是一場夢?" nointeract
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### A Note on How Crowdin Segments a Sentence
|
||||||
|
|
||||||
|
Pay attention to how Crowdin segments a line of dialogue wrapped between opening and closing quotes `""`. When we are translating the dialogue, we need to make sure to retain the opening and closing quotes, even if the quotes appear in different segments.
|
||||||
|
|
||||||
|
This is the line to be translated:
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
player @ surprised "{b}Full-stack{/b}... What is that? I better take notes so I can learn more about it."
|
||||||
|
```
|
||||||
|
|
||||||
|
Crowdin segments it into three parts like below:
|
||||||
|
|
||||||
|
<img width="836" alt="Screen Shot 2022-01-23 at 10 36 43" src="https://user-images.githubusercontent.com/35674052/150693962-d3b091e5-2432-44d0-9d24-195ea7d7aeda.png" />
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# original
|
||||||
|
player @ surprised "{b}Full-stack{/b}
|
||||||
|
# translated, keeping the opening quotes `"`
|
||||||
|
player @ surprised "{b}全棧{/b}
|
||||||
|
```
|
||||||
|
|
||||||
|
<img width="750" alt="Screen Shot 2022-01-23 at 10 36 49" src="https://user-images.githubusercontent.com/35674052/150693965-15411504-791a-4db3-8b14-bc9177be6375.png" />
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# original
|
||||||
|
What is that?
|
||||||
|
# translated, no quotes on either side
|
||||||
|
這是什麼?
|
||||||
|
```
|
||||||
|
|
||||||
|
<img width="857" alt="Screen Shot 2022-01-23 at 10 36 54" src="https://user-images.githubusercontent.com/35674052/150693969-062e3268-580f-4ad2-97db-cab6240b6095.png" />
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# original
|
||||||
|
I better take notes so I can learn more about it."
|
||||||
|
# translated, keeping the closing quotes `"`
|
||||||
|
我最好做筆記,這樣我可以學習更多東西。"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Rate Translations
|
||||||
|
|
||||||
|
Crowdin allows you to rate the existing proposed translations. If you attempt to save a translation, you may see a message indicating that you cannot save a duplicate translation - this means another contributor has proposed that identical translation. If you agree with that translation, click the `+` button to "upvote" the translation.
|
||||||
|
|
||||||
|
If you see a translation that is inaccurate or does not provide the same clarity as the original string, click the `-` button to "downvote" the translation.
|
||||||
|
|
||||||
|
Crowdin uses these votes to give a score to each proposed translation for a string, which helps the proofreading team determine which translation is the best fit for each string.
|
||||||
|
|
||||||
|
## Quality Assurance Checks
|
||||||
|
|
||||||
|
We have enabled some quality assurance steps that will verify a translation is as accurate as possible - this helps our proofreaders review proposed translations.
|
||||||
|
|
||||||
|
When you attempt to save a translation, you may see a warning message appear with a notification regarding your proposed translation.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
This message appears when Crowdin's QA system has identified a potential error in the proposed translation. In this example, we have modified the text of a `<code>` tag and Crowdin has caught that.
|
||||||
|
|
||||||
> [!WARNING] 即使 Crowdin 提示有錯誤,你也可以選擇保存譯文。 如果你仍要通過點擊 “Save Anyway” 保存譯文,那麼你應該標記(@)校對人員或項目經理,說明爲什麼需要忽略質量檢查消息。
|
> [!WARNING] 即使 Crowdin 提示有錯誤,你也可以選擇保存譯文。 如果你仍要通過點擊 “Save Anyway” 保存譯文,那麼你應該標記(@)校對人員或項目經理,說明爲什麼需要忽略質量檢查消息。
|
||||||
|
|
||||||
## 翻譯最佳實踐
|
## Translation Best Practices
|
||||||
|
|
||||||
請遵循下列準則,以確保我們的翻譯儘可能的準確:
|
Follow these guidelines to ensure our translations are as accurate as possible:
|
||||||
|
|
||||||
- 不要翻譯 `<code>` 標籤中的內容。 這個標籤表示在文本在代碼中,應保留英文文本。
|
- Do not translate the content within `<code>` tags. These tags indicate text that is found in code and should be left in English.
|
||||||
- 不要添加額外的內容。 如果你認爲源文件的文本內容或其他信息需要修改,那麼請你在 GitHub issue 或 pull request 來提出更改建議。
|
- Do not add additional content. If you feel a challenge requires changes in the text content or additional information, you should propose the changes through a GitHub issue or a pull request that modifies the English file.
|
||||||
- 不要更改內容的順序。
|
- Do not change the order of content.
|
||||||
|
|
||||||
如果你有任何問題,歡迎你隨時在[譯者交流羣](https://chat.freecodecamp.org/channel/contributors)提出,我們很高興給予你支持。
|
If you have any questions, feel free to reach out to us in our [contributors chat room](https://chat.freecodecamp.org/channel/contributors) and we will be happy to assist you.
|
||||||
|
@ -18,7 +18,7 @@ Most of files for translating the platform are located in the [`client/i18n`](ht
|
|||||||
|
|
||||||
```console
|
```console
|
||||||
config/i18n
|
config/i18n
|
||||||
└── all-langs.js
|
└── all-langs.ts
|
||||||
...
|
...
|
||||||
client/i18n
|
client/i18n
|
||||||
├── configForTests.js
|
├── configForTests.js
|
||||||
@ -56,7 +56,7 @@ Most of files for translating the platform are located in the [`client/i18n`](ht
|
|||||||
│ └── trending.json
|
│ └── trending.json
|
||||||
├── locales.test.js
|
├── locales.test.js
|
||||||
├── schema-validation.js
|
├── schema-validation.js
|
||||||
└── validate-keys.js
|
└── validate-keys.ts
|
||||||
```
|
```
|
||||||
|
|
||||||
Some of these files are translated on our translation platform (Crowdin), some are not.
|
Some of these files are translated on our translation platform (Crowdin), some are not.
|
||||||
|
@ -459,7 +459,7 @@ Provisioning VMs with the Code
|
|||||||
7. Build the server
|
7. Build the server
|
||||||
|
|
||||||
```console
|
```console
|
||||||
npm run ensure-env && npm run build:curriculum && npm run build:server
|
npm run create:config && npm run build:curriculum && npm run build:server
|
||||||
```
|
```
|
||||||
|
|
||||||
8. Start Instances
|
8. Start Instances
|
||||||
@ -502,7 +502,7 @@ npm ci
|
|||||||
3. Build the server
|
3. Build the server
|
||||||
|
|
||||||
```console
|
```console
|
||||||
npm run ensure-env && npm run build:curriculum && npm run build:server
|
npm run create:config && npm run build:curriculum && npm run build:server
|
||||||
```
|
```
|
||||||
|
|
||||||
4. Start Instances
|
4. Start Instances
|
||||||
|
@ -117,32 +117,157 @@ Crowdin 将文档分成可翻译的“字符串”,通常是句子。 每个
|
|||||||
|
|
||||||
> [!NOTE] 我们的贡献文档由 ` docsify ` 提供支持,并且我们对消息框(比如这份文档里的)进行了特殊的解析。 如果你看到以 `[!NOTE]`、`[!WARNING]` 或 `[!TIP]` 开头的字符串,请注意不要翻译这些单词。
|
> [!NOTE] 我们的贡献文档由 ` docsify ` 提供支持,并且我们对消息框(比如这份文档里的)进行了特殊的解析。 如果你看到以 `[!NOTE]`、`[!WARNING]` 或 `[!TIP]` 开头的字符串,请注意不要翻译这些单词。
|
||||||
|
|
||||||
## 给译文评分
|
## Translate the LearnToCode RPG
|
||||||
|
|
||||||
Crowdin 允许你对已有的建议译文进行评分。 在你尝试保存译文的时候,你可能会看到一条消息,提示你无法保存重复的译文——这意味着另一位贡献者已经建议了相同的译文。 如果你赞同那个译文,可以点击 `+` 按钮来投票赞同它。
|
The LearnToCode RPG runs on Ren'Py, which uses special syntax for translated strings: (See [Ren'Py Text documentation](https://www.renpy.org/doc/html/text.html))
|
||||||
|
|
||||||
如果你认为译文不正确或与源文件字符串的意思不一致,请单击 `-` 按钮投反对票。
|
- The sentences to be translated are always between `""`. These are dialogues or UI strings. The keywords that come before or after the dialogue are game engine control keywords and will be explained in details in subsequent rules. Please note that this first rule governs all subsequent rules listed.
|
||||||
|
- In case of `new "..."` Do not translate the `new` keyword.
|
||||||
|
- Prefixes like `player`, `annika`, `layla`, `marco` (or variants like `player happy`, `player @ happy`) should not be translated. These are control keywords to correctly display the character sprite in the game.
|
||||||
|
- Postfixes like `nointeract` should not be translated.
|
||||||
|
- Do not translate things between `[]` and `{}`. These are variable interpolations and text tags. These must remain halfwidth parentheses `[]` and `{}` instead of their fullwidth counterparts `【】` and `「」`
|
||||||
|
- Do not translate the `nointeract` keyword at the end of the sentence.
|
||||||
|
- If we try to use fullwidth parentheses `()`, a QA warning will show. To avoid the QA warning, use halfwidth parentheses `()`
|
||||||
|
|
||||||
Crowdin 通过这些投票为一个字符串的每个建议译文给出一个分数,这有助于校对团队确定哪个译文是最准确的。
|
### Examples
|
||||||
|
|
||||||
## 质量保证检查
|
---
|
||||||
|
|
||||||
我们采用了一些质量保证步骤,以确保译文尽可能准确——这有助于我们的校对贡献者审核建议的译文。
|
#### Before translation
|
||||||
|
|
||||||
当你尝试保存翻译时,你可能会看到一条警告消息,其中包含关于你所建议的翻译的通知。
|
```renpy
|
||||||
|
# "[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that."
|
||||||
|
"[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that." <--- this is the line that needs to be translated. see translation below
|
||||||
|
```
|
||||||
|
|
||||||

|
#### After translation
|
||||||
|
|
||||||
当 Crowdin 的质量保证检查系统在建议的译文中发现可能的错误时,将显示此消息。 在这个例子中,我们修改了 `<code>` 标签的文本内容,Crowdin 会发现这个问题。
|
```renpy
|
||||||
|
# "[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that."
|
||||||
|
"[player_name]?好巧,我们的VIP队友{a=[vip_profile_url]}[player_name]{/a}会很高兴的。"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: The `[]` and `{}` tags should be left intact.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
old "{icon=icon-fast-forward} Skip"
|
||||||
|
new "{icon=icon-fast-forward} Skip" <-- translate this line, see below
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
old "{icon=icon-fast-forward} Skip"
|
||||||
|
new "{icon=icon-fast-forward} 跳过"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: Again, the `new` prefix and the `{icon=icon-fast-forward}` tag should be left intact.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
|
||||||
|
layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
|
||||||
|
layla @ neutral "哈哈,[player_name],你真有趣。我相信你一定会喜欢你的开发者工作的。"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: `layla @ neutral` and `[player_name]` are left unchanged.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# player "Maybe this is all a dream?" nointeract
|
||||||
|
player "Maybe this is all a dream?" nointeract
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# player "Maybe this is all a dream?" nointeract
|
||||||
|
player "也许这都是一场梦?" nointeract
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### A Note on How Crowdin Segments a Sentence
|
||||||
|
|
||||||
|
Pay attention to how Crowdin segments a line of dialogue wrapped between opening and closing quotes `""`. When we are translating the dialogue, we need to make sure to retain the opening and closing quotes, even if the quotes appear in different segments.
|
||||||
|
|
||||||
|
This is the line to be translated:
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
player @ surprised "{b}Full-stack{/b}... What is that? I better take notes so I can learn more about it."
|
||||||
|
```
|
||||||
|
|
||||||
|
Crowdin segments it into three parts like below:
|
||||||
|
|
||||||
|
<img width="836" alt="Screen Shot 2022-01-23 at 10 36 43" src="https://user-images.githubusercontent.com/35674052/150693962-d3b091e5-2432-44d0-9d24-195ea7d7aeda.png" />
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# original
|
||||||
|
player @ surprised "{b}Full-stack{/b}
|
||||||
|
# translated, keeping the opening quotes `"`
|
||||||
|
player @ surprised "{b}全栈{/b}
|
||||||
|
```
|
||||||
|
|
||||||
|
<img width="750" alt="Screen Shot 2022-01-23 at 10 36 49" src="https://user-images.githubusercontent.com/35674052/150693965-15411504-791a-4db3-8b14-bc9177be6375.png" />
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# original
|
||||||
|
What is that?
|
||||||
|
# translated, no quotes on either side
|
||||||
|
这是什么?
|
||||||
|
```
|
||||||
|
|
||||||
|
<img width="857" alt="Screen Shot 2022-01-23 at 10 36 54" src="https://user-images.githubusercontent.com/35674052/150693969-062e3268-580f-4ad2-97db-cab6240b6095.png" />
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# original
|
||||||
|
I better take notes so I can learn more about it."
|
||||||
|
# translated, keeping the closing quotes `"`
|
||||||
|
我最好做笔记,这样我可以学习更多东西。"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Rate Translations
|
||||||
|
|
||||||
|
Crowdin allows you to rate the existing proposed translations. If you attempt to save a translation, you may see a message indicating that you cannot save a duplicate translation - this means another contributor has proposed that identical translation. If you agree with that translation, click the `+` button to "upvote" the translation.
|
||||||
|
|
||||||
|
If you see a translation that is inaccurate or does not provide the same clarity as the original string, click the `-` button to "downvote" the translation.
|
||||||
|
|
||||||
|
Crowdin uses these votes to give a score to each proposed translation for a string, which helps the proofreading team determine which translation is the best fit for each string.
|
||||||
|
|
||||||
|
## Quality Assurance Checks
|
||||||
|
|
||||||
|
We have enabled some quality assurance steps that will verify a translation is as accurate as possible - this helps our proofreaders review proposed translations.
|
||||||
|
|
||||||
|
When you attempt to save a translation, you may see a warning message appear with a notification regarding your proposed translation.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
This message appears when Crowdin's QA system has identified a potential error in the proposed translation. In this example, we have modified the text of a `<code>` tag and Crowdin has caught that.
|
||||||
|
|
||||||
> [!WARNING] 即使 Crowdin 提示有错误,你也可以选择保存译文。 如果你仍要通过点击 “Save Anyway” 保存译文,那么你应该标记(@)校对人员或项目经理,说明为什么需要忽略质量检查消息。
|
> [!WARNING] 即使 Crowdin 提示有错误,你也可以选择保存译文。 如果你仍要通过点击 “Save Anyway” 保存译文,那么你应该标记(@)校对人员或项目经理,说明为什么需要忽略质量检查消息。
|
||||||
|
|
||||||
## 翻译最佳实践
|
## Translation Best Practices
|
||||||
|
|
||||||
请遵循下列准则,以确保我们的翻译尽可能的准确:
|
Follow these guidelines to ensure our translations are as accurate as possible:
|
||||||
|
|
||||||
- 不要翻译 `<code>` 标签中的内容。 这个标签表示在文本在代码中,应保留英文文本。
|
- Do not translate the content within `<code>` tags. These tags indicate text that is found in code and should be left in English.
|
||||||
- 不要添加额外的内容。 如果你认为源文件的文本内容或其他信息需要修改,那么请你在 GitHub issue 或 pull request 来提出更改建议。
|
- Do not add additional content. If you feel a challenge requires changes in the text content or additional information, you should propose the changes through a GitHub issue or a pull request that modifies the English file.
|
||||||
- 不要更改内容的顺序。
|
- Do not change the order of content.
|
||||||
|
|
||||||
如果你有任何问题,欢迎你随时在[译者交流群](https://chat.freecodecamp.org/channel/contributors)提出,我们很高兴给予你支持。
|
If you have any questions, feel free to reach out to us in our [contributors chat room](https://chat.freecodecamp.org/channel/contributors) and we will be happy to assist you.
|
||||||
|
@ -18,7 +18,7 @@ Most of files for translating the platform are located in the [`client/i18n`](ht
|
|||||||
|
|
||||||
```console
|
```console
|
||||||
config/i18n
|
config/i18n
|
||||||
└── all-langs.js
|
└── all-langs.ts
|
||||||
...
|
...
|
||||||
client/i18n
|
client/i18n
|
||||||
├── configForTests.js
|
├── configForTests.js
|
||||||
@ -56,7 +56,7 @@ Most of files for translating the platform are located in the [`client/i18n`](ht
|
|||||||
│ └── trending.json
|
│ └── trending.json
|
||||||
├── locales.test.js
|
├── locales.test.js
|
||||||
├── schema-validation.js
|
├── schema-validation.js
|
||||||
└── validate-keys.js
|
└── validate-keys.ts
|
||||||
```
|
```
|
||||||
|
|
||||||
Some of these files are translated on our translation platform (Crowdin), some are not.
|
Some of these files are translated on our translation platform (Crowdin), some are not.
|
||||||
|
@ -459,7 +459,7 @@ Aprovisionamiento de MVs con el código
|
|||||||
7. Compila el servidor
|
7. Compila el servidor
|
||||||
|
|
||||||
```console
|
```console
|
||||||
npm run ensure-env && npm run build:curriculum && npm run build:server
|
npm run create:config && npm run build:curriculum && npm run build:server
|
||||||
```
|
```
|
||||||
|
|
||||||
8. Inicia las Instancias
|
8. Inicia las Instancias
|
||||||
@ -502,7 +502,7 @@ npm ci
|
|||||||
3. Construye el servidor
|
3. Construye el servidor
|
||||||
|
|
||||||
```console
|
```console
|
||||||
npm run ensure-env && npm run build:curriculum && npm run build:server
|
npm run create:config && npm run build:curriculum && npm run build:server
|
||||||
```
|
```
|
||||||
|
|
||||||
4. Inicia las Instancias
|
4. Inicia las Instancias
|
||||||
|
@ -117,32 +117,157 @@ Traducir nuestra documentación de contribución es un proceso similar a traduci
|
|||||||
|
|
||||||
> [!NOTE] Nuestra documentación de contribución esta basada en `docsify`, y tenemos una forma especial de procesar los cuadros de mensaje como este. Si ves cadenas que comiencen con `[!NOTE]`, `[!WARNING]` o ` [!TIP]`, estas palabras NO deben traducirse.
|
> [!NOTE] Nuestra documentación de contribución esta basada en `docsify`, y tenemos una forma especial de procesar los cuadros de mensaje como este. Si ves cadenas que comiencen con `[!NOTE]`, `[!WARNING]` o ` [!TIP]`, estas palabras NO deben traducirse.
|
||||||
|
|
||||||
## Calificar traducciones
|
## Translate the LearnToCode RPG
|
||||||
|
|
||||||
Crowdin te permite calificar las traducciones propuestas existentes. Si intentas guardar una traducción, es posible que veas un mensaje que indica que no puedes guardar una traducción duplicada, esto significa que otro contribuyente ha propuesto una traducción idéntica. Si estás de acuerdo con esa traducción, haz clic en el botón `+` para votar a favor de la traducción.
|
The LearnToCode RPG runs on Ren'Py, which uses special syntax for translated strings: (See [Ren'Py Text documentation](https://www.renpy.org/doc/html/text.html))
|
||||||
|
|
||||||
Si ves una traducción que es inexacta o no proporciona la misma claridad que la cadena original, haz clic en el botón `-` para votar en contra de la traducción.
|
- The sentences to be translated are always between `""`. These are dialogues or UI strings. The keywords that come before or after the dialogue are game engine control keywords and will be explained in details in subsequent rules. Please note that this first rule governs all subsequent rules listed.
|
||||||
|
- In case of `new "..."` Do not translate the `new` keyword.
|
||||||
|
- Prefixes like `player`, `annika`, `layla`, `marco` (or variants like `player happy`, `player @ happy`) should not be translated. These are control keywords to correctly display the character sprite in the game.
|
||||||
|
- Postfixes like `nointeract` should not be translated.
|
||||||
|
- Do not translate things between `[]` and `{}`. These are variable interpolations and text tags. These must remain halfwidth parentheses `[]` and `{}` instead of their fullwidth counterparts `【】` and `「」`
|
||||||
|
- Do not translate the `nointeract` keyword at the end of the sentence.
|
||||||
|
- If we try to use fullwidth parentheses `()`, a QA warning will show. To avoid the QA warning, use halfwidth parentheses `()`
|
||||||
|
|
||||||
Crowdin usa estos votos para dar una puntuación a cada traducción propuesta para una cadena, lo que ayuda al equipo de revisión a determinar qué traducción es la mejor para cada cadena.
|
### Examples
|
||||||
|
|
||||||
## Comprobaciones de control de calidad
|
---
|
||||||
|
|
||||||
Hemos habilitado algunos pasos de control de calidad que verificarán que una traducción sea lo más precisa posible, esto ayuda a nuestro equipo de revisión a revisar las traducciones propuestas.
|
#### Before translation
|
||||||
|
|
||||||
Cuando intentes guardar una traducción, es posible que veas aparecer un mensaje de advertencia con una notificación sobre tu traducción propuesta.
|
```renpy
|
||||||
|
# "[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that."
|
||||||
|
"[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that." <--- this is the line that needs to be translated. see translation below
|
||||||
|
```
|
||||||
|
|
||||||

|
#### After translation
|
||||||
|
|
||||||
Este mensaje aparece cuando el sistema de control de calidad de Crowdin ha identificado un posible error en la traducción propuesta. En este ejemplo, hemos modificado el texto de una etiqueta `<code>` y Crowdin lo ha detectado.
|
```renpy
|
||||||
|
# "[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that."
|
||||||
|
"[player_name]?好巧,我们的VIP队友{a=[vip_profile_url]}[player_name]{/a}会很高兴的。"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: The `[]` and `{}` tags should be left intact.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
old "{icon=icon-fast-forward} Skip"
|
||||||
|
new "{icon=icon-fast-forward} Skip" <-- translate this line, see below
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
old "{icon=icon-fast-forward} Skip"
|
||||||
|
new "{icon=icon-fast-forward} 跳过"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: Again, the `new` prefix and the `{icon=icon-fast-forward}` tag should be left intact.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
|
||||||
|
layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
|
||||||
|
layla @ neutral "哈哈,[player_name],你真有趣。我相信你一定会喜欢你的开发者工作的。"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: `layla @ neutral` and `[player_name]` are left unchanged.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# player "Maybe this is all a dream?" nointeract
|
||||||
|
player "Maybe this is all a dream?" nointeract
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# player "Maybe this is all a dream?" nointeract
|
||||||
|
player "也许这都是一场梦?" nointeract
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### A Note on How Crowdin Segments a Sentence
|
||||||
|
|
||||||
|
Pay attention to how Crowdin segments a line of dialogue wrapped between opening and closing quotes `""`. When we are translating the dialogue, we need to make sure to retain the opening and closing quotes, even if the quotes appear in different segments.
|
||||||
|
|
||||||
|
This is the line to be translated:
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
player @ surprised "{b}Full-stack{/b}... What is that? I better take notes so I can learn more about it."
|
||||||
|
```
|
||||||
|
|
||||||
|
Crowdin segments it into three parts like below:
|
||||||
|
|
||||||
|
<img width="836" alt="Screen Shot 2022-01-23 at 10 36 43" src="https://user-images.githubusercontent.com/35674052/150693962-d3b091e5-2432-44d0-9d24-195ea7d7aeda.png" />
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# original
|
||||||
|
player @ surprised "{b}Full-stack{/b}
|
||||||
|
# translated, keeping the opening quotes `"`
|
||||||
|
player @ surprised "{b}全栈{/b}
|
||||||
|
```
|
||||||
|
|
||||||
|
<img width="750" alt="Screen Shot 2022-01-23 at 10 36 49" src="https://user-images.githubusercontent.com/35674052/150693965-15411504-791a-4db3-8b14-bc9177be6375.png" />
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# original
|
||||||
|
What is that?
|
||||||
|
# translated, no quotes on either side
|
||||||
|
这是什么?
|
||||||
|
```
|
||||||
|
|
||||||
|
<img width="857" alt="Screen Shot 2022-01-23 at 10 36 54" src="https://user-images.githubusercontent.com/35674052/150693969-062e3268-580f-4ad2-97db-cab6240b6095.png" />
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# original
|
||||||
|
I better take notes so I can learn more about it."
|
||||||
|
# translated, keeping the closing quotes `"`
|
||||||
|
我最好做笔记,这样我可以学习更多东西。"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Rate Translations
|
||||||
|
|
||||||
|
Crowdin allows you to rate the existing proposed translations. If you attempt to save a translation, you may see a message indicating that you cannot save a duplicate translation - this means another contributor has proposed that identical translation. If you agree with that translation, click the `+` button to "upvote" the translation.
|
||||||
|
|
||||||
|
If you see a translation that is inaccurate or does not provide the same clarity as the original string, click the `-` button to "downvote" the translation.
|
||||||
|
|
||||||
|
Crowdin uses these votes to give a score to each proposed translation for a string, which helps the proofreading team determine which translation is the best fit for each string.
|
||||||
|
|
||||||
|
## Quality Assurance Checks
|
||||||
|
|
||||||
|
We have enabled some quality assurance steps that will verify a translation is as accurate as possible - this helps our proofreaders review proposed translations.
|
||||||
|
|
||||||
|
When you attempt to save a translation, you may see a warning message appear with a notification regarding your proposed translation.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
This message appears when Crowdin's QA system has identified a potential error in the proposed translation. In this example, we have modified the text of a `<code>` tag and Crowdin has caught that.
|
||||||
|
|
||||||
> [!WARNING] Tienes la opción de guardar una traducción a pesar de los errores. Si lo haces, al hacer clic en "Save Anyway (Guardar de todos modos)", también debes etiquetar a un miembro del equipo de revisión o encargado del proyecto y explicar por qué el mensaje de control de calidad debe ignorarse en este caso.
|
> [!WARNING] Tienes la opción de guardar una traducción a pesar de los errores. Si lo haces, al hacer clic en "Save Anyway (Guardar de todos modos)", también debes etiquetar a un miembro del equipo de revisión o encargado del proyecto y explicar por qué el mensaje de control de calidad debe ignorarse en este caso.
|
||||||
|
|
||||||
## Buenas prácticas de traducción
|
## Translation Best Practices
|
||||||
|
|
||||||
Sigue estas pautas para asegurarte de que nuestras traducciones sean lo más precisas posible:
|
Follow these guidelines to ensure our translations are as accurate as possible:
|
||||||
|
|
||||||
- No traduzcas el contenido dentro de las etiquetas `<code>`. Estas etiquetas indican texto que se encuentra en el código y deben dejarse en inglés.
|
- Do not translate the content within `<code>` tags. These tags indicate text that is found in code and should be left in English.
|
||||||
- No agregues contenido adicional. Si crees que un desafío requiere cambios en el contenido del texto o información adicional, debes proponer los cambios a través de un issue de GitHub o una pull request que modifique el archivo en inglés.
|
- Do not add additional content. If you feel a challenge requires changes in the text content or additional information, you should propose the changes through a GitHub issue or a pull request that modifies the English file.
|
||||||
- No cambies el orden del contenido.
|
- Do not change the order of content.
|
||||||
|
|
||||||
Si tienes alguna duda, estas en la libertad de pedir ayuda en nuestro [chat de colaboradores](https://chat.freecodecamp.org/channel/contributors) y con gusto te ayudaremos.
|
If you have any questions, feel free to reach out to us in our [contributors chat room](https://chat.freecodecamp.org/channel/contributors) and we will be happy to assist you.
|
||||||
|
@ -18,7 +18,7 @@ Most of files for translating the platform are located in the [`client/i18n`](ht
|
|||||||
|
|
||||||
```console
|
```console
|
||||||
config/i18n
|
config/i18n
|
||||||
└── all-langs.js
|
└── all-langs.ts
|
||||||
...
|
...
|
||||||
client/i18n
|
client/i18n
|
||||||
├── configForTests.js
|
├── configForTests.js
|
||||||
@ -56,7 +56,7 @@ Most of files for translating the platform are located in the [`client/i18n`](ht
|
|||||||
│ └── trending.json
|
│ └── trending.json
|
||||||
├── locales.test.js
|
├── locales.test.js
|
||||||
├── schema-validation.js
|
├── schema-validation.js
|
||||||
└── validate-keys.js
|
└── validate-keys.ts
|
||||||
```
|
```
|
||||||
|
|
||||||
Some of these files are translated on our translation platform (Crowdin), some are not.
|
Some of these files are translated on our translation platform (Crowdin), some are not.
|
||||||
|
@ -459,7 +459,7 @@ Fare il provisioning delle VM con il codice
|
|||||||
7. Fai il build del server
|
7. Fai il build del server
|
||||||
|
|
||||||
```console
|
```console
|
||||||
npm run ensure-env && npm run build:curriculum && npm run build:server
|
npm run create:config && npm run build:curriculum && npm run build:server
|
||||||
```
|
```
|
||||||
|
|
||||||
8. Avvia le istanze
|
8. Avvia le istanze
|
||||||
@ -502,7 +502,7 @@ npm ci
|
|||||||
3. Fai il build del server
|
3. Fai il build del server
|
||||||
|
|
||||||
```console
|
```console
|
||||||
npm run ensure-env && npm run build:curriculum && npm run build:server
|
npm run create:config && npm run build:curriculum && npm run build:server
|
||||||
```
|
```
|
||||||
|
|
||||||
4. Avvia le istanze
|
4. Avvia le istanze
|
||||||
|
@ -117,32 +117,157 @@ Tradurre la documentazione per contribuire è un processo simile alla traduzione
|
|||||||
|
|
||||||
> [!NOTE] La documentazione per contribuire è creata tramite `docsify`, e ci sono regole speciali per riquadri di messaggio come questo. Se vedi una stringa che inizia con `[!NOTE]`, `[!WARNING]`, o `[!TIP]`, queste parole non devono essere tradotte.
|
> [!NOTE] La documentazione per contribuire è creata tramite `docsify`, e ci sono regole speciali per riquadri di messaggio come questo. Se vedi una stringa che inizia con `[!NOTE]`, `[!WARNING]`, o `[!TIP]`, queste parole non devono essere tradotte.
|
||||||
|
|
||||||
## Votare le traduzioni
|
## Translate the LearnToCode RPG
|
||||||
|
|
||||||
Crowdin ti permette di votare le proposte di traduzione esistenti. Se provi a salvare una traduzione, potresti vedere un messaggio che indica che non puoi salvare una traduzione duplicata: questo significa che un altro contributore ha proposto una traduzione identica. Se sei d'accordo con quella traduzione, usa il pulsante `+` per darle un voto positivo.
|
The LearnToCode RPG runs on Ren'Py, which uses special syntax for translated strings: (See [Ren'Py Text documentation](https://www.renpy.org/doc/html/text.html))
|
||||||
|
|
||||||
Se vedi una traduzione che non è accurata o non è chiara come la stringa originale, usa il pulsante `-` per darle un voto negativo.
|
- The sentences to be translated are always between `""`. These are dialogues or UI strings. The keywords that come before or after the dialogue are game engine control keywords and will be explained in details in subsequent rules. Please note that this first rule governs all subsequent rules listed.
|
||||||
|
- In case of `new "..."` Do not translate the `new` keyword.
|
||||||
|
- Prefixes like `player`, `annika`, `layla`, `marco` (or variants like `player happy`, `player @ happy`) should not be translated. These are control keywords to correctly display the character sprite in the game.
|
||||||
|
- Postfixes like `nointeract` should not be translated.
|
||||||
|
- Do not translate things between `[]` and `{}`. These are variable interpolations and text tags. These must remain halfwidth parentheses `[]` and `{}` instead of their fullwidth counterparts `【】` and `「」`
|
||||||
|
- Do not translate the `nointeract` keyword at the end of the sentence.
|
||||||
|
- If we try to use fullwidth parentheses `()`, a QA warning will show. To avoid the QA warning, use halfwidth parentheses `()`
|
||||||
|
|
||||||
Crowdin usa questi voti per dare un punteggio alle proposte di traduzione per una stringa, e questo aiuta il gruppo di revisione a determinare quale traduzione è la migliore per ogni stringa.
|
### Examples
|
||||||
|
|
||||||
## Controlli di qualità
|
---
|
||||||
|
|
||||||
Abbiamo attivato alcuni step per il controllo di qualità che verificano che una traduzione sia per quanto possibile accurata: questo aiuta il team di revisione a revisionare le traduzioni proposte.
|
#### Before translation
|
||||||
|
|
||||||
Quando provi a salvare una traduzione, potresti vedere un messaggio di errore apparire relativamente alla tua proposta di traduzione.
|
```renpy
|
||||||
|
# "[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that."
|
||||||
|
"[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that." <--- this is the line that needs to be translated. see translation below
|
||||||
|
```
|
||||||
|
|
||||||

|
#### After translation
|
||||||
|
|
||||||
Questo messaggio appare quando il sistema QA (Quality Assurance) di Crowdin identifica un potenziale errore nella traduzione proposta. In questo esempio, abbiamo modificato il testo di un tag `<code>` e Crowdin se ne è accorto.
|
```renpy
|
||||||
|
# "[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that."
|
||||||
|
"[player_name]?好巧,我们的VIP队友{a=[vip_profile_url]}[player_name]{/a}会很高兴的。"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: The `[]` and `{}` tags should be left intact.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
old "{icon=icon-fast-forward} Skip"
|
||||||
|
new "{icon=icon-fast-forward} Skip" <-- translate this line, see below
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
old "{icon=icon-fast-forward} Skip"
|
||||||
|
new "{icon=icon-fast-forward} 跳过"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: Again, the `new` prefix and the `{icon=icon-fast-forward}` tag should be left intact.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
|
||||||
|
layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
|
||||||
|
layla @ neutral "哈哈,[player_name],你真有趣。我相信你一定会喜欢你的开发者工作的。"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: `layla @ neutral` and `[player_name]` are left unchanged.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# player "Maybe this is all a dream?" nointeract
|
||||||
|
player "Maybe this is all a dream?" nointeract
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# player "Maybe this is all a dream?" nointeract
|
||||||
|
player "也许这都是一场梦?" nointeract
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### A Note on How Crowdin Segments a Sentence
|
||||||
|
|
||||||
|
Pay attention to how Crowdin segments a line of dialogue wrapped between opening and closing quotes `""`. When we are translating the dialogue, we need to make sure to retain the opening and closing quotes, even if the quotes appear in different segments.
|
||||||
|
|
||||||
|
This is the line to be translated:
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
player @ surprised "{b}Full-stack{/b}... What is that? I better take notes so I can learn more about it."
|
||||||
|
```
|
||||||
|
|
||||||
|
Crowdin segments it into three parts like below:
|
||||||
|
|
||||||
|
<img width="836" alt="Screen Shot 2022-01-23 at 10 36 43" src="https://user-images.githubusercontent.com/35674052/150693962-d3b091e5-2432-44d0-9d24-195ea7d7aeda.png" />
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# original
|
||||||
|
player @ surprised "{b}Full-stack{/b}
|
||||||
|
# translated, keeping the opening quotes `"`
|
||||||
|
player @ surprised "{b}全栈{/b}
|
||||||
|
```
|
||||||
|
|
||||||
|
<img width="750" alt="Screen Shot 2022-01-23 at 10 36 49" src="https://user-images.githubusercontent.com/35674052/150693965-15411504-791a-4db3-8b14-bc9177be6375.png" />
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# original
|
||||||
|
What is that?
|
||||||
|
# translated, no quotes on either side
|
||||||
|
这是什么?
|
||||||
|
```
|
||||||
|
|
||||||
|
<img width="857" alt="Screen Shot 2022-01-23 at 10 36 54" src="https://user-images.githubusercontent.com/35674052/150693969-062e3268-580f-4ad2-97db-cab6240b6095.png" />
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# original
|
||||||
|
I better take notes so I can learn more about it."
|
||||||
|
# translated, keeping the closing quotes `"`
|
||||||
|
我最好做笔记,这样我可以学习更多东西。"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Rate Translations
|
||||||
|
|
||||||
|
Crowdin allows you to rate the existing proposed translations. If you attempt to save a translation, you may see a message indicating that you cannot save a duplicate translation - this means another contributor has proposed that identical translation. If you agree with that translation, click the `+` button to "upvote" the translation.
|
||||||
|
|
||||||
|
If you see a translation that is inaccurate or does not provide the same clarity as the original string, click the `-` button to "downvote" the translation.
|
||||||
|
|
||||||
|
Crowdin uses these votes to give a score to each proposed translation for a string, which helps the proofreading team determine which translation is the best fit for each string.
|
||||||
|
|
||||||
|
## Quality Assurance Checks
|
||||||
|
|
||||||
|
We have enabled some quality assurance steps that will verify a translation is as accurate as possible - this helps our proofreaders review proposed translations.
|
||||||
|
|
||||||
|
When you attempt to save a translation, you may see a warning message appear with a notification regarding your proposed translation.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
This message appears when Crowdin's QA system has identified a potential error in the proposed translation. In this example, we have modified the text of a `<code>` tag and Crowdin has caught that.
|
||||||
|
|
||||||
> [!WARNING] Hai la possibilità di salvare una traduzione anche se ci sono degli errori. Se lo fai usando il pulsante "Save Anyway" (Salva comunque), dovresti anche taggare un proofreader o un project managet e spiegare perché il messaggio QA dovrebbe essere ignorato in questo caso.
|
> [!WARNING] Hai la possibilità di salvare una traduzione anche se ci sono degli errori. Se lo fai usando il pulsante "Save Anyway" (Salva comunque), dovresti anche taggare un proofreader o un project managet e spiegare perché il messaggio QA dovrebbe essere ignorato in questo caso.
|
||||||
|
|
||||||
## Buone pratiche per le traduzioni
|
## Translation Best Practices
|
||||||
|
|
||||||
Segui queste linee guida per assicurati che le nostre traduzioni siano il più possibile accurate:
|
Follow these guidelines to ensure our translations are as accurate as possible:
|
||||||
|
|
||||||
- Non tradurre il contenuto dei tag `<code>`. Questi tag indicano testo trovato nel codice e dovrebbero essere lasciati in inglese.
|
- Do not translate the content within `<code>` tags. These tags indicate text that is found in code and should be left in English.
|
||||||
- Non inserire contenuto aggiuntivo. Se pensi che una sfida richieda delle modifiche nel testo o informazioni aggiuntive dovresti proporre i cambiamenti tramite una issue su GitHub o una pull request che modifica i file inglesi.
|
- Do not add additional content. If you feel a challenge requires changes in the text content or additional information, you should propose the changes through a GitHub issue or a pull request that modifies the English file.
|
||||||
- Non cambiare l'ordine del contenuto.
|
- Do not change the order of content.
|
||||||
|
|
||||||
Se hai domande, scrivi nella [chat room per i contributori](https://chat.freecodecamp.org/channel/contributors) e saremo lieti di assisterti.
|
If you have any questions, feel free to reach out to us in our [contributors chat room](https://chat.freecodecamp.org/channel/contributors) and we will be happy to assist you.
|
||||||
|
@ -18,7 +18,7 @@ La maggior parte dei file per tradurre la piattaforma si trovano nella cartella
|
|||||||
|
|
||||||
```console
|
```console
|
||||||
config/i18n
|
config/i18n
|
||||||
└── all-langs.js
|
└── all-langs.ts
|
||||||
...
|
...
|
||||||
client/i18n
|
client/i18n
|
||||||
├── configForTests.js
|
├── configForTests.js
|
||||||
@ -40,23 +40,23 @@ La maggior parte dei file per tradurre la piattaforma si trovano nella cartella
|
|||||||
│ │ ├── translations.json
|
│ │ ├── translations.json
|
||||||
│ │ └── trending.json
|
│ │ └── trending.json
|
||||||
... ...
|
... ...
|
||||||
│ ├── english
|
│ ├── english
|
||||||
│ │ ├── intro.json
|
│ │ ├── intro.json
|
||||||
│ │ ├── links.json
|
│ │ ├── links.json
|
||||||
│ │ ├── meta-tags.json
|
│ │ ├── meta-tags.json
|
||||||
│ │ ├── motivation.json
|
│ │ ├── motivation.json
|
||||||
│ │ ├── translations.json
|
│ │ ├── translations.json
|
||||||
│ │ └── trending.json
|
│ │ └── trending.json
|
||||||
│ └── espanol
|
│ └── espanol
|
||||||
│ ├── intro.json
|
│ ├── intro.json
|
||||||
│ ├── links.json
|
│ ├── links.json
|
||||||
│ ├── meta-tags.json
|
│ ├── meta-tags.json
|
||||||
│ ├── motivation.json
|
│ ├── motivation.json
|
||||||
│ ├── translations.json
|
│ ├── translations.json
|
||||||
│ └── trending.json
|
│ └── trending.json
|
||||||
├── locales.test.js
|
├── locales.test.js
|
||||||
├── schema-validation.js
|
├── schema-validation.js
|
||||||
└── validate-keys.js
|
└── validate-keys.ts
|
||||||
```
|
```
|
||||||
|
|
||||||
Alcuni di questi file sono tradotti sulla nostra piattaforma di traduzione (Crowdin), altri no.
|
Alcuni di questi file sono tradotti sulla nostra piattaforma di traduzione (Crowdin), altri no.
|
||||||
|
@ -459,7 +459,7 @@ Provisioning VMs with the Code
|
|||||||
7. Build the server
|
7. Build the server
|
||||||
|
|
||||||
```console
|
```console
|
||||||
npm run ensure-env && npm run build:curriculum && npm run build:server
|
npm run create:config && npm run build:curriculum && npm run build:server
|
||||||
```
|
```
|
||||||
|
|
||||||
8. Start Instances
|
8. Start Instances
|
||||||
@ -502,7 +502,7 @@ npm ci
|
|||||||
3. Build the server
|
3. Build the server
|
||||||
|
|
||||||
```console
|
```console
|
||||||
npm run ensure-env && npm run build:curriculum && npm run build:server
|
npm run create:config && npm run build:curriculum && npm run build:server
|
||||||
```
|
```
|
||||||
|
|
||||||
4. Start Instances
|
4. Start Instances
|
||||||
|
@ -117,32 +117,157 @@ Crowdin はドキュメントを翻訳可能な文字列 (通常は文単位)
|
|||||||
|
|
||||||
> [!NOTE] コントリビューションドキュメントは `docsify` によって提供されており、このようなメッセージボックス用に特別な構文解析機能があります。 `[!NOTE]`、`[!WARNING]` または `[!TIP]` などで始まる文字列を見かけたら、これらの単語は翻訳しないようにしてください。
|
> [!NOTE] コントリビューションドキュメントは `docsify` によって提供されており、このようなメッセージボックス用に特別な構文解析機能があります。 `[!NOTE]`、`[!WARNING]` または `[!TIP]` などで始まる文字列を見かけたら、これらの単語は翻訳しないようにしてください。
|
||||||
|
|
||||||
## 翻訳を評価する
|
## Translate the LearnToCode RPG
|
||||||
|
|
||||||
Crowdin では既に提出されている翻訳案を評価することができます。 翻訳内容を保存しようとした際、同じ翻訳は保存できないというメッセージが表示されることがあるかもしれません。これは、他のコントリビューターがすでに全く同じ翻訳を提案していることを意味しています。 その翻訳内容に賛成であれば `+` ボタンをクリックして賛成票を投じてください。
|
The LearnToCode RPG runs on Ren'Py, which uses special syntax for translated strings: (See [Ren'Py Text documentation](https://www.renpy.org/doc/html/text.html))
|
||||||
|
|
||||||
もし、不正確または元の文字列と同程度に明確でない翻訳案を見かけた場合、`-` ボタンをクリックして反対票を投じてください。
|
- The sentences to be translated are always between `""`. These are dialogues or UI strings. The keywords that come before or after the dialogue are game engine control keywords and will be explained in details in subsequent rules. Please note that this first rule governs all subsequent rules listed.
|
||||||
|
- In case of `new "..."` Do not translate the `new` keyword.
|
||||||
|
- Prefixes like `player`, `annika`, `layla`, `marco` (or variants like `player happy`, `player @ happy`) should not be translated. These are control keywords to correctly display the character sprite in the game.
|
||||||
|
- Postfixes like `nointeract` should not be translated.
|
||||||
|
- Do not translate things between `[]` and `{}`. These are variable interpolations and text tags. These must remain halfwidth parentheses `[]` and `{}` instead of their fullwidth counterparts `【】` and `「」`
|
||||||
|
- Do not translate the `nointeract` keyword at the end of the sentence.
|
||||||
|
- If we try to use fullwidth parentheses `()`, a QA warning will show. To avoid the QA warning, use halfwidth parentheses `()`
|
||||||
|
|
||||||
Crowdin はこれらの投票を元にそれぞれの翻訳案の点数を算出します。これは校正チームがどの翻訳案が最適かを決定するのに役立ちます。
|
### Examples
|
||||||
|
|
||||||
## 品質保証チェック
|
---
|
||||||
|
|
||||||
翻訳内容が可能な限り正確であることを確認するために、幾つかの品質保証のステップを設けています。これにより校正チームが翻訳案をレビューしやすくなります。
|
#### Before translation
|
||||||
|
|
||||||
翻訳内容を保存しようとした際、内容に対する警告文が表示されることがあります。
|
```renpy
|
||||||
|
# "[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that."
|
||||||
|
"[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that." <--- this is the line that needs to be translated. see translation below
|
||||||
|
```
|
||||||
|
|
||||||

|
#### After translation
|
||||||
|
|
||||||
このメッセージは、Crowdin の品質保証システムが翻訳案に潜在的なエラーを検出したときに表示されます。 上の例では、`<code>` タグ内のテキストが変更されており、Crowdin がそれを検出しました。
|
```renpy
|
||||||
|
# "[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that."
|
||||||
|
"[player_name]?好巧,我们的VIP队友{a=[vip_profile_url]}[player_name]{/a}会很高兴的。"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: The `[]` and `{}` tags should be left intact.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
old "{icon=icon-fast-forward} Skip"
|
||||||
|
new "{icon=icon-fast-forward} Skip" <-- translate this line, see below
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
old "{icon=icon-fast-forward} Skip"
|
||||||
|
new "{icon=icon-fast-forward} 跳过"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: Again, the `new` prefix and the `{icon=icon-fast-forward}` tag should be left intact.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
|
||||||
|
layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
|
||||||
|
layla @ neutral "哈哈,[player_name],你真有趣。我相信你一定会喜欢你的开发者工作的。"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: `layla @ neutral` and `[player_name]` are left unchanged.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# player "Maybe this is all a dream?" nointeract
|
||||||
|
player "Maybe this is all a dream?" nointeract
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# player "Maybe this is all a dream?" nointeract
|
||||||
|
player "也许这都是一场梦?" nointeract
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### A Note on How Crowdin Segments a Sentence
|
||||||
|
|
||||||
|
Pay attention to how Crowdin segments a line of dialogue wrapped between opening and closing quotes `""`. When we are translating the dialogue, we need to make sure to retain the opening and closing quotes, even if the quotes appear in different segments.
|
||||||
|
|
||||||
|
This is the line to be translated:
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
player @ surprised "{b}Full-stack{/b}... What is that? I better take notes so I can learn more about it."
|
||||||
|
```
|
||||||
|
|
||||||
|
Crowdin segments it into three parts like below:
|
||||||
|
|
||||||
|
<img width="836" alt="Screen Shot 2022-01-23 at 10 36 43" src="https://user-images.githubusercontent.com/35674052/150693962-d3b091e5-2432-44d0-9d24-195ea7d7aeda.png" />
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# original
|
||||||
|
player @ surprised "{b}Full-stack{/b}
|
||||||
|
# translated, keeping the opening quotes `"`
|
||||||
|
player @ surprised "{b}全栈{/b}
|
||||||
|
```
|
||||||
|
|
||||||
|
<img width="750" alt="Screen Shot 2022-01-23 at 10 36 49" src="https://user-images.githubusercontent.com/35674052/150693965-15411504-791a-4db3-8b14-bc9177be6375.png" />
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# original
|
||||||
|
What is that?
|
||||||
|
# translated, no quotes on either side
|
||||||
|
这是什么?
|
||||||
|
```
|
||||||
|
|
||||||
|
<img width="857" alt="Screen Shot 2022-01-23 at 10 36 54" src="https://user-images.githubusercontent.com/35674052/150693969-062e3268-580f-4ad2-97db-cab6240b6095.png" />
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# original
|
||||||
|
I better take notes so I can learn more about it."
|
||||||
|
# translated, keeping the closing quotes `"`
|
||||||
|
我最好做笔记,这样我可以学习更多东西。"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Rate Translations
|
||||||
|
|
||||||
|
Crowdin allows you to rate the existing proposed translations. If you attempt to save a translation, you may see a message indicating that you cannot save a duplicate translation - this means another contributor has proposed that identical translation. If you agree with that translation, click the `+` button to "upvote" the translation.
|
||||||
|
|
||||||
|
If you see a translation that is inaccurate or does not provide the same clarity as the original string, click the `-` button to "downvote" the translation.
|
||||||
|
|
||||||
|
Crowdin uses these votes to give a score to each proposed translation for a string, which helps the proofreading team determine which translation is the best fit for each string.
|
||||||
|
|
||||||
|
## Quality Assurance Checks
|
||||||
|
|
||||||
|
We have enabled some quality assurance steps that will verify a translation is as accurate as possible - this helps our proofreaders review proposed translations.
|
||||||
|
|
||||||
|
When you attempt to save a translation, you may see a warning message appear with a notification regarding your proposed translation.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
This message appears when Crowdin's QA system has identified a potential error in the proposed translation. In this example, we have modified the text of a `<code>` tag and Crowdin has caught that.
|
||||||
|
|
||||||
> [!WARNING] エラーが検出されても翻訳内容を保存することは可能です。 「Save Anyway」をクリックして保存できますが、その場合は校正者かプロジェクトマネージャー宛てにコメントし、なぜ品質保証メッセージを無視する必要があったかを説明するようにしてください。
|
> [!WARNING] エラーが検出されても翻訳内容を保存することは可能です。 「Save Anyway」をクリックして保存できますが、その場合は校正者かプロジェクトマネージャー宛てにコメントし、なぜ品質保証メッセージを無視する必要があったかを説明するようにしてください。
|
||||||
|
|
||||||
## 翻訳のベストプラクティス
|
## Translation Best Practices
|
||||||
|
|
||||||
翻訳内容を可能な限り正確なものとするため、以下のガイドラインに従ってください。
|
Follow these guidelines to ensure our translations are as accurate as possible:
|
||||||
|
|
||||||
- `<code>` タグの中身は翻訳しないでください。 これらのタグはコード内のテキストを意味しており、英語のまま残しておかなければなりません。
|
- Do not translate the content within `<code>` tags. These tags indicate text that is found in code and should be left in English.
|
||||||
- コンテンツを追加しないでください。 もしコーディングチャレンジに対し、テキスト内容の変更や追加の情報が必要だと感じた場合、GitHub issue、または該当の英語ファイルを変更する pull request を通して変更を提案してください。
|
- Do not add additional content. If you feel a challenge requires changes in the text content or additional information, you should propose the changes through a GitHub issue or a pull request that modifies the English file.
|
||||||
- コンテンツの順番を変えないでください。
|
- Do not change the order of content.
|
||||||
|
|
||||||
質問があれば、[contributors チャットルーム](https://chat.freecodecamp.org/channel/contributors)にてお気軽にお尋ねください。喜んでサポートいたします。
|
If you have any questions, feel free to reach out to us in our [contributors chat room](https://chat.freecodecamp.org/channel/contributors) and we will be happy to assist you.
|
||||||
|
@ -18,7 +18,7 @@ Most of files for translating the platform are located in the [`client/i18n`](ht
|
|||||||
|
|
||||||
```console
|
```console
|
||||||
config/i18n
|
config/i18n
|
||||||
└── all-langs.js
|
└── all-langs.ts
|
||||||
...
|
...
|
||||||
client/i18n
|
client/i18n
|
||||||
├── configForTests.js
|
├── configForTests.js
|
||||||
@ -56,7 +56,7 @@ Most of files for translating the platform are located in the [`client/i18n`](ht
|
|||||||
│ └── trending.json
|
│ └── trending.json
|
||||||
├── locales.test.js
|
├── locales.test.js
|
||||||
├── schema-validation.js
|
├── schema-validation.js
|
||||||
└── validate-keys.js
|
└── validate-keys.ts
|
||||||
```
|
```
|
||||||
|
|
||||||
Some of these files are translated on our translation platform (Crowdin), some are not.
|
Some of these files are translated on our translation platform (Crowdin), some are not.
|
||||||
|
@ -459,7 +459,7 @@ Provisionando MVs com o código
|
|||||||
7. Compile o servidor
|
7. Compile o servidor
|
||||||
|
|
||||||
```console
|
```console
|
||||||
npm run ensure-env && npm run build:curriculum && npm run build:server
|
npm run create:config && npm run build:curriculum && npm run build:server
|
||||||
```
|
```
|
||||||
|
|
||||||
8. Inicie instâncias
|
8. Inicie instâncias
|
||||||
@ -502,7 +502,7 @@ npm ci
|
|||||||
3. Compile o servidor
|
3. Compile o servidor
|
||||||
|
|
||||||
```console
|
```console
|
||||||
npm run ensure-env && npm run build:curriculum && npm run build:server
|
npm run create:config && npm run build:curriculum && npm run build:server
|
||||||
```
|
```
|
||||||
|
|
||||||
4. Inicie instâncias
|
4. Inicie instâncias
|
||||||
|
@ -117,32 +117,157 @@ Traduzir nossa documentação de contribuição é similar a traduzir nossos arq
|
|||||||
|
|
||||||
> [!NOTE] Nossa documentação de contribuição utiliza o `docsify`. Nós temos uma análise especial para caixas de mensagem como essa. Caso veja strings iniciadas com `[!NOTE]`, `[!WARNING]`, ou `[!TIP]`, essas palavras NÃO devem ser traduzidas.
|
> [!NOTE] Nossa documentação de contribuição utiliza o `docsify`. Nós temos uma análise especial para caixas de mensagem como essa. Caso veja strings iniciadas com `[!NOTE]`, `[!WARNING]`, ou `[!TIP]`, essas palavras NÃO devem ser traduzidas.
|
||||||
|
|
||||||
## Avaliar traduções
|
## Translate the LearnToCode RPG
|
||||||
|
|
||||||
O Crowdin permite que você avalie propostas de tradução existentes. Se você tentar salvar uma tradução, você pode ver uma mensagem indicando que você não pode salvar a duplicata de uma tradução - isso significa que outro contribuinte já propôs uma tradução idêntica. Se você concorda com aquela tradução, clique em `+` para "aprová-la".
|
The LearnToCode RPG runs on Ren'Py, which uses special syntax for translated strings: (See [Ren'Py Text documentation](https://www.renpy.org/doc/html/text.html))
|
||||||
|
|
||||||
Se você perceber uma tradução que não possui a mesma clareza da string original, clique em `-` para "desaprová-la".
|
- The sentences to be translated are always between `""`. These are dialogues or UI strings. The keywords that come before or after the dialogue are game engine control keywords and will be explained in details in subsequent rules. Please note that this first rule governs all subsequent rules listed.
|
||||||
|
- In case of `new "..."` Do not translate the `new` keyword.
|
||||||
|
- Prefixes like `player`, `annika`, `layla`, `marco` (or variants like `player happy`, `player @ happy`) should not be translated. These are control keywords to correctly display the character sprite in the game.
|
||||||
|
- Postfixes like `nointeract` should not be translated.
|
||||||
|
- Do not translate things between `[]` and `{}`. These are variable interpolations and text tags. These must remain halfwidth parentheses `[]` and `{}` instead of their fullwidth counterparts `【】` and `「」`
|
||||||
|
- Do not translate the `nointeract` keyword at the end of the sentence.
|
||||||
|
- If we try to use fullwidth parentheses `()`, a QA warning will show. To avoid the QA warning, use halfwidth parentheses `()`
|
||||||
|
|
||||||
O Crowdin usa esses votos para pontuar cada proposta de tradução de cada string, o que ajuda o time de revisão a determinar qual tradução é a melhor para cada string.
|
### Examples
|
||||||
|
|
||||||
## Verificações de qualidade
|
---
|
||||||
|
|
||||||
Nós disponibilizamos algumas verificações de qualidade para assegurar que as traduções estejam precisas - isso ajuda nossos revisores a analisarem as traduções propostas.
|
#### Before translation
|
||||||
|
|
||||||
Quando você tenta salvar uma tradução, talvez veja uma mensagem de aviso aparecer a respeito da sua tradução proposta.
|
```renpy
|
||||||
|
# "[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that."
|
||||||
|
"[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that." <--- this is the line that needs to be translated. see translation below
|
||||||
|
```
|
||||||
|
|
||||||

|
#### After translation
|
||||||
|
|
||||||
Essa mensagem aparece quando o sistema QA (Verificação de Qualidade) do Crowdin identificou algum erro em potencial na tradução proposta. Nesse exemplo, nós modificamos o texto da tag `<code>` e o sistema viu isto.
|
```renpy
|
||||||
|
# "[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that."
|
||||||
|
"[player_name]?好巧,我们的VIP队友{a=[vip_profile_url]}[player_name]{/a}会很高兴的。"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: The `[]` and `{}` tags should be left intact.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
old "{icon=icon-fast-forward} Skip"
|
||||||
|
new "{icon=icon-fast-forward} Skip" <-- translate this line, see below
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
old "{icon=icon-fast-forward} Skip"
|
||||||
|
new "{icon=icon-fast-forward} 跳过"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: Again, the `new` prefix and the `{icon=icon-fast-forward}` tag should be left intact.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
|
||||||
|
layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
|
||||||
|
layla @ neutral "哈哈,[player_name],你真有趣。我相信你一定会喜欢你的开发者工作的。"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: `layla @ neutral` and `[player_name]` are left unchanged.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# player "Maybe this is all a dream?" nointeract
|
||||||
|
player "Maybe this is all a dream?" nointeract
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# player "Maybe this is all a dream?" nointeract
|
||||||
|
player "也许这都是一场梦?" nointeract
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### A Note on How Crowdin Segments a Sentence
|
||||||
|
|
||||||
|
Pay attention to how Crowdin segments a line of dialogue wrapped between opening and closing quotes `""`. When we are translating the dialogue, we need to make sure to retain the opening and closing quotes, even if the quotes appear in different segments.
|
||||||
|
|
||||||
|
This is the line to be translated:
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
player @ surprised "{b}Full-stack{/b}... What is that? I better take notes so I can learn more about it."
|
||||||
|
```
|
||||||
|
|
||||||
|
Crowdin segments it into three parts like below:
|
||||||
|
|
||||||
|
<img width="836" alt="Screen Shot 2022-01-23 at 10 36 43" src="https://user-images.githubusercontent.com/35674052/150693962-d3b091e5-2432-44d0-9d24-195ea7d7aeda.png" />
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# original
|
||||||
|
player @ surprised "{b}Full-stack{/b}
|
||||||
|
# translated, keeping the opening quotes `"`
|
||||||
|
player @ surprised "{b}全栈{/b}
|
||||||
|
```
|
||||||
|
|
||||||
|
<img width="750" alt="Screen Shot 2022-01-23 at 10 36 49" src="https://user-images.githubusercontent.com/35674052/150693965-15411504-791a-4db3-8b14-bc9177be6375.png" />
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# original
|
||||||
|
What is that?
|
||||||
|
# translated, no quotes on either side
|
||||||
|
这是什么?
|
||||||
|
```
|
||||||
|
|
||||||
|
<img width="857" alt="Screen Shot 2022-01-23 at 10 36 54" src="https://user-images.githubusercontent.com/35674052/150693969-062e3268-580f-4ad2-97db-cab6240b6095.png" />
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# original
|
||||||
|
I better take notes so I can learn more about it."
|
||||||
|
# translated, keeping the closing quotes `"`
|
||||||
|
我最好做笔记,这样我可以学习更多东西。"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Rate Translations
|
||||||
|
|
||||||
|
Crowdin allows you to rate the existing proposed translations. If you attempt to save a translation, you may see a message indicating that you cannot save a duplicate translation - this means another contributor has proposed that identical translation. If you agree with that translation, click the `+` button to "upvote" the translation.
|
||||||
|
|
||||||
|
If you see a translation that is inaccurate or does not provide the same clarity as the original string, click the `-` button to "downvote" the translation.
|
||||||
|
|
||||||
|
Crowdin uses these votes to give a score to each proposed translation for a string, which helps the proofreading team determine which translation is the best fit for each string.
|
||||||
|
|
||||||
|
## Quality Assurance Checks
|
||||||
|
|
||||||
|
We have enabled some quality assurance steps that will verify a translation is as accurate as possible - this helps our proofreaders review proposed translations.
|
||||||
|
|
||||||
|
When you attempt to save a translation, you may see a warning message appear with a notification regarding your proposed translation.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
This message appears when Crowdin's QA system has identified a potential error in the proposed translation. In this example, we have modified the text of a `<code>` tag and Crowdin has caught that.
|
||||||
|
|
||||||
> [!WARNING] Você tem a opção de salvar uma tradução apesar dos erros. Se fizer isso, clicando em "Save Anyway", você também deve marcar um revisor ou gerenciador do projeto e explicar o motivo do aviso ter sido ignorado nesse caso.
|
> [!WARNING] Você tem a opção de salvar uma tradução apesar dos erros. Se fizer isso, clicando em "Save Anyway", você também deve marcar um revisor ou gerenciador do projeto e explicar o motivo do aviso ter sido ignorado nesse caso.
|
||||||
|
|
||||||
## Boas práticas na tradução
|
## Translation Best Practices
|
||||||
|
|
||||||
Siga essas diretrizes para se certificar de que nossas traduções estão o mais precisas possível:
|
Follow these guidelines to ensure our translations are as accurate as possible:
|
||||||
|
|
||||||
- Não traduza o conteúdo dentro de tags `<code>`. Essas tags indicam que o texto está formatado para o código e deve ser deixado em inglês.
|
- Do not translate the content within `<code>` tags. These tags indicate text that is found in code and should be left in English.
|
||||||
- Não adicione conteúdo extra. Se você acha que um desafio necessita de mudanças no texto e conteúdo adicional, você deve propor as mudanças através de uma issue no GitHub ou um pull request que modifique o arquivo em inglês.
|
- Do not add additional content. If you feel a challenge requires changes in the text content or additional information, you should propose the changes through a GitHub issue or a pull request that modifies the English file.
|
||||||
- Não mude a ordem do conteúdo.
|
- Do not change the order of content.
|
||||||
|
|
||||||
Se você tiver alguma dúvida, sinta-se à vontade para entrar em contato conosco através da [sala de chat dos tradutores](https://chat.freecodecamp.org/channel/contributors) e nós ficaremos felizes em te ajudar.
|
If you have any questions, feel free to reach out to us in our [contributors chat room](https://chat.freecodecamp.org/channel/contributors) and we will be happy to assist you.
|
||||||
|
@ -18,7 +18,7 @@ A maioria dos arquivos para tradução da plataforma ficam localizados na pasta
|
|||||||
|
|
||||||
```console
|
```console
|
||||||
config/i18n
|
config/i18n
|
||||||
└── all-langs.js
|
└── all-langs.ts
|
||||||
...
|
...
|
||||||
client/i18n
|
client/i18n
|
||||||
├── configForTests.js
|
├── configForTests.js
|
||||||
@ -56,7 +56,7 @@ A maioria dos arquivos para tradução da plataforma ficam localizados na pasta
|
|||||||
│ └── trending.json
|
│ └── trending.json
|
||||||
├── locales.test.js
|
├── locales.test.js
|
||||||
├── schema-validation.js
|
├── schema-validation.js
|
||||||
└── validate-keys.js
|
└── validate-keys.ts
|
||||||
```
|
```
|
||||||
|
|
||||||
Alguns desses arquivos estão traduzidos na nossa plataforma de tradução (Crowdin), outros não.
|
Alguns desses arquivos estão traduzidos na nossa plataforma de tradução (Crowdin), outros não.
|
||||||
|
@ -459,7 +459,7 @@ Provisioning VMs with the Code
|
|||||||
7. Build the server
|
7. Build the server
|
||||||
|
|
||||||
```console
|
```console
|
||||||
npm run ensure-env && npm run build:curriculum && npm run build:server
|
npm run create:config && npm run build:curriculum && npm run build:server
|
||||||
```
|
```
|
||||||
|
|
||||||
8. Start Instances
|
8. Start Instances
|
||||||
@ -502,7 +502,7 @@ npm ci
|
|||||||
3. Build the server
|
3. Build the server
|
||||||
|
|
||||||
```console
|
```console
|
||||||
npm run ensure-env && npm run build:curriculum && npm run build:server
|
npm run create:config && npm run build:curriculum && npm run build:server
|
||||||
```
|
```
|
||||||
|
|
||||||
4. Start Instances
|
4. Start Instances
|
||||||
|
@ -117,6 +117,131 @@ Translating our contributing documentation is a similar flow to translating our
|
|||||||
|
|
||||||
> [!NOTE] Our contributing documentation is powered by `docsify`, and we have special parsing for message boxes like this one. If you see strings that start with `[!NOTE]`, `[!WARNING]`, or `[!TIP]`, these words should NOT be translated.
|
> [!NOTE] Our contributing documentation is powered by `docsify`, and we have special parsing for message boxes like this one. If you see strings that start with `[!NOTE]`, `[!WARNING]`, or `[!TIP]`, these words should NOT be translated.
|
||||||
|
|
||||||
|
## Translate the LearnToCode RPG
|
||||||
|
|
||||||
|
The LearnToCode RPG runs on Ren'Py, which uses special syntax for translated strings: (See [Ren'Py Text documentation](https://www.renpy.org/doc/html/text.html))
|
||||||
|
|
||||||
|
- The sentences to be translated are always between `""`. These are dialogues or UI strings. The keywords that come before or after the dialogue are game engine control keywords and will be explained in details in subsequent rules. Please note that this first rule governs all subsequent rules listed.
|
||||||
|
- In case of `new "..."` Do not translate the `new` keyword.
|
||||||
|
- Prefixes like `player`, `annika`, `layla`, `marco` (or variants like `player happy`, `player @ happy`) should not be translated. These are control keywords to correctly display the character sprite in the game.
|
||||||
|
- Postfixes like `nointeract` should not be translated.
|
||||||
|
- Do not translate things between `[]` and `{}`. These are variable interpolations and text tags. These must remain halfwidth parentheses `[]` and `{}` instead of their fullwidth counterparts `【】` and `「」`
|
||||||
|
- Do not translate the `nointeract` keyword at the end of the sentence.
|
||||||
|
- If we try to use fullwidth parentheses `()`, a QA warning will show. To avoid the QA warning, use halfwidth parentheses `()`
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# "[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that."
|
||||||
|
"[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that." <--- this is the line that needs to be translated. see translation below
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# "[player_name]? What a coincidence! Our VIP team member {a=[vip_profile_url]}[player_name]{/a} will be honored to hear that."
|
||||||
|
"[player_name]?好巧,我们的VIP队友{a=[vip_profile_url]}[player_name]{/a}会很高兴的。"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: The `[]` and `{}` tags should be left intact.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
old "{icon=icon-fast-forward} Skip"
|
||||||
|
new "{icon=icon-fast-forward} Skip" <-- translate this line, see below
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
old "{icon=icon-fast-forward} Skip"
|
||||||
|
new "{icon=icon-fast-forward} 跳过"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: Again, the `new` prefix and the `{icon=icon-fast-forward}` tag should be left intact.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
|
||||||
|
layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# layla @ neutral "Hehe, [player_name], you are a fun one. I'm sure you will enjoy your work as a developer."
|
||||||
|
layla @ neutral "哈哈,[player_name],你真有趣。我相信你一定会喜欢你的开发者工作的。"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: `layla @ neutral` and `[player_name]` are left unchanged.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Before translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# player "Maybe this is all a dream?" nointeract
|
||||||
|
player "Maybe this is all a dream?" nointeract
|
||||||
|
```
|
||||||
|
|
||||||
|
#### After translation
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# player "Maybe this is all a dream?" nointeract
|
||||||
|
player "也许这都是一场梦?" nointeract
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### A Note on How Crowdin Segments a Sentence
|
||||||
|
|
||||||
|
Pay attention to how Crowdin segments a line of dialogue wrapped between opening and closing quotes `""`. When we are translating the dialogue, we need to make sure to retain the opening and closing quotes, even if the quotes appear in different segments.
|
||||||
|
|
||||||
|
This is the line to be translated:
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
player @ surprised "{b}Full-stack{/b}... What is that? I better take notes so I can learn more about it."
|
||||||
|
```
|
||||||
|
|
||||||
|
Crowdin segments it into three parts like below:
|
||||||
|
|
||||||
|
<img width="836" alt="Screen Shot 2022-01-23 at 10 36 43" src="https://user-images.githubusercontent.com/35674052/150693962-d3b091e5-2432-44d0-9d24-195ea7d7aeda.png" />
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# original
|
||||||
|
player @ surprised "{b}Full-stack{/b}
|
||||||
|
# translated, keeping the opening quotes `"`
|
||||||
|
player @ surprised "{b}全栈{/b}
|
||||||
|
```
|
||||||
|
|
||||||
|
<img width="750" alt="Screen Shot 2022-01-23 at 10 36 49" src="https://user-images.githubusercontent.com/35674052/150693965-15411504-791a-4db3-8b14-bc9177be6375.png" />
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# original
|
||||||
|
What is that?
|
||||||
|
# translated, no quotes on either side
|
||||||
|
这是什么?
|
||||||
|
```
|
||||||
|
|
||||||
|
<img width="857" alt="Screen Shot 2022-01-23 at 10 36 54" src="https://user-images.githubusercontent.com/35674052/150693969-062e3268-580f-4ad2-97db-cab6240b6095.png" />
|
||||||
|
|
||||||
|
```renpy
|
||||||
|
# original
|
||||||
|
I better take notes so I can learn more about it."
|
||||||
|
# translated, keeping the closing quotes `"`
|
||||||
|
我最好做笔记,这样我可以学习更多东西。"
|
||||||
|
```
|
||||||
|
|
||||||
## Rate Translations
|
## Rate Translations
|
||||||
|
|
||||||
Crowdin allows you to rate the existing proposed translations. If you attempt to save a translation, you may see a message indicating that you cannot save a duplicate translation - this means another contributor has proposed that identical translation. If you agree with that translation, click the `+` button to "upvote" the translation.
|
Crowdin allows you to rate the existing proposed translations. If you attempt to save a translation, you may see a message indicating that you cannot save a duplicate translation - this means another contributor has proposed that identical translation. If you agree with that translation, click the `+` button to "upvote" the translation.
|
||||||
|
@ -18,7 +18,7 @@ Most of files for translating the platform are located in the [`client/i18n`](ht
|
|||||||
|
|
||||||
```console
|
```console
|
||||||
config/i18n
|
config/i18n
|
||||||
└── all-langs.js
|
└── all-langs.ts
|
||||||
...
|
...
|
||||||
client/i18n
|
client/i18n
|
||||||
├── configForTests.js
|
├── configForTests.js
|
||||||
@ -56,7 +56,7 @@ Most of files for translating the platform are located in the [`client/i18n`](ht
|
|||||||
│ └── trending.json
|
│ └── trending.json
|
||||||
├── locales.test.js
|
├── locales.test.js
|
||||||
├── schema-validation.js
|
├── schema-validation.js
|
||||||
└── validate-keys.js
|
└── validate-keys.ts
|
||||||
```
|
```
|
||||||
|
|
||||||
Some of these files are translated on our translation platform (Crowdin), some are not.
|
Some of these files are translated on our translation platform (Crowdin), some are not.
|
||||||
|
Reference in New Issue
Block a user