Как контролировать тексты RoR I18n, хранящиеся в базе данных?
Я использую I18n Gem от Sven Fuchs в своем приложении Ruby on Rails 3.2 и, хотя гем работает отлично, я столкнулся с ситуацией, для которой я не знаю решения:
У меня есть начальный файл, который содержит базовый перевод для моих MVC и заполняется при установке приложения на новом компьютере. Проблема в том, что когда один из этих переводов изменяется, я должен перейти к своему начальному файлу, отредактировать его, удалить в базе данных и повторно заполнить его. Что является проблемой, а не лучшим способом сделать это.
Кроме того, мое приложение может создавать полные MVC на лету, которые, конечно, также нуждаются в переводах. Эти переводы хранятся только в базе данных. Но было бы неплохо сохранить их в реальном файле, держать их под контролем версий и импортировать или экспортировать их, если мне это нужно.
Итак, в основном я ищу интеллектуальную связь между переводами в моей базе данных и переводами в моих файлах. Так что я могу заполнить одно из другого или vica verca и синхронизировать их.
А также я посмотрел на такие решения, как Globalize3 или localeapp, но, похоже, они не подходят.
Подытожил, что у меня есть:
- I18n Gem от Sven Fuchs с бэкэндом, который я создал сам
- Исходный файл, который иногда изменяется и должен редактироваться вручную, но содержит основные переводы
- База данных, которая содержит переводы, созданные на лету, которые не находятся под контролем версий и не хранятся в каком-либо файле.
Что я хочу:
- Синхронизация между переводами в моем начальном файле и моей базе данных
- Способ поставить мои переводы под контроль версий
Я уверен, что не могу быть единственным, кому это нужно...
Спасибо с уважением!
1 ответ
Вот как я решил проблему ближе к заданному вопросу:
task :task_name => [:environment] do
file = "db/file_name.txt"
counter = 0
CSV.foreach(file, :headers => true, :col_sep => "^", :quote_char => "~") do |row|
identifier = row[0].to_i
model_name = ModelName.find_or_create_by_identifier(identifier)
I18n.locale = row[1]
model_name.name = row[3]
model_name.save!
end
end
Обратите внимание, что идентификатор должен быть уникальным идентификатором, который не изменяется и существует в файле и в базе данных. В этом примере столбцы разделены "^", а кавычки - "~"
Как сказал @tigrish в комментариях, вставлять в файл и в базу данных не очень хорошая идея, поэтому важно ограничить это.
Эти ссылки также могут помочь:
- http://railscasts.com/episodes/396-importing-csv-and-excel
- http://jasonseifer.com/2010/04/06/rake-tutorial
Поскольку вопрос немного старый, я надеюсь, что он может помочь кому-то еще.