Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Интернализация моделей, Как сделать многоязычное приложение  
:(
    Опции темы
maep
Дата 29.3.2010, 04:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 27.6.2008

Репутация: нет
Всего: нет



Коллеги, подскажите: как лучше действовать в плане интернализации данных в Раилс? 
Есть задача сделать многоязычный сайт,  и не только в плане интерфейса, но и в плане данных.

Лично я вижу три основных подхода:
добавлять в каждую модель поля типа text_en, text_fr ... и т.п., т.е. на каждое переводимое поле заводить их столько, сколько есть языков.
Это очень коряво: разрастается количество полей,  жестко зашит состав языков.

Вариант 2. Для каждой сущности заводится таблица типа entity_text [text:string, name:string, lang_id:integer] или что-то подобное.

Вариант 3. Все переводы хранить в одном большом словаре, а в таблице сущности иметь ссылки на туда.

Поиск плагинов и гемов не увенчался успехом. Больше всего  ссылок на acts_as_translatable, но репозиторий походу мертв, и вообще старая штука. Всякие другие - вообще непонятно что.

А как вы решаете такую задачу,чтоб велосипед не изобретать?
Спасибо
PM MAIL   Вверх
shine
Дата 29.3.2010, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 20.10.2006

Репутация: 2
Всего: 5



--------------------
An investment in knowledge always pays the best interest. © Benjamin Franklin
PM MAIL   Вверх
source777
Дата 29.3.2010, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 12
Всего: 56



Лично мне Globalize не нравится, он довольно не слабо притормаживает обработку запросов. Поэтому для простых случаев я предпочитаю acts_as_multilingualдемо-приложение, а пример реального использования этого плагина в действии можно посмотреть на npobit.com

Это сообщение отредактировал(а) source777 - 29.3.2010, 12:41


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
maep
Дата 30.3.2010, 05:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 27.6.2008

Репутация: нет
Всего: нет



Спасибо, изучу оба варианта
PM MAIL   Вверх
рельсовик
Дата 3.4.2010, 10:38 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 3.4.2010

Репутация: нет
Всего: нет



Для локализации нашего приложения мы использовали gettext. Принцип работы: все строки обводятся особым методом (для компактности он называется _, т.е. вместо "hello" будет _("hello"). Это делается везде где нужен перевод - model/view/controller/lib/итп. Затем запускается особый скрипт который генерирует таблицу переводов (ближе всего в варианту №3  пожалуй, но для каждого языка свой файл-словарь, который сопоставляет текст в оригинале с текстом в переводе). Затем эти словари рассылаются переводчикам, которые заполняют нужные поля, и шлют файлы обратно разработчикам. 

Преимущества gettexta:

1. не нужно убирать текст в оригинале или менять его на замудренные переменные, где не всегда ясно, чем же будет сама строка. В программе будет "основной" язык (для нас это английский), и все строки видны в программе прямым текстом, как и до локализации. Если, допустим, в оригинале строка стала _("the quick brown fox jumped over the lazy dog"), то программер может прикинуть, скажем, примерную длину этой строки в других языках, ее смысл, расположение на странице, итп. А если использовать переменную типа @brown_fox_string, то ответы на эти вопросы не столь очевидны.

2. Файлы-словари легко рассылаются переводчикам, и получаются обратно. Сами переводчики не должны знать ни сущность программы, ни программирование вообще.  

3. Нет необходимости синхронизировать все и сразу. Если строка еще не переведена, то она будетп просто отображатся языком оригинала, даже в другом локале. Можно получить перевод на немецкий, и внедрить его, не дожидаясь переводов на французкий, русский, итп. А получив нужный перевод, достаточно лишь заменить файл-словарь, и не нужно ничего менять в программе.

Из недостатков gettextа - отсутствие встроенной локализации для картинок и прочего не-текста. Это пришлось дописывать ручками. =)

Ну и наше приложение, милости просим посмотреть как внедрен gettext: http://www.billingboss.com/?locale=ru . Для другого языка достаточно сменить locale=fr итп.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby on Rails"
source777
  • С чего начать? начинаем
  • Документацию смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby On Rails | Следующая тема »


 




[ Время генерации скрипта: 0.0657 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.