Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多语言PHP应用程序:最佳实践?_Php_Performance_Model View Controller_Localization_Internationalization - Fatal编程技术网

多语言PHP应用程序:最佳实践?

多语言PHP应用程序:最佳实践?,php,performance,model-view-controller,localization,internationalization,Php,Performance,Model View Controller,Localization,Internationalization,我希望得到您对我在PHP MVC web应用程序上实现多语言支持的方式的反馈。我就是这样做的: 在/app文件夹中,我创建了一个/languages文件夹,其中每种语言(english.php、西班牙语.php等)包含一个文件 每个文件都包含一系列在每个文件中具有相同名称的变量,其中包含要在视图中呈现的文本 这些变量随后会在不同的视图中重复出现 “语言”cookie变量在用户更改语言时更新 在每个视图的控制器中,我包括一个以下格式的语言文件: 包括$\u服务器['DOCUMENT\u ROO

我希望得到您对我在PHP MVC web应用程序上实现多语言支持的方式的反馈。我就是这样做的:

  • 在/app文件夹中,我创建了一个/languages文件夹,其中每种语言(english.php、西班牙语.php等)包含一个文件
  • 每个文件都包含一系列在每个文件中具有相同名称的变量,其中包含要在视图中呈现的文本
  • 这些变量随后会在不同的视图中重复出现
  • “语言”cookie变量在用户更改语言时更新
  • 在每个视图的控制器中,我包括一个以下格式的语言文件:
包括$\u服务器['DOCUMENT\u ROOT']。“/app/languages/”$_COOKIE[“语言”]。“.php”


对我来说听起来很整洁。您对此方法是否有任何负面想法?

您还可以解析accept language标头以帮助决定该做什么

Accept-Language:en-GB,en-US;q=0.8,en;q=0.6

我的看起来像那样。它不是傻瓜式的,但它可能是一种自动设置适当cookie的方法。

因为您使用的是PHP5.3.2,如果可以的话,我绝对建议您检查扩展。它充满了方便的函数和类来帮助i18n。例如,您可以使用以下代码段从现有的语言中为访问者生成“最适合”的语言:

$langs = array('en', 'fr', 'de');
$preferences = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
$locale = Locale::lookup($langs, $preferences);
除了逐字逐句的替换,还有很多事情需要考虑。不同的语言有不同的格式约定。这里面有很多信息可能是有用的

我的代码非常个人化地使用XSL进行模板化,当涉及到翻译时,我使用XML语言文件和XPath查询,以便模板可以直接理解语言文件,但PHP也可以使用XSL对字符串进行格式化

老实说,为了提高性能,我不会将数据库用作存储。

只是一些想法

  • 如果每种语言有一个文件,并且站点有多个页面,那么您很快就会忘记哪个标签在哪个页面上包含哪个文本
  • 如何确保在创建新标记时,所有其他语言中都有标记,并且这些标记已被翻译
  • 如何处理不同语言的格式设置?浪漫主义语言往往比英语长30%左右,因此可能会影响页面流量
  • 同样的道理,希伯来语是从右向左(RTL)而不是像欧洲语言那样的LTR呢?或者中国人和日本人的线流可能不同,没有空格
  • 你是怎么翻译的?导出文件并再次导入?您是否打算使用xliff或TMX或gettext的一个版本来使翻译人员的生活更轻松,翻译成本更低
  • 你如何保证翻译的质量

由于语言文件中只有数据,我建议使用。它是C++国际化的标准GETTEXT的一个端口,有大量的工具来构建语言文件,并且由于运行时编译文件的速度非常快。p> 基本上,您可以使用一种INI文件格式构建数据文件(例如fr.po、en.po),并将这些文件编译成专门的.mo文件(fr.mo、en.mo等),只需使用静态函数
)回显国际化字符串,例如
回显(“Hello World”)
将生成德语输出
Hallo-Welt
,或者(如果.mo文件中没有翻译可用)默认字符串
Hello-World


至于选择正确的语言:这取决于你的要求。如前所述,您应该使用浏览器的
Accept language
-标题,并可能希望添加对通过会话信息覆盖的支持。

未经验证,请勿使用cookie值,客户端可能会更改cookie!有几件事,你可能想让语言成为URL的一部分。这样机器人就可以为你的网站建立索引。此外,您可能希望将内容移动到DB中,而不是将其放在文件中,因为这样您就更容易添加新语言好的点,谢谢您指出了验证点!我在考虑把它移到DB。我最终认为,从性能角度看,浏览文件可能会更好。。。但实际上可能更难维持。如果我使用DB选项,我会考虑通过创建一个语言字段来设计它(我使用的是mySQL),然后每页创建一个字段(index.php、home.php等),每个字段包含一个在每页上呈现的不同文本数组。你认为呢?你使用的是什么版本的PHP?谢谢,同意这是确定相关默认语言的好方法,但你也希望让用户在应用程序中更改他们的语言(想想那些不使用自己的计算机进行ex的旅行者).准确地说–这是一种猜测默认值的简单方法,但精确度相当高。这离万无一失还有很长一段路要走,大多数人无论使用何种语言都不会更改默认值。我对它了解不多,但它肯定会根据您的操作系统安装语言或浏览器的版本而更改吗?德语Win 7安装是否会改变这一点以在所有浏览器中使用德语?信息量非常丰富。看起来真的很有趣,谢谢!