Soy nuevo en iOS y estoy enfrentando problemas en la conversión de idiomas

Para inglés estoy usando un código como este

 [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", nil] forKey:@"AppleLanguages"];
            [[NSUserDefaults standardUserDefaults]synchronize];

            //to set the selected language at runtime (dynamically)
            NSLog(@"Language set=Malay");
            [NSBundle setLanguage:@"en"];
            MenuScreen *menu=[[MenuScreen alloc] initWithNibName:@"MenuScreen" bundle:nil];
            [self.navigationController pushViewController:menu animated:YES];

Para el idioma tailandés utilicé un código como este

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"th-TH", nil] forKey:@"AppleLanguages"];
            [[NSUserDefaults standardUserDefaults]synchronize];

            //to set the selected language at runtime (dynamically)
            NSLog(@"Language set=Malay");
            [NSBundle setLanguage:@"th-TH"];
            MenuScreen *menu=[[MenuScreen alloc] initWithNibName:@"MenuScreen" bundle:nil];
            [self.navigationController pushViewController:menu animated:YES];

Pero cada vez se requiere reiniciar la aplicación. ¿Hay alguna solución para esto o cualquier cosa que estoy haciendo mal? ¡Gracias por adelantado!

0
Muju 4 jun. 2017 a las 13:43

2 respuestas

La mejor respuesta

Muju Creé un proyecto de muestra y trabajé para encontrar una solución a su pregunta. Obtuve la solución perfectamente.

En mi ejemplo a continuación, quiero cambiar " Bienvenido a Tailandia " a "ยินดี ต้อนรับ สู่ ประเทศไทย". Utilizo el concepto de localización para esto.

Antes de ir a los pasos, quiero que veas el diseño de mi guión gráfico

enter image description here

Por favor, siga los pasos a continuación.

PASO 1: Haga clic en Proyecto-> información-> Localización-> Haga clic en +

Ahora muestra la lista desplegable de idiomas. De allí deberíamos seleccionar tailandés

enter image description here

PASO 2: una vez que elegimos o seleccionamos el idioma de la lista desplegable, muestra la ventana a continuación y debemos hacer clic en el botón Finalizar

enter image description here

Ahora se ve a continuación

enter image description here

PASO 3: Cree el archivo de cadena para la localización y establezca el nombre.

enter image description here

enter image description here

enter image description here

Arriba configuré el nombre del archivo de cadena como LocalizationThai

PASO 4: haga clic en LocalizationThai.strings también haga clic en File Inspector. Haga clic en Localization dentro del File Inspector. Ahora muestra el cuadro emergente a continuación.

enter image description here

PASO 5: haga clic en Localizar. Una vez que localice, se muestra a continuación de esta manera

enter image description here

PASO 6: haga clic en 3 casillas de verificación

enter image description here

Ahora en paquete tenemos 3 archivos en LocalizationThai.strings

enter image description here

PASO 7: escriba el texto de cambio requerido en los archivos de cadena.

i.In LocalizationThai.strings (Thai) escribo debajo del texto

enter image description here

ii. En el archivo LocalizationThai.strings (inglés) escribo debajo del texto

enter image description here

iii. En el archivo LocalizationThai.strings (Base) escribo debajo del texto

enter image description here

PASO 8: Cree el archivo de encabezado para los múltiples idiomas.

enter image description here

PASO 9: establezca el nombre del encabezado (configuro el nombre del encabezado como LocalizationHeader) y defina los idiomas en el archivo del encabezado como se muestra a continuación

enter image description here

LocalizationHeader.h

#ifndef LocalizationHeader_h
#define LocalizationHeader_h


#define ENGLISH 0
#define THAI 1


#endif /* LocalizationHeader_h */

PASO 10: Implemente la siguiente parte de codificación

Localización.h

#import <Foundation/Foundation.h>
#import "LocalizationHeader.h"
@interface Localization : NSObject
+(Localization *)sharedInstance;
+(NSString*) strSelectLanguage:(int)curLang;
+(NSString*) languageSelectedStringForKey:(NSString*) key;
@end

Localización.m

#import "Localization.h"
int currentLanguage,selectedrow;
@implementation Localization

+(Localization *)sharedInstance
{
    static Localization *sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[Localization alloc] init];
    });
    return sharedInstance;
}


+(NSString*) strSelectLanguage:(int)curLang{
    if(curLang==THAI){
        [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"th", nil]forKey:@"AppleLanguages"];
    }
    else{
        [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", nil]forKey:@"AppleLanguages"];
    }
    [[NSUserDefaults standardUserDefaults] synchronize];
    currentLanguage=curLang;
    NSString *strLangSelect = [[[NSUserDefaults standardUserDefaults]objectForKey:@"AppleLanguages"] objectAtIndex:0];
    return strLangSelect;
}

+(NSString*) languageSelectedStringForKey:(NSString*) key
{
    NSString *path;
    NSString *strSelectedLanguage = [[[NSUserDefaults standardUserDefaults]objectForKey:@"AppleLanguages"] objectAtIndex:0];
    //When we check with iPhone,iPad device it shows "en-US".So we need to change it to "en"
    if([strSelectedLanguage hasPrefix:@"en-"])
        strSelectedLanguage = [strSelectedLanguage stringByReplacingOccurrencesOfString:@"en-US" withString:@"en"];
    if([strSelectedLanguage isEqualToString:[NSString stringWithFormat: @"en"]]){
        currentLanguage=ENGLISH;
        selectedrow=ENGLISH;
        path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
    }
    else{
        currentLanguage=THAI;
        selectedrow=THAI;
        path = [[NSBundle mainBundle] pathForResource:@"th" ofType:@"lproj"];
    }
    NSBundle* languageBundle = [NSBundle bundleWithPath:path];
    NSString* str=[languageBundle localizedStringForKey:key value:@"" table:@"LocalizationThai"];
    return str;
}
@end

ViewController.h

#import <UIKit/UIKit.h>
#import "Localization.h"
@interface ViewController : UIViewController{
    Localization *localization;

}
@property (strong, nonatomic) IBOutlet UILabel *lblWelcome;
- (IBAction)actionChangeLanToThai:(id)sender;
- (IBAction)actionChangeLangToEng:(id)sender;
@end

ViewController.m

#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize lblWelcome;

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    localization = [Localization sharedInstance];
    lblWelcome.text = [Localization languageSelectedStringForKey:@"Welcome to Thailand"];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)actionChangeLanToThai:(id)sender {
    [Localization strSelectLanguage:THAI];
    lblWelcome.text = [Localization languageSelectedStringForKey:@"Welcome to Thailand"];

}

- (IBAction)actionChangeLangToEng:(id)sender {
    [Localization strSelectLanguage:ENGLISH];
    lblWelcome.text = [Localization languageSelectedStringForKey:@"Welcome to Thailand"];
}
@end

Cuando ejecuto la aplicación por primera vez

enter image description here

Luego, cuando cambio el idioma de inglés a tailandés

enter image description here

De nuevo cuando lo cambio a inglés

enter image description here

Tienes que seguir los mismos pasos para XIB

A continuación se muestra para XIB

Creo el ViewController con XIB. El nombre del ViewController es RootViewController ingrese la descripción de la imagen aquí

Ahora vea la parte de diseño ingrese la descripción de la imagen aquí

AppDelegate.h

#import <UIKit/UIKit.h>
#import "RootViewController.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong,nonatomic) RootViewController *viewController;
@end

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.viewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
    self.window.rootViewController = navController;
    [navController setNavigationBarHidden:YES];
    [self.window makeKeyAndVisible];
    return YES;     
  }

RootViewController.h

 #import <UIKit/UIKit.h>
 #import "Localization.h"
 @interface RootViewController : UIViewController{
    Localization *localization;
 }
 @property (strong, nonatomic) IBOutlet UILabel *lblWelcomeThaiLang;
 - (IBAction)actionChangeLangToThai:(id)sender;
 - (IBAction)actionChangeLangToEng:(id)sender;
 @end

RootViewController.m

 #import "RootViewController.h"
 @interface RootViewController ()
 @end
 @implementation RootViewController
 @synthesize lblWelcomeThaiLang;
 - (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
 }
 - (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
 }
 - (IBAction)actionChangeLangToThai:(id)sender {
    [Localization strSelectLanguage:THAI];
    lblWelcomeThaiLang.text = [Localization languageSelectedStringForKey:@"Welcome to Thailand"];
 }
 - (IBAction)actionChangeLangToEng:(id)sender {
    [Localization strSelectLanguage:ENGLISH];
    lblWelcomeThaiLang.text = [Localization languageSelectedStringForKey:@"Welcome to Thailand"];
 }
 @end

Ahora mira el resultado

enter image description here

enter image description here

2
user3182143 5 jun. 2017 a las 09:03

Hola, en ios tenemos un paquete para almacenar los archivos de localización. Cuando cambiamos el idioma usando [[NSUserDefaults standardUserDefaults] setObject: [NSArray arrayWithObjects: @ "th-TH", nil] forKey: @ "AppleLanguages"]; [[NSUserDefaults standardUserDefaults] sincronizar];

Solo cambia la configuración regional de la aplicación actual, no el paquete de localización.

Para cambiar el idioma en la aplicación, debe cambiar el paquete de idioma para eso. Para cambiar el idioma en la aplicación, debe usar

BundleLocalization

https://github.com/cmaftuleac/BundleLocalization

[BundleLocalization sharedInstance] .language = @ "de"; NSLog (@ "Idioma de la aplicación:% @", [BundleLocalization sharedInstance] .language);

0
Optimus 4 jun. 2017 a las 13:54