maybe-finance / maybe

The OS for your personal finances
https://maybe.co
GNU Affero General Public License v3.0
34.11k stars 2.45k forks source link

I18n (Internationalization) of the Maybe App #1225

Open zachgoll opened 1 month ago

zachgoll commented 1 month ago

The purpose of this issue is twofold:

  1. Act as a placeholder for a feature we intend to support in the future
  2. Provide documentation around how we're thinking about I18n (localization) of the app

What is I18n?

I18n (Internationalization) is a crucial aspect of our global personal finance app. It involves adapting the software to support various languages and regional differences without changing the codebase. This process is essential for creating a "native" feel for users worldwide.

Key Components of I18n:

  1. Text Localization: Translating all user-facing text in the app to the user's preferred language.
  2. Currency Formatting: Displaying monetary values in the appropriate format for each locale.
  3. Date and Time Formatting: Presenting dates and times according to local conventions.
  4. Number Formatting: Adapting number representations (e.g., decimal separators, thousands separators) to match local standards.

Challenges and Considerations:

There's a lot more to it than meets the eye, so we thought it would be helpful to the community to walk through our near-term and long-term plans for full I18n support.

What is Maybe's plan for I18n?

We are a small, English-speaking COSS startup. Because of our team size and limited runway, we have to be conscious that we are spending our time on the high value personal finance features that help you manage your finances more effectively.

Below outlines our plan to support a variety of user locales.

Near-term I18n support

In the near term, we intend to support multi-currency and date/time formatting for the following locales, which aligns with the I18n.available_locales from the i18n gem:

[:en, :ru, :ar, :bg, :"ca-CAT", :ca, :"da-DK", :"de-AT", :"de-CH", :de, :ee, :"en-AU", :"en-BORK", :"en-CA", :"en-GB", :"en-IND", :"en-KE", :"en-MS", :"en-NEP", :"en-NG", :"en-NZ", :"en-PAK", :"en-SG", :"en-TH", :"en-UG", :"en-US", :"en-ZA", :"en-au-ocker", :"es-AR", :"es-MX", :es, :fa, :"fi-FI", :fr, :"fr-CA", :"fr-CH", :he, :hy, :id, :it, :ja, :ko, :lt, :lv, :"mi-NZ", :"nb-NO", :nl, :"no-NO", :pl, :"pt-BR", :pt, :sk, :sv, :th, :tr, :uk, :vi, :"zh-CN", :"zh-TW", :af, :az, :be, :bn, :bs, :cs, :cy, :da, :"de-DE", :dz, :"el-CY", :el, :"en-CY", :"en-IE", :"en-IN", :"en-TT", :eo, :"es-419", :"es-CL", :"es-CO", :"es-CR", :"es-EC", :"es-ES", :"es-NI", :"es-PA", :"es-PE", :"es-US", :"es-VE", :et, :eu, :fi, :"fr-FR", :fy, :gd, :gl, :"hi-IN", :hi, :hr, :hu, :is, :"it-CH", :ka, :kk, :km, :kn, :lb, :lo, :mg, :mk, :ml, :mn, :"mr-IN", :ms, :nb, :ne, :nn, :oc, :or, :pa, :"pap-AW", :"pap-CW", :rm, :ro, :sc, :sl, :sq, :sr, :st, :"sv-FI", :"sv-SE", :sw, :ta, :te, :tl, :tt, :ug, :ur, :uz, :wo, :"zh-HK", :"zh-YUE"]

In your preferences, you can select your desired locale and currency, which we will use to format currencies, dates, and times in the UI:

CleanShot 2024-10-01 at 17 59 02@2x

Long-term I18n support

When the product reaches some stability (i.e. where we're not making huge changes on a weekly basis), we will begin working on translating the UI to the various locales mentioned above.

While AI will make this easier, we will still have to rely heavily on the community to help us with this.

Can I contribute translations now?

[!IMPORTANT] Unfortunately, we are not accepting translations PRs at this time.

While it may seem harmless on the surface, adding translations in various languages adds significant overhead to the development process and requires our very small team to spend time and resources ensuring that the translations are accurate and more importantly, that they stay up-to-date as the app evolves.

We will post an update to this issue when we are ready to start working on these.

If you have any questions or suggestions, feel free to leave them below :)

arsenstorm commented 1 month ago

I think it would be helpful to keep date formatting separate from the locale and use the locale-associated date formatting as a fallback.

For instance, I'd prefer British English but want dates displayed in the US format.

zachgoll commented 1 month ago

@arsenstorm separation of date and locale has been implemented in the latest version of the app.

Keeping this issue open since translations are NOT complete/ready yet.

xcraftr commented 3 weeks ago

I'll be here for the french translation ! Can't wait 🚀

gariasf commented 3 weeks ago

I'm happy to take on Spanish and Catalan once Maybe is accepting translations.

wlib commented 3 weeks ago

FYI JS's Intl has very extensive support for number (including currency) and date/time localization

alexismo commented 2 weeks ago

Happy to contribute fr-CA!

MrTob commented 3 days ago

If you need help with german translatiosn, I'm happy to help.