我希望得到您对我在PHP MVC Web应用程序上实现多语言支持的方式的反馈。我就这样做了:
包括$ _SERVER ['DOCUMENT_ROOT']。 “/ app / languages /”。 $ _COOKIE [“语言”]。 “.PHP”;
听起来很整洁。你对这种方法有任何负面想法吗?
答案 0 :(得分:4)
当你使用PHP 5.3.2时,如果可以的话,我绝对建议你查看intl扩展名。它充满了方便的功能和类,以协助i18n。例如,您可以使用以下代码段为您的访问者生成“最适合”的语言:
$langs = array('en', 'fr', 'de');
$preferences = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
$locale = Locale::lookup($langs, $preferences);
除了直接的逐字逐句替换外,还有更多要思考的问题。不同的语言有不同的格式约定。这个Zend article中有很多可能有用的信息。
我的代码使用XSL进行模板化,因此在翻译时我使用XML语言文件和XPath查询,以便语言可以直接理解语言文件,但PHP也可以使用{{3}格式化字符串}。
我会避免将数据库用作商店,说实话,只是为了提高性能。
答案 1 :(得分:1)
您还可以解析接受语言标题,以帮助确定做什么。
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
我看起来像那样。这不是万无一失的,但它可以自动设置适当的cookie。
答案 2 :(得分:1)
只是一些想法
答案 3 :(得分:1)
由于您只是在语言文件中包含数据,我建议您使用GetText。它是用于国际化的标准GetText C ++的一个端口,有很多工具可以构建语言文件,并且由于运行时编译的文件而非常快。
你基本上用一种INI文件格式构建你的数据文件(例如 fr.po , en.po )并将这些文件编译成专门的.mo文件( fr.mo , en.mo ,...)并简单地用静态函数_()
回显国际化字符串,例如echo _("Hello World");
将生成德语输出Hallo Welt
或(如果.mo文件中没有可用的转换)默认字符串Hello World
。
至于选择正确的语言:这取决于您的要求。正如已经指出的那样,您应该使用浏览器的Accept-language
- 标题,并且可能希望通过会话信息添加对覆盖的支持。