0

WindowsやMacOSXなどのOSがワンクリックで言語を変更するだけで、突然、すべてのメッセージボックス、ボタンなどが変更されるのではないかといつも思っていました。

この種のメカニズムはどのように実装されていますか?

ありがとう

4

2 に答える 2

5

国際化の鍵は、ユーザーに表示されるテキストをハードコーディングしないようにすることです。代わりに、ロケールをチェックしてテキストを適切に選択する関数を呼び出します。

不自然な例:

// A "database" of the word "hello" in various languages.
struct _hello {
  char *language;
  char *word;
} hello[] = {
  { "English", "Hello" },
  { "French", "Bon jour" },
  { "Spanish", "Buenos dias" },
  { "Japanese", "Konnichiwa" },
  { null, null }
};

// Print, e.g. "Hello, Milo!"
void printHello(char *name) {
  printf("%s, %s!\n", say_hello(), name);
}

// Choose the word for "hello" in the appropriate language,
// as set by the (fictitious) environment variable LOCALE
char *say_hello() {
  // Search until we run out of languages.
  for (struct _hello *h = hello; h->language != null; ++h) {
    // Found the language, so return the corresponding word.
    if (strcmp(h->language, getenv(LOCALE)) == 0) {
      return h->word;
    }
  }
  // No language match, so default to the first one.
  return hello->word;
}
于 2012-05-19T13:55:40.613 に答える
2

UNIXライクなシステムでは、メッセージはカタログであり、ファイルに保存されます。プログラム的に、Cはgettext()国際化とローカリゼーションのための機能と、文化情報を取得するためのlocale.hヘッダーを提供します。

これがここで取られたコード例です

#include <libintl.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
 setlocale( LC_ALL, "" );
 bindtextdomain( "hello", "/usr/share/locale" );
 textdomain( "hello" );
 printf( gettext( "Hello, world!\n" ) );
 exit(0);
}

MS-Windowsでは、を使用しMUI(Multilingual User Interface)ます。プログラムでCでLoadString()関数を使用できます。チェックアウトhow to do

于 2012-05-19T14:46:00.333 に答える