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.
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. |