Php 把我们变成我们

Php 把我们变成我们,php,html,apache,lang,Php,Html,Apache,Lang,我正在编写一个支持多种语言的PHP应用程序 在PHP中设置语言环境时,我需要提供一个在中定义的值,我认为是,/,根据 使用此区域设置描述HTML lang属性时,验证失败,因为它未格式化为。这种语言的RFC 5646值实际上是en-US(注意使用连字符而不是下划线) 如上所述,在PHP的setlocale函数中使用此值会产生以下输出: string(1) "C" 我不知道它为什么返回C值,但我认为这是因为提供的区域设置格式不正确。C是原始的服务器默认值,这是(感谢@Cheery的引用) 所以,

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

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

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

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

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

所以,我想知道我应该怎么做。在输出lang属性之前,我可以使用PHP的str_replace函数将
-
切换到
-
,如下所示:

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


您可以使用“setlocale”设置本地语言代码

他们尝试使用不同的德语语言环境名称的示例:

<?php
/* Set locale to Dutch */
setlocale(LC_ALL, 'nld_nld');

/* Output: vrijdag 22 december 1978 */
echo strftime("%A %d %B %Y", mktime(0, 0, 0, 12, 22, 1978));

/* try different possible locale names for german as of PHP 4.3.0 */
$loc_de = setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'deu_deu');
echo "Preferred locale for german on this system is '$loc_de'";
?>

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

你有_DE@euro'这不是有效的HTML语言代码


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

C
是系统的区域设置之一,比如说<代码>C#回退,ASCII编码,与POSIX相同
谢谢。我知道我可以使用PHP的setlocale设置语言环境。我遇到的问题是在HTMLlang属性中使用它,因为它使用不同的格式。我想知道是否有人知道这两种格式之间的差异,从而知道简单的字符串替换(''u'到'-')是否就足够了。我没有注意到其他格式不会映射到HTML规范。我可能应该维护一个不同支持类型的字典,并根据需要引用它们。感谢您的回复!
<?php
/* Set locale to Dutch */
setlocale(LC_ALL, 'nld_nld');

/* Output: vrijdag 22 december 1978 */
echo strftime("%A %d %B %Y", mktime(0, 0, 0, 12, 22, 1978));

/* try different possible locale names for german as of PHP 4.3.0 */
$loc_de = setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'deu_deu');
echo "Preferred locale for german on this system is '$loc_de'";
?>
$loc_de = setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge');