Có thể cập nhật chuỗi của bảng phân cảnh cục bộ không?


226

Tôi đã bản địa hóa một phần của ứng dụng của mình bằng cách tạo bảng phân cảnh base.lproj và 3 tệp chuỗi cho nó. Đó là một tháng trước và sau đó tôi đã thêm trình điều khiển chế độ xem mới vào ứng dụng, nhưng các nút và nhãn của trình điều khiển này không xuất hiện trong các tệp chuỗi

Có thể cập nhật 3 tệp tin đính kèm bảng phân cảnh này hay tôi phải thêm các bản dịch chuỗi mới theo chương trình bằng cách sử dụng NSLocalizableString và Localizable.strings?


Câu trả lời:


264

Có hai lựa chọn:

lựa chọn 1

Xcode có thể "tải lại" tệp bằng cách chuyển đổi tệp thành loại tệp [Trình tạo giao diện ca cao giao diện] hoặc loại tệp [Chuỗi bản địa hóa] .

  1. Chọn tệp bảng phân cảnh cơ sở của bạn từ Project Navigator
  2. Tìm phần Bản địa hóa trong Trình kiểm tra tệp
  3. Nếu tệp của bạn hiện là [Chuỗi có thể bản địa hóa], hãy đổi nó thành [Bảng điều khiển giao diện ca cao của Trình tạo giao diện] hoặc ngược lại.
  4. Xcode nên chuyển đổi bảng phân cảnh của bạn sang phiên bản hiện tại, trong khi vẫn duy trì các nỗ lực bản địa hóa cũ của bạn. Tại đây bạn có thể thay đổi tệp trở lại loại tệp gốc nếu bạn muốn.

Lựa chọn 2

Sử dụng ibtool để trích xuất các chuỗi trong bảng phân cảnh của bạn.

  1. Mở ứng dụng Terminal

  2. Xác định vị trí thư mục Base.lproj của bạn

  3. Sử dụng dòng này để trích xuất các chuỗi:

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

  4. Sau khi ibtool trích xuất các chuỗi thành file_name.strings, bạn có thể sao chép và dán nó vào tệp .strings ban đầu của bạn

Truy cập để biết thêm thông tin: https : // veac.cc/business/columns/localization_guide_ios


1
Tôi đã thử Tùy chọn 1, nhưng thay đổi loại tệp từ [Chuỗi có thể bản địa hóa] thành [Bảng dựng giao diện ca cao giao diện] luôn gặp sự cố với Xcode 5.0.1. Lý do có thể là vì tôi không nhận thức được các khả năng ở trên - tôi đã chỉnh sửa các tệp bản địa hóa bảng phân cảnh bằng tay trước đó.
Reinhard Männer

16
Tùy chọn 1 hoạt động. Nhưng bạn cần thay đổi từ "Bản địa hóa .." sang "giao diện ..." và sau đó quay lại!
João Nunes

3
Tùy chọn 1 không hoạt động đối với tôi khi sử dụng XCode 6.0.1. Khi cố gắng chuyển đổi tệp .strings của tôi thành .interfacebuilder XCode hỏi xem các tệp có nên được chuyển đổi không. Các tệp được tạo trên hệ thống tệp, tuy nhiên các tệp chuỗi vẫn còn và chứa các giá trị cũ.
Bouncing Bit

53
Đối với tôi, Lựa chọn 1 đã thay thế tất cả các chuỗi đã được dịch bằng các chuỗi tiếng Anh. Tôi đã phải thêm bản dịch một lần nữa.
Mihail Velikov 04/03/2015

5
Tùy chọn 1 có vẻ rất không ổn định trong Xcode 7. Đôi khi, nó hoạt động, đôi khi không. Đôi khi, nó thay thế ngẫu nhiên một số chuỗi đã dịch của tôi bằng các phiên bản tiếng Anh một lần nữa.
Adam Johns

76

Kiểm tra BartyCrouch , nó hoàn toàn giải quyết vấn đề của bạn. Ngoài ra, nó là nguồn mở , được duy trì tích cực và có thể dễ dàng cài đặt và tích hợp trong dự án của bạn.


Cài đặt BartyCrouch qua Homebrew :

brew install bartycrouch

Ngoài ra, cài đặt nó qua Mint :

mint install Flinesoft/BartyCrouch

Cập nhật thường xuyên các tập tin Chuỗi Storyboards / XIBs của bạn:

$ bartycrouch update

Điều này sẽ làm chính xác những gì bạn đang tìm kiếm.


Để giữ cho các tệp Storyboards / XIBs của bạn được cập nhật theo thời gian, tôi khuyên bạn nên thêm một tập lệnh xây dựng (hướng dẫn về cách thêm tập lệnh xây dựng tại đây ):

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

Ngoài việc cập nhật dần dần các tệp Chuỗi Storyboards / XIBs của bạn, điều này cũng sẽ đảm bảo các Localizable.stringstệp của bạn được cập nhật với các khóa mới được thêm vào trong mã bằng cách sử dụng NSLocalizedStringvà hiển thị cảnh báo cho các khóa trùng lặp hoặc giá trị trống.

Hãy chắc chắn kiểm tra BartyCrouch trên GitHub hoặc bài viết chi tiết này để biết thêm thông tin.


1
Ồ Công cụ này chỉ đơn giản là tuyệt vời. Điều này cần nhiều upvote!
ph1lb4

1
công cụ đáng yêu - không còn sao chép / dán thủ công các văn bản nhãn mới trong * .strings-files (... và quên mọi bản dịch của nhãn mới như trước đây) ... Cảm ơn rất nhiều!
iKK

Có một nhóm tương tự cho các dự án OBJC không?
rickrvo

2
Đây là câu trả lời chúng tôi đang tìm kiếm. Đây phải là câu trả lời được chấp nhận.
Juanjo

3
Tôi không hiểu tại sao sau 6 năm kể từ khi câu hỏi này được hỏi và giải pháp chắp vá này vẫn được yêu cầu để làm cho nó hoạt động trong Xcode. Apple nên làm việc này.
huggie

57

Bạn có thể tự thêm một khóa trong tệp bản địa hóa của mình. Bạn có thể tìm thấy đối tượng chính bằng cách chọn nó trên trình soạn thảo bảng phân cảnh. Chúng ta hãy xem xét Object-IDtrong thanh tra danh tính. Nó trông giống như"nwc-b2-19c"

Trên bản cập nhật nội địa hóa của bạn hoặc thêm bản dịch. Ví dụ :

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

8
nghĩ rằng đó là cách tiếp cận ít rủi ro hơn
Nicolas Manzini

Nhưng một số Object-ID không hiển thị trong tệp. Chuỗi. Bởi vì chúng không được kết nối. Vậy lúc đó tôi có thể làm gì?
Mihir Oza

Có cách nào để chọn nó thông qua một tên và không chỉ id được tạo tự động?
cocoseis

Đối với một UILabel, nó: "YeB-ap-Wkw.text" = "Nhãn văn bản của tôi";
ioopl

30

Công cụ này không dành cho tất cả mọi người, nhưng nó không yêu cầu thêm công cụ nào trong thiết bị đầu cuối và thật dễ dàng cho những thay đổi thủ công nhỏ. (Không xem xét điều này khi bạn muốn tự động hóa quy trình của mình.)

Bước 0: Thiết lập ngôn ngữ Storyboard

  • Cơ sở (có văn bản tiếng Anh)
  • Tiếng Anh (tệp chuỗi có thể bản địa hóa không tồn tại vì tệp cơ sở là tiếng Anh)
  • các ngôn ngữ khác (tệp chuỗi có thể bản địa hóa)

cấu hình cơ sở

Bước này chỉ được thực hiện một lần.

Bây giờ khi tôi thêm một cái gì đó vào bảng phân cảnh, tôi làm như sau

Bước 1: thêm tệp chuỗi tiếng Anh có thể bản địa hóa

Thêm tiếng anh

chỉ cần đánh dấu mục hàng tiếng Anh.

Điều này tạo ra một tệp chuỗi tiếng Anh hoàn toàn mới với tất cả các dòng

Bước 2: sao chép các chi tiết đơn hàng mới vào các tệp ngôn ngữ khác

và dịch chúng

Bước 3: bỏ đánh dấu tiếng Anh, xóa tệp chuỗi có thể bản địa hóa tương ứng

tệp chỉ cần để nhận chi tiết đơn hàng mới

Đây là một quá trình dễ dàng và nhanh chóng, mọi thứ đều được thực hiện trong trình chỉnh sửa bảng phân cảnh

Biên tập:

Quá trình này hoạt động rất tốt với các bảng phân cảnh nhỏ. Ví dụ: tôi có một dự án dựa trên các tab và tôi có bảng phân cảnh cho mỗi tab.

Tìm kiếm "tham chiếu bảng phân cảnh" để tìm hướng dẫn.

Ví dụ hay: Tham chiếu bảng phân cảnh trong Xcode, chúng ta nên sử dụng nó ở đâu?

Vì vậy, mỗi bảng phân cảnh nhỏ chỉ có một vài chuỗi để bản địa hóa.


tuyệt quá! Bạn cũng đã tìm thấy một ý tưởng về cách loại bỏ các yếu tố bị xóa?
Tobe

@Tobe Nếu bạn chia bảng phân cảnh của mình như tôi đề xuất ở trên, thực sự dễ dàng phát hiện ra các chuỗi không được sử dụng nữa.
Gerd Castan

15

Cuối cùng, giải pháp của tôi là (thô sơ nhưng hiệu quả) sao chép các bản dịch trước đó và dán chúng vào một tệp mới được tạo bằng cách bỏ chọn và kiểm tra hộp ngôn ngữ Bản địa hóa.

Điều này sẽ hữu ích trong một số trường hợp như của tôi khi bạn chỉ phải thay đổi một hoặc hai văn bản.


Điều này sẽ bảo tồn id và như vậy mọi lúc? Tôi đã làm một thử nghiệm và nó dường như hoạt động, nhưng nó có thể là một thảm họa nếu id thay đổi.
ullstrm

Tôi nghĩ vậy, tôi đã làm điều này rất nhiều lần mà không có vấn đề gì.
jpl850

1
ID được gán khi bạn bỏ các thành phần UI. Họ độc lập với nội địa hóa vì chúng được phân công theo bảng phân cảnh. Vì vậy, sẽ không có hiệu lực trên ID.
iBug

Cảm ơn iBug đã giải thích =)
jpl850

14

Tôi nghĩ cách tốt nhất là sử dụng Bản địa hóa xuất / nhập tích hợp:

  1. Trong Project Navigator chọn bạn thư mục dự án
  2. Chọn Trình chỉnh sửa> Xuất để Bản địa hóa,
  3. Tất cả các bản dịch còn lại trên vị trí của chúng và XCode tự động thêm các chuỗi bị bỏ lỡ. Ngoài ra, trước khi nhập, bạn có thể chỉnh sửa .xliff trong XLIFF Editor (ví dụ: trực tuyến - http://xliff.brightec.co.uk ) và sau đó bạn không cần phải làm điều này trong XCode.
  4. sau đó Trình chỉnh sửa> Nhập Bản địa hóa và chọn tệp .xliff đã lưu.

PS Nếu bạn không muốn chỉnh sửa trong XLIFF Editor và đã bỏ qua bước 3, XCode không thể lưu chuỗi mới. Trong trường hợp này, hãy mở .xliff trong XLIFF Editor, lưu lại mà không thay đổi và nhập tệp mới.


1
+1 Cách dễ dàng và phù hợp để làm việc với Bản địa hóa. Ngoài ra, cách ưa thích của Apple
Jurasic

1
Sử dụng Xcode 7.3.1, trong một dự án mẫu đã được bản địa hóa, tôi đã thay đổi nhãn (từ "văn bản" thành "văn bản cơ bản") và tôi đã thêm nhãn mới. Tôi đã xuất để bản địa hóa, chạm vào tệp .xliff (không thay đổi) và nhập lại. Trong tệp Main.strings, dòng nhận xét cho nhãn đã thay đổi đã được cập nhật /* Class = "UILabel"; text = "a basic text"; ObjectID = "HFW-aN-MTb"; */, nhưng nhãn mới KHÔNG được tạo trong tệp Main.strings. Sau đó, tôi chỉnh sửa tệp .xliff để thêm bản dịch cho nhãn mới. Tôi nhập lại lần nữa. Nhãn mới hiện được chèn vào tệp Main.strings.
duthen

+1 nhưng có một lỗi tôi đã phát hiện ra. Khi thêm các phần tử mới, chúng không nằm trong một tệp được xuất (như duthen đang nói). Nhưng khi tôi thực hiện xuất ngay sau đó (không có thay đổi nào về bảng phân cảnh), tất cả các yếu tố được thêm vào đều đáng ngạc nhiên. Vì vậy, làm một xuất khẩu hai lần. Cái thứ hai sẽ bao gồm tất cả các yếu tố mới. Cảm ơn Apple!
Viktor Kucera

6

Khi bạn nhấp vào bảng phân cảnh của mình, ví dụ Main.storyboard ... Ở bên phải bạn có thể thấy menu bản địa hóa (xem hình ảnh đã được chỉnh sửa). Nếu bạn bỏ chọn và kiểm tra lại một chiều dài, tệp sẽ được tạo lại. Vì vậy, tôi thường sao chép nội dung, tôi tạo lại tệp và sau đó tôi dán nội dung mà tôi đã sao chép và đã được dịch.

Đây là cách mà tôi sử dụng để cập nhật từ điển.

nhập mô tả hình ảnh ở đây


Với Xcode 10 nếu bạn sử dụng git, nó làm nổi bật sự khác biệt!
Ricardo Ruiz Romero

Có, có thể ... bây giờ tệp của tôi lớn hơn trong ngày này và tôi hợp nhất nó với phiên bản kho lưu trữ sau khi tạo lại.
J. Fdez

5

Tôi có một bảng phân cảnh lớn với rất nhiều chuỗi ở đó. Hai ngôn ngữ cơ sở tiếng Anh và tiếng Ả Rập khác. Nhiệm vụ là thêm một số trường và nhãn vào bảng phân cảnh và thêm bản địa hóa cho chúng mà không có bất kỳ tập lệnh và NSLocalizableStrings nào.

Để tôi giúp tiếp:

Đầu tiên : Đảm bảo, bạn có git để ngăn chặn những thay đổi không thể khai thác.

  1. Chuyển đến màn hình đích trong xcode và nhấn Editor-> Export For Localization.... Lưu tệp ar.xliff ở đâu đó.
  2. Tải xuống XLIFF Edtior .
  3. Mở tệp ar.xliff và thực hiện thay đổi.
  4. Nhập tệp này trong xcode. Làm xong! Bạn đã cập nhật tập tin chuỗi bảng phân cảnh.

Để làm việc này, trước tiên hãy chọn dự án hoặc mục tiêu trong trình chỉnh sửa dự án Xcode.
Chuck Boris

4

một ứng dụng một công cụ dòng lệnh của Apple có tên AppleGlot hỗ trợ nội địa hóa gia tăng. Tôi chưa thử nó, nhưng nó trông giống hệt công cụ bạn đã tìm kiếm (cách đây một thời gian).


Công appleglotcụ này đang làm việc với các gói ứng dụng cuối cùng. Đó là một cách tiếp cận hoàn toàn khác nhau cho các ứng dụng dịch thuật.
Flovdis

1
Bất cứ điều gì sai với một "cách tiếp cận khác", hoặc điều gì gây ra downvote?
tilo

Cần tìm kiếm AppleGlot trong liên kết đó ngay bây giờ.
Nhà phát triển NSD

4

Đây là một kịch bản để trích xuất các chuỗi từ bảng phân cảnh và xibs, và hợp nhất chúng với các bản dịch hiện có.

Để tự động chạy tập lệnh khi bạn xây dựng dự án, hãy đặt tập lệnh vào thư mục gốc của dự án và thêm giai đoạn Run Script với dòng sau vào giai đoạn xây dựng mục tiêu trong cài đặt dự án của bạn.

./mergegenstrings.py PathToSourceDir

Hoặc bạn có thể chạy tập lệnh trên Terminal theo cách thủ công khi bạn muốn.

Kịch bản chạy ibtoolnhư Tha Leang trả lời. Nó cũng chạy genstringsđể trích xuất và hợp nhất các chuỗi được đánh dấu NSLocalizedStringtrong mã nguồn của bạn. Kịch bản dựa trên một tập lệnh trong bài đăng này , nó hợp nhất các chuỗi sau khi chạy genstrings.


bạn có thể cung cấp thêm thông tin về cách sử dụng này?
dùng023

1
Tôi đã thêm một bình luận cho ý chính. Hy vọng nó giúp. gist.github.com/yoichitgy/29bdd71c3556c2055cc0
Yoichi Tagaya 22/03/2015

Cảm ơn bạn, làm việc hoàn hảo cho tôi. Nếu ai đó gặp vấn đề với quyền thì điều này có thể hữu ích: stackoverflow.com/questions/9850936/
Khăn

Kịch bản này hoạt động tốt đối với các tệp Main.strings của bảng phân cảnh, nhưng dường như ghi đè lên các bản dịch Localizable.strings của tôi trong Xcode 7.
Adam Johns

3

Cách tiếp cận dễ nhất và rất ít rủi ro là, chỉ cần sao chép ID đối tượng từ bảng phân cảnh và thêm khóa mới cho khóa trong tệp được bản địa hóa như ví dụ dưới đây:

1: Sao chép id đối tượng như bên dưới từ bảng phân cảnh cho thành phần:

nhập mô tả hình ảnh ở đây

2: Thêm khóa mới trong tệp cục bộ như bên dưới:

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

Lưu ý: Đây là cách tiếp cận ít rủi ro hơn nếu bạn chỉ muốn cập nhật một vài thành phần nếu không bạn có thể tạo lại tệp được bản địa hóa cho bảng phân cảnh.


Cảm ơn câu trả lời của bạn!!!!!. Tôi có một câu hỏi muốn hỏi, Trong các dự án của tôi, tôi chưa tạo ra một lối thoát cho một số nhãn, nút ... Nếu tôi sử dụng objectID cho các nút và nhãn đó là đủ?
Harikarthick K

3

Xlifftool có sẵn dưới dạng ứng dụng Mac và hoạt động tốt. Nó hiển thị tất cả các chuỗi có thể dịch và các đối tượng từ info.plist, các chuỗi có thể bản địa hóa và bảng phân cảnh.

Lấy nó ở đây cho mac: https://itunes.apple.com/lv/app/xlifftool/id1074282695?mt=12

Bước 1: trong Xcode, chọn thư mục dự án của bạn trong trình điều hướng dự án. Sau đó chọn Trình chỉnh sửa / Xuất để bản địa hóa ...

Các chuỗi có thể dịch của bạn sẽ được bao gồm trong tệp xliff theo ngôn ngữ bạn đã chọn để bản địa hóa trong Xcode.

Bước 2: Mở tệp đó bằng xlifftool và dịch hoặc cập nhật bản dịch của bạn đã được thực hiện trước đó.

Bước 3: Sau đó tải lại vào dự án của bạn với Trình chỉnh sửa / Nhập nội địa hóa ...


Một lựa chọn khác cho macOS là Loca Studio . Tương tự như Xlifftool, ứng dụng có thể mở kết quả của Trình chỉnh sửa hành động Xcode -> Xuất để bản địa hóa. Nó có một số tính năng lọc và tìm kiếm nâng cao hơn, và kiểm tra QA tự động. (công bố đầy đủ: Tôi là nhà phát triển chính).
guru_meditator

0

Đây là cách dễ dàng của tôi để cập nhật văn bản mới từ bảng phân cảnh hoặc xib sang chuỗi bản địa hóa

1- sử dụng tập lệnh này http://tredje.se/dev/trouble/?x=entry:entry150917-204052

2- chọn chuỗi bản địa hóa mà bạn muốn cập nhật và chuyển chuỗi ngôn ngữ của bạn từ "Chuỗi bản địa hóa" sang "bảng phân cảnh của trình xây dựng giao diện"

3- chuyển nó trở lại :)

Làm xong.

nhập mô tả hình ảnh ở đây


Nó thay đổi tệp thành Bảng phân cảnh của Trình tạo giao diện nhưng sau 1 hoặc 2 giây, nó sẽ trở lại Chuỗi địa phương hóa và không thêm Chuỗi địa phương hóa cho văn bản xem mới
Mujahid Latif

@MujahidLatif Tôi đang sử dụng Pod này ngay bây giờ, nó thực sự hữu ích cho tôi và nó có thể cập nhật tin cục bộ kịch bản và Localization.String như ý github.com/Flinesoft/BartyCrouch
Fadi Abuzant

0

Tùy chọn 1
Xcode có thể tải lại tập tin bằng cách chuyển đổi tập tin thành [Interface Builder Cocoa Touch Storyboard]loại tập tin hoặc [Localizable Strings]loại tập tin.

Chọn tệp bảng phân cảnh cơ sở của bạn từ Trình điều hướng dự án Tìm phần Bản địa hóa trong Trình kiểm tra tệp . Nếu tệp của bạn hiện là a [Localizable Strings], hãy đổi nó thành [Interface Builder Cocoa Touch Storyboard]hoặc ngược lại.
Xcode nên chuyển đổi bảng phân cảnh của bạn sang phiên bản hiện tại, trong khi vẫn duy trì các nỗ lực bản địa hóa cũ của bạn. Tại đây bạn có thể thay đổi tệp trở lại loại tệp gốc nếu bạn muốn.

Tùy chọn 2
Sử dụng ibtoolđể trích xuất các chuỗi trong bảng phân cảnh của bạn.

Mở ứng dụng Terminal
Xác định vị trí Base.lprojthư mục của bạn
Sử dụng dòng này để trích xuất các chuỗi:

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

Sau khi ibtool trích xuất các chuỗi thành file_name.strings, bạn có thể sao chép và dán nó vào .stringstệp gốc của mình .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.