Zgodność rodzaju
Niektóre języki odmieniają czasowniki i przymiotniki według płci osoby, której dotyczy zdanie. Angielski w większości tego nie robi, więc fraza zapisana jako {username} has been invited to jedno zdanie po angielsku, a po hiszpańsku, francusku czy rosyjsku — dwa lub trzy. Langsys zajmuje się tym podczas tłumaczenia — tak samo jak generowaniem form liczby mnogiej — a Ty przekazujesz jeden argument.
Co tworzy potok
Gdy język docelowy wymaga uzgodnienia form, Langsys przepisuje ciąg tego języka na potrzebne gałęzie — ICU select. Twoja fraza źródłowa nigdy się nie zmienia, a gałęzi nie musisz pisać ręcznie.
// Your source phrase, unchanged:
"{username} has been invited"
// What the Spanish translation becomes — note invitado / invitada:
"{username_gender, select, male {{username} ha sido invitado} \
female {{username} ha sido invitada} \
other {{username} ha sido invitado/a}}" Dwie konsekwencje, o których warto pamiętać. Argument otrzymuje nazwę zmiennej, według której się odmienia, z dopisanym _gender — {username} daje username_gender — a gałęzie to zawsze male, female, other. Pojawia się on tylko w tych ustawieniach regionalnych, które go potrzebują: nie widać tego, dopóki ktoś nie uruchomi aplikacji w języku z rodzajami gramatycznymi.
Przekazywanie
Przekaż argument, gdy tylko go znasz, a czytelnik otrzyma zdanie z poprawną odmianą:
// The argument is named after the variable it inflects, + _gender.
// Branches are always male / female / other.
t('{username} has been invited', 'Team', {
username: user.name,
username_gender: user.gender ?? 'other',
}); Nie znasz płci? Przekaż jawnie 'other' — to gałąź neutralna. To, co wyświetli się przy brakującym argumencie, zależy od SDK; informuje o tym strona każdego SDK. Każda strona SDK pokazuje też wywołanie w jego własnym idiomie.
Które frazy tego wymagają?
Nie da się tego stwierdzić na podstawie własnego kodu i jest to cecha tego mechanizmu: argument jest dodawany podczas tłumaczenia, osobno dla każdego docelowego języka, więc nic we frazie źródłowej ani w Twoim kodzie na niego nie wskazuje. Są trzy sposoby, aby to sprawdzić.
Przeczytaj katalog. Tłumaczenia pobierane przez Twoją aplikację to ciągi znaków po promocji, więc odpowiedź jest już po stronie klienta. Pobierz katalog dla obsługiwanej lokalizacji — udostępnia go każdy SDK — i poszukaj wpisów zawierających , select,. Dostaniesz dokładne frazy i nazwy argumentów, a sprawdzenie jest na tyle tanie, że można je uruchamiać w CI dla każdej wydawanej lokalizacji.
// The catalog your app fetches IS the promoted strings — grep it.
const wanting = Object.entries(catalog)
.filter(([, translation]) => translation.includes(', select,'))
.map(([phrase]) => phrase);
// → every phrase (and, from the string, every argument) this locale needs Włącz debugowanie (SDK JavaScript). Przekaż debug: true w konfiguracji inicjalizacji i przeglądaj aplikację w języku z rodzajem gramatycznym: SDK zapisze jedno Langsys Warning dla każdej frazy, której tłumaczenie wymaga argumentu, którego nie podano, wraz z jego nazwą. Raz na frazę na ustawienie regionalne, a na produkcji bez komunikatów. Jedna uwaga: w komponentach bloku treści i frazy defensywnie przekazany _gender jest sam zgłaszany jako niedopasowany parametr, ponieważ to sprawdzenie dotyczy tekstu źródłowego — w którym select nigdy się nie pojawia.
W razie wątpliwości przekaż go. Wartość argumentu, którego nie ma w ciągu znaków, jest ignorowana podczas renderowania, więc wysyłanie _gender dla każdej zmiennej opisującej osobę jest bezpieczne i obejmuje także te ustawienia regionalne, którym jeszcze się nie przyjrzano.
Jedna zmienna na frazę. Tylko jedna zmienna może decydować o zgodności form. Ciąg, w którym robią to dwie — liczba i płeć — pozostaje bez zmian i nie jest zamieniany na zagnieżdżony ICU, więc jest tłumaczony jako jedno zwykłe zdanie.