首先,这gettext
是一个不错的选择,因此,如果一开始听起来不容易,请不要忽略它;但是,还有其他选择也很有用。在解释之前,让我们先看看您的建议:
在array
执行此操作的过程中,您有一个非常简单的解决方案。好处是,您可以将翻译存储在数据存储中,然后将其作为数组加载到PHP脚本中,仅此而已。但是,如果您想将数组静态存储在PHP文件中,那么对其进行编辑需要a)PHP程序员或熟悉PHP语法的有经验的用户,只需编辑文件b)甚至在四到五个不同语言文件之间进行同步可能会很烦人并且容易出错。
您需要在这里考虑的是:以后如何在语言文件中添加新元素?我可以交给翻译者还是应该有PHP程序员?
您variable
这样做的方法不切实际。为什么?我假设您至少在您的应用程序中将具有几个功能,对吗?然后,您需要在调用函数时传递所有这些变量,或者将global
它们传递给它们。如果您认为自己将有十多个这样的变量,那么我强烈建议您不要这样做。也可能存在名称冲突-您可能会覆盖具有相同名称的另一个变量的值,但是可以通过添加前缀(即使是简单的下划线来解决),因此您将拥有$_welcome
例如。无论如何,如果我是你,我什至不会考虑。不要这样
一种好的方法是用前缀定义常量。因此,例如,在您中en.lang.php
您将拥有,define( 'LABEL_WELCOME', 'Welcome' );
而在您中no.lang.php
您将拥有define ( 'LABEL_WELCOME', 'Velkommen' );
。使用常量而不是变量的好处是它们在脚本中始终可用。因此,您无需注入或全局化它们。与数组和变量相比,由于PHP处理它们的方式,它们更快—它们占用的内存更少。缺点是您无法将它们传递给翻译器,因此再次需要PHP开发人员。文件之间的同步也可能会有点麻烦。
另一个选择是使用函数或类/方法来检索翻译。它的效率会降低-但是我认为您根本不需要那种微优化,但是附加的优点是您可以在检索翻译时应用自定义逻辑。例如,假设有一天您心爱的项目经理来找您,问您是否可以将所有这些文本都转换为大写。您不能拒绝这样做,因此当您需要对所有翻译应用/更改模式时,在两者之间使用某个功能可以为您带来很多帮助。
总结一下:
想一想翻译人员如何使用它,并为他们提供一个可工作的KISS解决方案。
考虑一下如何保持不同语言之间的同步。
考虑一下是否需要相同的翻译,比方说移动应用程序。跨平台解决方案可以节省您的时间。不要关闭JSON和普通数据库。
想一想在检索翻译时如何应用/更改逻辑。
忘了表现。次99.9%,你不会得到那么远做微优化像恒与变量与函数调用。我认为您作为开发人员/工作人员的时间比处理时间要贵。
更新#1
我的天哪,我发布了一个岁的问题的答案。为什么没人在这里说什么呢?对于这些情况,我们需要警报。
更新#2
右边说这是一个古老的问题。但是两年前有人问过!这里的一切都是误导!