2012年3月
« 1月   4月 »
 1234
567891011
12131415161718
19202122232425
262728293031  

カテゴリー

最近のコメント

    <!–:ja–>ASP.NET国際化プログラミング – リソース管理<!–:–><!–:en–>ASP.NET Internationalization Programming – Resource Administration<!–:–>

    ソフトウェア国際化ツールWorld Wide Navi(ワールドワイドナビ)の国際化プログラミング参考情報から、ASP.NETの国際化の抜粋です。

    1. ASPXにヘッダー追加
    カルチャ(言語と地域)の設定をASPXのヘッダー部分に追加します。

    Default.aspx
    
     <%@ Page Language="C#" ...%>
    =><%@ Page Culture="auto"
    UICulture="auto" Language="C#" ...%>

    2. 文字列の外部化(リテラルの置換)
    ASP.NETは、文字列リソースの管理のために、4つの構文を持っています。

    • 構文1は “<%=..%>” を必要とします。
    • “”" は構文2では切り落とされます。
    • 構文3は構文1と非常に似ていますが、
      少し違います。
    • 構文4ではmeta属性を追加することで、
      デフォルトのテキストを残すことが出来ます。
    • 構文3と4はASPタグのみにしか使えません。
    Default.aspx
    
    * 構文1. (タグテキストの置換) "<%="
     "Resources.Default." RESOURCE_KEY "%>"
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
     <title>This is a sample site!</title>
     => <title><%=Resources.
     Default.DefaultWwnaviMsg1%></title>
    </head>
    <body>
    
    * 構文2. (プログラム内のリテラルの置換)
     "Resources.Default." RESOURCE_KEY
    <div>
     <% Response.Write("Hello, World!"); %>
     => <% Response.Write(
    Resources.Default.DefaultWwnaviMsg2); %>
    </div> 
    
    * 構文3. (ASPタグ内のテキストの置換)
     "<%$" "Resources.Default,"
    RESOURCE_KEY "%>"
    <asp:Label ID="Label1" runat="server"
    Text="This is label 1.">
    =><asp:Label ID="Label1" runat="server" Text=
    "<%$Resources:Default,
    DefaultWwnaviMsg3%>">
    </asp:Label>
    
    * 構文4. (ASPタグ内のmeta属性の追加)
     "meta:resourcekey="" RESOURCE_KEY """
    <asp:Label ID="Label1" runat="server"
    Text="This is label 1.">
    =><asp:Label ID="Label2" runat="server" Text=
    "This is label 1." meta:resourcekey=
    "DefaultWwnaviMsg4" >
    </asp:Label>

    各文字列の場所に応じて、適切な構文を使う必要があります。
    (ASPタグでは構文3または4どちらかが使えます。)

    3. Resxファイルの作成
    外部化された文字列をresx(リソース)ファイルに配置します。”App_GlobalResources”フォルダをプロジェクトディレクトリの直下に作成し、resxファイルをその下に、”ASPX_FILE_NAME(拡張子なし).resx”(*1)という名前で作成します。

    PROJECT_DIRECTORY
     - App_GlobalResources
     - Default.resx
     - WebForm1.resx
     *1)構文4(meta属性)を使っている場合は、
    拡張子を付ける必要があります(Default.aspx.resx)。
    Default.resx 
    
    <?xml version="1.0" encoding="utf-8"?>
    <root>
     <xsd:schema id="root" xmlns=""
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
     ...
     </xsd:schema>
     ...
     <resheader name="writer">
     <value>System.Resources.ResXResourceWriter,
     System.Windows.Forms, Version=2.0.0.0,
      Culture=neutral,
     PublicKeyToken=b77a5c561934e089</value>
     </resheader>
     <data name="DefaultWwnaviMsg1" xml:space="preserve">
     (RESOURCE_KEY)
     <value>This is a sample clomid site!</value>
     (RESOURCE_STRING)
     </data>
    </root>

    4. コンパイルとローカリゼーション
    ビルドと実行をしてください、ブラウザ内でリソース文字列が表示されるのが確認できるはずです。他の言語のリソースを追加したい場合は、ASPX_FILE_NAME.LOCALE_CODE(例:”ja”).resxをApp_GlobalResourcesに追加してください。

    App_GlobalResources
     - Default.resx
    ... マスターリソース (例:英語)
     - Default.ja.resx
    ... ローカライズされたリソース (例:日本語)


    &amp;amp;lt;!–:ja–&amp;amp;gt;PHP国際化プログラミング – gettextを使った国際化&amp;amp;lt;!–:–&amp;amp;gt;&amp;amp;lt;!–:en–&amp;amp;gt;PHP Internationalization Programming – Internationalization By gettext&amp;amp;lt;!–:–&amp;amp;gt;

    ソフトウェア国際化ツールWorld Wide Navi(ワールドワイドナビ)の国際化プログラミング参考情報から、PHPの国際化の抜粋その2です。

    1. ローカライズする文字列をgettext関数に配置
    ローカライズしたい文字列をgettext関数(殆どの場合、”_()”)内に配置します。
    これらの文字列は、各外部リソースファイルによってローカライズ(翻訳)されます。

    echo "Hello from PHP!";
    -> echo _("Hello from PHP!");

    2. 初期化コードを記述
    ユーザーロケール(言語と地域)を適用し、リソースの名前とパスをgettextの仕組みに教えます。

    index.php (または他のphp)
    
    <?php require_once(
    $_SERVER["DOCUMENT_ROOT"]."/
    gettext/wwnaviRs/" .
    "wwnavi.gettext.php");?>
    // ロケールの設定およびgettextの
    読み込みのための初期化コードの実行
    ...
    echo _("Hello from PHP!");
    ...
    wwnavi.gettext.php // 初期化コード
    
    require_once("wwnaviLang.php");
    // 後に使う、
    // 言語と地域の配列
    
    $header = $_SERVER[
    "HTTP_ACCEPT_LANGUAGE"];
    // 言語情報を持った、
    ユーザーのHTTPヘッダーの取得
    
    $lang="";
    // HTTPヘッダーからロケールを解析
    // ロケールの表現は、各Webブラウザによって異なりますが
    // ("en"、"en-us"、"en_US"...)、
    // setlocaleの引数は、
    // "language_REGION"である必要があります。
    if(strpos($header, ",")>0) {
     $hds = explode(",", $header);
     $lang = $hds[];
     $lang = str_replace("-", "_",
     $lang);
     if(strpos($lang, "_")>0) {
     $ls = explode("_", $lang);
     if(count($ls)>1) $lang =
     $ls[] . "_" . strtoupper($ls[]);
     }else if(!empty($wwnaviLang[$lang]
     )) {
     $lang .= "_" . $wwnaviLang[
     $lang];
     // 言語コード(例: "en")
     // のみの場合、地域コード(例: "US")を、
     // 予め定義された配列から追加します。
     // setlocaleは、完全なロケール名を必要と
     // するからです。
     }
    }
    //echo $lang . "
    ";
    //putenv("LC_ALL=$lang");
    
    setlocale(LC_ALL, $lang);
    // $langは少なくとも、
    // 言語と地域(例:"en_US")である必要があります。
    
    $domain = "wwnaviBundle";
    // gettextのリソース名と
    // パスを教えます。
    bindtextdomain($domain,
    dirname(__FILE__));
    textdomain($domain);
    bind_textdomain_codeset(
    $domain, "UTF-8");
    wwnaviLang.php // 予め定義された、
    // 言語とデフォルトの地域のコードの配列
    
    $wwnaviLang = array(
    ...
    "de"=>"DE",
    "en"=>"US",
    "es"=>"ES",
    "et"=>"EE",
    "eu"=>"ES",
    "fa"=>"IR",
    "fi"=>"FI",
    "fo"=>"FO",
    "fr"=>"FR",
    ...
    "ja"=>"JP",
    ...

    3. gettextのマスターテンプレートリソース(.POT)の作成
    msgidとmsgstrのペアを持つ、マスターリソース(.pot)を、リソースパスの下に作成する必要があります。
    xgettextコマンドは、”_()”文字列をスキャンし、potファイルを作成するのに便利です。

    YOUR_DOCUMENT_ROOT/gettext/
    wwnaviRs/(*1)
     ... wwnaviBundle.pot(*1)
    
    *1)上記コードで
    指定されたものと同じディレクトリ
    wwnaviBundle.pot
    ...
    
    #, fuzzy
    msgid ""
    msgstr ""
    "Project-Id-Version: PACKAGE VERSION\n"
    "Report-Msgid-Bugs-To: \n"
    "POT-Creation-Date: 2012-03-05 17:32 0900\n"
    "PO-Revision-Date: YEAR-MO-DA HO:MI ZONE\n"
    "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
    "Language-Team: LANGUAGE <LL@li.org>\n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=UTF-8\n"
    "Content-Transfer-Encoding: 8bit\n"
    
    #: /...../examples/php/gettext/index.php:10
    msgid "Hello from PHP!"
    msgstr ""
    
    #: /...../examples/php/gettext/index.php:13
    msgid "This is a DIV text."
    msgstr ""
    ...
    
    #: /root/wwnavi/workspace/examples/php/
    gettext/sub/sub2/sub2.php:31
    #, php-format
    msgid "My local time is %c!"
    msgstr ""
    xgettext -j -L php -k"_" --from-code=UTF-8 -o
    /..../examples/php/gettext/wwnaviRs/
    wwnaviBundle.pot \
     /..../examples/php/gettext/index.php

    4. .POTを各言語リソース(.PO)にローカライズ
    マスターテンプレートを、対象ロケールのディレクトリ(LOCALE(例:”ja_JP”)/LC_MESSAGES)に、.poファイルとしてコピーし、msgstrを翻訳します。

    日本語への翻訳の場合
    
    YOUR_DOCUMENT_ROOT/gettext/
    wwnaviRs/ja_JP/LC_MESSAGES
     ... wwnaviBundle.po
    ja_JP/LC_MESSAGES/wwnaviBundle.po
    ...
    
    #, fuzzy
    msgid ""
    msgstr ""
    "Project-Id-Version: PACKAGE VERSION\n"
    "Report-Msgid-Bugs-To: \n"
    "POT-Creation-Date: 2012-03-05 17:32 0900\n"
    "PO-Revision-Date: YEAR-MO-DA HO:MI ZONE\n"
    "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
    "Language-Team: LANGUAGE <LL@li.org>\n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=UTF-8\n"
    "Content-Transfer-Encoding: 8bit\n"
    
    #: /...../examples/php/gettext/index.php:10
    msgid "Hello from PHP!"
    msgstr "PHPからこんにちは!"
    
    #: /...../examples/php/gettext/index.php:13
    msgid "This is a DIV text."
    msgstr "これはDIVのテキストです。"
    ...
    
    #: /root/wwnavi/workspace/examples/php/gettext/
    sub/sub2/sub2.php:31
    #, php-format
    msgid "My local time is %c!"
    msgstr "わたしの現地時間は%cです!"

    ***注意: “%c”のようなフォーマット文字を修正(翻訳)してはいけません。


    5. .POを.MO(リソースバイナリ)にコンパイル

    msgfmtコマンドを実行し、リソースバイナリ(.mo)を対象ロケールディレクトリに作成します。

    msgfmt -o wwnaviBundle.mo wwnaviBundle.po

    これで、ブラウザの言語設定を変更しながら、英語と日本語のメッセージを切り替えられるようになります。

    これらの処理は、World Wide Navi内のPHPの文字列外部化のサンプルで確認できます。

    POT/POのローカリゼーションのプロセスは、ローカリゼーションツールSisulizerを使うことで、より簡単に効果的になります。



    &amp;amp;lt;!–:ja–&amp;amp;gt;ソフトウェアローカリゼーションツールSisulizer(シスライザー)製品ページ更新&amp;amp;lt;!–:–&amp;amp;gt;&amp;amp;lt;!–:en–&amp;amp;gt;Software Localization Tool Sisulizer Product Page Updated&amp;amp;lt;!–:–&amp;amp;gt;

    弊社が販売しているソフトウェアローカリゼーションツール Sisulizer (シスライザー)の製品ページに、日英の詳細ページを追加しました!

    http://www.kokusaika.jp/product/sisulizer/details.html

    ご購入の際にぜひお役立てください!

    WEBアプリケーション、Android、.NET、Delphiなど、様々なプラットフォームへの対応を、ソフトウェア国際化ツール World Wide Navi国際化プログラミング参考情報とともに、詳細に記述しています。

    今後は、特設サイトも設けて、より多くの情報発信、製品サポートをしていく予定です!

    また、日本語ユーザー向けのTwitterも始めました!

    @sisulizerJp

    こちらもSisulizerの情報にとどまらず、広くローカリゼーションの情報を発信していきますので、フォローよろしくお願いいたします!