현지화 된 스토리 보드 문자열을 업데이트 할 수 있습니까?


226

나는 base.lproj 스토리 보드와 3 개의 문자열 파일을 작성하여 응용 프로그램의 일부를 현지화했습니다. 한 달 전과 후에 앱에 새보기 컨트롤러를 추가했지만이 컨트롤러의 버튼과 레이블이 문자열 파일에 나타나지 않습니다.

이 3 개의 스토리 보드 첨부 문자열 파일을 업데이트 할 수 있습니까? 아니면 NSLocalizableString 및 Localizable.strings를 사용하여 프로그래밍 방식으로 새 문자열 번역을 추가해야합니까?


답변:


264

두 가지 옵션이 있습니다.

옵션 1

Xcode는 파일을 [Interface Builder Cocoa Touch Storyboard] 파일 형식 또는 [Localizable Strings] 파일 형식 으로 변환하여 파일을 "재로드"할 수 있습니다 .

  1. 프로젝트 네비게이터에서 기본 스토리 보드 파일을 선택하십시오.
  2. 파일 관리자에서 현지화 섹션을 찾습니다
  3. 파일이 현재 [Localizable Strings] 인 경우 [Interface Builder Cocoa Touch Storyboard]로 변경하거나 그 반대로 변경하십시오.
  4. Xcode는 스토리 보드를 현재 버전으로 변환하면서 이전 현지화 노력을 유지해야합니다. 원하는 경우 여기에서 파일을 원래 파일 형식으로 다시 변경할 수 있습니다.

옵션 2

스토리 보드에서 문자열을 추출하려면 ibtool을 사용하십시오.

  1. 터미널 응용 프로그램을 엽니 다

  2. Base.lproj 디렉토리를 찾으십시오

  3. 이 줄을 사용하여 문자열을 추출하십시오.

    ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings

  4. ibtool이 문자열을 file_name.strings로 추출한 후이를 복사하여 원래 .strings 파일에 붙여 넣을 수 있습니다

자세한 정보를 보려면 다음 사이트를 방문하십시오 : https://conyac.cc/business/columns/localization_guide_ios


1
옵션 1을 시도했지만 파일 형식을 [Localizable Strings]에서 [Interface Builder Cocoa Touch Storyboard]로 변경하면 항상 Xcode 5.0.1의 충돌이 발생합니다. 그 이유는 위의 가능성을 알지 못했기 때문에 스토리 보드 현지화 파일을 손으로 미리 편집했기 때문일 수 있습니다.
Reinhard Männer

16
옵션 1은 작동하지만 "Localizable .."에서 "interface ..."로 변경 한 다음 다시 되돌려 야합니다!
João Nunes

3
XCode 6.0.1을 사용하면 옵션 1이 작동하지 않습니다. .strings 파일을 .interfacebuilder로 변환하려고 할 때 XCode는 파일을 변환해야하는지 묻습니다. 파일은 파일 시스템에서 작성되지만 문자열 파일은 여전히 ​​남아 있으며 이전 값을 포함합니다.
수신 거부 비트

53
나를 위해 옵션 1은 이미 번역 된 모든 문자열을 영어 문자열로 대체했습니다. 번역을 다시 한 번 추가해야했습니다.
Mihail Velikov

5
옵션 1은 Xcode 7에서 매우 불안정한 것으로 보입니다. 때로는 작동하지만 때로는 작동하지 않습니다. 때로는 이미 번역 된 문자열 중 일부를 영어 버전으로 무작위로 바꿉니다.
Adam Johns

76

BartyCrouch를 확인하면 문제가 완벽하게 해결됩니다. 또한 오픈 소스 이며 적극적으로 유지 관리 되며 프로젝트 내에 쉽게 설치 및 통합 할 수 있습니다 .


Homebrew 를 통해 BartyCrouch를 설치 하십시오 .

brew install bartycrouch

또는 Mint 를 통해 설치하십시오 .

mint install Flinesoft/BartyCrouch

Storyboards / XIBs Strings 파일을 점차적으로 업데이트 하십시오.

$ bartycrouch update

이것은 당신이 찾고 있던 것을 정확하게 할 것입니다.


하기 위해 계속 하여 스토리 보드를 / XIBs 문자열은 파일 시간이 지남에 따라 업데이트 내가보기 엔 빌드 스크립트를 (빌드 스크립트를 추가하는 방법에 대한 지침을 추가하는 것이 좋습니다 여기를 )

if which bartycrouch > /dev/null; then
    bartycrouch update -x
    bartycrouch lint -x
else
    echo "warning: BartyCrouch not installed, download it from https://github.com/Flinesoft/BartyCrouch"
fi

점차적으로 당신의 스토리 보드를 업데이트 외에도 / XIBs 문자열이는 것 파일을 확인하십시오 할 Localizable.strings파일이 업데이트 유지 새로 추가하여 코드에서 키 NSLocalizedString중복 키 또는 빈 값 및 경고보기.

자세한 내용GitHub 또는 이 자세한 기사 에서 BartyCrouch를 확인하십시오 .


1
와! 이 도구는 단순히 놀랍습니다. 더 많은 투표가 필요합니다!
ph1lb4

1
멋진 도구-* .strings-files에 새 레이블 텍스트를 더 이상 수동으로 복사 / 붙여 넣기하지 않습니다 (... 그리고 이전과 같이 새 레이블의 번역을 잊어 버림) ... 감사합니다!
iKK

OBJC 프로젝트와 비슷한 포드가 있습니까?
rickrvo

2
이것이 우리가 찾고있는 답입니다. 이것이 정답입니다.
Juanjo

3
이 질문이 제기 된 후 6 년이 지난 후에 왜 Xcode 에서이 패치를 적용하기 위해이 패치 솔루션이 필요한지 알 수 없습니다. 애플은이 일을해야했다.
huggie

57

현지화 파일에 키를 수동으로 추가 할 수 있습니다. 스토리 보드 편집기에서 키 오브젝트를 선택하여 찾을 수 있습니다. Object-ID아이덴티티 인스펙터를 봅시다 . 마치"nwc-b2-19c"

현지화 업데이트 또는 번역 추가 예를 들면 다음과 같습니다.

"nwc-b2-19c.title" = "Translated title";

8
덜 위험한 접근법이라고 생각하십시오
Nicolas Manzini

그러나 일부 Object-ID는 .string 파일에 표시되지 않습니다. 연결되어 있지 않기 때문입니다. 그럼 그때 어떻게해야합니까?
Mihir Oza

자동 생성 된 ID뿐만 아니라 이름을 통해 선택하는 방법이 있습니까?
cocoseis

UILabel의 경우 : "YeB-ap-Wkw.text"= "내 레이블 텍스트";
ioopl

30

이것은 모두를위한 것은 아니지만 터미널에 추가 도구가 필요하지 않으며 수동으로 작은 변경을하기가 쉽습니다. 프로세스를 자동화하려는 경우이를 고려하지 마십시오.

0 단계 : 스토리 보드 언어 설정

  • 베이스 (영문 텍스트 포함)
  • 영어 (기본 파일이 영어이기 때문에 지역화 가능한 문자열 파일이 없습니다)
  • 다른 언어 (지역화 가능한 문자열 파일)

기본 구성

이 단계는 한 번만 수행됩니다.

스토리 보드에 무언가를 추가하면 다음을 수행합니다.

1 단계 : 영어 지역화 가능 문자열 파일 추가

영어 추가

영어 광고 항목 만 표시하면됩니다.

이것은 모든 줄을 가진 완전히 새로운 영어 지역화 문자열 파일을 만듭니다.

2 단계 : 새 광고 항목을 다른 언어 파일로 복사

번역 해

3 단계 : 영어 표시를 해제하고 해당 지역화 가능 문자열 파일 제거

파일은 새 광고 항목을 가져 오는 데만 필요했습니다.

이것은 쉽고 빠른 프로세스이며 스토리 보드 편집기에서 모든 작업이 완료됩니다.

편집하다:

이 프로세스는 작은 스토리 보드에서 매우 잘 작동합니다. 예를 들어, 탭 기반 프로젝트가 있고 각 탭에 대한 스토리 보드가 있습니다.

"스토리 보드 참조"를 검색하여 학습서를 찾으십시오.

좋은 예 : Xcode의 스토리 보드 참조, 어디에서 사용해야합니까?

따라서 작은 스토리 보드마다 현지화 할 문자열이 몇 개 밖에 없습니다.


큰! 삭제 된 요소를 제거하는 방법에 대한 아이디어도 찾았습니까?
Tobe

@Tobe 위에서 제안한대로 스토리 보드를 분리하면 더 이상 사용되지 않는 문자열을 쉽게 발견 할 수 있습니다.
Gerd Castan

15

마지막으로, 내 솔루션은 (초보적이지만 효과적인) 이전 번역을 복사하여 현지화 언어 상자를 선택 취소하고 확인하여 만든 새 파일에 붙여 넣었습니다.

하나 또는 두 개의 텍스트 만 변경해야하는 경우와 같은 일부 경우에 유용합니다.


이것이 ID와 그런 것을 항상 보존합니까? 나는 한 가지 테스트를했는데 효과가있는 것처럼 보이지만 ID가 변경되면 재앙이 될 수 있습니다.
ullstrm

나는 그렇게 생각했지만 아무런 문제없이 여러 번 해냈습니다.
jpl850

1
UI 요소를 삭제하면 ID가 할당됩니다. 스토리 보드에 의해 할당되므로 현지화와 무관합니다. 따라서 ID에는 영향을 미치지 않습니다.
iBug

설명 =) iBug 주셔서 감사합니다
jpl850

14

가장 좋은 방법은 내장 내보내기 / 가져 오기 현지화를 사용하는 것입니다.

  1. 프로젝트 네비게이터에서 프로젝트 폴더를 선택하십시오.
  2. 편집기> 현지화를 위해 내보내기를 선택하십시오.
  3. 자신의 자리에 남겨진 모든 번역과 XCode는 누락 된 문자열을 자동으로 추가합니다. 또한, 수입하기 전에, 당신은 (온라인 - 예를 들어, XLIFF 편집기에서 .xliff 편집 할 수 있습니다 http://xliff.brightec.co.uk ) 그리고 당신은 엑스 코드에서이 작업을 수행 할 필요가 없습니다.
  4. 그런 다음 Editor> Import Localizations를 선택하고 저장된 .xliff 파일을 선택하십시오.

PS XLIFF 편집기에서 편집하지 않고 3 단계를 건너 뛰면 XCode가 새 문자열을 저장할 수 없습니다. 이 경우 XLIFF 편집기에서 .xliff를 열고 변경없이 다시 저장하고 새 파일을 가져옵니다.


1
+1 쉽고 현지화 작업을위한 적절한 방법. 게다가 그것은 애플
Jurasic

1
이미 현지화 된 샘플 프로젝트에서 Xcode 7.3.1을 사용하여 레이블을 "텍스트"에서 "기본 텍스트"로 변경하고 새 레이블을 추가했습니다. 현지화를 위해 내 보낸 후 .xliff 파일을 변경하지 않고 그대로 두었다가 다시 가져 왔습니다. Main.strings 파일에서 변경된 레이블에 대한 주석 행이 업데이트 /* Class = "UILabel"; text = "a basic text"; ObjectID = "HFW-aN-MTb"; */되었지만 Main.strings 파일에 새 레이블이 작성되지 않습니다. 그런 다음 .xliff 파일을 편집하여 새 레이블에 대한 번역을 추가했습니다. 다시 가져 왔습니다. 이제 새 레이블이 Main.strings 파일에 삽입되었습니다.
duthen

+1이지만 발견 한 버그가 있습니다. 새 요소를 추가 할 때 내 보낸 파일에 없습니다 (duthen이 말하는 것처럼). 그러나 스토리 보드를 변경하지 않고 바로 내보내기를 수행하면 추가 된 모든 요소가 포함됩니다. 수출을 두 번하십시오. 두 번째는 모든 새로운 요소를 포함합니다. 고마워 애플!
Viktor Kucera

6

스토리 보드 (예 : Main.storyboard)를 클릭하면 오른쪽에 현지화 메뉴가 표시됩니다 (첨부 된 이미지 참조). 언어를 선택 취소했다가 다시 확인하면 파일이 다시 생성됩니다. 그래서 나는 보통 내용을 복사하고 파일을 다시 생성 한 다음 복사하고 이미 번역 한 내용을 붙여 넣습니다.

이것이 사전을 업데이트하는 데 사용되는 방법입니다.

여기에 이미지 설명을 입력하십시오


Xcode 10을 사용하면 git을 사용하면 차이점이 강조됩니다!
Ricardo Ruiz Romero

예, 가능합니다 ... 이제 내 파일이이 날짜보다 커서 다시 생성 한 후 리포지토리 버전과 병합합니다.
J. Fdez

5

나는 거기에 많은 줄이있는 거대한 스토리 보드를 얻었습니다. 두 언어는 영어와 다른 아랍어를 기본으로합니다. 작업은 스토리 보드에 일부 필드와 레이블을 추가하고 스크립트와 NSLocalizableStrings없이 현지화를 추가하는 것이 었습니다.

나를 위해 다음에 도움이되었습니다.

첫째 : 예기치 않은 변경을 방지하기 위해 자식이 있는지 확인하십시오.

  1. xcode에서 대상 화면으로 이동하고 Editor->를 누르십시오 Export For Localization.... ar.xliff를 저장하십시오 파일을 어딘가에 .
  2. XLIFF Edtior를 다운로드하십시오 .
  3. ar.xliff 파일을 열고 변경하십시오.
  4. 이 파일을 xcode로 가져옵니다. 끝난! 스토리 보드 문자열 파일을 업데이트했습니다.

이것이 작동하려면 먼저 Xcode 프로젝트 편집기에서 프로젝트 또는 대상을 선택하십시오.
척 보리스

4

응용 프로그램 애플에서 명령 줄 도구라는 AppleGlot을 그 지원 증분 현지화. 아직 시도하지는 않았지만 검색 한 도구와 똑같습니다 (몇 시간 전).


appleglot도구는 최종 애플리케이션 번들로 작업 중입니다. 번역 응용 프로그램과는 완전히 다른 접근 방식입니다.
Flovdis

1
"다른 접근 방식"에 어떤 문제가 있습니까, 아니면 downvote의 원인은 무엇입니까?
tilo

해당 링크에서 AppleGlot을 검색해야합니다.
NSDeveloper

4

스토리 보드와 xib에서 문자열을 추출하여 기존 번역과 병합 하는 스크립트 는 다음과 같습니다 .

프로젝트를 빌드 할 때 스크립트를 자동으로 실행하려면 스크립트를 프로젝트 루트 디렉토리 에 넣고 프로젝트 설정의 대상 빌드 단계에 다음 줄과 함께 스크립트 실행 단계를 추가 하십시오 .

./mergegenstrings.py PathToSourceDir

또는 원할 때 터미널에서 수동으로 스크립트를 실행할 수 있습니다.

ibtoolTha Leang이 대답 한대로 스크립트가 실행 됩니다. 또한 소스 코드에 genstrings표시된 문자열을 추출하고 병합하기 위해 실행 됩니다 NSLocalizedString. 스크립트는 이 게시물 의 스크립트를 기반으로 하며 , 실행 후 문자열을 병합합니다 genstrings.


이것을 사용하는 방법에 대한 자세한 정보를 제공 할 수 있습니까?
user023

1
요점에 의견을 추가했습니다. 도움이 되길 바랍니다. gist.github.com/yoichitgy/29bdd71c3556c2055cc0
Yoichi Tagaya

고마워요, 완벽하게 작동합니다. 누군가 권한에 문제가 있다면 도움이 될 것입니다 : stackoverflow.com/questions/9850936/…
iCode

이 스크립트는 스토리 보드 Main.strings 파일에서는 잘 작동하지만 Xcode 7에서 Localizable.strings 번역을 덮어 쓰는 것 같습니다.
Adam Johns

3

가장 쉽고 덜 위험한 방법은 스토리 보드에서 객체 ID를 복사하고 아래 예제와 같이 현지화 된 파일에 키의 새 키를 추가하는 것입니다.

1 : 구성 요소의 스토리 보드에서 아래와 같이 오브젝트 ID를 복사하십시오.

여기에 이미지 설명을 입력하십시오

2 : 아래와 같이 현지화 된 파일에 새 키를 추가하십시오.

"DjF-dn-0ay.text" = "Borrar datos y restablecer";

참고 : 적은 수의 구성 요소 만 업데이트하려는 경우 스토리 보드에 대해 현지화 된 파일을 다시 만들 수 있으므로 위험성이 매우 낮은 방법입니다.


답변 주셔서 감사합니다 !!!!!. 질문이 있습니다. 프로젝트에서 일부 레이블, 버튼에 대한 콘센트를 만들지 않았습니다 ... 해당 버튼과 레이블에 objectID를 사용하면 충분합니까?
Harikarthick K

3

Xlifftool은 Mac 앱으로 제공되며 잘 작동합니다. info.plist, 현지화 가능한 문자열 및 스토리 보드의 모든 번역 가능한 문자열과 개체를 보여줍니다.

맥을 위해 여기에서 얻으십시오 : https://itunes.apple.com/lv/app/xlifftool/id1074282695?mt=12

1 단계 : Xcode의 프로젝트 탐색기에서 프로젝트 폴더를 선택하십시오. 그런 다음 현지화를위한 편집기 / 내보내기 ...를 선택하십시오.

번역 가능한 문자열은 Xcode에서 현지화하기 위해 선택한 언어로 xliff 파일에 포함됩니다.

2 단계 : xlifftool로 파일을 열고 이전에 수행 한 번역을 번역하거나 업데이트하십시오.

3 단계 : 그런 다음 편집기 / 가져 오기 현지화를 사용하여 프로젝트에 다시 업로드합니다.


macOS의 또 다른 대안은 Loca Studio 입니다. Xlifftool과 유사하게이 앱은 Xcode 작업 편집기-> 지역 화용 내보내기 결과를 열 수 있습니다. 고급 필터링 및 검색 기능과 자동 QA 확인 기능이 있습니다. (전체 공개 : 저는 수석 개발자입니다).
guru_meditator

0

스토리 보드 또는 xib에서 현지화 문자열로 새 텍스트를 업데이트하는 쉬운 방법입니다.

1-이 스크립트를 사용하십시오 http://tredje.se/dev/trouble/?x=entry:entry150917-204052

2- 현지화 문자열을 선택하십시오 업데이트 할 을 하고 언어 스트링을 "Localization string"에서 "interface builder storyboard"로 전환하십시오.

3- 다시 스위치 :)

끝난.

여기에 이미지 설명을 입력하십시오


그것은 인터페이스 빌더 스토리 보드에 파일을 변경하지만보다 다시 후 1 ~ 2 초 지역화 문자열과 새보기 텍스트 지역화 문자열없이 추가로 다시 복귀하지
무자 히드 라티프

내가 지금이 포드를 사용하고 @MujahidLatif, 그것은 나에게 정말 유용하며 의지로 스토리 보드 현지화 및 Localization.String 업데이트 할 수있어 github.com/Flinesoft/BartyCrouch
파디 Abuzant

0

옵션 1
Xcode는 파일을 [Interface Builder Cocoa Touch Storyboard]파일 형식 또는 파일 형식 으로 변환하여 파일을“다시로드”할 수 있습니다 [Localizable Strings].

Project Navigator 에서 기본 스토리 보드 파일을 선택하십시오 . File Inspector 에서 현지화 섹션을 찾으십시오 . 파일이 현재 파일 인 경우로 변경 하거나 그 반대로 변경하십시오 .[Localizable Strings][Interface Builder Cocoa Touch Storyboard]
Xcode는 스토리 보드를 현재 버전으로 변환하면서 이전 현지화 노력을 유지해야합니다. 원하는 경우 여기에서 파일을 원래 파일 형식으로 다시 변경할 수 있습니다.

옵션 2
사용ibtool 스토리 보드에서 문자열을 추출하는 데 합니다.

터미널 응용 프로그램을 엽니 다. 디렉토리를
찾습니다. 다음 줄을 사용하여 문자열을 추출하십시오.Base.lproj

ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings

ibtool이에 문자열을 추출한 후이를 file_name.strings복사하여 원본 .strings파일에 붙여 넣을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.