Ghost icon indicating copy to clipboard operation
Ghost copied to clipboard

🌐 i18n mega-issue

Open cathysarisky opened this issue 7 months ago • 28 comments

Please help us translate Ghost to your language!

General needs

  • Contribute new languages (provided you speak them fluently or near-fluently)
  • Help complete languages that are only partially translated
  • Improve the quality of existing translations
  • Fix errors (see below)

Notes & tips

🔖 For help getting started, see https://forum.ghost.org/t/help-translate-ghost-beta/37461 - the original directions were only for portal, but can be generalized to any language file.

🤖 NO AI translations, please. Native/very fluent speakers only.

Read your email! Please make sure you have your Github notifications sent somewhere you will see them. Most PRs need at least one round of adjustment before merging.

🆕 New Github users are welcome! When you submit your PR, please make sure that the "files changed" tab shows only the changes you intended to make. If you have questions, please leave a comment and I'll try to help get you sorted out.

👋 Formality: Ghost's brand has a friendly and fairly informal tone. If your language has both formal and informal form, choose one or the other and use it consistently. Most languages are using the informal version, but if the informal version might be considered rude, then choose the formal.

🤗 All kinds of people use Ghost. When possible, prefer gender-neutral language.

👍 Translations should work for a variety of Ghost sites. Choose translations that will make sense for both personal blogs/newsletters and news publications.

👉 Please @ cathysarisky if you add a language PR. Thanks!

Common issues to avoid & other notes:

  • Please give your PR a descriptive title that includes the language you are working on.
  • Check before starting that there isn't another PR for the same language. If there is, please review it rather than duplicating work.
  • Consult the context.json file if you aren't sure how a string will be used.
  • We use "Jamie Larson" for a placeholder in any field that needs a name. Please do not transliterate. Please do not replace with "Name". Instead, choose a name that will be recognized as a name in your language. Choose something uncontroversial and common. If possible, choose a non-gendered name.
  • Do not translate variables (inside {}). Do not add variables. If you remove a variable, leave a note (see "Known Errors" below).
  • Watch out for "You are receiving this because you are a %%{status}%% subscriber to {site}.'", which takes the "free", "trialing", "paid", and "complimentary" strings in the %%{status}%% field. These strings need to work together.
  • If you are changing existing translations, please leave an explanation of why.

Completion status (last generated 8/7/2025):

Translation Completion Statistics

Language Need translation Completion % Invalid Variables Missing Variables Intentional Overrides
Spanish (es) 🥇 0 100% 0 0 0
French (fr) 🥇 0 100% 0 0 0
Hindi (hi) 🥇 1 100% 0 0 0
Hungarian (hu) 🥇 0 100% 0 0 0
Punjabi (pa) 🥇 0 100% 0 0 0
Russian (ru) 🥇 0 100% 0 0 0
Vietnamese (vi) 🥇 0 100% 0 0 0
Bulgarian (bg) 🥈 8 98% 0 0 0
Italian (it) 🥈 9 98% 0 0 0
Turkish (tr) 🥈 6 98% 0 0 0
Mongolian (mn) 🥉 13 97% 0 0 0
Polish (pl) 🥉 13 97% 0 0 0
Danish (da) 🥉 14 96% 1 ❌ 1 ❌ 0
German (de) 🥉 14 96% 0 0 1 ✅
Brazilian Portuguese (pt-BR) 🥉 14 96% 0 0 0
Swiss German (de-CH) 26 93% 2 ❌ 3 ❌ 0
Norwegian Bokmål (nb) 28 93% 0 0 0
Slovenian (sl) 27 93% 0 0 0
Catalan (ca) 31 92% 0 0 0
Scottish Gaelic (gd) 30 92% 0 0 0
Croatian (hr) 30 92% 0 0 0
Latvian (lv) 31 92% 1 ❌ 0 0
Dutch (nl) 29 92% 0 0 0
Chinese (Traditional) (zh-Hant) 30 92% 0 0 0
Slovak (sk) 34 91% 0 1 ❌ 0
Arabic (ar) 43 89% 0 0 0
Hebrew (he) 41 89% 0 0 0
Korean (ko) 41 89% 0 0 0
Swedish (sv) 41 89% 0 0 0
Indonesian (id) 65 83% 0 0 0
Tamil (ta) 65 83% 0 0 0
Ukrainian (uk) 65 83% 0 0 0
Czech (cs) 78 79% 0 0 0
Romanian (ro) 81 78% 0 0 0
Portuguese (pt) 85 77% 0 1 ❌ 0
Estonian (et) 101 73% 0 0 0
Chinese (Simplified) (zh) 102 73% 0 0 0
Japanese (ja) 108 71% 0 2 ❌ 0
Serbian (Cyrillic) (sr-Cyrl) 111 70% 0 0 0
Bosnian (bs) 121 68% 0 0 0
Greek (el) 121 68% 0 0 0
Persian (fa) 121 68% 0 0 0
Kazakh (kz) 121 68% 0 0 0
Lithuanian (lt) 121 68% 0 1 ❌ 0
Afrikaans (af) 123 67% 0 0 0
Macedonian (mk) 125 67% 0 0 0
Swahili (sw) 125 67% 0 0 0
Bengali (bn) 126 66% 0 0 0
Sinhala (si) 128 66% 2 ❌ 2 ❌ 0
Thai (th) 127 66% 1 ❌ 1 ❌ 0
Finnish (fi) 135 64% 0 0 0
Urdu (ur) 140 63% 0 0 0
Icelandic (is) 192 49% 1 ❌ 2 ❌ 0
Norwegian Nynorsk (nn) 192 49% 0 2 ❌ 0
Malay (ms) 196 48% 0 0 0
Albanian (sq) 204 46% 0 2 ❌ 0
Nepali (ne) 217 42% 0 0 0
Serbian (sr) 234 38% 0 0 0
Esperanto (eo) 295 22% 0 0 0
Uzbek (uz) 295 22% 0 0 0

Known errors

Some existing translations in ghost/i18n/locales/**/*.json may have errors in usage of variables. Variables, surrounded by { } (always a single set, not doubles) should match in the key (left side) and value (right side). They should never translated. New variables should never be added to the right side, as they will not be correctly substituted. If a variable is not present on the right side, one should generally suspect an error, although a few may be deliberate.

If your language has any "Invalid Variables" listed above, these need to be corrected. Your strings will not display correctly. If your theme has "Missing variables", these might or might not be intentional. You can edit the error tracking file below to update anything intentional to explain your choice.

Errors are tracked in ghost/i18n/test/i18n-ignores.json . If you correct an error, you can also delete the override.

cathysarisky avatar May 15 '25 16:05 cathysarisky

Hello, @cathysarisky can you assign this to me.

sandeepgoudmacha avatar Jun 08 '25 12:06 sandeepgoudmacha

Hello, @cathysarisky can you assign this to me.

Please feel free to open a PR that resolves the issues above (or make other translation improvements) for any languages that you speak fluently.

cathysarisky avatar Jun 08 '25 13:06 cathysarisky

Is this issue resolved? Is there any chance I can work on it?

Nikhil5022 avatar Jun 21 '25 15:06 Nikhil5022

Is this issue resolved? Is there any chance I can work on it?

Please feel free to open a PR that resolves the issues above (or make other translation improvements) for any languages that you speak fluently.

cathysarisky avatar Jun 21 '25 15:06 cathysarisky

can i work on Hindi translation

dawgdevv avatar Jul 06 '25 09:07 dawgdevv

can i work on Hindi translation

That'd be great, @dawgdevv ! Looks like there are still some untranslated strings that would be a good place to start.

@rohit-bhardwajj submitted some translations for Hindi a couple weeks ago (that have been merged), so I'm going to @ him here, in hopes that you two can coordinate work and review each other's contributions.

Let me know if you have any questions.

cathysarisky avatar Jul 06 '25 14:07 cathysarisky

can i work on Hindi translation

That'd be great, @dawgdevv ! Looks like there are still some untranslated strings that would be a good place to start.

@rohit-bhardwajj submitted some translations for Hindi a couple weeks ago (that have been merged), so I'm going to @ him here, in hopes that you two can coordinate work and review each other's contributions.

Let me know if you have any questions.

Okay will update you with the translation.

dawgdevv avatar Jul 06 '25 14:07 dawgdevv

can i work on Hindi translation

That'd be great, @dawgdevv ! Looks like there are still some untranslated strings that would be a good place to start.

@rohit-bhardwajj submitted some translations for Hindi a couple weeks ago (that have been merged), so I'm going to @ him here, in hopes that you two can coordinate work and review each other's contributions.

Let me know if you have any questions.

Hey @cathysarisky, thanks for the mention!

Hi @dawgdevv 👋 I’d be happy to help coordinate or review anything you're working on.

@cathysarisky — if needed, I can also pick up and complete the remaining untranslated strings. Let me know what works best!

rohit-bhardwajj avatar Jul 07 '25 06:07 rohit-bhardwajj

can i work on Hindi translation

That'd be great, @dawgdevv ! Looks like there are still some untranslated strings that would be a good place to start. @rohit-bhardwajj submitted some translations for Hindi a couple weeks ago (that have been merged), so I'm going to @ him here, in hopes that you two can coordinate work and review each other's contributions. Let me know if you have any questions.

Hey @cathysarisky, thanks for the mention!

Hi @dawgdevv 👋 I’d be happy to help coordinate or review anything you're working on.

@cathysarisky — if needed, I can also pick up and complete the remaining untranslated strings. Let me know what works best!

hello @rohit-bhardwajj i can complete the left over translation can you review it for me

dawgdevv avatar Jul 07 '25 06:07 dawgdevv

Can i complete remaining hindi translations? as shown above they are still 83%

shrutipandya3 avatar Jul 25 '25 11:07 shrutipandya3

Can i complete remaining hindi translations? as shown above they are still 83%

i think i have completed all the translation @cathysarisky have you updated

dawgdevv avatar Jul 25 '25 11:07 dawgdevv

Can i complete remaining hindi translations? as shown above they are still 83%

i think i have completed all the translation @cathysarisky have you updated

Stats updated! :)

cathysarisky avatar Jul 25 '25 13:07 cathysarisky

Can i complete remaining hindi translations? as shown above they are still 83%

i think i have completed all the translation @cathysarisky have you updated

Stats updated! :)

Thanks for the update! 🙌

shrutipandya3 avatar Jul 25 '25 17:07 shrutipandya3

Missing {status} in translated string

astro1sumit avatar Sep 13 '25 00:09 astro1sumit

Great translation 👍

Proxtox avatar Oct 01 '25 20:10 Proxtox

I'm interested in working on this issue. Could you provide more context about what you're looking for? Any additional details about requirements or constraints would be helpful.

tysoncung avatar Oct 21 '25 02:10 tysoncung

I'm interested in working on this issue. Could you provide more context about what you're looking for? Any additional details about requirements or constraints would be helpful.

Did you watch the video in the linked forum thread? Did you have a question? If something is not clear, please ask a more specific question and I'll try to clarify. Thanks.

cathysarisky avatar Oct 21 '25 03:10 cathysarisky

Hi, it seems that the subscribers only warning in subscribers only posts is not getting translated when using other languages other than english. Tried with french and german. Using Ghost Pro.

Image

SamiNassim avatar Oct 30 '25 14:10 SamiNassim

Hi, it seems that the subscribers only warning in subscribers only posts is not getting translated when using other languages other than english. Tried with french and german. Using Ghost Pro.

That's under theme control, not part of this project. To fix it, you need to put a (translated/wrapped for translation) copy of content-cta.hbs into your partials. See the note about templates here: https://docs.ghost.org/themes/helpers/utility/translate

cathysarisky avatar Oct 30 '25 14:10 cathysarisky

Hi, it seems that the subscribers only warning in subscribers only posts is not getting translated when using other languages other than english. Tried with french and german. Using Ghost Pro.

That's under theme control, not part of this project. To fix it, you need to put a (translated/wrapped for translation) copy of content-cta.hbs into your partials. See the note about templates here: https://docs.ghost.org/themes/helpers/utility/translate

Thank you so much for the quick answer, a file was indeed missing from my theme. (Or skill issue from my part for not reading the doc !)

SamiNassim avatar Oct 30 '25 15:10 SamiNassim

Hi, Regarding the new one-time code translation:

  • Line 175 in api.js: ${t('Or use this link to securely sign in')}:
  • Line 139 in signin.js: ${t('Or, skip the code and sign in directly')}:
  • Line 129 in signin.js: ${t('Welcome back! Here's your code to sign in to {siteTitle}')}:

It would be better to include the colon inside the translation, because in French typography a space is required before a colon. To work around this, I had to add a space at the end of my translation ("[...] connectez-vous directement "), which coderabbit didn’t like.

lujuldotcom avatar Nov 21 '25 20:11 lujuldotcom

It would be better to include the colon inside the translation, because in French typography a space is required before a colon. To work around this, I had to add a space at the end of my translation ("[...] connectez-vous directement "), which coderabbit didn’t like.

Unfortunately, making changes to the strings after we have some translations already in tends to make a bit of a mess. You're 100% welcome to just include the space in your translation. I don't care if Coderabbit is happy or not. :)

cathysarisky avatar Nov 21 '25 20:11 cathysarisky