Objective-C 應用內多語言切換

1. 多語言切換範例程式碼

GitHub:

https://github.com/f40706/change_language_1/tree/main

2. 範例程式碼結果圖

範例程式碼中英文翻譯表

英文

“PressedEnglish" = “Pressed English";
“PressedChinese" = “Pressed Chinese";

中文

“PressedEnglish" = “點擊英文";
“PressedChinese" = “點擊中文";

2. 新增多語言方法

實際功能,可以下載GitHub範例

新增想要的語言
範例使用中文
這個英文是固定的喔
選擇使用的語言
將要使用的打勾

這樣就新增完成囉

3. 程式碼

核心程式碼

-(void) initLanguage: (NSString*) selectLanguage {
    NSString *localeLanguageCode = [[[NSBundle mainBundle] preferredLocalizations] firstObject];
    NSLog(@"localeLanguageCode-> %@",localeLanguageCode);
    
    if([selectLanguage  isEqual: @"en"]) {
        NSString *path = [[NSBundle mainBundle]pathForResource:@"en" ofType:@"lproj"];
        bundle_language = [NSBundle bundleWithPath:path];
    } else if([selectLanguage  isEqual: @"zh"]) {
        NSString *path = [[NSBundle mainBundle]pathForResource:@"zh-Hant" ofType:@"lproj"];
        bundle_language = [NSBundle bundleWithPath:path];
    }
}

-(NSString*) getStringForKey:(NSString*)key withTable:(NSString*)table {
    NSString *string = @"";
    if(bundle_language) {
        string = NSLocalizedStringFromTableInBundle(key, table, bundle_language, @"");
        return string;
    }
    string = NSLocalizedStringFromTable(key, table, @"");
    return string;
}

呼叫方式

- (IBAction)onEnglishPressed:(UIButton *)sender {
    
    [_context_label setText:[_delegate getStringForKey:@"PressedEnglish" withTable:@""]];
}

- (IBAction)onChinesePressed:(UIButton *)sender {
    [_context_label setText:[_delegate getStringForKey:@"PressedChinese" withTable:@""]];
}

- (IBAction)onLanguageChangePressed:(UIButton *)sender {
    if(_curLanguage == 1) {
        [_delegate initLanguage:@"en"];
        _curLanguage = 0;
        [_curLanguageBtn setTitle:@"當前語言:英文" forState:UIControlStateNormal];
    } else {
        [_delegate initLanguage:@"zh"];
        _curLanguage = 1;
        [_curLanguageBtn setTitle:@"當前語言:中文" forState:UIControlStateNormal];
    }
}

- (void)viewDidLoad {
    [super viewDidLoad];
    _delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    _curLanguage = 0;
    [_delegate initLanguage:@"en"];
}


Objective-C


訂閱Codeilin的旅程,若有最新消息會通知。

廣告

Objective-C 延遲與取消呼叫Function

1. 呼叫與延遲方法如下

GitHub:

https://github.com/f40706/delay_and_call_method

2. 程式碼

按下onDelayMethodPressed,10秒後會呼叫execute Function

按下onCancelMethodPressed,會"取消"延遲呼叫的execute Function

2022-03-22 22:37:18.903931+0800 delay_and_call_method[3968:102311] delay call
2022-03-22 22:37:28.905523+0800 delay_and_call_method[3968:102311] execute
2022-03-22 22:37:34.219536+0800 delay_and_call_method[3968:102311] delay call
2022-03-22 22:37:35.618120+0800 delay_and_call_method[3968:102311] cancel execute
2022-03-22 22:37:56.714777+0800 delay_and_call_method[3968:102311] delay call
2022-03-22 22:37:58.981749+0800 delay_and_call_method[3968:102311] cancel execute
2022-03-22 22:38:24.482147+0800 delay_and_call_method[3968:102311] delay call
2022-03-22 22:38:34.483330+0800 delay_and_call_method[3968:102311] execute

實際功能,可以下載GitHub範例

- (IBAction)onDelayMethodPressed:(UIButton *)sender {
    [self delayMethod:10];
}

- (IBAction)onCancelMethodPressed:(id)sender {
    [self cancelDelayMethod];
}

- (void) delayMethod:(int)delay   {
    [self performSelector:@selector(execute) withObject:nil afterDelay:delay];
    NSLog(@"delay call");
}

- (void) cancelDelayMethod {
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(execute) object:nil];
    NSLog(@"cancel execute");
}

- (void) execute {
    NSLog(@"execute");
}


Objective-C


訂閱Codeilin的旅程,若有最新消息會通知。

廣告

透過 WordPress.com 建置的網站.

向上 ↑