2011-12-06 24 views
7

Tôi đang cố gắng xây dựng ứng dụng được bản địa hóa đầu tiên của mình. Tôi có tất cả các chuỗi mã được dịch bằng NSLocalizedString (để sử dụng với công cụ genstrings). Bây giờ tôi đang chạm vào ibtool. Bản địa hóa gia tăng hoạt động như thế nào? Về trang hướng dẫn sử dụng, tôi nên viết một cái gì đó như thế này:Tính năng bản địa hóa gia tăng hoạt động như thế nào?

$ ibtool --previous-file path/to/prev.xib \ 
--incremental-file path/to/inc.xib --localize-incremental \ 
--write path/to/new.xib mod.xib 

Tôi lấy tệp gia tăng ở đâu? Để hiểu biết của tôi nếu tôi đang sử dụng điều khiển phiên bản (git/svn), tệp "cũ" ở vài lần trước, tệp gia tăng là diff và path/to/new.xib là tệp xib mới được tạo. mod.nib là một bí ẩn đối với tôi. Bất cứ ai có thể giải thích cho tôi cách thức hoạt động này? Ngoài ra - làm cách nào để tôi bắt đầu bản địa hóa của xib nếu không có sẵn các phiên bản trước (tức là không gia tăng, nhưng bản địa hóa ban đầu)?

Trả lời

12

Tôi nghĩ rằng lựa chọn thuật ngữ của họ, đặc biệt là đối với --incremental-file, đang gây nhầm lẫn. Ý tưởng là bạn có một phiên bản cũ của xib của bạn bằng hai ngôn ngữ (nguồn và đích) và bạn đã thay đổi nó bằng ngôn ngữ nguồn của bạn và muốn cập nhật phiên bản ngôn ngữ đích để khớp.

Hãy lấy một ví dụ. Trước đây bạn đã có home.xib bằng tiếng Anh (ngôn ngữ nguồn) và nhờ ai đó dịch nó sang tiếng Pháp (ngôn ngữ đích). Bạn đã phát triển một tính năng mới và bây giờ bạn đã có phiên bản cập nhật của home.xib bằng tiếng Anh, trong đó bạn đã thêm một UILabel và một UITextField và di chuyển mọi thứ xung quanh. Lệnh bạn đã hiển thị có thể giúp bạn nhận phiên bản cập nhật của home.xib bằng tiếng Pháp để có UILabel và UITextField mới và mọi thứ được di chuyển xung quanh như tiếng Anh. Lưu ý rằng bất kỳ nội dung văn bản nào bạn đặt trong UILabel và UITextField mới sẽ được thêm bằng tiếng Anh và sau đó sẽ cần dịch sang tiếng xib của Pháp (nhưng bạn có thể tự động hóa điều này bằng cách thêm --import-strings-file và cung cấp bản dịch trong một tệp khác).

Vì vậy, nếu chúng ta lập bản đồ các lệnh bạn thấy ví dụ này:

  • --previous-file path/to/prev.xib xác định tiếng Anh cũ xib
  • --incremental-file path/to/inc.xib xác định xib Pháp cũ
  • --write path/to/new.xib xác định xib Pháp mới sẽ được tạo
  • mod.xib xác định tiếng Anh mới xib

Đối với câu hỏi khác của bạn về cách bạn bắt đầu quá trình, thực sự nó phụ thuộc vào cách bạn sẽ bản địa hóa xibs của bạn. Bạn rõ ràng sẽ tạo ra các phiên bản ngôn ngữ mới của xibs (trong XCode, bạn chỉ cần thêm một ngôn ngữ vào danh sách ngôn ngữ của xib và các xib được bản địa hoá được tạo tự động). Và sau đó nếu bạn tự bản địa hóa chúng trong Interface Builder, bạn sẽ chỉ cần thực hiện các thay đổi có liên quan (bản dịch của văn bản và mọi thay đổi kích thước cần thiết) trong các xib được bản địa hóa. Hoặc bạn có thể trích xuất văn bản trong xibs thành các tệp .strings, dịch các tệp đó và đưa chúng vào phiên bản ngôn ngữ có liên quan của các xib này. Đối với điều này, một lần nữa bạn sẽ sử dụng ibtool nhưng với --generate-strings-file cho giai đoạn trích xuất và với --import-strings-file cho giai đoạn tiêm.

+0

Bất kỳ lời khuyên về sản xuất "cũ Anh xib" nếu tôi sử dụng kiểm soát phiên bản? – Eimantas

+0

Giả sử tất cả các xib của bạn đang ở trong điều khiển phiên bản (chúng chắc chắn sẽ là!), Xib tiếng Anh cũ có sẵn cho bạn trong lịch sử phiên bản của bạn. Chúng tôi đang nghiên cứu giả định rằng tiếng Anh là ngôn ngữ cơ sở của bạn, ngôn ngữ bạn sẽ dịch từ đó. – Clafou

+0

Phải, vì vậy chỉ để có được tập tin tiếng Anh cũ tôi nên kiểm tra nó ra từ kiểm soát phiên bản từ bản dịch cập nhật mới nhất. Điều này có vẻ hơi tẻ nhạt. Tôi đoán không có gì khác tôi có thể làm. Cảm ơn câu trả lời của bạn! – Eimantas

3

Tôi đã viết một tập lệnh cho các dự án git tự động hóa các bước cần thiết (như được mô tả trong phần answer ở trên) để di chuyển thay đổi sang ngôn ngữ khác.

Cách sử dụng:

migrate_changes.sh <target_language> <xib file without ending> 

Ví dụ:

Sau khi bạn đã cam kết thay đổi của bạn vào file xib tiếng anh, chạy kịch bản tại thư mục gốc của thư mục tài nguyên của bạn.

migrate_changes.sh de MyViewController 

Nguồn:

#!/bin/sh 

LANG_FROM='en' 
LANG_TO=$1 
XIB_FILE=$2 

FROM_FILE=${LANG_FROM}.lproj/${XIB_FILE}.xib 
PREV_FILE=${LANG_FROM}.lproj/${XIB_FILE}_old.xib 
TO_FILE=${LANG_TO}.lproj/${XIB_FILE}.xib 

# checkout old version of xib file 
git show `git log -2 --format="%H" $FROM_FILE | tail -n 1`:./$FROM_FILE > $PREV_FILE 

# merge changes 
ibtool --previous-file $PREV_FILE --incremental-file $TO_FILE --localize-incremental --write $TO_FILE $FROM_FILE 

# remove previous version 
rm $PREV_FILE 
Các vấn đề liên quan