php - 将 en_US 转换为 en-US

标签 php html apache lang

我正在编写一个支持多种语言的 PHP 应用程序。

在 PHP 中设置语言环境时,我需要提供一个我认为是 RFC 1766 中定义的值/ISO 639 , 根据 setlocale documentation .

setlocale( LC_ALL, 'en_US' );
var_dump( setlocale( LC_MESSAGES, '0' ) );
// string(5) "en_US"

当使用此语言环境描述 HTML lang 属性时,验证失败,因为它未格式化为 RFC 5646 .这种语言的 RFC 5646 值实际上是 en-US(注意使用连字符而不是下划线)。

如上所述,在 PHP 的 setlocale 函数中使用此值会产生以下输出:

string(1) "C"

我不知道为什么它会返回 C 值,但我认为这是因为提供的区域设置格式不正确。 C 是原始服务器默认值,这是described as ASCII (感谢@Cheery 的引用)。

所以,我想知道我应该怎么做。在输出 lang 属性之前,我可以可行地使用 PHP 的 str_replace 函数将 - 切换为 _ ,就像这样:

<?php setlocale( 'en_US' ); ?>
<!doctype html>
<html lang="<?= str_replace( '_', '-', setlocale(LC_MESSAGES, '0') ); ?>">
...

但是,我担心这两种语言规范之间可能存在其他差异,可能会在未来产生意想不到的问题。如果是这样,是否有更好的方法来翻译 PHP 中已有的语言代码,或者可以使用的翻译类?

额外的问题,为什么我的服务器默认区域设置为 C 值?

最佳答案

您需要记住,setLocal 接受多种类型的“区域设置”名称,例如名称和混合名称,例如(来自 php 文档):

$loc_de = setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge');

您的“de_DE@euro”不是有效的 HTML 语言代码。

因此,首先,您需要在尝试转换之前确保其格式为 lang_region

关于php - 将 en_US 转换为 en-US,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27048344/

相关文章:

php - 是否有任何可用于 php 的小型 cms

javascript - 如果单击按钮则前进或后退进度轮播否则定时前进

linux - 协作安装的问题

javascript - 语法错误代码笔全 View

linux - Apache Pig 进程在 Putty session 超时后被终止

php - 保护文件不被直接访问

php - WordPress 重定向到静态index.html 页面,同时保持子页面完整?

php - 使用 PHP 代码自动化 git pull

javascript - 如何将文本文件处理为 Google map 航点 + 信息文本

html - 按钮 Accordion (CSS)