做wordpress开发,无论是开发主题还是插件,我们都抛不开多语言化。这样其他国家的用户就能轻松本地化使用你的项目。如您所知,WordPress被翻译成多种语言,但是插件或主题经常包含一些未翻译成您自己的语言的字符串,这不仅令人沮丧,而且令人恼火。
那么为什么会这样呢? 可能是因为开发人员没有像国际化那样使用它们。 也就是说,使用WordPress中包含的特定功能可以轻松翻译所有内容。那么作为开发者,我们有责任也有义务把所有字符串都做多语言。
载入翻译文件
创建主题的第一步是加载翻译文件,有很多方法可以使用,但是最简单的方法是使用以下代码:
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