2013年3月23日 星期六

不依賴PhoneGap API前提下設置IOS系統語言

若你跟我一樣,MAC OS X的版本停留在10.6.8,那麼勢必也只能使用4.2版以下的Xcode,進一步說,也就是只能加載1.8版以前的PhoneGap專案。不幸的是,1.8版的PhoneGap API尚未成熟,其中一項,便是無法獲得系統當前語言。

然而山不轉路轉,我們依然有辦法獲取系統語言,只是需要碰觸到一丁點的原生程式碼(對我來說,Object C完全是火星文般的存在,非萬不得已,最好是眼不見為淨),簡易步驟如下:

1. 開啓Classes裡頭的MainViewController.m。


2. 在webViewDidFinishLoad()內加入數行程式碼,如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
- (void) webViewDidFinishLoad:(UIWebView*) theWebView 
{
     // only valid if ___PROJECTNAME__-Info.plist specifies a protocol to handle
     if (self.invokeString)
     {
        // this is passed before the deviceready event is fired, so you can access it in js when you receive deviceready
        NSString* jsString = [NSString stringWithFormat:@"var invokeString = \"%@\";", self.invokeString];
        [theWebView stringByEvaluatingJavaScriptFromString:jsString];
     }
     
     // Black base color for background matches the native apps
     theWebView.backgroundColor = [UIColor blackColor];
    
    // ------------- 加入開始 -----------------
    
    // 取得系統語言 
    NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0];
    
    // 組合呼叫用的字串
    NSString * front = [NSString stringWithFormat:@"setDefaultLanguage(\""];
    NSString * back = [NSString stringWithFormat:@"\");"];
    NSString * temp = [front stringByAppendingString:language];
    NSString * jsFunctionString = [temp stringByAppendingString:back];
    
    // 呼叫設置語言的javascript funciton
    [theWebView stringByEvaluatingJavaScriptFromString:jsFunctionString]; 
    
    // ------------- 加入結束 -----------------

    return [super webViewDidFinishLoad:theWebView];
}



3. 一樣是編寫設置語言的javascript function:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// 設置預設語言
function setDefaultLanguage( language )
{
    if ( ON_DEVICE ) // 實機
    {
        if ( language.toUpperCase().match( "TW" ) ||
            language.toUpperCase().match( "HK" ) ) 
        {
            gLanguageIndex = ZH; // 繁體中文
        }
        else if ( language.toUpperCase().match( "CN" ) )
        {
            gLanguageIndex = CN; // 簡體中文
        }
        else if ( language.toUpperCase().match( "EN" ) )
        {
            gLanguageIndex = EN; // 英文
        }
        else if ( language.toUpperCase().match( "JA" ) ||
                  language.toUpperCase().match( "JP" ) )
        {
            gLanguageIndex = JA; // 日文
        }
        else if ( language.toUpperCase().match( "KO" ) )
        {
            gLanguageIndex = KO; // 韓文
        }
        else
        {
            gLanguageIndex = EN; // 實機的預設語言
        }
    }
    else // 非實機
    {
        gLanguageIndex = TW; // 非實機的預設語言
    }
}



4. 編譯後即可看到成果。




沒有留言:

張貼留言