我想使用 Globalize gem 在我的 Rails 应用程序中翻译一些模型。这似乎很容易,但我想知道如何最好地跟踪更改的文本?这样我就不会忘记在更改其中一个翻译后更新所有其他翻译?
是否已经内置了一些功能?所以我可以看到与某些翻译相比,我的模型的哪些字段同时发生了变化,然后我可以进行翻译并修复它们吗?
此外,当我只是修正一个错字时,我不希望翻译被视为“更改”。
我想使用 Globalize gem 在我的 Rails 应用程序中翻译一些模型。这似乎很容易,但我想知道如何最好地跟踪更改的文本?这样我就不会忘记在更改其中一个翻译后更新所有其他翻译?
是否已经内置了一些功能?所以我可以看到与某些翻译相比,我的模型的哪些字段同时发生了变化,然后我可以进行翻译并修复它们吗?
此外,当我只是修正一个错字时,我不希望翻译被视为“更改”。
有趣的问题,我完全可以理解这样做的必要性。不幸的是,Globalize 是一个非常小的 gem,它只处理翻译的存储和检索,没有别的。所以回答你的第一个问题:不,没有内置的功能可以做你想做的事。
要使用某种功能来跟踪翻译更改,您必须在 Globalize 之上添加一个图层,该图层会在已更改为一种语言的列上设置一个标志,以便用户知道以其他语言更新它们。
我想你需要做的是在你的翻译表中post_translations
为每个翻译的属性分配一个新列(比如 ),并带有一个版本号,所以如果你有列title
和summary
,你将拥有post_translations
:
title
title_version
summary
summary_version
最初(比如说)每个版本列是1
. 当更新像表这样的单个列时,您会将版本更新为2
,以表明它已从原始翻译更新。
然后,您可以使用版本中的这种差异来强制用户更新summary
以匹配更改后的语言的翻译,并且一旦完成,将其版本更新为2
(对于任何其他语言都相同)。
对于拼写错误,您不能更新版本以避免强制跨语言同步。
这当然是一个非常原始的实现。它不会处理两种语言独立更新的情况,例如:在这种情况下,两种语言都需要相互同步。这种情况下的最终复杂性类似于 git 等修订控制系统中分支和合并的复杂性。这将需要一个稍微复杂的版本控制方案。
即便如此,基本问题还是很有趣的,如果你走到那一步,即使是最小的解决方案也很有趣(比如说)添加为 globalize 扩展。祝你好运!
(作为记录,我是 Globalize 的作者之一,虽然最近不太活跃......)