Я с радостью использовал встроенную поддержку 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.