`

[IOS]app内切换语言国际化

    博客分类:
  • IOS
阅读更多

OC:

Util:

#import "LanguageTool.h"
#import "SessionManager.h"

#define CNS @"zh"
#define EN @"en"
#define tap @"change_language"

static NSBundle *localeBundle = nil;
static NSString *currentLanguage = nil;

@interface LanguageTool()
    
    
@end

@implementation LanguageTool
    
+(instancetype)getInstance{
    static LanguageTool *manager = nil;
    static dispatch_once_t onceToken = 0;
    dispatch_once(&onceToken, ^{
        manager = [[LanguageTool alloc] init];
    });
    return manager;
}
    
-(void)getLastTimeLanguage{
    
}
    
    
-(void)changeLanguage:(NSString*)language{
    
    currentLanguage = language;
    
    NSString *path = [[NSBundle mainBundle]pathForResource:language ofType:@"lproj"];
    
    if (path && ![@"en" isEqualToString:language]) {
        localeBundle = [NSBundle bundleWithPath:path];
    }else{
        localeBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj" ]];
    }
}
    
-(void)judgeLanguage{
    
    //Get last change language
    NSString *lastChangeLanguage = nil;
    lastChangeLanguage = [SessionManager getSession:[SessionManager getLastLanguageTap]];
    //    NSLog(@"last chage language: %@",lastChangeLanguage);
    
    //语言优先级:currentLanguage > lastChangeLanguage > system default language
    //user 没有设定语言时:获取系统默认语言
    if (!lastChangeLanguage) {
        if (!currentLanguage) {
            //获取系统默认语言:
            //截取:zh-Hant-HK 去掉区域保留:zh-Hant
            NSLog(@"-------system language:%@",[NSLocale preferredLanguages][0]);
            currentLanguage = [[NSLocale preferredLanguages][0] substringToIndex:2];
            if ([currentLanguage containsString:@"zh"]) {
                
                currentLanguage = [NSString stringWithFormat:@"%@%@",currentLanguage,@"-Hant"];
            }
        }
    }else if(!currentLanguage){
        //当前没有切换语言,app内有设定语言,优先app内语言
        currentLanguage = lastChangeLanguage;
    }
    
}
    
- (NSBundle *)getLocaleBundle{
    
    [self judgeLanguage];
    
    //    NSLog(@"------current language :%@",currentLanguage);
    //    NSLog(@"-------system language:%@",[NSLocale preferredLanguages][0]);
    
    NSString *path = [[NSBundle mainBundle]pathForResource:currentLanguage ofType:@"lproj"];
    
    if (path) {
        localeBundle = [NSBundle bundleWithPath:path];
        
    }else{
        localeBundle= [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj" ]];
    }
    return localeBundle;
}
    
-(NSString *)getTap{
    return tap;
}
    
-(NSString *)getCurrentLanguage{
    //    if (!currentLanguage) {
    //        //截取:zh-Hant-HK 去掉区域保留:zh-Hant
    //        currentLanguage = [[NSLocale preferredLanguages][0] substringToIndex:2];
    //    }
    
    [self judgeLanguage];
    
    NSLog(@"current language:%@",currentLanguage);
    return currentLanguage;
}
    
    @end

 

NSString *account = NSLocalizedStringFromTableInBundle(Account_Lb_Title, nil, [[LanguageTool getInstance] getLocaleBundle] , @"");

 这样就能显示实时切换语言,不用退出app

 

这里是tableview的点击事件,点击切换语言

if(row == 0){
            [self changeLanguage:@"en" BeforeCell:temp AfterCell:indexPath];
//            [self changeLanguage:@"en"];
//            [self changeLanguage:@"en" BeforeCell:_selectRow AfterCell:row]
        }else if(row == 1){
            [self changeLanguage:@"zh-Hant" BeforeCell:temp AfterCell:indexPath];

//            [self changeLanguage:@"zh-Hant"];
        }

 

swift:

原理一样,可以引用上面的Util

调用:

let menuPingTest = NSLocalizedString(Config.advanced.menu_ping_test, tableName: nil, bundle: (LanguageTool.getInstance()?.getLocaleBundle())! ,value: "", comment: "")

 还有其他针对swift的切换办法,参考如下:

https://www.jianshu.com/p/f4a317d83c59

分享到:
评论

相关推荐

    ios-使用国际化实现APP内部切换语言.zip

    使用国际化,实现APP内部切换语言 原理请查看 https://www.jianshu.com/p/5ee17137746b GitHub下载地址 https://github.com/JmoVxia/CLDemo 如有帮助,请star

    iOS应用内切换语言

    在iOS中,实现应用内切换语言主要涉及以下几个关键知识点: 1. **Info.plist配置**:在项目根目录的Info.plist文件中,开启"Localizations"选项,添加需要支持的语言。这样,Xcode会自动生成对应语言的资源文件夹。...

    Swift之Internationalization处理及App内切换.zip

    本教程将深入探讨Swift中实现国际化(Internationalization)的机制,包括资源文件的设置、代码的编写以及如何在App内部实现语言的便捷切换。 一、Swift中的国际化基础 1. InfoPlist.strings:每个支持的语言都...

    App内切换语言

    本资源"App内切换语言"提供了一种简洁而实用的方法来实现在应用程序内部动态切换语言的功能。以下是对这个主题的详细解释: 1. **国际化(i18n)与本地化(l10n)** 国际化是一种设计过程,使软件能够适应不同的...

    iOS APP 内的国际化切换【案例:中英文切换】

    文章:https://kunnan.blog.csdn.net/article/details/103733872 原理: 1、自定义解析本地化字符串的工具类LanguageManager 2、应用内切换语言生效的技术实现:采用销毁根控制器,重新进入一次

    iOS国际化 应用内切换语言更新版

    本文将深入探讨如何在iOS应用中实现国际化,特别是如何实现在应用内部切换语言的功能,以提供即时的语言更新。 一、iOS国际化基础 1. InfoPlist.strings文件:每个支持的语言都需要一个InfoPlist.strings文件,...

    swift4.0 彻底实现国际化,支持程序内切换语言

    五、程序内切换语言 1. 获取当前设备的语言设置: ```swift let currentLanguage = Locale.current.languageCode ``` 2. 更改应用语言: ```swift let userDefaults = UserDefaults.standard userDefaults....

    uni-app语言国际化设置语言包案例

    切换语言 export default { methods: { changeLanguage() { this.$i18n.locale = 'en-US'; // 切换到英文 // 或者 // this.$i18n.locale = 'zh-CN'; // 切换回中文 } } }; ``` 在上面的例子中,`$t('...

    iOS开发教程之APP内部切换语言的实现方法

    iOS开发教程之APP内部切换语言的实现方法 iOS开发教程之APP内部切换语言的实现方法是指在iOS应用程序中如何实现语言的动态切换,以满足不同地区和用户的需求。下面将详细介绍实现方法的原理和步骤。 1. 拦截国际化...

    ios-swift 3.0 app内修改语言.zip

    设置修改app语言, 修改之前版本

    ios语言国际化源码

    在iOS应用开发中,为了使应用能够适应全球不同的语言环境,开发者通常会采用语言国际化(Internationalization)技术。"ios语言国际化源码"这个压缩包很可能是提供了一个Objective-C(OC)开发的示例项目,用于展示...

    iOS 手动切换语言

    在iOS系统中,手动切换语言是一项用户可以根据个人需求调整设备显示语言的功能。这使得用户可以在全球范围内使用各种语言,提供更个性化的体验。本篇文章将详细介绍如何在iOS设备上进行语言切换,以及与之相关的设置...

    ios 国际化 本地化

    国际化(Internationalization,通常缩写为i18n)和本地化(Localization,简称l10n)是iOS应用开发中的重要环节,旨在使应用程序能够适应不同国家和地区的语言、文化以及用户习惯。这两个概念虽然经常一起提及,但...

    iOS多语言本地化和切换

    虽然系统默认会根据用户的设备设置自动选择语言,但也可以在应用内提供切换语言的功能。通过修改`UserDefaults`的`AppleLanguages`键,可以实现语言的动态切换。例如: ```swift let userDefaults = UserDefaults...

    iOS 国际化 demo

    Xcode提供了快速切换语言的设置,以便于调试。 九、动态加载语言 在某些情况下,开发者可能希望允许用户在运行时更改应用的语言。这需要通过改变NSLocalizedString宏的加载策略,或者在运行时动态加载Localizable....

    iOS多语言设置

    以下是关于iOS多语言设置、本地化和国际化的详细知识: 1. **国际化与本地化** - **国际化(Internationalization)**:是指设计和开发应用程序的过程,使其能够适应多种语言和文化环境,而不必对代码进行大量修改...

    ios-Swift多国语言本地切换方法升级Swift4.0.zip

    简单实现APP内的语言切换方式!

    3分钟实现iOS语言本地化/国际化(图文教程)

    本文主要介绍了iOS语言本地化/国际化的实现方法,通过配置需要国际化的语言、应用名称本地化、代码中字符串本地化、多人开发情况下的字符串本地化、图片本地化、Storyboard/XIB本地化等7个主要章节,详细讲解了如何...

    iOS 国际化代码

    在测试国际化功能时,开发者可以使用Xcode的模拟器进行语言环境切换,也可以在真机上设置不同的地区和语言。进行彻底的测试以确保所有资源都能正确加载,并且界面布局无误。 总之,iOS国际化是一个复杂但至关重要的...

Global site tag (gtag.js) - Google Analytics