2012-10-04 4 views
0

내 응용 프로그램을 열 때 사용자에게 따뜻한 환영을 전하고 싶습니다. 그래서 무작위로 다른 문장을 보여주고 싶습니다. 메시지 수는 언어마다 다릅니다.다른 요소 수로 지역화

이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

내 아이디어 :

  1. 저장 문자열 파일도 개수 -이이 메시지를 구분을 "welcomeCount" = "5"; "welcomeN" = "Hi....";

  2. 을 유지해야하기 때문에>,이 아이디어를 좋아하지 않는다 -> 이 생각이 마음에 들지 않으므로이 아이디어가 마음에 들지 않으므로이 생각을해야합니다. "welcomeMessages" = "Hey there...|MessageN";

누구나이 문제를 우아하게 해결할 수있는 아이디어가 있습니까?

답변

1

당신은 환영 메시지를 저장할 수

"Welcome_0" = "Hello"; 
"Welcome_1" = "Hi"; 
"Welcome_2" = "What up"; 
"Welcome_3" = "Howdy"; 

사용 카운트를 찾을 수 있습니다 지역화 된 속성 목록 엑스 코드에서

  • , 파일로 이동 -> 새로 만들기 -> 파일 ...
  • 이 리소스를 선택 -> 속성 목록 템플릿과 파일 이름으로, 예를 들어 "Welcome.plist".
  • Xcode에서 Welcome.plist를 선택하고 루트 객체의 유형을 에서 으로 변경하십시오.
  • Welcome.plist를 선택하여 파일 검사기로 이동 한 다음 "지역화 ..."을 클릭하십시오. 그런 다음 Welcome.plist에 대해 원하는 현지화를 선택하십시오 (예 : 영어 및 독일어).
  • 이제 별도로 편집 할 수있는 각 언어의 환영리스트가 생겼습니다.
  • 문자열을 추가하려면 속성 목록에서 "+"기호를 클릭하십시오. 프로그램에서

, 당신은이 배열 messages로, 사용자의 언어에 따라 "오른쪽"제대로 목록을로드

NSString *path = [[NSBundle mainBundle] pathForResource:@"Welcome" ofType:@"plist"]; 
NSArray *messages = [NSArray arrayWithContentsOfFile:path]; 

쉽게 목록을로드 할 수 있습니다. 당신과 함께 임의의 메시지를 선택할 수 있습니다

int idx = arc4random_uniform([messages count]); 
NSString *msg = [messages objectAtIndex:idx]; 
+0

고마워요! 나는이 해결책을 정말로 좋아한다! –

0

유지 관리를 최소화하기 위해 이진 검색을 사용하여 사용 가능한 유사 콘텐츠를 찾을 수 있습니다. 당신은 당신의 Localizable.strings에 다음이 있다고 :

int lower = 0, upper = 10; 
while (lower < upper - 1) { 
    int mid = (lower + upper)/2; 
    NSString *key = [NSString stringWithFormat:@"Welcome_%i", mid]; 
    BOOL isAvailable = ![key isEqualToString:NSLocalizedString(key, @"")]; 
    if (isAvailable) lower = mid; 
    else upper = mid; 
} 

를 마지막으로 사용하면 임의의 메시지를 선택 :

NSString *key = [NSString stringWithFormat:@"Welcome_%i", rand() % upper]; 
NSString *welcome = NSLocalizedString(key, @""); 
+0

물론, ... 내가 바라고,' "welcomeMessages"= [ "A", "B", "N"] 같은 있다는 것을,' 얻기 값은 NSLocalizedString (무작위) 또는 NSLocalizedArray를 통해 ... 지금까지 답변을 드리겠습니다. :) –