如何知道在当前的phtml文件中使用了哪些翻译csv文件


Answers:


3

我假设您的意思是$this->__('...')不使用显式助手的翻译。然后取决于模块的模块范围

这取决于多个因素:

  1. 用于渲染模板的块类。您应该能够从布局XML文件中确定它,但是某些块是通过编程方式创建的,在这种情况下,您必须在代码中进行搜索。如果幸运的话,块类将记录在模板本身中,如下所示:

    /** @var $this Mage_Catalog_Block_Product_List */

    或像这样:

    /** @see Mage_Catalog_Block_Product_List */

    范围是此类所属的模块(例如Mage_Catalog)。但是要小心类重写。如果扩展已重写块类,则作用域将更改为此扩展名。

  2. 如果module_name已设置属性(例如,通过布局XML),则该属性具有优先权。
  3. 最后,如果该块覆盖该getModuleName()方法,则使用从该方法返回的范围。

我们到了吗?

现在您知道了范围,您可以查找相应的CSV文件,该文件是在此模块的中定义的config.xml。它也可以不止一个,但是通常遵循的约定是每个模块以形式有一个文件Module_Name.csv

  1. 如果这个文件不包含字符串翻译,你发现它,除非你有一个translate.csv在你的主题,它覆盖翻译这个确切范围(如:"Module_Name::Foo","Foo")。

  2. 如果两者都不存在,请查找没有模块作用域前缀的转换translate.csv(如果存在)。

  3. 如果不存在,请搜索所有其他模块CSV文件。首先加载的模块中的那个将获胜(即,首先是核心模块,然后按字母顺序,遵循依赖性)。请注意,仅当不在开发人员模式下时才使用此后备。


如果您想确定页面上特定翻译来自哪个文件,我可以向您推荐免费扩展名TranslationHints免责声明:我写的)

在这里获取:https : //github.com/schmengler/TranslationHints

屏幕截图: 翻译提示


2

除非您进行单元测试,否则通常不会真正在意使用哪个翻译csv,因为它们在Magento开始翻译任何内容之前都已合并。

但是,如果您仍然想弄清楚,请首先使用布局xml文件来确定正在使用的块类。如果找到块类,则它将使用该模块的config.xml。如果在布局中未指定块类,则可能需要查找父块类和控制器。

要了解的主要内容是模板使用了其关联的块类的__转换函数,而块类使用了其模块Data.php帮助器类的__函数。


1
“通常情况下,您实际上并不在乎使用哪个翻译csv,因为它们在Magento开始翻译任何东西之前就已经合并了。” -除非对现有翻译包进行单元测试。如果在成为质量检查团队之前缺少英语,西班牙语或法语,我的模块通常会失败。
Luke A. Leber

1

听起来您想在添加翻译时保持井井有条。有这么多CSV文件要翻译,为什么要选择随机文件,为什么不将其添加到正确的CSV文件呢?

这是我正在处理的示例:假设您正在编辑客户帐户页面,并且已将通讯簿更改为我的地址。现在没有显示“ 我的地址”的法语翻译。

查找正确的CSV文件的方法是在网站的同一部分中搜索现有的翻译。该项目我的订单 / 的Mes Commandes是在网站的同一部分,这样我就可以运行搜索:

$ cd magento/app/
$ find . -iname '*.csv' | xargs grep -in --color 'Mes Commandes'
./locale/fr_FR/Mage_Sales.csv:73:"Back to My Orders","Retour à mes commandes"
./locale/fr_FR/Mage_Sales.csv:308:"My Orders","Mes commandes"
./locale/fr_FR/Mage_Sales.csv:309:"My Orders - Details","Mes commandes - Détails"
./locale/fr_FR/Mage_Oscommerce.csv:7:"Back to My Orders","Retour à mes commande "
./locale/fr_FR/Mage_Oscommerce.csv:51:"My Previous Orders","Mes commandes précédentes"
./locale/fr_FR/Mage_Customer.csv:215:"My Orders","Mes commandes"

因此,稍加猜测就可以看出,最好的修改文件是locale / fr_FR / Mage_Sales.csv。进行更改后,请不要忘记在“ 系统”>“缓存管理”下刷新“ 翻译 ” !

撇开:注意不区分大小写的选项;-inamefind-igrep。这些减少了您花费在狩猎上的精力。该--color选项未在此处反映出来,但是与您在此处看到的相比,输出将更具可读性。


0

模板中使用的__()转换方法位于文件/app/code/core/Mage/Core/Block/Abstract.php中,并使用模块名称来查找正确的转换。它以以下格式构建数组以用于翻译:

array(1) {
    [0]=> object(Mage_Core_Model_Translate_Expr)#161 (2) {
        ["_text":protected]=> string(18) "Orders and Returns"
        ["_module":protected]=> string(10) "Mage_Sales"
    }
}

如果要查看模板使用的模块名称,则可以调用一个函数:

 $this->getModuleName();

然后应该有一个与此字符串匹配的翻译文件。例如,对于我来说,在类别视图页面上,此函数将返回* Mage_Catalog *,然后从中找到翻译文件Mage_Catalog.csv


这个较大的Abstract.php文件的哪一行?
Vicky Dev
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.