Làm cách nào để bản địa hóa một chuỗi bên trong tệp thông tin iOS.plist?


259

Như bạn có thể biết iOS 8 yêu cầu khóa NSLocationWhenInUseUsageDes mô tả để sử dụng vị trí của người dùng. Tôi đã thêm khóa này và một số thông tin chung vào thông tin của tôi. nhập mô tả hình ảnh ở đây

Làm cách nào tôi có thể sử dụng chuỗi dịch bên trong tệp plist?

- Cập nhật -

Tôi đã có một chuỗi Localizable. Tôi chỉ tự hỏi rằng tôi có thể sử dụng cái gì đó như NSLocalizedString (MYSTRING, nil) bên trong chuỗi plist không. Tôi biết rằng tôi có thể tạo nhiều tệp info.plist để bản địa hóa nhưng tôi đã tự hỏi có thể có một cách dễ dàng hơn.


Bạn đã bao giờ làm việc này chưa, tôi đang vật lộn để có được NSLocationWhenInUseUsageDes mô tả được bản địa hóa quá?
Oliver Pearmain

Câu trả lời:


490

Bạn nên sử dụng InfoPlist.stringstập tin để bản địa hóa các giá trị của Info.plist. Để làm điều này, đi đến File->New->File, chọn Strings Filedưới Resourcetab iOS, đặt tên InfoPlistvà tạo. Mở và chèn các Info.plistgiá trị bạn muốn bản địa hóa như:

NSLocationWhenInUseUsageDescription = "Description of this";

Bây giờ bạn có thể bản địa hóa InfoPlist.stringstập tin với bản dịch. Chúc may mắn!

BIÊN TẬP:

chọn các tùy chọn nội địa hóa hoặc kích hoạt nội địa hóa nếu cần,

biên tập viên bên phải

bạn cũng có thể thấy tập tin trên trình chỉnh sửa bên trái.

biên tập bên trái

BIÊN TẬP:

Đây là tài liệu chính thức cho Info.plistnội địa hóa khóa.

Tín dụng cho Marco , cảm ơn vì đã bao gồm các bức ảnh trong câu trả lời này!


15
Sau khi tạo tệp chuỗi, bạn có cần bao gồm khóa trong tệp Info.plist không, hoặc có an toàn để xóa từ đó không?
rounak

11
Mẹo: Sử dụng chính xác tên "InfoPlist.strings" và không có gì khác. Ví dụ: tập tin infoplist ban đầu của tôi được đặt tên khác nhưng tôi cần sử dụng chính xác tên này để làm cho nó hoạt động.
Sjoerd Perfors

22
Khi kiểm tra các địa phương hóa trên trình giả lập. Tôi đã phải thay đổi ngôn ngữ trên trình giả lập, không chỉ ngôn ngữ trong mục tiêu xcode. Chỉ là một cảnh báo cho bất cứ ai khác.
John Webb

10
cách sử dụng đúng là keyname = "văn bản của bạn"; ví dụ: NSLocationWhenInUseUsageDescription = "văn bản của bạn"
Magurizio

10
Thận trọng: khóa trong tệp này không được có dấu ngoặc kép, khác với nội địa hóa thông thường. ví dụ: NSMicrophoneUsageDescription = "mô tả của bạn";
Yuchao Zhou

33

Tất cả những điều trên không phù hợp với tôi (XCode 7.3) vì vậy tôi đã đọc tài liệu tham khảo của Apple về cách làm và nó đơn giản hơn nhiều so với mô tả ở trên. Theo Apple:

Các giá trị được bản địa hóa không được lưu trữ trong chính tệp Info.plist. Thay vào đó, bạn lưu trữ các giá trị cho một bản địa hóa cụ thể trong tệp chuỗi có tên InfoPlist.strings. Bạn đặt tệp này trong cùng thư mục dự án dành riêng cho ngôn ngữ mà bạn sử dụng để lưu trữ các tài nguyên khác cho cùng một bản địa hóa.

Theo đó, tôi đã tạo một tệp chuỗi có tên InfoPlist.strings và đặt nó vào thư mục xx.lproj của ngôn ngữ "xx" (và thêm nó vào dự án bằng File-> Add Files vào ...). Đó là nó. Không cần khóa "Tài nguyên cục bộ có thể được trộn lẫn" = CÓ và không cần InfoPlist.strings trong base.lproj hoặc en.lproj.

Ứng dụng sử dụng khóa-giá trị Info.plist làm giá trị mặc định nếu không thể tìm thấy khóa trong tệp ngôn ngữ cụ thể. Vì vậy, tôi đặt giá trị tiếng Anh của mình vào tệp Info.plist và giá trị được dịch trong tệp ngôn ngữ cụ thể, đã kiểm tra và mọi thứ đều hoạt động.

Cụ thể, không cần bản địa hóa InfoPlist.strings (tạo phiên bản của tệp trong cơ sở.lproj, en.lroj và xx.lproj) và trong trường hợp của tôi, cách đó không hoạt động.


2
Tại sao không bao gồm các liên kết đến tài liệu thích hợp?
Jurasic

3
Tại đây, liên kết đến trang có liên quan đến tài liệu của Apple trong trường hợp có ai quan tâm: developer.apple.com/l
bẻ cong

và làm thế nào chúng ta quyết định rằng xx? ví dụ cho tiếng anh nó có thể là en, En, Eng, English v.v? Xin lỗi nếu đó là một câu hỏi ngu ngốc vì tôi là người mới bắt đầu
Awais Nasir

Câu trả lời của bạn có hiệu quả với tôi ngoại trừ kịch bản ngôn ngữ dự phòng, ứng dụng đang nhận ngôn ngữ dự phòng luôn là ngôn ngữ được sử dụng trước đó và không phải tiếng Anh, mặc dù vậy, giá trị tiếng Anh của tôi cũng có trong tệp Info.plist, tôi cũng đã thử dùng cơ sở.lproj
Awais Nasir

19

Nếu một cái gì đó không hoạt động, đảm bảo bạn đã thêm:

"Tài nguyên cục bộ có thể được trộn lẫn" = CÓ

vào thông tin.plist. Trong trường hợp của tôi, các tệp InfoPlist.strings đã bị bỏ qua.


15

Lời khuyên

  1. Hãy nhớ rằng Trình mô phỏng iOS khai thác theo mặc định ngôn ngữ hệ thống của bạn. Vui lòng thay đổi ngôn ngữ (và khu vực) trong Cài đặt Trình mô phỏng iOS để kiểm tra bản dịch của bạn.

  2. Chuỗi nội địa hóa (xem tài liệu Apple tại đây ) phải là

    NSLocationWhenInUseUsageDescription = "Description of this";

    và không (với trích dẫn "...")

    "NSLocationWhenInUseUsageDescription" = "Description of this";

Bổ sung có giá trị, nhưng tôi nghĩ rằng đây nên là một nhận xét dưới câu trả lời tương ứng, không phải là một câu trả lời mới. Cũng lưu ý rằng "363" không phải là số nhận dạng bài đăng mà là số phiếu mà câu trả lời có (số lượng đã thay đổi).
John J. Camilleri

7
Tôi không có 50 danh tiếng để thêm một bình luận ở đó.
Giuseppe Beccari

Không quan trọng bạn có sử dụng dấu ngoặc kép "..." xung quanh khóa hay không, ví dụ: ( "NSLocationWhenInUseUsageDescription"="description"hợp lệ). Nó có thể có hoặc không có.
mluisbrown

12

Tôi đặc biệt khuyên bạn nên đọc hướng dẫn của Apple và xem các tài nguyên WWDC được liệt kê ở đây: Chủ đề quốc tế hóa và bản địa hóa

Để trả lời cụ thể câu hỏi của bạn, khi bạn thêm một ngôn ngữ mới vào dự án của mình nhập mô tả hình ảnh ở đây, bạn có cơ hội chọn các tệp InfoPlist để đưa vào (nếu bạn có nhiều mục tiêu, bạn sẽ có nhiều tệp Thông tin liên kết). Tất cả những gì bạn cần làm để có được màn hình sau là nhấn + bên dưới Bản địa hóa và chọn ngôn ngữ mới để thêm hỗ trợ. nhập mô tả hình ảnh ở đây

Khi bạn đã thêm, nó sẽ tạo các tệp chuỗi cần thiết trong các thư mục lproj thích hợp cho ngôn ngữ đã cho.

--BIÊN TẬP--

Để rõ ràng, iOS sẽ trao đổi chuỗi cho tệp Plist của bạn dựa trên ngôn ngữ hiện được chọn của người dùng bằng cách sử dụng khóa của mục nhập plist làm khóa trong tệp chuỗi được bản địa hóa.


3
Dịch toàn bộ số nguyên cho chỉ một phím là quá mức cần thiết. Tìm thêm thông tin tại đây: bit.ly/1yBUTru
RGML

2
Nó đơn giản là không đúng với XCode 9. Nó không bao giờ yêu cầu nội địa hóa nguyên tắc khi thêm một ngôn ngữ mới.
Tom

Tôi sẽ cần xem xét điều đó đối với Xcode 9 - chưa có cơ hội thử nghiệm trong Xcode mới.
Matt S.

11

Từng bước bản địa hóa Info.plist:

  1. Tìm trong Xcode thư mục Tài nguyên (được đặt trong root)
  2. Chọn thư mục Tài nguyên
  3. Sau đó nhấn menu chính File-> New-> File ...
  4. Chọn trong phần Tệp "Tài nguyên" và nhấn Next
  5. Sau đó, trong Save Astrường, hãy viết InfoPlist CHỈ (vốn "I" và vốn "P")
  6. Sau đó nhấn Tạo
  7. Sau đó chọn tệp InfoPlist.strings đã tạo trong thư mục Tài nguyên và nhấn trong menu bên phải nút "Bản địa hóa"
  8. Sau đó, bạn chọn Dự án từ Trình điều hướng dự án và chọn Dự án từ danh sách dự án
  9. Trong tab thông tin ở phía dưới, bạn có thể có bao nhiêu ngôn ngữ bạn muốn (Có trong phần Bản địa hóa)
  10. Ngôn ngữ bạn có thể thấy trong Thư mục tài nguyên
  11. Để bản địa hóa các giá trị ("khóa") từ tệp info.plist, bạn có thể mở bằng trình chỉnh sửa văn bản và nhận tất cả các khóa bạn muốn bản địa hóa
  12. Bạn viết bất kỳ khóa nào làm ví dụ trong bất kỳ InfoPlist.strings nào như ví dụ trên

"NSLocationAlwaysAndWhenInUseUsageDescription" = "blabla";

"NSLocationAlwaysUsageDes mô tả" = "blabla2";

Đó là tất cả công việc và bạn đã bản địa hóa tệp thông tin của bạn!


4

Đối với bất kỳ ai gặp phải vấn đề về thông tin.plist không được đưa vào khi cố gắng thêm nội địa hóa, như trong Xcode 9.

Bạn cần tạo thông tin.plist localiazble bằng cách vào đó và nhấp vào nút bản địa hóa trong trình kiểm tra tệp, như hiển thị bên dưới.

Info.plist sau đó sẽ được bao gồm trong tài nguyên tệp khi bạn đi để thêm Bản địa hóa mới.

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


3
Bạn có gặp phải vấn đề gì không? Tôi không thể xây dựng dự án khi tôi thêm hai ngôn ngữ vào Bản địa hóa vì xcode đang nói "Thông tin tệp không thể mở được vì không có tệp đó.
mkkrolik

2
@mkkrolik Bây giờ tôi đang gặp vấn đề tương tự. Bạn đã tìm thấy một giải pháp?
Todanley

@Todanley bỏ qua giải pháp này nó không hiệu quả với tôi. Sử dụng InfoPlist.strings thay thế.
mkkrolik

@mkkrolik Cảm ơn bạn mà làm việc. Và cũng khi thử nghiệm với trình giả lập, tôi phải thay đổi cài đặt ngôn ngữ của trình giả lập thay vì mục tiêu của tôi để nó hoạt động.
Todanley

3

Như RGML nói, bạn có thể tạo InfoPlist.strings, bản địa hóa nó sau đó thêm khóa của bạn và giá trị như sau: "NSLocationWhenInUseUsageDescription" = "Trợ giúp để xác định vị trí của tôi!";

Nó sẽ thêm khóa vào thông tin của bạn.plist cho ngôn ngữ được chỉ định.


0

Trong trường hợp của tôi, mọi thứ đã được thiết lập chính xác nhưng vẫn không tìm thấy tệp InfoPlist.strings.

Điều duy nhất thực sự hiệu quả là, xóa và thêm các tệp InfoPlist.strings một lần nữa vào dự án.


0

Trong trường hợp của tôi, nội địa hóa không hoạt động vì biểu tượng '-' trong tên. Ví dụ: "aero-Info.plist" Và các tệp được bản địa hóa: "aero-InfoPlist.strings" và "aeroInfoPlist.strings" không hoạt động.


0

Khi sử dụng InfoPlist.stringstệp (trong XCode, nó phải được đặt bên cạnh Info.plisttệp - vị trí tệp thực có thể ở bất kỳ đâu trong dự án

Xem trong XCode

) hãy cẩn thận để sử dụng tên viết tắt của khóa cho bản dịch.

Tôi đã cố gắng sử dụng Privacy - Camera Usage Description, nhưng chìa khóa làm việc làNSCameraUsageDescription

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.