如何多语言国际化WordPress项目

做wordpress开发,无论是开发主题还是插件,我们都抛不开多语言化。这样其他国家的用户就能轻松本地化使用你的项目。如您所知,WordPress被翻译成多种语言,但是插件或主题经常包含一些未翻译成您自己的语言的字符串,这不仅令人沮丧,而且令人恼火。

那么为什么会这样呢? 可能是因为开发人员没有像国际化那样使用它们。 也就是说,使用WordPress中包含的特定功能可以轻松翻译所有内容。那么作为开发者,我们有责任也有义务把所有字符串都做多语言。

Wordpress Internationalization

载入翻译文件

创建主题的第一步是加载翻译文件,有很多方法可以使用,但是最简单的方法是使用以下代码:

add_action('after_setup_theme', 'my_theme_setup');
function my_theme_setup(){
    load_theme_textdomain('my_theme', get_template_directory() . '/languages');
}

使用插件时,几乎是一样的:

function myplugin_init() {
  load_plugin_textdomain( 'my-plugin', false, dirname( plugin_basename( __FILE__ ) ) ); 
}
add_action('plugins_loaded', 'myplugin_init');

现在,文件已加载到“languages”文件夹下,您可以使用POedit免费软件创建.pot或.po文件。

翻译字符串

当您需要字符串可翻译时,您需要将字符串包含包含到函数中。 最常用的函数是_e()和__()。 以下是使用__()的示例:

// Code one
echo '<p>' . __( 'This is the string content', 'textdomain' ) . '</p>';
// Code two
echo '<p>';
_e( 'This is the string content', 'textdomain' );
echo '</p>';

翻译包含变量的字符串

但是有时您的字符串可能包含变量。 使用_e()和__()不起作用。 因此,在这种情况下,您需要使用printf()和sprintf()函数。 如前所述,printf()在sprintf()存储字符串时回显该字符串。

// Code one
echo '<p>';
printf( __( 'I bought %d books.' , 'textdomain'), $_books_count );
echo '</p>';
//Code two
echo '<p>';
echo sprintf( __( 'I bought %d books.' , 'textdomain'), $_books_count );
echo '</p>';

翻译具有多个变量的字符串

如果字符串包含多个变量,请使用以下代码:

printf( __( 'I bought %1$s books, and %2$s tomatoes.' , 'textdomain'  ), $books_count, $tomatoes_count );

翻译中如何处理复数

在上面的示例中,i bought books and tomatoes。 但是我只买了一本书吗? 该代码将输出“ 1 books”,这是不正确的。 因此,要处理复数,还有另一个函数称为_n()。 使用方法如下:

printf( _n( 'i bought %d book.', 'i bought %d books.' , 'textdomain' , $books_count ), $books_count );

翻译Contexts语境

有时,一个单词因其上下文而可能具有不同的含义。 然后,您可以使用这些函数_x()和_ex()。 第二个回显该字符串,而第一个仅存储其内容。 这些函数还有第二个参数来解释其上下文。 例如,如果一个单词在页面中使用了两次,但是在内容和侧边栏中具有不同的含义,那么您的代码将看起来像这样:

// In the content
echo _x( 'apparent', 'in_content', 'textdomain' );
// In the sidebar
echo _x( 'apparent', 'in_sidebar', 'textdomain' );

JavaScript国际化

最后,当需要在javascript文件中翻译字符串时,可以使用通过wp_localize_script()来定义的方法。

// In your PHP file:
wp_enqueue_script( 'script-handle', … );
wp_localize_script( 'script-handle', 'objectL10n', array(
    'speed'  => $distance / $time,
    'submit' => __( 'Submit', 'my-plugin-domain' ),
) );
// in the javascript file:
$('#submit').val(objectL10n.submit);
$('#speed').val('{speed} km/h'.replace('{speed}', objectL10n.speed));

以上方法主要是给开发者用的,这样基本能确保你的项目多语言国际化。

本文已在Ie主题99839发布

文章来源:https://ietheme.com/how-to-internationalize-wordpress.html


撰写评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

加入我们

注册完成!

密码重置

请输入您的邮箱地址。 您将收到一个链接来创建新密码。

检查你的邮件中的确认链接。