2011-01-27 8 views
1

iPhoneのローカライゼーションについては、Objective-Cでは驚くことではありません。私が取り組んでいるプロジェクトは、すでに完全にC++を使用してiPhoneで書かれ、作業中です。既にいくつかの完全な翻訳があります。私たちが今必要とするのは、ロケール/言語コードを見つける方法です。コンピュータ上では、これはgetenvを使って "LANG"をチェックするか、 "LC_ALL"を設定していない場合に行われます。これはiPhone上では動作していないようです(何も設定されていません)ので、私は他の方法が必要です。C++でiPhone上でロケールを取得する方法は?

私の知る限り、Objective-Cのでそれを行うための最善の方法は次のとおりです。

NSString* languageCode = [[NSLocale preferredLanguages] objectAtIndex:0]; 

しかし、その後、私は、行うことができた(NSString*からchar*/std::stringに変換する必要があると思いますそれは一般的に厄介な/乱雑です)。だから、C++から直接ロケールを取得する簡単な方法はありますか?

は、ここに私がやってしまったものです:

#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR 
     #include <CoreFoundation/CoreFoundation.h> 
#endif 
/* ... */ 
#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR 
     CFArrayRef localeIDs = CFLocaleCopyPreferredLanguages(); 
     if (localeIDs) 
     { 
      CFStringRef localeID = (CFStringRef)CFArrayGetValueAtIndex(localeIDs, 0); 
      char tmp[16]; 
      if (CFStringGetCString(localeID, tmp, 16, kCFStringEncodingUTF8)) 
       locale = std::string(tmp); //this is the std::string 
      CFRelease(localeIDs); 
     } 
#endif 
+0

あなたがC++クラス/関数にそれをラップすることができます。 – detunized

+0

そしてなぜそれを何度もやる必要がありますか? – detunized

+0

私は何度もそれをやりたいと言いましたか?そして、そうですね、これだけで、Objective-C++を使って新しいファイルを作ることができると思いますが、それでもやはり面倒で面倒です。 –

答えて

1

おそらくあなたはCFLocaleGetValueを(使用する)

関連する問題