Php 网页国际化

Php 网页国际化,php,html,internationalization,Php,Html,Internationalization,在一个域中支持多种语言的标准实践是什么 在C++中,我们将创建一个资源文件,每个语言都被划分为各个部分,然后根据用户本地,我们将加载该部分,并将任何预翻译文本应用到菜单等 有类似的东西可以通过PHP用于HTML吗 是否可能有一个包含默认元素的xml文件,以及包含网站上常见文本的其他特定于语言的元素?公共领域中是否已经存在这样的“数据库” 我想我的网站首先检测用户所在国家,并有一个可选的“语言”按钮可用。然后,诸如“登录”、“主页”、“关于我们”之类的文本将被插入HTML中 请注意,我不想用谷歌翻

在一个域中支持多种语言的标准实践是什么

<>在C++中,我们将创建一个资源文件,每个语言都被划分为各个部分,然后根据用户本地,我们将加载该部分,并将任何预翻译文本应用到菜单等

有类似的东西可以通过PHP用于HTML吗

是否可能有一个包含默认元素的xml文件,以及包含网站上常见文本的其他特定于语言的元素?公共领域中是否已经存在这样的“数据库”

我想我的网站首先检测用户所在国家,并有一个可选的“语言”按钮可用。然后,诸如“登录”、“主页”、“关于我们”之类的文本将被插入HTML中


请注意,我不想用谷歌翻译。

PHP有一个使本地化更容易的功能,gettext。 你会找到一本关于它的不错的教程。

最常见的是格式。你可以用


问候

这是一个非常广泛的问题,但这里有一个简短的答案和一些供您进一步研究的链接:

  • 检测用户首选语言通常使用各种因素,包括和
  • 正如在其他答案中提到的,在PHP中使用
    gettext
    是一种常见的解决方案,但它用于存储翻译内容的格式不是XML。是PO文件,如下所示:

     msgid "Enter a comma separated list of user names."
     msgstr "Eine kommagetrennte Liste von Benutzernamen."
    
     msgid "Goodbye!"
     msgstr "Aufwiedersehen!"
    
  • PO文件被格式化为MO文件,供
    gettext
    使用:

    msgfmt-o myPHPApp.mo myPHPApp.po

  • 这些翻译文件放在如下目录结构下:

    /locale/xx\u xx/LC\u MESSAGES/MESSAGES.mo

  • 然后需要将此文件添加到PHP代码中:

    <?php
    
    // Set language to German
    putenv('LC_ALL=de_DE.utf8');
    setlocale(LC_ALL, 'de_DE.utf8');
    
    // Specify location of translation tables
    bindtextdomain("myPHPApp", "./locale");
    
    // Choose domain
    textdomain("myPHPApp");
    
    // Translation is looking for in ./locale/de_DE.utf8/LC_MESSAGES/myPHPApp.mo now
    
    // Print a test message
    echo gettext("Welcome to My PHP Application");
    
    // Or use the alias _() for gettext()
    echo _("Goodbye!");
    
    ?>
    
    
    

在尝试通过网络或其他方式确定国家/地区之前,请务必查看浏览器的语言设置。@感谢您的提示听起来很愚蠢,但是
setlocale()
让我感到困惑。一旦设置,它将在系统范围内应用,还是每次看到新语言时都需要它?我的意思是,每次单击页面时是否都需要语言检测和区域设置?实际上,这是一个很好的问题,因此它会更改
LC\u ALL
,这是一个环境变量。仅限于当前脚本,并且“将设置添加到服务器环境[该环境]仅在当前请求期间存在”。一旦用户检测到或选择了语言,就可以在
$\u会话
(如
$\u会话['locale'])
中存储和标识,这样在用户从一个页面导航到另一个页面时,语言选择将保持不变。感谢您的清除。碰巧,我正在构建我的站点的
Wordpress
已经内置了这种支持。现在,我必须学会如何使用它。我希望在执行时正确格式化字符串,而不是稍后再执行。