Développement iOS : internationalisation du langage NSLocalizedString (localisation) + changement de langue au sein de l'APP

Cet article explique deux points fonctionnels :
① Laissez l'APP afficher des textes différents selon la langue système du téléphone.
② Changer la langue dans l'APP n'a rien à voir avec la langue du système du téléphone.

Localisation de la langue NSLocalizedString

Tout d'abord, nous devons faire en sorte que notre application prenne en charge plusieurs langues. Je vais expliquer le processus en détail sous forme d'images et de textes.

  1. Créer Localizable.stringsdes fichiers, des touches de raccourcicommand + N

  2. Sélectionnez les langues que vous souhaitez prendre en charge (cliquez sur Localizable.stringsFichier, dans le panneau de droite de Xcode)

  3. Configurer le texte multilingue

  4. Prend en charge plus de langues

  5. Utilisez une langue localisée et remplacez tout le texte là où du texte est nécessaire par une écriture dans la langue locale
    .

    NSString *str = @"你好";
    

    Configurer la méthode d'écriture localisée

    NSString *str = NSLocalizedString(@"你好", nil)
    

Changer de langue dans l'application

Je suis à Pékin, en Chine, et la langue de mon téléphone mobile est le chinois simplifié. Alors, comment l'application affiche-t-elle la configuration anglaise ?

  1. Créer NSBundleune catégorie
    #import <Foundation/Foundation.h>
    	
    @interface NSBundle (Language)
    + (void)setLanguage:(NSString *)language;
    
    @end
    
    
    #import "NSBundle+Language.h"
    #import <objc/runtime.h>
    static const char _bundle = 0;
    
    @interface BundleEx : NSBundle
    
    @end
    
    @implementation BundleEx
    
    - (NSString *)localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName {
          
          
    
        NSBundle *bundle = objc_getAssociatedObject(self, &_bundle);
        return bundle ? [bundle localizedStringForKey:key value:value table:tableName] : [super localizedStringForKey:key value:value table:tableName];
    }
    
    @end
    
    @implementation NSBundle (Language)
    + (void)setLanguage:(NSString *)language {
          
          
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
          
          
            object_setClass([NSBundle mainBundle], [BundleEx class]);
        });
    
        objc_setAssociatedObject([NSBundle mainBundle], &_bundle, language ? [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]] : nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
    @end
    
    
  2. Forcer l'application à afficher la langue spécifiée (appelée lorsque votre entreprise doit changer de langue)
    //简体中文
    [NSBundle setLanguage:@"zh-Hans"];
    
  3. Obtenez la langue du système (cela n'a rien à voir avec le choix de l'utilisateur. Vous devez sauvegarder vous-même la mémoire pour le choix de l'utilisateur)
    (cette fonction peut ne pas être utilisée en fonction de votre logique métier, elle est à titre de référence uniquement)
    NSArray *appleLanguages = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"];
    if (appleLanguages.count > 0) {
          
          
    	NSString *currentLanguage = appleLanguages[0];
    	// 在这里判断 currentLanguage 是哪国的语言,来处理你的逻辑
    	}
    

Répertoriez plusieurs identifiants de langue pouvant être utilisés dans le développement iOS

Langue régionale logo
arabe ar
Chinois simplifié zh-Hans
chinois traditionnel zh-Hant
Chinois traditionnel (Hong Kong) zh-Hant-HK
Chinois traditionnel (Taïwan) zh-Hant-TW
Anglais Royaume-Uni) dans
Anglais (Australie) en-AU
Anglais (Inde) et en
Français fr
Indonésie identifiant
Italie il
Japon et
Corée du Sud est
malais MS
Portugais (Portugal) pt-pt
Russie ru
Espagnol es
Suède sv
Thaïlande ème
Ukraine Royaume-Uni
Viêt Nam vi

Suivez, aimez et partagez plus d'histoires de développement...

Je suppose que tu aimes

Origine blog.csdn.net/wujakf/article/details/127461704
conseillé
Classement