• タグ別アーカイブ: 日本語化
  • WordPress日本語版 日付表示が、設定どおりに動作しない問題に対処する

    wordpress3-6-date-issue

    設定どおりに動作しないとは、

    日本語フォーラムで、何気なく回答したことから、WordPressの日本語版の日付の表示設定が、指定どおりに動作していない事を知りました。

    twenty elevenの投稿日時を英語&数字表記にカスタマイズしたい

    WordPressは、設定・一般・日付フォーマットから自由に日付のフォーマットを指定することができるようになっていますが、英語表示などにした場合に、日本語に翻訳されてしまったりといったことがおきます。

    この現象は、テンプレート関数 get_the_date()や、the_date()などに、引数を設定した場合でも、同様です。

    原因は、各種日付関数内で利用されるmysql2date関数のtranslate引数が、trueになっている場合に、起きるようです。標準的な日付関数は、translate引数(日付のローカライズ機能)がtrueになっているため、英語表記のフォーマット指定をした場合、日付のカスタム機能を指定したり、関数の引数にフォーマットを指定しても、指定どおりに、動作しなくなるといった事が発生します。

    このため、日付を英語表記にしたい場合には、テンプレート関数をローカライズ機能が無効になっている関数に置き換えないとうまく動作しないという事になります。

    WEBサイトを構築する上で、日付表示は日本語で行いたい場合も、英語で表記したい場合もあり、うまく思い通りに表示するために、どのような方法があるのかについて、メモを残したいと思います。

    思い起こせば、以前、パンくずリストプラグインの設置を行った時に、ドタバタ 日付階層に年や日が表示されないという問題が発生したのですが、この問題は、もしかすると、日本語WordPressの翻訳機能に関連する問題だったのではないかと、思い当たりました。

    地味な事柄のようにも思いますが、意外と私たちは影響を受けていて、対症療法に追われているのかもしれません

    日付フォーマットが保存される場所

    設定画面での日付フォーマットの指定は、データベースに保存されます。
    その値は、

    日付フォーマット

    時刻フォーマット

    によって取得する事が出来ます。

    翻訳ファイル

    WordPressは、英語で作られているため、日本語環境で使うために、翻訳ファイルを持っています。翻訳ファイルは、テーマ、プラグイン等が、独自に持っている場合もあります。

    翻訳ファイルは、日本語の場合、ja.poというテキストファイルから、ja.moというバイナリファイルを作り出して、翻訳を行います。

    翻訳ファイルは、管理画面用の翻訳ファイルや、マルチサイト用翻訳ファイル等複数のファイルが存在します。

    ここでは、WEBサイトのビジュアルに関連するja.po ja.moについてだけ取り扱います。

    wp-content/languages/ja.poに、日付などの表示にかかわる設定があります。

    以下の表に、翻訳ファイルの日付に関する項目を拾ってみました

    l, F jS, Y など、date()関数で使用する、英語の、日付のフォーマットは、日本語の日付に変更されています。

    このような事から、関数の引数、管理パネルに設定したカスタムフォーマット等が、意図したとおりに動作しないといった事が発生します。

    翻訳前 翻訳後
    F, Y Y年n月
    l, F jS, Y Y年n月j日 l
    F j, Y Y年n月j日
    F j, Y g:i a Y年n月j日 g:i A
    j F, Y @ G:i:s Y年n月j日 G:i:s
    j F, Y @ G:i Y年n月j日 @ G:i
    Feb_February_abbreviation 2月_February_abbreviation
    Mar_March_abbreviation 3月_March_abbreviation
    Apr_April_abbreviation 4月_April_abbreviation
    May_May_abbreviation 5月_May_abbreviation
    Jun_June_abbreviation 6月_June_abbreviation
    Jul_July_abbreviation 7月_July_abbreviation
    Aug_August_abbreviation 8月_August_abbreviation
    Sep_September_abbreviation 9月_September_abbreviation
    Oct_October_abbreviation 10月_October_abbreviation
    Nov_November_abbreviation 11月_November_abbreviation
    Dec_December_abbreviation 12月_December_abbreviation
    Sunday 日曜日
    Monday 月曜日
    Tuesday 火曜日
    Wednesday 水曜日
    Thursday 木曜日
    Friday 金曜日
    Saturday 土曜日
    Sun
    Mon
    Tue
    Wed
    Thu
    Fri
    Sat
    S_Sunday_initial 日_Sunday_initial
    M_Monday_initial 月_Monday_initial
    T_Tuesday_initial 火_Tuesday_initial
    W_Wednesday_initial 水_Wednesday_initial
    T_Thursday_initial 木_Thursday_initial
    F_Friday_initial 金_Friday_initial
    S_Saturday_initial 土_Saturday_initial
    am am
    pm pm
    AM AM
    PM PM
    %s week %s週
    %s month %sか月
    %s year %s年

    WordPressで使われる主な時刻関数

    • http://codex.wordpress.org/Function_Reference/get_comment_date(b:get_comment_date) x
    • http://codex.wordpress.org/Function_Reference/date_i18n(b:date_i18n) x
    • http://codex.wordpress.org/Function_Reference/the_date_xml(b:the_date_xml) o
    • http://codex.wordpress.org/Function_Reference/the_date(b:the_date) x
    • http://codex.wordpress.org/Function_Reference/get_the_date(b:get_the_date) X
    • http://codex.wordpress.org/Function_Reference/the_modified_date(b:the_modified_date)
      • http://codex.wordpress.org/Function_Reference/get_the_modified_date(b:get_the_modified_date)
        • http://codex.wordpress.org/Function_Reference/get_post_modified_time(b:get_post_modified_time)
    • http://codex.wordpress.org/Function_Reference/the_weekday_date(b:the_weekday_date) o
    • http://codex.wordpress.org/Function_Reference/get_lastpostdate(b:get_lastpostdate)
      • _get_last_post_time()
    • http://codex.wordpress.org/Function_Reference/get_date_permastruct(b:get_date_permastruct)
    • http://codex.wordpress.org/Function_Reference/get_comment_time(b:get_comment_time) x 引数による
    • http://codex.wordpress.org/Function_Reference/comment_time(b:comment_time) x
    • http://codex.wordpress.org/Function_Reference/human_time_diff(b:human_time_diff)
    • http://codex.wordpress.org/Function_Reference/current_time(b:current_time)
    • http://codex.wordpress.org/Function_Reference/wp_timezone_override_offset(b:wp_timezone_override_offset)
    • http://codex.wordpress.org/Function_Reference/wp_timezone_supported(b:wp_timezone_supported)
    • http://codex.wordpress.org/Function_Reference/wp_timezone_choice(b:wp_timezone_choice)
    • http://codex.wordpress.org/Function_Reference/the_time(b:the_time)
    • http://codex.wordpress.org/Function_Reference/get_the_time(b:get_the_time) x
    • http://codex.wordpress.org/Function_Reference/get_post_time(b:get_post_time) o
    • http://codex.wordpress.org/Function_Reference/the_modified_time(b:the_modified_time)
      • get_the_modified_time
        • get_post_modified_time o
    • http://codex.wordpress.org/Function_Reference/timer_start(b:timer_start)
    • http://codex.wordpress.org/Function_Reference/timer_stop(b:timer_stop)
    • http://codex.wordpress.org/Function_Reference/_get_last_post_time(b:_get_last_post_time)

    日付ローカライズにかかわる重要な関数

    • http://codex.wordpress.org/Function_Reference/mysql2date(b:mysql2date)
    • http://codex.wordpress.org/Function_Reference/date_i18n(b:datei18n)

    自由に、フォーマットを行うための方法

    自由にフォーマットを行いたい場合に、どのような方法があるのかを、まとめます

    翻訳ファイルの修正

    翻訳ファイルを、http://www.poedit.net/download.php(b:Poedit)などのツールを使って、書き換える

    gettext フィルタで表示を修正する

    翻訳された文字列から、元に戻すのは、通常の文字列なら可能だけれど、フォーマットを元に戻すのは、困難

    また、WordPressの新しいバージョンにアップグレードした場合には、翻訳ファイルは、上書きされるという問題も発生しそうです。

    フィルタによる修正

    日付フォーマットは mysql2dateによって、日付がtranslateされローカライズされます。
    mysqldateは、日付関数の内部で使用されており、4番目の引数 translateがtrueにセットされた状態で動作する関数と、そうでないもので、日付の表示が異なっています。

    date_i18nフィルタ

    ローカライズされた日付を、ローカライズ前の値で置き換えるために、date_i18nフィルタを使う例です。

    テーマファイル等で使う場合には、get_option( ‘date_format’ )で、日付フォーマットの設定を取得して、英文表記のフォーマットが使われている場合に、以下のフィルタが動作する設定を行うなどの工夫が出来るのではないかと思います。

    テーマのfunctions.phpに追加

    関数の置き換えによる修正

    get_the_date() the_date() などの関数を、translate機能がデフォルトで働かない

    get_post_time(),get_post_modified_time()に置き換える

    課題

    投稿日については、何とか動作するようになりましたが、feed関連は、別途に対応が必要そうです。

    rss2の場合

    translateは、falseに設定されてますが、直書きされていたりします。

    • http://codex.wordpress.org/Customizing_Feeds

    参考

    • https://github.com/WordPress/WordPress/blob/master/wp-includes/locale.php(b:wp-includes/locale.php)
      • ローカライズ機能と、翻訳ファイルの橋渡しを行うclass
    • global $locale
      • 日本語環境だと’ja’が返ります


  • 項目名の変更 管理画面編 WordPress


    カスタマイズなし


    カスタマイズ後


    カスタマイズの一例

    テーマのfunctions.phpに以下のコードを追加します(ver3.3.1)

    おまけ カテゴリやタグ

    以下は、変更のしかたを書いているだけなので、実際には、動作しません。
    動作の確認もしていません。

    おまけ 

    クライアントサイドで、文字列変更する事も出来るので、カスタマイズする時には、よく考えたほうがいいかも、

    以下のコードは、ダッシュボードの投稿/カテゴリのリンク文字列を「ヤッホー」に変更し、マウスカーソルがリンクの上に来たときに、「これ説明だよ」のテキストを追加します。

    ええ加減に作ってあるので、ご自身でよく検証してから、自己責任で