Как контролировать тексты 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 в комментариях, вставлять в файл и в базу данных не очень хорошая идея, поэтому важно ограничить это.

Эти ссылки также могут помочь:

Поскольку вопрос немного старый, я надеюсь, что он может помочь кому-то еще.

Другие вопросы по тегам