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”)
하면 된다.여기 서 마 치 겠 습 니 다. 좋 은 방법 이 있 으 니 공유 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다른 사람의 웹사이트 편집: contenteditable 및 designMode그래도 우리가 그렇게 할 수 있다고 생각하는 것은 멋진 일입니다. 제가 강조하고 싶었던 일종의 관련 API가 실제로 몇 개 있기 때문에 오늘 그것을 가져왔습니다. contenteditable는 "true" 값이 할당...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.