Обратный перевод с rails-i18n

Я с радостью использовал встроенную поддержку rails i18n для перевода строк на разные языки, что работает отлично. Однако недавно мне понадобилось кое-что, что выходит за рамки стандартного поведения этого драгоценного камня.

Я назову это «обратным переводом» из-за отсутствия лучшего слова. По сути, идея состоит в том, что у меня есть строка на каком-то языке, и я хочу иметь возможность вызывать метод с другой локалью и возвращать строку, переведенную на этот языковой стандарт , если существует сопоставление в локали струны.

Например, предположим, что в config/locales/en.yml

en:
  hello: Hello World!

и в config/locales/ja.yml:

ja:
  hello: Konnichi wa!

затем, когда я вызываю этот метод l2l_translate ("locale to locale translate"), находясь в английском языке, со строкой и языковым стандартом в качестве аргументов, я получаю японский перевод:

I18n.locale = :en
l2l_translate("Hello World!", :ja) #=> "Konnichi wa!"

Кроме того, и это более сложно, я хочу иметь возможность обратного сопоставления интерполированных строк. Итак, скажем, у меня есть:

config / locales / en.yml

en:
  minutes: "%d minutes"

config / locales / ja.yml

ja:
  minutes: "%d分"

Тогда я смогу переводить с английского на японский вот так:

l2l_translate("5 minutes", :ja) #=> "5分"

Таким образом, в основном строка должна быть сопоставлена ​​с регулярным выражением для строки перевода на английский язык, а цифра «5» извлечена и отправлена ​​в качестве аргумента «% d» для перевода на японский язык.

Очевидно, здесь есть потенциальные проблемы, если: 1) совпадений нет или 2) совпадений несколько. С ними можно справиться, вызвав, например, исключение или вернув nil в первом случае и массив переводов во втором. В любом случае это мелочи.

Мой основной вопрос: существует ли что-нибудь подобное? А если нет, есть ли у кого-нибудь предложения о том, как его разработать (скажем, как драгоценный камень)?

Приложение, о котором я конкретно думаю, - это оболочка API для службы на японском языке. Я хочу иметь возможность указывать шаблоны на японском языке, которые можно сопоставить и перевести на другие языки. Поддержка i18n по умолчанию этого не сделает, и я не знаю других жемчужин, которые могли бы это сделать.

Будем очень признательны за любые советы или предложения! Для справки см. Также это обсуждение в 2010 г. по теме обратного перевода с i18n-rails.


person Chris Salzberg    schedule 27.09.2012    source источник


Ответы (1)


Мы используем gettext, который является стандартным решением unix i18n. Для Rails вы можете использовать gettext_i18n_rails. Одно предостережение заключается в том, что FastGettext, который поддерживается gettext_i18n_rails, похоже, не имеет полной поддержки gettext, а некоторые расширенные функции, такие как множественное число, не работали должным образом.

person Paul McMahon    schedule 28.09.2012