2016-12-04 21 views
6

Theo mặc định, các ứng dụng UWP của Windows Store chỉ cài đặt tài nguyên cụ thể cho máy mục tiêu. Ví dụ: nếu ứng dụng được bản địa hóa thành 5 ngôn ngữ khác nhau và người dùng có máy ở Hoa Kỳ thì chỉ có tài nguyên en-US được cài đặt.Làm cách nào để luôn cài đặt tất cả các tài nguyên được bản địa hóa trong ứng dụng UWP của Windows Store?

Vấn đề là nếu tôi muốn có trong ứng dụng của mình chuyển đổi ngôn ngữ theo yêu cầu. Thậm chí nghĩ rằng tôi đã xuất bản ứng dụng với các tài nguyên fr-FR, tôi không thể chuyển sang fr-FR vì gói ngôn ngữ này chưa được cài đặt.

Có cách nào hoặc đặt thành buộc tất cả tài nguyên tải xuống khi ứng dụng được cài đặt từ Windows Store?

Lưu ý một cách, làm thế nào để giải quyết này là không gói ứng dụng như appxbundle, nhưng khi ứng dụng được xuất bản như appxbundle, nó không thể quay trở lại định dạng không appxbundle.

Sửa, giải pháp được chấp nhận dưới đây làm việc, tôi chỉ cần thêm cấu hình này để file csproj của tôi và bây giờ nó tải về tất cả các file tài nguyên trong khi cài đặt:

<AppxBundleAutoResourcePackageQualifiers>Scale|DXFeatureLevel</AppxBundleAutoResourcePackageQualifiers> 
<AppxDefaultResourceQualifiers>Language=cs-CZ;de-DE;en-US;es-ES;fr-FR;it-IT;pt-PT;ru-RU</AppxDefaultResourceQualifiers> 

Trả lời

4

Lưu ý một cách, làm thế nào để giải quyết này không được đóng gói ứng dụng như appxbundle, nhưng khi ứng dụng được xuất bản như appxbundle, nó không thể t o quay lại định dạng không phải appxbundle.

Nếu bạn cần giữ lại appxbundle, nhưng vẫn muốn giữ tất cả tài nguyên ngôn ngữ được cài đặt. Bạn có thể bao gồm các tài nguyên bằng cách thêm tệp cấu hình vào gói ứng dụng của bạn hoặc sửa đổi tệp dự án của bạn trực tiếp.

Bằng cách này, người dùng có thể thay đổi tùy chọn ngôn ngữ ngoại tuyến và thiết bị của họ có thể chuyển sang tài nguyên tốt nhất cho cài đặt mới.

Để biết các bước chi tiết, vui lòng theo dõi Ensure that resources are installed on a device regardless of whether a device requires them, nhắm mục tiêu trên ứng dụng Windows Store 8.1, nhưng cũng hoạt động với ứng dụng UWP. Ngoài ra, bạn có thể kiểm tra câu trả lời của @Amy Peng theo số this thread trên diễn đàn MSDN.

+0

Vâng, tôi cũng tìm thấy trang MSDN này và cách tiếp cận này hoạt động trong ứng dụng UWP của tôi mặc dù nó nhắm mục tiêu Windows 8.1. Quá tệ, tôi phải đào sâu tài liệu để tìm ra nó. –

1

Tôi nghĩ rằng hệ thống sẽ không cho phép bạn ép buộc điều này mà không gian lận các quy ước.

Là một khắc phục, bạn có thể đặt tên cho tập tin tài nguyên theo cách như vậy mà hệ thống chính nó không nhận nó là đối phó với nguồn lực địa phương - thay vì phải Resources.en-US.resw, Resources.fr-FR.resw, vv, bạn có thể đặt tên cho họ Ví dụ: Resources_enUS.resw, Resources_frFR.resw.

Sau đó, bạn có thể có một lớp LocalizationService, mà sẽ chấp nhận thẻ văn hóa như tham số nhà xây dựng và tự tải các nguồn lực cho rằng văn hóa cụ thể:

public class LocalizationService 
{ 
    private readonly ResourceLoader _loader = null; 

    public LocalizationService(string culture) 
    { 
     culture = culture.Replace("-", ""); 
     _loader = ResourceLoader.GetForCurrentView($"Resources_{culture}"); 
    } 
} 

Sau đó, bạn chỉ có thể tạo ra các LocalizationService với văn hóa yêu cầu

var localizer = new LocalizationService("fr-FR") 
Các vấn đề liên quan