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
あなたがC++クラス/関数にそれをラップすることができます。 – detunized
そしてなぜそれを何度もやる必要がありますか? – detunized
私は何度もそれをやりたいと言いましたか?そして、そうですね、これだけで、Objective-C++を使って新しいファイルを作ることができると思いますが、それでもやはり面倒で面倒です。 –