【发布时间】:2016-09-06 11:12:27
【问题描述】:
我想使用 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 的作者之一,虽然最近不太活跃......)
【讨论】: