海量素材、源码、软件、教程、资源

实时更新,建站资源,各种源码、素材、软件、课程、资源,自由下载



  • 注册
  • 查看作者
  • WordPress 5.0+支持JavaScript i18n本地化翻译

    多年来,国际化(i18n)在PHP开发方面得到了很好的支持。对于PHP,WordPress已经提供了所有必要的工具,使其尽可能简单地将WordPress核心主题和插件本地化为任何语言。今天,我们为WordPress的JavaScript开发带来了相同的功能。

    如何实现

    注册脚本时,您可以添加 wp-i18n 作为依赖项,以允许您像在PHP中一样添加可翻译字符串:

    1. wp_register_script( ‘my-handle’, plugins_url( ‘/js/my-file.js’, MY_PLUGIN ), array( ‘wp-i18n’ ) );

    在脚本中,您将能够使用wp-i18n,如下所示:

    1. const { __, _x, _n, _nx } = wp.i18n;
    2. __( ‘__’, ‘my-domain’ );
    3. _x( ‘_x’, ‘_x_context’, ‘my-domain’ );
    4. _n( ‘_n_single’, ‘_n_plural’, number, ‘my-domain’ );
    5. _nx( ‘_nx_single’, ‘_nx_plural’, number, ‘_nx_context’, ‘my-domain’ );

    这些函数镜像它们的PHP对应字段,并可以以完全相同的方式使用。

    最后一步是告诉WordPress你的脚本包含翻译和使用哪个文本域,这是为了让WordPress有选择地只加载必要的翻译,以确保一切尽可能快:

    1. wp_set_script_translations( ‘my-handle’, ‘my-domain’ );

    还要确保在插件文件的标题中为您的翻译指定了文本域(Text Domain)。否则,translate.wordpress.org将不会提取翻译。

    高级用法

    现在,已经可以使用load_textdomain函数发送您自己的翻译并传递您自己的MO文件。这也可以使用 wp_set_script_translations 接受可选的第三个路径参数,该参数允许您告诉WordPress先查找其他地方的翻译:

    1. wp_set_script_translations( ‘my-handle’, ‘my-domain’, plugin_dir_path( MY_PLUGIN ) . ‘languages’ );

    如果通过,WordPress将首先检查格式为 ${domain}-${locale}-${handle}.json 的文件是否存在于给定路径中,如果是,则将其用作翻译源。或者,在默认为WordPress语言目录之前,它还将首先检查md5文件名的给定路径。

    如果您想发送自己的翻译文件,这些文件应该是 JED 1.x ( .json ) 格式。GlotPress能够与其他工具(如po2json)一起创建这些工具。理想情况下,这些文件应该只包含在各自的JS文件中出现的翻译。使用po2json,您可以生成以下文件:

    1. po2json translation.po translation.json -f jed

    这将生成以下格式的JSON:

    1. {
    2.   “translation-revision-date”“+0000”,
    3.   “generator”:                 “GlotPress/2.3.0-alpha”,
    4.   “domain”:                    “messages”,
    5.   “locale_data”:               {
    6.     “messages”: {
    7.       “”:                                                             {
    8.         “domain”:       “messages”,
    9.         “plural-forms”“n != 1”,
    10.         “lang”:         “en-gb”
    11.       },
    12.       “This file is too big. Files must be less than %d KB in size.”: [
    13.         “This file is too big. Files must be less than %d KB in size.”
    14.       ],
    15.       “%d Theme Update”:                                              [
    16.         “%d Theme Update”,
    17.         “%d Theme Updates”
    18.       ],
    19.       “password strength\u0004Medium”:                                [
    20.         “Medium”
    21.       ],
    22.       “taxonomy singular name\u0004Category”:                         [
    23.         “Category”
    24.       ],
    25.       “post type general name\u0004Pages”:                            [
    26.         “Pages”
    27.       ]
    28.     }
    29.   }
    30. }

    当您将插件或主题上传到 wordpress.org 时,所有JS文件将自动解析为已经为PHP文件完成的文件。任何检测到的翻译都将添加到translate.wordpress.org,以允许社区合作以确保WordPress、插件和主题以尽可能多的语言提供。

    为了解析所有JS文件,使用了用于wp-cli的i18n命令。这取代了makepot.php,不仅允许在JS文件中获取翻译,而且还允许审计字符串,仅解析特定文本域的字符串,甚至拾取makepot.php未检测到的一些字符串。这个命令是免费提供的,并且像makepot.php那样是开源的,并且建议任何使用makepot.php的人都可以转换到这个改进的替代品。

    基于这些解析的翻译,生成语言包。传统上这些用于仅包含PO和MO文件,每个区域设置一对。为了有选择地仅加载必要的翻译,无论是否使用它们,还要添加更多文件,每个JS文件的一个JSON文件包含每个语言环境的翻译。

    在解析JS文件以进行翻译时,我们不知道使用哪个句柄来注册该文件,因此我们必须使用备用机制来查找属于每个文件的翻译。为此,我们使用每个文件的相对路径的md5。即以 ${domain}-${locale} 名称格式来命名的 ${domain}-${locale}-${md5}.json 文件。

    当您为句柄设置脚本翻译时,WordPress会自动找出源文件的相对md5哈希值,检查是否存在翻译文件,如果存在,请确保在脚本运行之前将其加载到wp.i18n中。

  • 0
  • 0
  • 0
  • 150
  • 请登录之后再进行评论

    登录
    聊天
    关注 1
    • 今日签到
    • 累计签到

    暂没有数据

  • 安逸
  • tcotu
  • an
    an
  • 发布
  • 任务
  • 动态
  • 到底部
  • 单栏布局 侧栏位置:
    关闭窗口
    下载海报