SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

PEARライブラリ活用

I18Nv2による日時と通貨・数値の表記国際化

PEARライブラリ活用 (2)


  • このエントリーをはてなブックマークに追加

本稿では、PEAR::I18Nv2を用いて、日時と通貨・数値の表記を国際化・地域化する方法を紹介します。閲覧者のロケールごとに表示言語を切り替える、「国際化」対応のWebアプリケーションをPHPで作成するのに役立ちます。

  • このエントリーをはてなブックマークに追加

はじめに

 ネットサーフィンをしていると、海外のサイトにも関わらず、ページが日本語で表示されることがあります。そのサイトが日本語のページしか持っていないということは多分ありません。閲覧者が日本人だと推測して、日本語のページを返しているのです。

 静的なWebページの場合には、日本語のページと英語のページといった具合に、対応したい言語ごとに別々のページを用意して、何らかの方法で表示するページを切り替えます。

 動的なページの場合に同じ方法を採るのは現実的ではありません。日本語のWebアプリケーション(以下、Webアプリ)と、英語のWebアプリを別々に開発するのはとても面倒です。そこで、ロケール(言語や地域)に依存する部分だけを置き換えられるようにWebアプリを開発することになります。このことをWebアプリの「国際化」と言います。英語ではinternationalizationですが、長いのでI18Nと書かれるのがふつうです。国際化されたソフトウェアを、実際に特定のロケールで使えるようにすることを「地域化」(localization, L10N)と言います。

 本稿では、PEAR::I18Nv2を用いて、日時と通貨・数値の表記を国際化・地域化する方法を紹介します。

編注
 「I18N」「L10N」は、それぞれ最初と最後の文字、および省略した間の文字数を表しています。

対象読者

  • PHPの基本的な使い方を知っている方
  • PEARのパッケージを管理できる方
  • PHPのWebアプリを国際化したい方
  • Unicodeについての基本的な知識がある方

必要な環境

 PHPにPEAR::I18Nv2をインストールしてある必要があります。筆者は、XAMPP 1.6.6 for Windowsに収録されているPHP 5.2.5に、I18Nv2 0.11.4をインストールしました。

準備

 Webブラウザで言語を切り替える方法を確認してください。Firefoxの場合は、[ツール]-[オプション]を選択し、[詳細]の[一般]タブにある[言語設定]ボタンで言語の優先順位を設定できます。PrefBarというアドオンをインストールすれば、ツールバーで言語を設定できるようになります。

 Webアプリケーションサーバは、ブラウザの言語設定をリクエストヘッダ(Accept-Languageヘッダ)を通じて知ることができます。言語を日本語・英語/米国に設定して次のようなコードを実行すれば、「ja,en-us;q=0.5」と表示されます(ヘッダの内容は、FirefoxならLive HTTP Headersというアドオンで確認することもできます)。

$headers = getallheaders();
echo $headers['Accept-Language']; //ja,en-us;q=0.5

 これから実行するコードはすべてUTF-8で処理することにします。

mb_internal_encoding('UTF-8')

国際化された組み込み関数

 組み込み関数の中にも国際化されたものがあります(『PHPにおける日付と時刻の混乱』を参照)。ただし、先に紹介したリクエストヘッダを読んでいるわけではないので、まずロケールを設定してから使わなければなりません。

//日本語の場合
setlocale(LC_ALL,'Japanese_Japan');
  //Windows以外ではsetlocale(LC_ALL,'ja_JP');
echo strftime('%c');
  //2008/02/18 16:41:02


//英語/米国
setlocale(LC_ALL,'English_United States');
  //Windows以外ではsetlocale(LC_ALL,'en_US')
echo strftime('%c');
  //2/18/2008 4:42:11 PM

 「2008年02月18日」のように表示したい場合はどうすれば良いでしょうか。マニュアルのstrftimeの項を参考に、次のように書式を指定すれば実現できます(「%Y年%I月%d日」だとうまくいかないので文字参照を使いました。「月」はU+6708です)。

echo strftime('%Y年%m月%d日') //2008年02月18日

 このようにコードに書式をそのまま書いてしまうと、日本語にしか対応できなくなってしまいます。これでは国際化になりません。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
I18Nv2の基本

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
PEARライブラリ活用連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 矢吹 太朗(ヤブキ タロウ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2311 2008/04/02 17:44

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング