php - 多语言 PHP 应用程序 : best practice?

标签 php performance model-view-controller localization internationalization

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

  • 在/app 文件夹中,我创建了一个/languages 文件夹,其中包含每种语言一个文件(english.php、spanish.php 等)
  • 每个文件都包含一系列在每个文件中具有相同名称的变量,其中包含要在 View 中呈现的文本
  • 然后在不同的 View 中回显这些变量
  • 当用户更改语言时更新“语言”cookie 变量
  • 在每个 View 的 Controller 中,我包含一个格式如下的语言文件:

包括 $_SERVER['DOCUMENT_ROOT'] 。 “/应用程序/语言/”。 $_COOKIE["语言"] . ".php";

对我来说听起来很整洁。您对这种方法有什么负面想法吗?

最佳答案

由于您使用的是 PHP 5.3.2,我绝对建议您查看 intl如果可以的话,延期。它充满了方便的函数和类来帮助国际化。例如,您可以使用以下代码片段从可用的语言中为访问者生成“最适合”的语言:

$langs = array('en', 'fr', 'de');
$preferences = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
$locale = Locale::lookup($langs, $preferences);

除了直接逐字替换之外,还有很多事情需要考虑。不同的语言有不同的格式约定。这个Zend article里面有很多信息这可能会有用。

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

老实说,我会避免将数据库用作存储,只是为了性能。

关于php - 多语言 PHP 应用程序 : best practice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6000541/

相关文章:

php - Laravel 数据表按关系列排序不起作用

php - 创建一个简单的时间戳并测试它是否已过期

php - 使用散列密码连接到 MySQL?

objective-c - 覆盖 Interface Builder 对象的实例化吗?

php - 如何在 Codeigniter 模型中打印存储过程查询?

javascript - JSON 数据结构在多大的数据量下会变得太慢?

php - 改善服务器响应时间

Azure 服务总线 一个订阅 VS 多个订阅

swift - 如何将值从 JSON 添加到模型,在我下面的代码中

php - Yii - 模型和 Controller 之间的界限 - 什么方法在哪里? MVC原则