Magento Translation, Step Zero: 什么 Must Be Translated?
Magento Translation, Step Zero: 什么 Must Be Translated?

Magento Translation, Step Zero: 什么 Must Be Translated?

2014年10月24日发布 in 发展历程
优雅的骆马Magento Custom 报告书 博客
Magento中带有Clean_SqlReports的自定义报告
2014年9月24日
调试复杂问题
2014年11月18日

对于希望扩大市场渗透率并提高可用性的Magento商户开发商而言,国际化已成为越来越重要的考虑因素。尽管Magento具有强大的本地化功能,但仍可以通过维护多种语言环境的翻译的形式来实现这项工作的很大一部分。

 

However, a journey of a thousand miles begins with a single step, and this 在里面ial step can be particularly daunting. 什么 must be 翻译d?

理想情况下,将对曾经使用过的每个字符串(无论是后端还是前端)进行记录,以便始终提供计划翻译的详尽清单。但是实际上,这种情况很少见-也许最初不是将站点或模块指定用于国际市场,或者很难证明投资回报率是合理的。因此,没有任何记录的孤儿弦非常普遍,也成为国际化的障碍。

拥有一种机制来追溯检查站点或模块并执行翻译差异分析会不会很好?

方法

找出未翻译的字符串的一种方法是修改翻译工具本身,以在遇到未翻译的字符串时报告它们。这通常表示为对翻译类的快速攻克,即记录字符串,然后还原更改。

基本思想是扎实的,但执行本质上是一时的黑客行为-需要重复发现和实施,并且容易受到监督。

在最近一个涉及多个国家和地区的国际化密集型项目之后,我试图将该方法正式化为一个可靠的模块。

翻译路径

当调用熟悉的__()方法(无论是从块,助手,控制器等)时,将调用Mage_Core_Model_Translate :: 翻译()进行实际的繁重工作。

Mage_Core_Model_Translate :: 翻译()

在进行了一些启发式确定确切用于上下文的模块和代码之后,Mage_Core_Model_Translate :: __ getTranslatedString()接手了。

Mage_Core_Model_Translate :: _ getTranslatedString()

如果存在通过代码或文本进行的翻译,则将其返回-否则,将返回键(未翻译的字符串)。

实作

Mage_Core_Model_Translate::_getTranslatedString() 方法提供了绝佳的机会来检测没有翻译的字符串并进行记录。

字符串检测

不幸的是,没有事件可以观察到以完成此检测,因此必须重写模型。使用这种基本模型可能的最轻触,在翻译之前对字符串进行预处理,以确定它是否缺少有趣地区的翻译。

EW_UntranslatedStrings_Model_Core_Translate :: _ getTranslatedString()

这个简单的更改使模块可以收集未翻译的字符串,出于性能方面的考虑,在呈现页面之后,可以在单个查询中将这些字符串打包并刷新到数据库中。执行此收集所需要做的只是在系统配置中启用该模块并浏览站点-对于正在进行的UAT阶段站点而言,这是一个完美的方案。

多个地区

如果商人或开发人员担心某个地区的翻译差异,那么他可能也担心其他几个地区。 _checkTranslatedString()中的循环可简化此工作,该循环在最终从系统配置中检索的多个语言环境进行迭代。

要检查当前所选语言环境以外的翻译状态, EW_UntranslatedStrings_Helper_Data::isTranslated() 独立于当前商店配置执行评估,并辅以 getTranslator() 它为任何语言环境和商店ID提供了现成的翻译器模型。

EW_UntranslatedStrings_Helper_Data :: isTranslated()和getTranslator()

尽管它需要在翻译器模型上再重写一些方法,但是此功能使商店所有者或开发人员可以快速地一次对多个语言环境进行差距分析。

可配置性

尽管概念上很简单,但是有一些可选的调整可使此功能对于有效的字符串收集更加有用。

此模块添加了一个新的系统配置部分,该部分可在“高级-> Developer ->未翻译的字符串。

系统配置屏幕截图

这些选项提供了几个强大的可自定义选项。例如

  • 管理员翻译的空白可以忽略–对所有网站都启用,但有意省略了管理员字符串。
  • 匹配的翻译键/值对可以被记录或忽略。这可以适应以下两种情况之一:
    • 完整的翻译差异分析,记录代表但未实际翻译的字符串-对商人站点评估很有用。
    • 字符串表示差异分析,其中仅记录根本不表示的字符串–对于仅希望维护字符串列表且不关心实际翻译的模块开发人员而言非常有用。
  • 翻译代码排除模式可从日志中省略一些字符串。 Magento有许多本地翻译空白,某些模块的翻译状态可能与给定的商店无关。这使最终用户可以调整信噪比,以确保在评估未翻译的字符串时有效利用资源。
  • 批处理语言环境翻译差异分析。如前所述,这允许一次评估多个语言环境,从而大大减少了收集详尽的字符串列表所需的时间。

报告书

如果结果不易于访问和操作,那么即使是最强大的未翻译字符串检测也无济于事。

为此,“报告”中提供了两个新报告->管理员主菜单中未翻译的字符串。

  • 未翻译的字符串摘要:这概述了按区域设置和存储的翻译空白,并允许清除或截断未翻译的字符串。
  • Untranslated Strings Report: this provides a detailed view of 未翻译的字符串 and is filterable by locale, store, popularity, etc.

此外,未翻译的字符串报告允许将字符串导出到CSV文件。结合其过滤功能,这使商人或开发人员可以有效地管理字符串,并将其与所有重要上下文一起提供给翻译团队。

未翻译的字符串报告屏幕截图

保养

查看未翻译的字符串报告是一种“to-do list”,摘要视图使商人或开发人员可以整理剩余的未翻译字符串。特别是,与给定语言环境和存储区关联的字符串可以被截断(单独或整体),清理板岩并允许收集新的字符串集。

未翻译的字符串摘要屏幕截图

但是,更强大的是清除选​​项。在区域设置和存储上执行此选项(或通过大规模动作功能将其分组),模块将重新评估关联字符串的翻译状态,并删除根据系统配置设置现在视为已翻译的任何字符串。

在添加翻译以解决空白之后,此功能允许商家和开发人员剔除不再相关的字符串,从而确保未翻译的字符串列表始终可操作。

从这里去哪里(小酒馆)

尽管此模块对正式确定前者有很大帮助“hacky”过程中,总有改进的空间。需要记住的一些特殊事项:

  • 此模块仅帮助包装在翻译调用中的字符串-如果根本就不翻译字符串,则无法检测到它们。同样,不评估将要使用管理存储范围转换的字符串(例如产品属性,CMS块等)。
  • 该模块会引入少量到中等的性能开销,具体取决于要评估的语言环境数量和未翻译的字符串数量。幸运的是,只有在系统配置中启用了功能后,才能实现此目的。
  • 与Magento的嵌入式翻译工具一样,如果禁用翻译和块缓存,则该模块效果最佳。
  • 就像鞋匠的妻子一样,该模块本身也存在一些翻译空白…

从哪里获得

如果您想使用这个开源模块并迈出国际化的第一步,可以在Github上找到它:

//github.com/ericthehacker/magento-untranslatedstrings

如自述文件所述,可通过modman轻松安装。明智地使用它!

有兴趣建立一家国际电子商务商店或想要升级您拥有的商店吗?在我们的联系表上告诉我们!

3 评论s

  1. 麦可 说:

    什么’找到所有未翻译的字符串时继续执行的策略。最好我们’d希望将CSV保留在git中,然后将其转储到Magento层次结构中的某些语言环境目录中。但是我猜你’我需要知道主题和插件从哪里读取CSV语言环境文件吗?

    • J吱吱声 说:

      嗨,埃里克

      出色的工作!但是,我的管理网格‘untranslated strings’缺少一些布局。上面的github存储库中是否缺少布局xml文件?

      我已经看到了一些有助于翻译的模块,但是您的代码就是我想要的代码,我只希望布局在admin中工作,以便可以看到一些未翻译的字符串。

      如果我是正确的,但事情已经坏了,请修复,因为您的模块看起来很棒,我当然想要它!

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.

最近的帖子查看全部
2020年10月22日

Covid世界中的假日销售:应对挑战

毫无疑问,2020年是历史性的一年。火灾,全球大流行,暴动,老虎王等’只是冰山一角。如 […]
2020年8月7日

涡轮增压ZZPerformance的付费搜索

2020年7月30日

Intermix Beats M1 End of Life with 优雅的骆马Accelerator