我们可以用不同的域名多次加载“Load_Theme_TextDOMAIN”吗?

时间:2013-10-20 作者:Atthapon Junpun-eak

假设我的主题中有两个域,分别是“基本”和“高级”。

可以在我的主题中加载两个不同的域吗?

load_theme_textdomain( \'basic\', TEMPLATEPATH.\'/languages\' );
load_theme_textdomain( \'advance\', TEMPLATEPATH.\'/languages\' );

4 个回复
最合适的回答,由SO网友:Geert 整理而成

请注意,如果将mo文件放在主题目录中,the same mo-file will be loaded for every theme textdomain. 这是因为主题mo文件完全基于区域设置。例如:

load_theme_textdomain( \'basic\', get_template_directory() . \'/languages\' );
load_theme_textdomain( \'advance\', get_template_directory() . \'/languages\' );
load_theme_textdomain( \'whatever\', get_template_directory() . \'/languages\' );
既然“en\\u US”是你的WPLANG 语言环境,将加载上面的代码wp-content/themes/your-theme/languages/en_US.mo 三次!不好,因为多次导入相同的mo文件只会导致多余的工作。在这种情况下,最好使用单一主题域。

但是,如果wp-content/themes/your-theme/languages/en_US.mo 如果不存在,WordPress将查看默认语言目录的子目录“主题”,在这种情况下,它会将域作为文件名的一部分考虑在内。您可以通过快速查看load_theme_textdomain() 功能:

function load_theme_textdomain( $domain, $path = false ) {
    $locale = apply_filters( \'theme_locale\', get_locale(), $domain );

    if ( ! $path )
        $path = get_template_directory();

    // Load the textdomain from the Theme provided location, or theme directory first
    $mofile = "{$path}/{$locale}.mo";
    if ( $loaded = load_textdomain($domain, $mofile) )
        return $loaded;

    // Else, load textdomain from the Language directory
    $mofile = WP_LANG_DIR . "/themes/{$domain}-{$locale}.mo";
    return load_textdomain($domain, $mofile);
}

SO网友:Otto

如果您正在创建此主题或插件以包含在WordPress的官方插件或主题目录中。org,则需要使用插件或主题的slug作为文本域。您不能有多个文本域,文本域不能是插件或主题的slug以外的任何内容。

这是由于3.7中提供了新的语言包支持。语言包系统将在文本域中使用slug,并且不会与其他任何内容一起工作。

SO网友:josh

你当然可以。。但是,不能在单个文本字符串上使用两种不同的语言翻译。

例如,让我们考虑一下页面上的某个位置有以下文本字符串:

Hello World!
现在,如果我们想为语言本地化设置它,下面是我们要做的:

<?php _e(\'Hello World!\', \'my_language_localization\'); ?>
在您的情况下,可以是:

<?php _e(\'Hello World!\', \'basic\'); ?>
或者,

<?php _e(\'Hello World!\', \'advance\'); ?>
但是,不可能将单个字符串转换为两个本地化。

此外,当使用本地化名称时;使其具有独特性,以便不会与其他插件/主题冲突。

SO网友:Jonas Lundman

从Wordpress 4开始,我建议您创建一个简单的插件,“只”加载所需的文本域。主题文件夹、模板或任何地方的所有字符串都将被翻译。示例:

<?php

/*
Plugin Name: UA Translation UA Tiny select
Description: Translation for Theme templates outside the main text domain
Version: 1.0
Author: Jonas Lundman
Author URI: http://lundman.info
Text Domain: ua-tiny-select
Domain Path: /languages/
*/

// Updated 2015 04 22 (21:00) 

function ua_load_plugin_textdomain_tiny_select() {
    load_plugin_textdomain( \'ua-tiny-select\', false, dirname( plugin_basename( __FILE__ ) ) . \'/languages/\' );
}
add_action( \'plugins_loaded\', \'ua_load_plugin_textdomain_tiny_select\');

?>
非常适合在主域主题中的woocommerce模板文件或Buddypress模板文件中进行自定义更改!

记住给mo和po文件一个slug,在我上面的例子中:

languages/ua-tiny-select-sv_SE.mo
文件夹语言会放在插件文件夹中

结束

相关推荐

Plugin Localization

我刚刚为wp构建了我的第一个插件,即使它不是一个伟大的“代码诗意”;)它正常工作。这是一个使用GalleryView 3.0 jquery插件转换默认wp库的插件(http://spaceforaname.com/galleryview).我唯一不能做的就是本地化。此插件的本地化意味着转换管理界面,在这里可以配置jquery插件选项来更改结果库的外观。我试着关注网络上数百万的教程,在论坛上阅读了很多关于这个问题的帖子,并遵循了codex的指南。。。但仍然没有运气。这就是我所做的:每个文本行都位于gette