Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Локализация приложения на базе Rails. Личный опыт и советы

Локализация приложения на базе Rails. Личный опыт и советы

Опыт локализации HeiaHeia.com, обзор полезных сервисов и советы.
Специально для DevConf 2012

Alex Sulim

June 09, 2012
Tweet

More Decks by Alex Sulim

Other Decks in Programming

Transcript

  1. # Находим новые/измененные строчки $ grep -r '#' config/locales #

    config/locales/layouts.ru.yml ru: layouts: application: greeting: “#Привет!”
  2. .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml

    .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .ym .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml
  3. .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml

    .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .ym .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml
  4. .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml

    .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .ym .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .y .yml .yml .yml .yml .yml .yml
  5. .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml

    .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .ym .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .y .yml .yml .yml .yml .yml .yml Сложности с добавлением новых языков
  6. .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml

    .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .ym .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .y .yml .yml .yml .yml .yml .yml YAML неудобен для переводчиков
  7. .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml

    .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .ym .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .yml .y .yml .yml .yml .yml .yml .yml Сложности синхронизации
  8. “lazy” lookup Имя ключа Советы # config/locales/users.ru.yml ru: users: new:

    title: “Новый пользователь” # app/views/users/new.html.erb ... <%= t ‘.title’ %> ...
  9. # config/locales/layouts.ru.yml ru: layouts: application: greeting_html: | ... <a href=”/about”>О

    компании<a> ... HTML внутри переводов Советы
  10. HTML внутри переводов # config/locales/layouts.ru.yml ru: layouts: application: greeting: html:

    | ... %{link} ... link: “О компании” HTML внутри переводов Советы
  11. HTML внутри переводов # app/views/layouts/application.html.erb ... <%= t ‘.greeting.html’, link:

    link_to(t(‘.greeting.link’), about_url) %> HTML внутри переводов Советы
  12. Помните о локализации скриптов на JavaScript Советы # app/views/articles/index.html.erb ...

    $("#content").pullToRefresh({ "i18n": { "pull_to_refresh": "<%= t ".pull_to_refresh" %>", "release_to_refresh": "<%= t ".release_to_refresh" %>" }, success: function() { // ... } }); ...