强制gettext读取默认语言

时间:2015-04-13 13:05:40

标签: wordpress internationalization gettext

我的WP插件中有一个显示日期的循环。

为此,我这样做:

for ($day = 0; $day <= 4; $day++) {
   __('day'.$day,'textdomain')
}

在我的pot文件中,我翻译了day0,day1等。

除了默认语言(英语)之外,这种方式完全正常。英语只是显示“day0”。

帮助!

1 个答案:

答案 0 :(得分:2)

您所看到的行为已被记录并且是预期的,即翻译是键入本机语言,而不是任意字符串。至少有四种方法来解决这三种正确的方式和有趣的方式。以下是:

由于你没有指定你所写的语言,我将假设为perl。

正确的方式#1

my @day=(
__x('Sun', 'textdomain'),
__x('Mon', 'textdomain'),
__x('Tue', 'textdomain'),
__x('Wed', 'textdomain'),
__x('Thu', 'textdomain'),
__x('Fri', 'textdomain'),
__x('Sat', 'textdomain')
)
for ($day = 0; $day <= 4; $day++) {
   __($day[$day],'textdomain')
}

正确的方式#2

my @day=(
__('Sun', 'textdomain'),
__('Mon', 'textdomain'),
__('Tue', 'textdomain'),
__('Wed', 'textdomain'),
__('Thu', 'textdomain'),
__('Fri', 'textdomain'),
__('Sat', 'textdomain')
)
for ($day = 0; $day <= 4; $day++) {
   $day[$day]
}

这两种方法都需要更新所有翻译。

正确的方式#3

使用已本地化的日期函数。

有趣的方式

if(__('day0', 'textdomain')eq'day0'){
    $ENV{LC_ALL}='en_US';
    setlocale(LC_ALL, 'en_US');
}
for ($day = 0; $day <= 4; $day++) {
   __('day.'$day,'textdomain')
}