该setlocale()功能未设置所需的语言(德语).
目标是输出月份名称.
到目前为止,这是我的测试代码:
<?php
date_default_timezone_set('Europe/Berlin');
setlocale(LC_ALL, 'de_DE.utf8');
// Or
setlocale(LC_ALL, 'de_DE@euro');
// Or
setlocale(LC_ALL, 'de_DE');
// Or
setlocale(LC_ALL, 'de');
// Or
setlocale(LC_ALL, 'ge');
echo strftime('%B');
Run Code Online (Sandbox Code Playgroud)
输出:
六月
代替
六月
有什么建议?
PHP 5.6版
我在python中有一个日期对象,我需要使用%a(工作日)和%b(月)代码在遗留系统的C语言环境中生成时间戳.但是我不想更改应用程序的语言环境,因为其他部分需要尊重用户的当前语言环境.有没有办法用某个语言环境调用strftime()?
我的设备语言是英文的,我的应用程序语言是意大利语.那么我将如何以编程方式获得语言设备语言和应用程序语言?
我记得几个月前使用gettext运行一些测试,以下代码完美运行:
putenv('LANG=l33t');
putenv('LANGUAGE=l33t');
putenv('LC_MESSAGES=l33t');
if (defined('LC_MESSAGES')) // available if PHP was compiled with libintl
{
setlocale(LC_MESSAGES, 'l33t');
}
else
{
setlocale(LC_ALL, 'l33t');
}
bindtextdomain('default', './locale'); // ./locale/l33t/LC_MESSAGES/default.mo
bind_textdomain_codeset('default', 'UTF-8');
textdomain('default');
echo _('Hello World!'); // h3110 w0r1d!
Run Code Online (Sandbox Code Playgroud)
这非常有效(如果我没记错的话,在Windows XP和CentOS下),这很好,因为我可以使用任意 "语言环境",而不必担心它们是否安装在系统上.然而,这似乎不再起作用,我想知道为什么......
我可以在各种语言环境中来回切换,只要setlocale()调用没有返回false(如果系统上的语言环境可用/已安装),翻译就会显示相关内容.
这并不完美(如果我可以将gettext指向任意翻译目录而不必测试是否存在语言环境,那将是很好的),但这是可以接受的.我稍后会再进行一些测试.
setlocale()总是返回false(即使使用LC_ALL而不是LC_MESSAGES),除非我使用一些有效的Windows语言环境,例如eng,deu或ptg- 在这种情况下,语言环境似乎正确设置但翻译仍未显示.我现在无法测试,因为我已经打开了数百个标签但是我认为第一次调用该脚本会产生正确的转换(重启Apache不会起作用).
我不确定这是否与PHP Bug#49349有关.我将测试这是几个小时.
有没有办法在不同的操作系统中可靠地使用gettext扩展(不是纯PHP实现,如php-gettext或Zend Translate Adapter)(可能有自定义语言环境 …
我想设置由<fmt:formatNumber>朋友使用的JSTL语言环境.我知道这是可能的<fmt:setLocale>,但我需要动态地(取决于从我的数据库中检索的用户数据)并且更喜欢Java代码 - 一个过滤器类,确切地说.
我认为将session属性设置javax.servlet.jsp.jstl.fmt.locale为我想要的Locale实例就可以了,但是它被忽略了:JSTL标签继续使用浏览器区域设置.
我确认没有相同名称的页面上下文或请求属性.
那么我做错了什么?或者我真的需要从JSP中做到这一点吗?
阅读JSTL代码,我发现了对a的引用,LocalizationContext并认为我需要设置一个.然而,我无法确切地弄清楚它如何适合图片或如何设置图片.
我想在php 5.5中使用php gettext扩展(在win2008服务器上,使用IIS7).我这样做:
<?php
$locale = "es";
if (isSet($_GET["locale"])) $locale = $_GET["locale"];
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("messages", "./locale");
textdomain("messages");
echo gettext("Hello world");
?>
Run Code Online (Sandbox Code Playgroud)
使用此文件夹结构:
locale/es/LC_MESSAGES/messages.mo
Run Code Online (Sandbox Code Playgroud)
但它总是只返回Hello世界而不是正确的翻译现在(基于我缺乏西班牙语技能)是在messages.po文件中:
msgid ""
msgstr ""
"Project-Id-Version: TestXlations\n"
"POT-Creation-Date: 2014-04-19 08:15-0500\n"
"PO-Revision-Date: 2014-04-19 09:18-0500\n"
"Language-Team: \n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.6.3\n"
"X-Poedit-Basepath: .\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-SearchPath-0: c:/dev\n"
msgid "Hello world"
msgstr "Hola World"
Run Code Online (Sandbox Code Playgroud)
这从cmd行和IIS失败.所以我看到gettext调用等并执行它但它没有读取翻译文件.我该如何进一步调试?即使删除翻译文件,我也会得到相同的行为.
我有一个数组,其中包含西班牙语的语言名称:
$lang["ko"] = "coreano"; //korean
$lang["ar"] = "árabe"; //arabic
$lang["es"] = "español"; //spanish
$lang["fr"] = "francés"; //french
Run Code Online (Sandbox Code Playgroud)
我需要对数组进行排序并维护索引关联,因此我将asort()与SORT_LOCALE_STRING一起使用
setlocale(LC_ALL,'es_ES.UTF-8'); //this is at the beginning (config file)
asort($lang,SORT_LOCALE_STRING);
print_r($lang);
Run Code Online (Sandbox Code Playgroud)
预期的输出将按以下顺序排列:
但是,这是我收到的:
我错过了什么吗?感谢您的反馈意见!(我的服务器使用PHP版本5.2.13)
当我的PHP脚本UTF-8使用非ascii字符进行编码运行时,某些PHP函数就像strtolower()不起作用.我可以使用mb_strtolower,但是此脚本可以在各种不同的平台和配置上运行,并且多字节字符串扩展可能不可用.我可以在使用之前检查函数是否存在,但是我的代码中遍布了字符串函数,而不是替换每个实例.
有人建议使用set_locale(LC_CTYPE, 'C'),他说这会导致字符串函数正常工作.这听起来不错,但我不想在不明白它正在做什么的情况下引入这种改变.我之前使用过set_locale来改变数字的格式,但我之前没有使用过这个LC_CTYPE标志,我真的不明白它的用途.这个值'C'意味着什么?谢谢!
我需要在线程中更改区域设置以正确解析带有strtod()的double,我正在使用setlocale()(C++).它是线程安全的吗?
更新:另一个问题.当我在main()函数中调用setlocale()时,它不会更深入地影响其他例程.为什么???有很多代码,所以编写块有问题.
问题已解决(见下文)
我已经在我的服务器上生成了语言环境,我已经确认它们存在(我的语言环境 - 下面提供),但是当我使用时:
setlocale(LC_TIME,'fr_FR');
or setlocale(LC_TIME,'fr_FR.utf8');
Run Code Online (Sandbox Code Playgroud)
它根本不起作用.
样品:
<?php
setlocale(LC_TIME,'fr_FR.utf8');
echo 'locale - '.setlocale(LC_TIME,'0');
echo ' : month - '.strftime('%B');
echo '<br />';
setlocale(LC_TIME,'fr_FR');
echo 'locale - '.setlocale(LC_TIME,'0');
echo ' : month - '.strftime('%B');
echo '<br />';
setlocale(LC_TIME,'fr-FR');
echo 'locale - '.setlocale(LC_TIME,'0');
echo ' : month - '.strftime('%B');
echo '<br />';
setlocale(LC_TIME,'fr');
echo 'locale - '.setlocale(LC_TIME,'0');
echo ' : month - '.strftime('%B');
echo '<br />';
setlocale(LC_TIME,'french');
echo 'locale - '.setlocale(LC_TIME,'0');
echo ' : month - '.strftime('%B');
echo '<br />'; …Run Code Online (Sandbox Code Playgroud)