WordPress的翻译文件也翻译文本在CSS文件

unftdfkk  于 12个月前  发布在  WordPress
关注(0)|答案(1)|浏览(159)

我正在为我的网站设置一个翻译文件。我注意到即使是CSS前端文件中的文本也被翻译了,这破坏了我的CSS主题。
下面是CSS部分代码:

.wpem-tbl-status.Confirmed {
    background-color: #0daf0b;
}

字符串
当我在控制台中检查网页时,我得到如下内容:

<span class="wpem-tbl-status translated_Confirmed">translated_Confirmed</span>


当我想拥有:

<span class="wpem-tbl-status Confirmed">translated_Confirmed</span>


下面是WordPress的代码inclined:

<td data-title="<?php _e( 'Status', 'wp-event-manager-registrations' ); ?>">
    <span class="wpem-tbl-status <?php echo ( $wp_post_statuses[ get_post_status( $registration_id ) ]->label); ?>">
    <?php echo esc_html( _e( $wp_post_statuses[ get_post_status( $registration_id ) ]->label, 'wp-event-manager-registrations' ) ); ?>
    </span>
</td>

tktrz96b

tktrz96b1#

有几件事你应该知道...

始终转义输出,即使是属性

使用esc_attr__()返回翻译后的值,或使用esc_attr_e()回显翻译后的值。如果不需要翻译,只需使用esc_attr()/echo esc_attr()

如何在翻译函数中传递变量

如果你不知道文本是什么,你就不能翻译文本。According to the docs,你必须传递一个字符串,你不能翻译变量
因此,此工作:_e( 'Current status:' . $status, 'my-text-domain' );

**解决方法:**使用sprintf在字符串中插入变量。

echo sprintf( __( 'Current status: %s', 'my-text-domain' ), $status );

字符串

避免双重回显

因此,应改为(参见代码片段中的第3行):echo esc_html( _e( ... ) );
执行类似于:esc_html_e( .... );
做同样的事情:
esc_html_e( 'Blablabla' );
echo esc_html__( 'Blablabla' );

阅读更多关于差异在这里:

__()-返回翻译后的字符串docs(https://developer.wordpress.org/reference/functions/__/)
_e()- echo翻译字符串docs(https://developer.wordpress.org/reference/functions/e/)
_n()-根据提供的数字docs(https://developer.wordpress.org/reference/functions/n/)返回转换后的字符串的单数/复数形式
_x()-返回带有gettext上下文的翻译字符串docs(https://developer.wordpress.org/reference/functions/x/)
_ex()- echo翻译的字符串与gettext上下文docs(https://developer.wordpress.org/reference/functions/ex/)
esc_html__()-转义并返回转换后的字符串,以便在HTML输出中安全使用docs(https://developer.wordpress.org/reference/functions/esc_html
/)
esc_html_e()-转义和回显转换后的字符串,用于HTML输出docs(https://developer.wordpress.org/reference/functions/esc_html_e/)
esc_html_x()-转义并返回带有gettext上下文的翻译后的字符串,以便在HTML输出中安全使用docs(https://developer.wordpress.org/reference/functions/esc_html_x/)
esc_attr__()-转义并返回转换后的字符串,以便在属性docs(https://developer.wordpress.org/reference/functions/esc_attr
/)中安全使用
esc_attr_e()-转义和回显转换的字符串,以便在属性docs(https://developer.wordpress.org/reference/functions/esc_attr_e/)中安全使用
esc_attr_x()-转义并返回带有gettext上下文的翻译字符串,以便在属性docs(https://developer.wordpress.org/reference/functions/esc_attr_x/)中安全使用

最后,您的代码应类似于以下内容

<?php  

$domain = 'wp-event-manager-registrations';
$status = $wp_post_statuses[ get_post_status( $registration_id ) ]->label;  

if ( strtolower( $status ) === 'confirmed' ) {
    $status_i18n = __( 'Confirmed', $domain );
} else {
    $status_i18n = __( 'Not Confirmed', $domain );
}  

?>

<td data-title="<?php esc_attr_e( 'Status', $domain ); ?>">
  <span class="wpem-tbl-status <?php echo esc_attr( $status ); ?>">
  <?php echo sprintf( esc_html__( 'Status: %s', $domain ), $status_i18n ); ?>
  </span>
</td>  

<!-- Alternatively - if you only want to output the value (without further text) -->  

<td data-title="<?php esc_attr_e( 'Status', $domain ); ?>">
    <span class="wpem-tbl-status <?php echo esc_attr( $status ); ?>">
    <?php echo esc_html( $status_i18n ); ?>
    </span>
</td>

还要确保$status的值尚未在代码中的其他地方被翻译。

相关问题