文字列



::copystring



char * copystring(const char * s)

C++ の new 演算子を使って文字列 s のコピーを作成します. 従って,コピーは delete 演算子で削除できます.

この関数は撤廃されています.wxString クラスを使って ください.



::wxGetTranslation



const char * wxGetTranslation(const char * str)



const char * wxGetTranslation(const char * str, const char * strPlural, size_t n)

現在のlocale における str の翻訳メッセージを 返します.str に対応するメッセージが読み込み済みのメッセージ カタログ (国際化の概要 参照) にない場合,もとの文字列を返します.デバッグビルドの場合には エラーメッセージをログに出力します - このため,まだ翻訳されていない メッセージを調べるのに役立ちます.この関数は非常に頻繁に使われるため, もうひとつの (かつ Unix の世界ではよく使われている) 構文, _() が提供されています: このマクロは wxGetTranslation と同じ処理を行います.

上の二つの関数プロトタイプのうち後者の形式は,単数と複数形の表現が 異なる英語や,複数形の表現が異なる言語における翻訳メッセージを取得 する際に用います.この形式には二つの引数が追加されています: str パラメタには,変換したい文字列の単数形を入れねばなりません. この文字列はカタログの検索にも使われるので注意してください. strPlural パラメタは (英語における) 複数形です. n パラメタは,どの複数形を用いるかを決める際に使います. メッセージカタログ中に翻訳メッセージが見つからなかった場合, `n == 1' ならstr を返し,そうでなければ strPlural を 返します. 複数形の扱いに関する詳しい情報は, GNU gettext manual (#2) を参照してください.

どちらの形式も wxLocale::GetString を呼び出します.



::wxIsEmpty



bool wxIsEmpty(const char * p)

ポインタ pNULL であるか,空文字列を指している場合には true を,そうでなければ false を返します.



::wxStrcmp



int wxStrcmp(const char * p1, const char * p2)

pip2 より小さい場合,等しい場合,大きい場合に,それぞれ 負,ゼロ,正の値を返します.大小文字を区別して比較を行います.

この関数は大小文字の区別をせずに比較を行う標準 C 関数 stricmp() の機能を補完するためのものです.



::wxStricmp



int wxStricmp(const char * p1, const char * p2)

pip2 より小さい場合,等しい場合,大きい場合に,それぞれ 負,ゼロ,正の値を返します.大小文字を区別せず比較をおこないます.

この関数は大小文字の区別をせずに比較を行う標準 C 関数 stricmp() の機能を補完するためのものです.



::wxStringMatch



bool wxStringMatch(const wxString& s1, const wxString& s2,
bool subString = true, bool exact = false)

NB: この関数は撤廃されています. wxString::Find を使ってください.

s1s2 内にある場合に true を返します. exact が false の場合,大小文字の区別をしません. subStringfalse の場合,部分文字列のマッチングを 行いません.



::wxStringEq



bool wxStringEq(const wxString& s1, const wxString& s2)

NB: この関数は撤廃されています. wxString を使ってください.

#define wxStringEq(s1, s2) (s1 && s2 && (strcmp(s1, s2) == 0))

のように定義されているマクロです.



::wxStrlen



size_t wxStrlen(const char * p)

標準 C 関数 strlen() を安全に行えるようにしたものです: strlen() と全く同じく動作します(文字列の長さを返します)が, pNULL ポインタの場合には 0 を返します.



::wxSnprintf



int wxSnprintf(wxChar * buf, size_t len, const wxChar * format, ...)

この関数は危険な標準 C 関数 sprintf() を置き換えるためのもので, いくつかのプラットフォームで利用できる snprintf() に似ています. sprintf() との違いは,追加の引数 - バッファサイズ - があり, バッファをオーバフローさせないという点です.

バッファにコピーされたキャラクタ数を返します.バッファがに十分な領域が ない場合には -1 を返します.

See also

wxVsnprintf, wxString::Printf



wxT



wxChar wxT(char ch)



const wxChar * wxT(const char * s)

wxT() はマクロで,キャラクタおよび文字列リテラル (すなわち 'x'"foo") を Unicode ビルドの設定下で自動的に Unicode に変換 します. 詳しくはUnicode の概要 を参照してください.

ASCII ビルドでは,このマクロは引数に渡した文字列をそのまま返します. 実際のマクロ定義は以下のようになっています:

#ifdef UNICODE
#define wxT(x) L ## x
#else // !Unicode
#define wxT(x) x
#endif



wxTRANSLATE



const wxChar * wxTRANSLATE(const char * s)

このマクロは,通常のプログラムコード中では何も行いません - このマクロは 単に引数の値を展開するだけです (ただし, Unicode ビルドでは, wxT と同じになるので, wxT と同時に使わないでください. さもなければ,メッセージが翻訳によって本当に判別不能なものに変換されて しまいます).

とはいえ,この関数には,文字列リテラルを xgettext プログラムの生成 するメッセージカタログで展開するようマークするという働きがあります. 通常,この操作は _() で行うのですが, _() は文字列を展開対象としてマークするだけでなく, wxGetTranslation に展開されるため, アレイを静的に初期化したい場合などに利用できません.

以下に,もっと分かりやすく例を示します: 曜日名が入った静的な文字列アレイが あり,それを翻訳したいとしましょう (ちなみにこれは例としてあまりよくは ありません.というのも,実際には wxDateTime を 使えばローカライズされた曜日名を得られるからです).もし,以下のような コード

static const wxChar * const weekdays[] = { _("Mon"), ..., _("Sun") };
...
// use weekdays[n] as usual

を書くと,関数呼び出しはアレイの初期化部分内に隠されてしまうため, コンパイルできなくなります.従って,ここでは

static const wxChar * const weekdays[] = { wxTRANSLATE("Mon"), ..., wxTRANSLATE("Sun") };
...
// use wxGetTranslation(weekdays[n])

のようにせねばなりません.

上の例で wxTRANSLATE() を省略してもコードをコンパイル できるはずですが ,プログラムのメッセージカタログに曜日名の 翻訳メッセージは入っていないはずなので, wxGetTranslation がメッセージ を見つけられず,期待通りに動作しないでしょう.



::wxVsnprintf



int wxVsnprintf(wxChar * buf, size_t len, const wxChar * format, va_list argPtr)

wxSnprintf と同じですが,任意個数のパラメタを とる代わりに va_list を引数にとります.

See also

wxSnprintf, wxString::PrintfV



_



const wxChar * _(const char * s)

このマクロは wxGetTranslation 呼び出しに 展開されます.従って,このマクロは wxTRANSLATE と同様,メッセージを xgettext で展開するようにマークします. ただし,それだけではなく,実行時に文字列の現在のロケールにおける翻訳 を返します.

このマクロを _T() と混同しないように注意 してください!



_T



wxChar _T(char ch)



const wxChar * _T(const wxChar ch)

このマクロは wxT と同じです. wxWidgets 内で定義されている のは,単にこの関数名が Win32 ヘッダで (同じマクロのもう一つの名前, _TEXT() と並んで) 定義されていて, Windows プログラマ にとってより直感的だからです

このマクロを _T() と混同しないように注意 してください!

ymasuda 平成17年11月19日