函数文档

translate_settings_using_i18n_schema()

💡 云策文档标注

概述

translate_settings_using_i18n_schema() 是一个 WordPress 函数,用于根据提供的 i18n 模式翻译设置值。它支持字符串、数组和对象类型的输入,并递归处理嵌套结构,确保翻译的准确性和灵活性。

关键要点

  • 函数接受三个必需参数:$i18n_schema(i18n 模式)、$settings(设置值)和 $textdomain(文本域)。
  • 根据 $i18n_schema 和 $settings 的类型,函数采用不同的翻译逻辑:字符串对字符串直接翻译,数组递归处理,对象则按键匹配或使用通配符 '*'。
  • 如果任何参数为空,函数直接返回原始 $settings,避免错误。
  • 函数在 WordPress 5.9.0 版本中引入,常用于主题和区块的国际化处理。

代码示例

function translate_settings_using_i18n_schema( $i18n_schema, $settings, $textdomain ) {
    if ( empty( $i18n_schema ) || empty( $settings ) || empty( $textdomain ) ) {
        return $settings;
    }

    if ( is_string( $i18n_schema ) && is_string( $settings ) ) {
        return translate_with_gettext_context( $settings, $i18n_schema, $textdomain );
    }
    if ( is_array( $i18n_schema ) && is_array( $settings ) ) {
        $translated_settings = array();
        foreach ( $settings as $value ) {
            $translated_settings[] = translate_settings_using_i18n_schema( $i18n_schema[0], $value, $textdomain );
        }
        return $translated_settings;
    }
    if ( is_object( $i18n_schema ) && is_array( $settings ) ) {
        $group_key           = '*';
        $translated_settings = array();
        foreach ( $settings as $key => $value ) {
            if ( isset( $i18n_schema->$key ) ) {
                $translated_settings[ $key ] = translate_settings_using_i18n_schema( $i18n_schema->$key, $value, $textdomain );
            } elseif ( isset( $i18n_schema->$group_key ) ) {
                $translated_settings[ $key ] = translate_settings_using_i18n_schema( $i18n_schema->$group_key, $value, $textdomain );
            } else {
                $translated_settings[ $key ] = $value;
            }
        }
        return $translated_settings;
    }
    return $settings;
}

注意事项

  • 确保 $i18n_schema 与 $settings 的结构匹配,否则可能导致翻译失败或返回未翻译的值。
  • 函数依赖于 translate_with_gettext_context() 进行实际翻译,需确保文本域正确设置。
  • 在对象模式下,通配符 '*' 可用于处理未在 i18n_schema 中明确定义的键。

📄 原文内容

Translates the provided settings value using its i18n schema.

Parameters

$i18n_schemastring|string[]|array[]|objectrequired
I18n schema for the setting.
$settingsstring|string[]|array[]required
Value for the settings.
$textdomainstringrequired
Textdomain to use with translations.

Return

string|string[]|array[] Translated settings.

Source

function translate_settings_using_i18n_schema( $i18n_schema, $settings, $textdomain ) {
	if ( empty( $i18n_schema ) || empty( $settings ) || empty( $textdomain ) ) {
		return $settings;
	}

	if ( is_string( $i18n_schema ) && is_string( $settings ) ) {
		return translate_with_gettext_context( $settings, $i18n_schema, $textdomain );
	}
	if ( is_array( $i18n_schema ) && is_array( $settings ) ) {
		$translated_settings = array();
		foreach ( $settings as $value ) {
			$translated_settings[] = translate_settings_using_i18n_schema( $i18n_schema[0], $value, $textdomain );
		}
		return $translated_settings;
	}
	if ( is_object( $i18n_schema ) && is_array( $settings ) ) {
		$group_key           = '*';
		$translated_settings = array();
		foreach ( $settings as $key => $value ) {
			if ( isset( $i18n_schema->$key ) ) {
				$translated_settings[ $key ] = translate_settings_using_i18n_schema( $i18n_schema->$key, $value, $textdomain );
			} elseif ( isset( $i18n_schema->$group_key ) ) {
				$translated_settings[ $key ] = translate_settings_using_i18n_schema( $i18n_schema->$group_key, $value, $textdomain );
			} else {
				$translated_settings[ $key ] = $value;
			}
		}
		return $translated_settings;
	}
	return $settings;
}

Changelog

Version Description
5.9.0 Introduced.