From 93b070ac567dede8e7203e2d68a7364e9e12a1d4 Mon Sep 17 00:00:00 2001 From: Alice Cecile Date: Wed, 21 Apr 2021 15:31:32 -0400 Subject: [PATCH 1/2] Initial outline --- fluent-internationalization.md | 81 ++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 fluent-internationalization.md diff --git a/fluent-internationalization.md b/fluent-internationalization.md new file mode 100644 index 00000000..be5c2f6a --- /dev/null +++ b/fluent-internationalization.md @@ -0,0 +1,81 @@ +# Feature Name: `fluent-internationalization` + +## Summary + +Internationalization is the practice of adapting your app's user interface to support multiple languages. +This RFC proposes how we can create a first-class integration with the [`fluent-rs`](https://github.com/projectfluent/fluent-rs) crate. + +## Motivation + +Internationalization is an important feature for serious games and apps, allowing them to expand their audience beyond a single language. +The technical challenges are well-understood, and not insurmountable, but retrofitting existing designs to accommodate them is notoriously painful. + +Even for unilingual games, a high-quality internationalization language provides excellent support for dynamically changing text: +interpolating names, adapting nearby words to the correct plurality and gender, date and time formatting and so on. +This is very useful for building polished UIs in games, where the details of what a widget or dialog box should display often vary dramatically based on player actions. + +## Guide-level explanation + +TODO: Write. + +Language Resource. + +Labels for text and audio. + +Assets should use real text if possible. + +## Reference-level explanation + +TODO: Write. + +## Drawbacks + +1. The data model for unilingual text is necessarily more complex. +2. Our dependency tree will grow. +3. We're forced to confront challenges around variable text length, left-to-right text, non-Latin glyphs etc. sooner. + +## Rationale and alternatives + +### Why does Bevy itself need internationalization? + +1. By establishing a single standard, we can ensure that ecosystem crates (for e.g. dialog, widgets) all interoperate correctly. +2. Bevy should have text-enabled widgets in `bevy_ui`. If we don't support localization on those, they will quickly be obsoleted by third-party equivalents. +3. Bevy itself is responsible for solving many of the ancillary problems induced by variable text contents, such as automatically rescaling UIs. +4. By enabling internationalization by default, games can seamlessly mature, rather than having to rip out all related prototyping work. +5. Existing internationalization solutions in other game engines are typically bolted-on and second-class. Excellent integration with a high-quality internationalization solution offers a serious competitive advantage for multilingual indie developers and serious commercial game developers considering Bevy. + +### Why Fluent? + +TODO: Write. + +## Prior art + +An existing Bevy integration with `fluent-rs`, [`bevy_fluent`](https://crates.io/crates/bevy_fluent) shows that basic integration is quite simple. + +[Project Fluent](https://projectfluent.org/) has a great overview explaining the limitations of simpler approaches to localization. + +### Internationalization in other game engines + +#### Unity + +TODO: Research. + +https://medium.com/i18n-and-l10n-resources-for-developers/localizing-unity-games-with-the-official-localization-package-5e2f59779d45 + +#### Unreal + +TODO: Research. + +https://docs.unrealengine.com/en-US/ProductionPipelines/Localization/Overview/index.html + +#### Godot + +TODO: Research. + +https://docs.godotengine.org/en/stable/tutorials/i18n/internationalizing_games.html + +## Unresolved questions + +1. How do we ensure that the "simple case" of code-only static text in a single language is still easy? +2. How do we ensure that translators have appropriate access to context? +3. How do we generalize over different asset types? From bac0f1996694faa4d349472252a7bb95cf0c6ae7 Mon Sep 17 00:00:00 2001 From: Alice Cecile Date: Wed, 21 Apr 2021 15:33:43 -0400 Subject: [PATCH 2/2] Moved file... --- .../fluent-internationalization.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename fluent-internationalization.md => rfcs/fluent-internationalization.md (100%) diff --git a/fluent-internationalization.md b/rfcs/fluent-internationalization.md similarity index 100% rename from fluent-internationalization.md rename to rfcs/fluent-internationalization.md