!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> Linuxで始める国際化プログラミング
日経Linux
click
ITpro

指定したURLが正しくありません

または、掲載期限を過ぎたページを参照しようとしました。

ITproトップ

メール配信 | 年間購読 | 日経Linuxとは | 広告掲載企業へのリンク&資料請求
 

Linuxで始める国際化プログラミング
第1回

Xlibを利用した国際化プログラミングを体験(part.1)

みなさんはじめまして,佐藤大輔と申します。特に専門家というわけではないのですが,これからしばらくLinux上での国際化プログラミングについて解説してみるつもりです。どうか,よろしくお願いします。

さて,プログラミングにおける国際化(internationalization,I18Nと略される)とはどのようなものなのでしょうか? 簡単に言うと,ユーザーが使用している言語に応じてメニューの文字やメッセージの言語を切り替える機能を持ったプログラムを作るということです。国際化には,従来の日本語化,地域化(localization,L10Nと略される)のアプローチと比べ,いったん作成すればアプリケーションそのものを書き換えることなく,さまざまな言語に対応することができるというメリットがあります。

Linuxが普及するなかで,国際化プログラミングの重要性はますます高まっています。このコラムでは,アプリケーションの日本語化,国際化について,実例を挙げながら解説して行きます。これを機会に,みなさんも国際化プログラミングを始めてみましょう。

サンプルではXlibを使用

Linuxは,UNIXで培われた強力なプログラミング環境を持っています。しかし,たとえばWindowsのように統一的なGUIが規定されているわけではないため,ビジュアルなアプリケーションを作成するのは,少し難しいのが現状です。Linuxで使われる代表的なWindowシステムであるX Window Systemに話をしぼってみても,さまざまなGUIツールキットが存在し,まだこれという標準が確立されていない状態です。

開発環境も乱立気味で,gIDECode Crusaderといったフリーの統合開発環境などのほか,来年にはカナダMetrowerks社からCodeWarrierのLinux版が発売されます。GUIビルダーにもさまざまなものがあり,最近では,Gtk+というツールキットを利用したGladeなどに人気があるようです。もちろん,Tcl/Tk等のGUI部品とインタプリタを利用するという手や,Javaを利用することも可能です。

しかし今回は,これらの便利なツールを利用する前に,Xlibを使った低レベルなプログラミングから始めてみようと思います。Xlibは,Xのもっとも基本的なライブラリです。X上で動作するプログラムは,どのようなものであれ,最終的にはいずれもXlibを使用しています。逆にXlibだけを使っていれば,ユーザーの環境に関係なくX Window Systemで汎用に動作するプログラムが作成できるのです。前提条件が少なく,応用が効くためサンプル・プログラム作成には最適でしょう。また,このあたりの知識を持っておくと,他のウィジェット・ライブラリを用いたときも微調整ができるというメリットもあります。

ソースに日本語を使うだけではだめ

それではさっそく,実例を挙げての解説に移りましょう。まずはやっぱり"Hello, World!"ですね。もちろん「Linuxで始める国際化プログラミング」ですから,多国語対応としてみます。比較のために最初は,多国語化を意識しないものを用意してみます。こちらにソースコードを用意しています。ダウンロードして実際にコンパイルして実行してみてください。簡単にするため,イベントまわりの処理はまったくやっていません。

このコードをコンパイルするには,

% gcc -o hello1 hello1.c -I/usr/X11R6/include -L/usr/X11R6/lib -lX11

とします。コンパイルにはXの開発用ライブラリが必要です。コンパイル後は早速,実行してみましょう。右のようなウィンドウが表示されるはずです。

非多国語版Hello, World!(実行結果)

どうですか? 無事に表示されましたか? それではちょっと無茶をしてみましょう。こちらにそのソースコードを用意しました。先のhello1のソースコードと比べて,XDrawString関数などで使用する文字列をそのまま日本語に変更している点が異なります。Cコンパイラが誤動作しないように,日本語のコードには日本語EUCを使用しています。それでは,さっそく実行してみましょう。

hello2の実行結果

予想通り(?)日本語部分が化けました。原因はいくつかありますが,細かなことを気にせずざっくりと言ってしまうと国際化するための機構を使ってないのがその原因です。次回は,ANSI Cが採用する国際化機構の根本となる,locale(ロケール,ロカール)の概念や,Xの国際化機能の利用法について考えてみましょう。

(佐藤 大輔=densuke@ga2.so-net.ne.jp)


[日経LinuxのTOPページへ][コラムのINDEXへ][第2回へ]



Copyright (C) 2000-2007 Nikkei Business Publications, Inc. All rights reserved.
記事中の情報は、記事執筆時点または雑誌掲載時点のものです。
このサイトに掲載されている記事,写真,図表などの無断転載を禁じます。
詳しくはこちらをご覧ください。