在PHP中实现多语言的最佳方法
我有超过30种语言的多语言PHP系统。每个定义都使用define()进行: 有400多个定义 我做了一些比较,创建了包含400多个常量的抽象类Lang,这些常量代替了define(),例如:在PHP中实现多语言的最佳方法,php,multilingual,Php,Multilingual,我有超过30种语言的多语言PHP系统。每个定义都使用define()进行: 有400多个定义 我做了一些比较,创建了包含400多个常量的抽象类Lang,这些常量代替了define(),例如: abstract class Lang{ const LN_loader_alt = 'Loading'; ... } 接下来,我需要这两个文件,并从Lang类调用了1 define和1 const。接下来,我使用webgrind进行了分析,结果令我惊讶: 1) 需要使用400 defin
abstract class Lang{
const LN_loader_alt = 'Loading';
...
}
接下来,我需要这两个文件,并从Lang类调用了1 define和1 const。接下来,我使用webgrind进行了分析,结果令我惊讶:
1) 需要使用400 defines()的文件占用了执行脚本的70%以上时间
2) 使用带有常量的抽象类比define()快得多
我想与您分享这一分析,并问您:将我的系统从“define()”多语言重写为“带有常量的抽象类”多语言是否是最优和明智的?或者它有什么缺点?我认为理想的做法是使用助手,只在需要时进行翻译 例如:
<?php
// View.php
//...
echo translate('Hello World');
我认为理想的做法是使用助手,仅在需要时执行翻译
例如:
<?php
// View.php
//...
echo translate('Hello World');
我认为理想的做法是使用助手,仅在需要时执行翻译
例如:
<?php
// View.php
//...
echo translate('Hello World');
我认为理想的做法是使用助手,仅在需要时执行翻译
例如:
<?php
// View.php
//...
echo translate('Hello World');
我的猜测是,define()
是一个具有一定开销的运行时函数调用,但类定义及其常量是在编译时解析的。因此不同
尽管如此,这两种解决方案都很糟糕。这是一个已经解决的问题,不需要再重新设计。i18n中最大的问题是工作流,您需要支持该工作流的工具。该工作流程是:
- 源中可翻译字符串的标记
- 将所述字符串提取为源代码中性格式
- 将这些字符串翻译成各种语言
- 以上所有内容都是异步的,并行的更改由不同的人完成,并保持所有语言之间的同步
有一些工具已经完成了这一切,最成熟的工具是gettext。使用它(或类似的东西),不要使用常量
见:
我的猜测是,define()
是一个具有一定开销的运行时函数调用,但类定义及其常量是在编译时解析的。因此不同
尽管如此,这两种解决方案都很糟糕。这是一个已经解决的问题,不需要再重新设计。i18n中最大的问题是工作流,您需要支持该工作流的工具。该工作流程是:
- 源中可翻译字符串的标记
- 将所述字符串提取为源代码中性格式
- 将这些字符串翻译成各种语言
- 以上所有内容都是异步的,并行的更改由不同的人完成,并保持所有语言之间的同步
有一些工具已经完成了这一切,最成熟的工具是gettext。使用它(或类似的东西),不要使用常量
见:
我的猜测是,define()
是一个具有一定开销的运行时函数调用,但类定义及其常量是在编译时解析的。因此不同
尽管如此,这两种解决方案都很糟糕。这是一个已经解决的问题,不需要再重新设计。i18n中最大的问题是工作流,您需要支持该工作流的工具。该工作流程是:
- 源中可翻译字符串的标记
- 将所述字符串提取为源代码中性格式
- 将这些字符串翻译成各种语言
- 以上所有内容都是异步的,并行的更改由不同的人完成,并保持所有语言之间的同步
有一些工具已经完成了这一切,最成熟的工具是gettext。使用它(或类似的东西),不要使用常量
见:
我的猜测是,define()
是一个具有一定开销的运行时函数调用,但类定义及其常量是在编译时解析的。因此不同
尽管如此,这两种解决方案都很糟糕。这是一个已经解决的问题,不需要再重新设计。i18n中最大的问题是工作流,您需要支持该工作流的工具。该工作流程是:
- 源中可翻译字符串的标记
- 将所述字符串提取为源代码中性格式
- 将这些字符串翻译成各种语言
- 以上所有内容都是异步的,并行的更改由不同的人完成,并保持所有语言之间的同步
有一些工具已经完成了这一切,最成熟的工具是gettext。使用它(或类似的东西),不要使用常量
见:
当时我选择了gettext,直到现在我已经在许多项目中使用了它。这是一个正确的选择。当时我选择了gettext,直到现在我已经在许多项目中使用它。这是一个正确的选择。当时我选择了gettext,直到现在我已经在许多项目中使用它。这是一个正确的选择。当时我选择了gettext,直到现在我已经在许多项目中使用它。这是正确的选择。