Лингвистические кейсы / склонения и gettext - PullRequest
2 голосов
/ 05 февраля 2012

Кто-нибудь когда-нибудь задумывался о gettext и различных случаях на некоторых языках.В настоящее время у нас проблема с тем, что в хорватском языке даже имена отклоняются.

пример

  • Английский: О Foobar
  • Немецкий: Über Foobar
  • Хорватский: O Foobaru (отметьте u )

Я использую gettext, чтобы вставить это гибкое имя, так как оно может измениться:

translate('About %s', name)

Что такоелучшие методы, чтобы разрешить склонение здесь?В случае Foobar и хорватского склонения вы можете решить это следующим образом:

About %s => O %su

Но теперь давайте используем слово, оканчивающееся на a , как Foobara, тогда правильная грамматика хорватского языка будет O Foobari (необходимо удалить a и присоединить i ).

Как я могу преодолеть этот недостаток gettext?

1 Ответ

0 голосов
/ 26 августа 2012

gettext не поддерживает такое склонение.

Если вы знаете всех возможных кандидатов на% s, вы можете перечислить их всех в ресурсе, например,

msgid "About Foobar"
msgstr "O Foobaru"
msgid "About Bazbar"
msgstr "O Bazbarbaru"
msgid "About Foobara"
msgstr "O Foobari"
msgid "About Bazbara"
msgstr "O Bazbari"

но тогда это сделает другой язык, такой как немецкий, громоздким.

Или, если вы можете определить это хорватское склонение как функцию, вы можете сначала обработать его в своей функции и продолжать использовать общее преобразование gettext.

translate('About %s', myDeclension(name));

и функция myDeclension делает это,

function myDeclension(text) {
  if (isLocale() != 'hr') { return text; }
  if (isEndWithA(text)) { return replaceLastAWithI(text); }
  else { return addTrailingU(text); }
  // add more Croatian specific conversion if any
}
...