Dlaczego liczba mnoga zmienia się między językami
Kategorie zero, one, two, few, many i other wynikają z reguł CLDR każdego języka. Po angielsku one oznacza tylko 1; po francusku obejmuje 0 i 1; rosyjski i polski dodają few i many („2 pliki”, „5 plików”); arabski używa wszystkich sześciu; japoński ma jedną, other. Komunikat z dwiema gałęziami napisany dla angielskiego jest więc niekompletny, gdy tylko go przetłumaczysz.
Narzędzie odczytuje te reguły w przeglądarce (Intl.PluralRules): pokazane kategorie i przykładowe liczby pochodzą z samego języka, bez tabeli do utrzymywania.
Pułapka =1 w gen-l10n
Gałąź =1 staje się kategorią one w kodzie generowanym przez flutter gen-l10n. Po francusku ta kategoria dotyczy też zera: przy count = 0 pojawiłoby się „1 article restant”. Lepiej użyć kategorii one z liczbą w tekście albo dodać gałąź =0: narzędzie oferuje ją jako pole wyboru. Szczegóły w poradniku o liczbie mnogiej i placeholderach ICU.
Jak użyć wyniku
- Skopiuj linię
"key": "{count, plural, …}" każdego języka do odpowiedniego pliku app_xx.arb.
- Dodaj metadane
@key raz, w pliku szablonu.
- Uruchom
flutter gen-l10n: brak gałęzi other lub niezamknięty nawias klamrowy przerywa generowanie z nazwą pliku.
Żeby potem sprawdzić, czy żadne tłumaczenie nie zgubiło ani nie przemianowało placeholdera, użyj wyszukiwarki brakujących kluczy ARB.
Ograniczenia narzędzia
Narzędzie generuje strukturę, nie tłumaczenie: tekst każdej formy piszesz sam. Nie obsługuje komunikatów select ani zagnieżdżonej liczby mnogiej i nie podwaja apostrofów, jeśli włączyłeś use-escaping w l10n.yaml.