PHP本地化,最佳实践或方法?


11

我正在本地化我的PHP应用程序。在选择最佳方法来实现相同目标方面,我有两难选择。

方法1:当前正在将要本地化的单词存储在php文件的数组中

<?php

$values = array (
                        'welcome' => 'bienvenida'
                ); 

?>

我正在使用一个函数来根据需要提取并返回每个单词

方法2:是否应该使用存储相同字符串的txt文件?

<?php
$welcome = 'bienvenida'; 
?>

我的问题是,就开发相同的速度和精力而言,哪种方法更好,为什么?

编辑:我想知道其中两种方法响应速度更快,为什么呢?此外,对上述代码的任何改进将不胜感激!


2
您考虑过gettext吗?
sagarchalise 2012年

@sagarchalise我已经研究过了,但是我想建立自己的方法,即上述两种方法中的任何一种。因此,我想知道哪种方法工作更快,哪种方法更可靠!:)
sree 2012年

如果您想了解速度,只需执行一些测试用例即可。第一种或第二种方法的运行速度是1M倍?
Francisco Presencia 2014年

2
不要重新发明能正常工作的轮子。
gbjbaanb 2014年

Answers:


10

PHP具有很大的内置本地化可能性。最常见的方式似乎是gettext的 - 本教程显示如何使用它。

从PHP 5.3开始,还有intl提供了更多功能(例如,根据区域设置格式化数字,日期和货币)。


谢谢您的回答,但是,从上述内容中我可以知道哪种方法在速度和可靠性方面更好。
2012年

10

首先,这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开发人员。文件之间的同步也可能会有点麻烦。

另一个选择是使用函数类/方法来检索翻译。它的效率会降低-但是我认为您根本不需要那种微优化,但是附加的优点是您可以在检索翻译时应用自定义逻辑。例如,假设有一天您心爱的项目经理来找您,问您是否可以将所有这些文本都转换为大写。您不能拒绝这样做,因此当您需要对所有翻译应用/更改模式时,在两者之间使用某个功能可以为您带来很多帮助。

总结一下:

  1. 想一想翻译人员如何使用它,并为他们提供一个可工作的KISS解决方案。

  2. 考虑一下如何保持不同语言之间的同步。

  3. 考虑一下是否需要相同的翻译,比方说移动应用程序。跨平台解决方案可以节省您的时间。不要关闭JSON和普通数据库。

  4. 想一想在检索翻译时如何应用/更改逻辑。

  5. 忘了表现。次99.9%,你不会得到那么远做微优化像变量函数调用。我认为您作为开发人员/工作人员的时间比处理时间要贵。

更新#1

我的天哪,我发布了一个岁的问题的答案。为什么没人在这里说什么呢?对于这些情况,我们需要警报。

更新#2

右边说这是一个古老的问题。但是两年前有人问过!这里的一切都是误导!


你看起来像一个时光倒流的人回到时光:)虽然tnx的答案!
2014年

3
@sree是的!我将从2014年4月4日开始!如果您在2012年购买了一些Facebook或WhatsApp的股票,那么2014年就不需要编写PHP代码了!
Mahdi 2014年

1
罗夫同意!
2014年
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.