IOS JSon 파일 로 컬 국제 화

5734 단어 htmlios
IOS JSon 파일 로 컬 국제 화
앞에서 말 했 습 니 다: 프로젝트 제출 한 지 일주일 이 다 되 어 갑 니 다. 아직 심사 에 통과 하지 못 해서 조금 서운 합 니 다!!!주제: 소개: 현재 프로젝트 는 Windows, MAC, IOS, Android 각 플랫폼 인터페이스 가 일치 하고 유지 하기 편리 합 니 다.소프트웨어 의 UI 인터페이스 는 HTML 을 통일 적 으로 사용 하고 HTML 페이지 는 각 플랫폼 을 잘 만 들 며 각 중 사이즈 가 적당 하 다.그리고 WebView 로 이 Html 을 불 러 오 면 앱 의 UI 인터페이스 에 Html 이 나타 납 니 다.그 다음 에 백 엔 드 와 통신 하 는 협 의 를 정 하면 UI HTML 과 백 엔 드 각 플랫폼 의 통신 을 실현 할 수 있 습 니 다.중점, 중점,,,, 그러나 IOS 엔 드 APP 의 경우 UI HTML 페이지 는 국제 화 를 해 야 하고 뒷부분 (Object - C) 이 만 든 제시 성 이나 Buttom 도 국제 화 를 해 야 한다.그러면 문제 가 생 겼 습 니 다. 전단 은 한 세트 를 해 야 하고 뒷부분 도 한 세트 를 해 야 합 니 다. 유지 하기 가 쉽 지 않 습 니 다. 간단 한 방법 으로 실현 할 수 있 습 니까?답 은 긍정 적 이다.HTML 의 경우 로 컬 에서 국제 화 에 대응 하 는 JSon 파일 을 만 든 다음 에 언어 에 따라 로 컬 에 대응 하 는 국제 화 언어 인 JSon 파일 을 불 러 오 는 것 이 문제 가 되 지 않 을 것 입 니 다.그럼 Object - C 단 은 요?Localizable. strings 를 만들어 국제 화 를 실현 합 니 다. JSon 파일 을 불 러 올 수 있 습 니까?어떻게 이 루어 지지?사고방식: 앱 이 처음 실 행 될 때 시스템 언어 를 사용 하고 대응 하 는 언어의 JSon 파일 을 불 러 온 다음 에 JSon 을 메모리 에 불 러 옵 니 다. 필요 한 곳 에서 메모리 에 있 는 JSon 에 대응 하 는 키 값 을 직접 호출 하면 국제 화 를 실현 할 수 있 습 니 다.구체 적 인 실현: step 1: 단리 류 를 만 들 고 초기 화 에서 시스템 언어 를 읽 으 며 시스템 언어 에 따라 해당 하 는 JSon 파일 을 읽 습 니 다. 코드 는 다음 과 같 습 니 다.
#import <Foundation/Foundation.h>

@interface TRLocalTranslation : NSObject
+(TRLocalTranslation *)sharedManager;
-(NSString *)ttObjectForKey:(NSString *)string;
@end

~~~~~~~~~~~~~~~~~~~~~~~~
#import "TRLocalTranslation.h"
@implementation TRLocalTranslation
{
    NSDictionary *tempLan;
}
static TRLocalTranslation *_instance = nil;

+(TRLocalTranslation *)sharedManager
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [[self alloc]init];
    });
    return _instance;
}


-(NSString *)ttObjectForKey:(NSString *)string
{
    NSString *str = (NSString *)[tempLan objectForKey:string];
    return str;
}


-(instancetype)init
{
    self =[super init];
    if (self) {
        NSArray *languageArray  =  [NSLocale preferredLanguages];
        NSString *language      =  [languageArray firstObject];
        if ([language hasPrefix:@"zh"])
        {
            language = @"local_zh.json";
        }else if ([language hasPrefix:@"en"])
        {
            language = @"local_en.json";
        }
        else
        {
            language = @"local_en.json";
        }
        //==Json    
        NSString *path=[[[NSBundle mainBundle]resourcePath] stringByAppendingPathComponent:@"translation"];
        NSString *Json_path=[path stringByAppendingPathComponent:language];
        //==Json  
        NSData *data=[NSData dataWithContentsOfFile:Json_path];
        //==JsonObject
        NSError *error;
        id JsonObject=[NSJSONSerialization JSONObjectWithData:data
                                                      options:NSJSONReadingAllowFragments
                                                        error:&error];
        NSLog(@"%@",JsonObject);
        if ([JsonObject isKindOfClass:[NSDictionary class]])
        {
            tempLan = [(NSDictionary *)JsonObject copy];
        }else {
            NSAssert(0, @"language Json Error!");
        }
    }
    return self;
}
@end

step 2: 국제 화 를 해 야 하 는 곳 에서 직접 호출 [[TRLocalTranslation sharedManager] ttObjectForKey:@“XXXXX”] 하지만 이렇게 쓰 면 비교적 비대 하 다. 매크로 를 정의 하여 코드 를 간소화 하고 시스템 의 실현 을 모방 하 며 매크로 #define TTLocalozedString(x) [[TRLocalTranslation sharedManager] ttObjectForKey:x] 를 모방 할 수 있다.그리고 국제 화가 필요 한 곳 에서 직접 시스템 처럼 호출 TTLocalozedString(@"XXX”) 하면 된다.여기 서 마 치 겠 습 니 다. 좋 은 방법 이 있 으 니 공유 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기