【问题标题】:How to translate a WordPress plugin in any language?如何翻译任何语言的 WordPress 插件?
【发布时间】:2012-09-20 06:03:18
【问题描述】:

我已经完成了我的插件,现在想为我的用户提供多语言功能。我仔细研究了一下,但很难实现。

我见过WordPress translation,但需要基本步骤来遵循和翻译我的插件。

这些我都做了

  1. 已下载 POEdit。
  2. 在插件目录中创建了“french.po”文件
  3. 符合 'french.po' -> 'french.mo'

需要做的

  1. 如何在po文件中定义msgid & msgstr
  2. 如何在插件中加载 po/mo 文件?
  3. 如何通过 po/mo 文件替换标签/文本?
  4. 如何使用 __e() & ___() 替换插件页面中的“msgstr”?

【问题讨论】:

    标签: wordpress language-translation


    【解决方案1】:

    使用名为Codestyling Localization 的插件,您无需使用 POEdit。

    我将向您展示一个使用“localizationsample”作为文本域的示例。在这种情况下,语言文件位于 /lang/ 目录中。它们不需要是您实际插件中的那些名称;它们只是示例。

    步骤

    1. 在插件注释标题中添加这些行,以便 Codestyling Localization 识别。

      文本域:本地化示例
      域路径:/lang

    2. 在您的插件目录中创建一个名为lang 的目录。

    3. 安装并激活Codestyling Localization 插件。

    4. 转到Tools -> Localization

    5. 找到您的插件并点击Add New Language

    6. 在单选按钮中选择要本地化的语言(国家/地区)并按Create po-file 此时确保在 lang 文件夹中创建了一个 .po 文件。

    7. Rescan -> scan now 这是推荐的,因为在我的系统中如果不这样做,插件总是会显示错误消息“并非所有项目都使用相同的文本域”。

    8. Edit 这将为您带来另一个页面,其中列出了可翻译的消息。这些消息是传递给插件代码中的函数__()_e() 的消息。

    9. Copy 旁边的表格中单击Edit,然后您将看到一个对话框,用于为每条消息键入翻译。完成翻译。

    10. generate mo-file 此时,您应该会看到在lang 文件夹中创建了一个.mo 文件。

    11. 更改您在 wp-config.php 中指定的语言环境以反映翻译。默认为define('WPLANG', '');

    示例插件

    /*  
        Plugin Name: Sample Localization
        Description: Demonstrates how to localize your plugin.
        Text Domain: localizationsample
        Domain Path: /lang
    */
    
    // Localization
    add_action('init', 'localizationsample_init');
    function localizationsample_init() {
        $path = dirname(plugin_basename( __FILE__ )) . '/lang/';
        $loaded = load_plugin_textdomain( 'localizationsample', false, $path);
        if ($_GET['page'] == basename(__FILE__) && !$loaded) {          
            echo '<div class="error">Sample Localization: ' . __('Could not load the localization file: ' . $path, 'localizationsample') . '</div>';
            return;
        } 
    } 
    
    // Add Admin Menu 
    add_action('admin_menu','localizationsample_menu');
    function localizationsample_menu() { 
        add_options_page(
            'Localization Demo',            // admin page title
            'Localization Demo',            // menu item name
            'manage_options',               // access privilege
            basename(__FILE__),                         // page slug for the option page
            'localization_demo_adminpanel'  // call-back function name
        );
    }
    function localization_demo_adminpanel() {
    
        echo '<div class="wrap"><div id="icon-themes" class="icon32"></div>';
        echo '<h2>' . __('Hi there!', 'localizationsample') . '</h2>'; 
        echo '<p>';
        _e('Hello world!', 'localizationsample');
        echo '</p>';
        echo '</div>'; // end of wrap
    }
    

    【讨论】:

    • WebTechGlobal 现在正在使用这种方法并且效果很好。我们非常喜欢使用 Wordpress 进行开发本身。这是一个很好的例子,说明如果使用 Wordpress,我们应该在应用程序之前搜索插件。
    • 据我所知,Codestyling Localization 插件现在已经死了。
    • 404 - 哎呀!我们找不到那个插件。
    • 关于插件链接 - 此插件已关闭,不再可供下载。
    【解决方案2】:

    (此示例是对 DEUTCH 的翻译。您可以将习惯更改为您想要的名称。)

    在每个插件头中,都有一个唯一的名称。 (例如:

    /*
    Plugin Name: my-pluginname
    .......
    */
    

    然后,在该插件的文件夹中,创建一个文件夹“languages”;

    然后,在您的插件 .php 文件中(在顶部的某处),插入初始化代码:

    class load_language 
    {
        public function __construct()
        {
        add_action('init', array($this, 'load_my_transl'));
        }
    
         public function load_my_transl()
        {
            load_plugin_textdomain('my-pluginname', FALSE, dirname(plugin_basename(__FILE__)).'/languages/');
        }
    }
    
    $zzzz = new load_language;
    

    然后打开任何文本编辑器,然后像此代码一样插入(注意,我们只添加两个示例消息,“hello”和“bye”,因此,您可以使用类似的行添加任意数量的消息) .

    # English translations for PACKAGE package.
    # Copyright (C) 2012 THE PACKAGE'S COPYRIGHT HOLDER
    # This file is distributed under the same license as the PACKAGE package.
    # Automatically generated, 2012.
    #
    msgid ""
    msgstr ""
    "Project-Id-Version: my-pluginname 1.0\n"
    "Report-Msgid-Bugs-To: \n"
    "POT-Creation-Date: 2012-08-06 13:46-0400\n"
    "PO-Revision-Date: 2013-03-21 11:20+0400\n"
    "Last-Translator: Automatically generated\n"
    "Language-Team: none\n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=utf-8\n"
    "X-Poedit-SourceCharset: iso-8859-1\n"
    "Content-Transfer-Encoding: 8bit\n"
    "Plural-Forms: nplurals=2; plural=(n != 1);\n"
    "X-Generator: Poedit 1.5.4\n"
    
    
    #: mypluginindex.php:87 (it is just a line of a note, to remind where our code appears)
    msgid "mymessage1"
    msgstr "Hello"
    
    #: mypluginindex.php:88
    msgid "mymessage2"
    msgstr "Bye"
    

    然后将此文件保存为“my-pluginname-en_US.po”(注意,.po 是文件的扩展名,因此请检查您的文本编辑器程序是否未保存到“my-pluginname-en_US.po.TXT” ")。

    然后下载POEDIT软件,打开这个文件。然后编辑“翻译”字段,然后保存为“my-pluginname-de_DE” 将生成两个文件(如果 poEdit 没有自动生成第二个 .mo 文件,只需转到 File -> Preferences -> Editor 并选中“Automatically compile .mo file on save”复选框),

    然后将这两个文件放入“语言”文件夹。

    在此之后,打开 wp-config.php 并找到这段代码:

    define ('WPLANG, '');
    

    改成

    define ('WPLANG, 'de_DE');
    

    仅此而已。 当 wordperss 被加载时,它会读取你的插件语言文件,前缀为 -de_DE。

    所以,在插件的 .php 文件中,而不是:

    echo "Something string";
    

    你应该使用:

    echo __("mymessage1", 'my-pluginname');
    



    完成的。现在您应该测试您的插件。
    p.s.使用的链接: https://codex.wordpress.org/I18n_for_WordPress_Developers
    http://codex.wordpress.org/Translating_WordPress
    https://codex.wordpress.org/Writing_a_Plugin
    http://codex.wordpress.org/Installing_WordPress_in_Your_Language

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 2022-07-28
      • 2016-06-25
      • 2020-11-29
      • 2011-01-26
      • 1970-01-01
      相关资源
      最近更新 更多