zoukankan      html  css  js  c++  java
  • wordpress设置本地化语言

    wordpress语言本地化

    在wordpress上很多插件不支持本地化语言如:中文,需要本地化,则需要制作本地化语言的po(用于编辑)和mo(用于机器识别)文件。可以没有*.po文件,但是不能没有*.mo。(插件一般会有*,pot文件,这是模板,在此基础上创建.po和.mo文件)。

    让主题支持语言包

    在主题的 functions.php 文件添加下面的代码:

    1 if ( ! function_exists( 'mywiki_setup' ) ) :
    2   function mywiki_setup() {
    3     load_theme_textdomain( 'mywiki', get_template_directory() . '/languages' );
    4   }
    5 endif; // mywiki_setup
    6 add_action( 'after_setup_theme', 'mywiki_setup' );

    该代码是通过 load_theme_textdomain() 函数来定义主题的语言路径,其中包含了两个参数,第一个“mywiki”是 textdomain ,第二个“get_template_directory() . ‘/languages’ ”则指明主题的语言存放路径为 当前主题的 languages 目录。只要将语言包存放在这个目录,就可以生效。

    规范编译要翻译的内容

    要让你的主题的文本内容支持自动翻译,需要你做好规范符合 WordPress API 的书写。WordPress常用下面几个函数来包裹需要翻译的内容:

    • __()

    • _e()

    • _x()

    • _ex()

    • _n()

    参考《WordPress翻译中 _()、e()、x、ex 和 _n 的用法及区别》,但是在实际使用中,我们还需要注意以上函数的末位参数 。也就是在上一步中,我们通过 load_theme_textdomain() 函数定义了第一个参数 $domain 为“mywiki”,这个参数都需要添加到 __() 等函数中作为末位参数,它是用来检索被翻译字符串的唯一标识符。例如:

    1 <span><?php esc_html_e('Tag','mywiki'); echo " : "?></span>

    如果去掉上面代码 esc_html_e的末位参数‘mywiki’,对应的 ‘Tag’ 的翻译内容就没办法正常加载。

    使用 POEdit 制作语言包

    POEdit 是一款非常有用的语言包制作软件,你可以在 POEdit 官方下载,安装好以后,就是中文界面了。下面就简单演示一下操作过程。

    新建编目

    点击 文件 > 新建编目,会出现如下界面:

     

    1.在”翻译属性”中按照下面的范例添加信息:

    需要注意的是,“语言”就是输出语言的简码,比如简体中文为 zh_CN (注意大小写),然后字符集一般选择 UTF-8,复数形式一般填 nplurals=2; plural=(n!=1); 即可。

    2.切换到“源路径”,由于前面我们创建的语言包路径为当前主题的 languages 目录,所以这里我们添加相对路径默认即可,如下图:

    3.添加“源关键字”,这个关键字就是要识别上面的几个翻译函数。

    需要注意的是,n、x 和 _ex 这三个函数要添加对应的参数才能实现其功能,建议对应的写法为

    • __

    • _e

    • _n:1,2

    • _x:1,2c

    • _ex:1,2c

    填写完以后,点击“确认”,就创建好了编目。

    导入需要翻译的字符串(没找到需要翻译的文本,选择从“代码更新”)

    点击“更新”按钮,如果你前面的步骤没有出错的话,就会自动搜索主题文件中需要翻译的条目,如下图:

    翻译字符串

    翻译完以后,将语言包保存到主题的语言目录 languages 中,这里特别要注意语言包的命名。它是使用 Gettext 代码来命名的,比如中文的 Gettext 语言代码为 zh ,国别代码为 CN,所以最终保存的简体中文语言包为 zh_CN.po,POEdit 会自动生成一个名为 zh_CN.mo 的文件(有些插件命名为:插件名_zh_CN.po)。

    po 和 mo 的最直接的区别在于:po文件是给人看的,也是可以直接通过 POEdit 编辑的,mo 文件则是给服务器识别的,是用来显示翻译内容所必需的。也就是说,你的主题语言目录中,可以没有po文件,但是必须有mo文件,否则服务器就没办法加载翻译!

    你可以通过下面的链接了解更多 Gettext 代码:

    让WordPress识别语言包

    通过上面的步骤,我们已经创建好了语言包,那么WordPress如何才能识别语言包?打开WordPress根目录下的 wp-config.php 文件,找到 WPLANG,如果这里填入的是 zh_CN ,说明你使用的是简体中文版本的 WordPress,那么主题也会自动调用简体中文语言包 zh_CN.mo 。(wordpress是中文版,没有WPLANG,则不需要设置。)

    /**
     * WordPress 语言设置,中文版本默认为中文。
     *
     * 本项设定能够让 WordPress 显示您需要的语言。
     * wp-content/languages 内应放置同名的 .mo 语言文件。
     * 要使用 WordPress 简体中文界面,只需填入 zh_CN。
     */
    define('WPLANG', 'zh_CN');

    小结

    在整个过程中,工作量最大的就是 “规范编译要翻译的内容”这个步骤,你必须有耐心,仔细地规范代码。熟悉 _()、e()、x、ex 和 _n 的不同用法是难点所在。

    本文参考源原文:https://www.wpdaxue.com/localize-wordpress-themes.html#%E4%BD%BF%E7%94%A8%20POEdit%20%E5%88%B6%E4%BD%9C%E8%AF%AD%E8%A8%80%E5%8C%85

     

  • 相关阅读:
    C#下水晶报表打印自定义纸张
    设计模式应用之一:控件清空
    自定义StyleCop规则
    1.redis安装 单机
    dubbo个人总结
    spring+redis 集群下的操作
    mybatis调用存储过程 无参、带有输入输出参数,输出游标类型的 存储
    spring framework核心框架体系结构
    oracle‘s package,function,proceture编译时无响应(解决)
    Oracle 在线重定义表分区
  • 原文地址:https://www.cnblogs.com/lfhappy/p/11479519.html
Copyright © 2011-2022 走看看