我有30多种语言的多语言PHP系统。每个定义都使用define():
define('LN_loader_alt', 'Loading...');
有超过400种定义。
我进行了一些比较并创建了具有400多个常量的抽象类Lang,而这些常量当然不是define(),例如:
abstract class Lang{
const LN_loader_alt = 'Loading';
...
}
接下来我需要这两个文件并从类Lang中调用1 define和1 const。接下来我用webgrind进行分析,结果让我感到惊讶:
1)要求具有400个define()的文件占用执行脚本的70%以上 2)使用带常量的抽象类比define()
快得多我想与您分享此分析并问您:从" define()"重写我的系统是否最佳和最聪明?多语言到"抽象类,常数"多语言?或者也许有任何缺点?
答案 0 :(得分:3)
我的自发猜测是define()
是一个具有特定开销的运行时函数调用,但是在编译时会解析类定义及其常量。因此存在差异。
话虽如此,两种解决方案都很糟糕。 I18n是一个解决的问题,不需要再次重新发明。 i18n中最大的问题是工作流程,您需要支持该工作流程的工具。该工作流程是:
有些工具已经完成了所有这些工作,最成熟的工具是gettext。使用它(或类似的东西),不要使用常量。
请参阅:
答案 1 :(得分:0)
我认为理想的是使用帮助者并仅按需执行翻译。
示例:
<?php
// View.php
//...
echo translate('Hello World');
函数在当前语言字典中搜索相应的表达式,如果没有找到一个翻译,则只回显“Hello World”。
我认为你改写你的系统很好,因为400项不是那么多。