私は翻訳のために設定されたテーマを持っていましたが、どんな翻訳も付属しませんでした。 poeditを使って文字列を自動的に検出し、その後それを完全に翻訳しました。しかし、特定の要素が管理者やサイトで翻訳されていません。
ライブサイトで翻訳されていないものも含めて、Iveがすべての文字列を翻訳したことがpoeditでわかります。フロントエンドには翻訳されていない文字列の一部が表示されていますが、大部分はadminです。
翻訳されていない文字列は 'add_action'を介してロードされたものであると思われることに気付きました。そのため、たとえばテーマにはカスタム投稿タイプがいくつかあり、1はイベント用です。 adminでは、このカスタム投稿タイプに関するすべてのものが、メタボックスに関連付けられた文字列を除いて翻訳されています。
たとえば、次のコードで作成された管理コンテンツはadminに変換されません。
$meta_box_events = array(
'id' => 'core-meta-box-events',
'title' => __('Events Options', CORE_THEME_NAME),
'post_type' => 'event',
'context' => 'normal',
'priority' => 'high',
'fields' => array(
array(
'name' => __('Event Month', CORE_THEME_NAME),
'desc' => __('Choose the event month ', CORE_THEME_NAME),
'id' => 'core_event_month',
'type' => 'select',
'options' => array(__('January', CORE_THEME_NAME),
__('February', CORE_THEME_NAME),
__('March', CORE_THEME_NAME),
__('April', CORE_THEME_NAME),
__('May', CORE_THEME_NAME),
__('June', CORE_THEME_NAME),
__('July', CORE_THEME_NAME),
__('August', CORE_THEME_NAME),
__('September', CORE_THEME_NAME),
__('October', CORE_THEME_NAME),
__('November', CORE_THEME_NAME),
__('December', CORE_THEME_NAME)
)
),
array(
'name' => __('Event Day', CORE_THEME_NAME),
'desc' => __('Choose the event day. ', CORE_THEME_NAME),
'id' => 'core_event_day',
'type' => 'select',
'options' => array( '1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'10',
'11',
'12',
'13',
'14',
'15',
'16',
'17',
'18',
'19',
'20',
'21',
'22',
'23',
'24',
'25',
'26',
'27',
'28',
'29',
'30',
'31'
)
),
array(
'name' => __('Event Year', CORE_THEME_NAME),
'desc' => __('Enter the event year using this format <em>0000.</em>', CORE_THEME_NAME),
'id' => 'core_event_year',
'type' => 'text',
'std' => ''
),
array(
'name' => __('Event Time', CORE_THEME_NAME),
'desc' => __('Enter the event time using this format <em>00:00AM/PM to 00:00AM/PM.</em>', CORE_THEME_NAME),
'id' => 'core_event_time',
'type' => 'text',
'std' => ''
),
array(
'name' => __('Event Location', CORE_THEME_NAME),
'desc' => __('Enter the event location, example: <em>Cramton Auditorium.</em>', CORE_THEME_NAME),
'id' => 'core_event_location',
'type' => 'text',
'std' => ''
),
array(
'name' => __('Event City', CORE_THEME_NAME),
'desc' => __('Enter the city of the event, example: <em>London.</em>', CORE_THEME_NAME),
'id' => 'core_event_city',
'type' => 'text',
'std' => ''
),
array(
'name' => __('Event Zip Code', CORE_THEME_NAME),
'desc' => __('Enter the address Zip code, example: <em>10308 89.</em>', CORE_THEME_NAME),
'id' => 'core_event_Zip',
'type' => 'text',
'std' => ''
),
array(
'name' => __('Event Country', CORE_THEME_NAME),
'desc' => __('Enter the event country, example: <em>United Kingdom.</em>', CORE_THEME_NAME),
'id' => 'core_event_country',
'type' => 'text',
'std' => ''
),
array(
'name' => __('Event Phone', CORE_THEME_NAME),
'desc' => __('Enter the phone info, example: <em>+44 (0)20 7040 8037.</em>', CORE_THEME_NAME),
'id' => 'core_event_phone',
'type' => 'text',
'std' => ''
),
array(
'name' => __('Event Map Latitude', CORE_THEME_NAME),
'desc' => __('Enter the google map longitude information, example: <em>-12.8809532.</em>', CORE_THEME_NAME),
'id' => 'core_event_lat',
'type' => 'text',
'std' => ''
),
array(
'name' => __('Event Map Longitude', CORE_THEME_NAME),
'desc' => __('Enter the google map longitude information, example: <em>-38.4174871.</em>', CORE_THEME_NAME),
'id' => 'core_event_lon',
'type' => 'text',
'std' => ''
)
)
);
add_action('add_meta_boxes', 'core_add_metabox_events');
'CORE_THEME_NAME'がピックアップされています。念のためエコーします。
そのため、WordPressに関する私のやや限られた知識のおかげで、このコードがロードされる前に翻訳が開始されていたと疑われました。ただし、翻訳はテーマのfunctions.phpで次のように呼び出されています。
add_action('after_setup_theme', 'lang_setup');
function lang_setup(){
load_theme_textdomain(CORE_THEME_NAME, CORE_DIRECTORY . '/languages');
}
私が見たことから、これはすべてのテーマコンポーネントがロードされた後にtextdomainがロードされることを確実にするはずです。それで、なぜイベントの投稿のためにサイト管理者で文字列が翻訳されていないのですか?
任意のアイデア/提案/ etcは大歓迎です。
ありがとう。
テキストドメインには定数(あなたの場合はCORE_THEME_NAME)を使用しないでください。これは、__
への呼び出しがコードを実行しているのではなく解析しているためです。簡単に言うと、定数の値を調べるのではありません。だから、それは翻訳されません。 有名なオットーを引用する :
すべての変換関数の中で、何らかの理由で、PHP変数を文字列に含めることはできません。一重引用符で囲まれた文字列のみ。