- From: Scott Wilson <scott.bradley.wilson@gmail.com>
- Date: Tue, 12 Mar 2013 10:25:48 +0000
- To: 전종홍 <hollobit@etri.re.kr>
- Cc: Janusz Majnert <j.majnert@samsung.com>, "public-sysapps@w3.org" <public-sysapps@w3.org>, "'public-webappstore@w3.org'" <public-webappstore@w3.org>, Melvin Carvalho <melvincarvalho@gmail.com>
- Message-Id: <9037F978-34F3-4A7B-AECD-AF66F8484C4D@gmail.com>
Note also that W3C P&C has localization of the metadata within the manifest; the separate files are for localized versions of the content (images, html, xml etc). On 12 Mar 2013, at 10:07, 전종홍 wrote: > BTW, we need to start to talk about the standardized manifest format. > > This is a draft comparison table for the manifest in the Web Stores. > (It compares three types of manifest format : W3C Widget, Mozilla App Store, Chrome Store) > > http://www.w3.org/community/webappstore/wiki/Manifest > (excel format : https://docs.google.com/spreadsheet/ccc?key=0AqtcXb4fZGyCdHlSX3RWY0ExSzk3bndyYnFHZlNlZVE&usp=sharing ) > > Best Regards, > > --- Jonathan Jeon > > -----Original Message----- > From: Janusz Majnert [mailto:j.majnert@samsung.com] > Sent: Tuesday, March 12, 2013 6:01 PM > To: public-sysapps@w3.org > Subject: Re: Manifest internationalization Model > > > Hi, > If I understand correctly, in Firefox OS the localised strings are in the main manifest file, while in Widgets P&C and Google's format, separate files are used? If so, I think Firefox OS model has the advantage that for hosted apps the user gets localised UI (app name, author etc) before actually installing the app. This makes hosting the app a bit easier. > > /Janusz > > On 2013-03-11 18:11, Marcos Caceres wrote: >> Hi, >> TL;DR: We need to settle on an i18n model for the manifest format. We have a few options here (based on the membership of the group): >> >> 1. Firefox OS's model [1]. >> 2. Google packaged apps's [2]. >> 3. W3C Packaged Web Apps (widgets) i18n model [3]. >> >> Each of the models have their own pros and cons. Below I describe each model. >> >> My recommendation is that we use the FireFox OS one, but with a few modifications: >> >> * Mozilla's i18n model currently only supports language tags with only two sub-tags. This should be fixed to allow three or more sub tags (I've got confirmation from Mozilla that they are willing to change this: https://bugzilla.mozilla.org/show_bug.cgi?id=846269). However, this depends on affected populations of people (see discussion on www-international: http://lists.w3.org/Archives/Public/www-international/2013JanMar/0305.html). >> >> * Language tag decomposition should follow BCP47's lookup algorithm (and an "application locale" should be derived from the union of the user agent locale and the manifest's declared locales). >> >> * The application locale should be exposed in JS through an interface. >> >> Ok… the rest is the long bla bla for each…. Will maybe put this into the Wiki or something. >> >> >> >> >> >> # Internationalization model of Firefox OS >> >> A more human readable version of this section is at [1]. >> >> This section lists a set of localization scenarios and describes how Firefox OS handles these different use cases. The section makes some recommendations about how particular use cases could be better addressed. >> >> To simplify the discussion, this document assumes the runtime is running in locale "en-US". >> >> ## CASE 1 - No localisation information. >> >> *Use case:* The author does not wish to explicitly localize any content. >> >> ```JSON >> { >> "name": "foo" >> } >> ``` >> >> *FxOS:* When there is no localized content declared, the user agent just uses what is at the root of the manifest. Hence, the name of the app is "foo". >> >> ## CASE 2 - No default locale >> >> *Use case:* The author provides the required ```name``` member, but chooses to localize the application's name for the "en-US" locale. However, the author neglects to add the ```default_locale``` member. >> >> ```JSON >> { >> "name": "unknown-locale name", >> "locales": { >> "jp": { >> "name": "jp name" >> }, >> "en-US": { >> "name": "en-US name" >> } >> } >> } >> ``` >> >> *FxOS:* Despite there not being any ```default_locale```, the user agent still chooses "en-US name" as the name for the application. When neither localized content matches, the value at the root of the manifest is selected. >> >> ## CASE 3 - No default locale, multiple matching ranges >> >> *Use case:* The author declares the name of the application using a set of variants of the English language. The author omits the ```default_locale``` member. >> >> ```JSON >> { >> "name": "unknown-locale name", >> "locales": { >> "en-US-x-test": { >> "name": "en-US-x-test name" >> } >> "en-US": { >> "name": "en-US name" >> }, >> "en": { >> "name": "en name" >> } >> } >> } >> ``` >> >> *FxOS:* The user agent selects the localized content that exactly matches the user agent's default language (so, in this case, "en-US name" is shown). >> >> ## CASE 4 - No default locale, with catch all >> >> *Use case:* The author declares the name of the application using a set of variants of the English language. However, none of them match the user agent's locale settings exactly. Fortunately, the author has included a catch all ("en"). >> >> ```JSON >> { >> "name": "unknown-locale name", >> "locales": { >> "en-AU": { >> "name": "en-AU name" >> } >> "en-GB": { >> "name": "en-GB name" >> }, >> "en": { >> "name": "en name" >> } >> } >> } >> ``` >> >> *FxOS:* The user agent first checks for "en-US", but failing that, it selects the next best match, which is "en name". >> >> ## CASE 5 - No default locale, multiple matching ranges >> >> *Use case:* The author wants to localize the name, but does not need to localize the developer information. >> >> ```JSON >> { >> "name": "unknown-locale name", >> "developer": { >> "name": "unknown-locale author" >> }, >> "locales": { >> "en-US": { >> "name": "en-US name" >> }, >> "jp":{ >> "name": "jp name" >> } >> } >> } >> ``` >> >> *FxOS:* The user agent selects "en-US" as the name, and "unknown-locale author" as the author. >> >> ## CASE 6 - No default locale, multiple matching ranges >> >> *Use case:* the author wants to localize the developer name but not the developer URL. >> >> ```JSON >> { >> "name": "unknown-locale name", >> "developer": { >> "name": "unknown-locale author", >> "url": "http://unknown-locale.com/" >> }, >> "locales": { >> "en-US": { >> "developer": { >> "name": "localized author" >> } >> } >> } >> } >> ``` >> >> *FxOS:* The user agent selects the localized developer name and uses the unknown-locale developer ```url```. >> >> ## CASE 7 - Default locale >> Use case: When the author uses any value for ```default_locale```, but no localized content is given through a ```locale``` member, the author still expects some content to be displayed to the user (even if they user might not be able to understand it). > >> >> ```JSON >> { >> "name": "unknown-locale name", >> "developer": { >> "name": "unknown-locale author" >> }, >> "default_locale": "unknown-locale" >> } >> ``` >> >> *FxOS:* The user agent selects "unknown-locale name" as the name of the application. >> >> ## CASE 8 - Language tag decomposition and lookup *Use case:* >> >> ```JSON >> { >> "name": "unknown-locale name", >> "developer": { >> "name": "unknown-locale author" >> }, >> "locales": { >> "en-US": { >> "name": "en name" >> }, >> "en": { >> "developer": { >> "name": "en developer" >> } >> } >> }, >> "default_locale": "unknown-locale" >> } >> ``` >> The name of the app is "en name". >> >> *FxOS:* When neither the ```default_locale``` nor the user agent locale matches any localized content, FxOS just uses the first sub-tag of the language range (in this case, just "en"). So, "en-US" becomes "en" ([see code](https://mxr.mozilla.org/mozilla-central/source/dom/apps/src/AppsUtils.jsm#427)). >> >> *[BUG 846269](https://bugzilla.mozilla.org/show_bug.cgi?id=846269)*: Because FxOS currently takes the first subtag in a language range, this will exclude language ranges initially composed of three or more subtags (e.g., zh-Hans-XQ). This means that if the user's regional preference is expressed as "zh-Hans-XQ", the following will not match any localized content (when zh-Hans would have been a reasonable match): >> >> ```JSON >> { >> "name": "unknown-locale name", >> "developer": {"name": "unknown-locale author"}, >> "locales": { >> "zh-Hans": { >> "name": "zh-Hans name" >> } >> }, >> "default_locale": "unknown-locale" >> } >> ``` >> >> ## CASE 9 - Granularity >> Use case: The author wishes for the name of the application to be localized for a particular locale. However, the author does not want to duplicate the developer information. >> >> ```JSON >> { >> "name": "您好!颜色", >> "locales": { >> "en-US": { >> "name": "Hi! Color" >> }, >> "en-AU": { >> "name": "G'Day! Colour" >> }, >> "en": { >> "developer": { >> "name": "en developer" >> } >> } >> }, >> "developer": { >> "name": "中国开发者" >> }, >> "default_locale": "zh-Hans" >> } >> ``` >> >> *FxOS:* The user agent selects "Hi! Color" as the name, but then selects "中国开发者" as the developer. Expected ```"name": "en developer"``` to be selected. Filed [BUG 846432](https://bugzilla.mozilla.org/show_bug.cgi?id=846432). >> >> *Proposal:* To address the above, the user agent should arrange the user's preferred locales and decompose them in order (removing any duplicates). So, if the user has "en-US, en-AU, jp" as her preferred language settings, those would decompose to "en-US, en-AU, en, jp". >> >> >> # Chrome i18n Model >> >> Chrome's i18n model [2] for localisation of manifest data differs quite significantly from the Mozilla one and the W3C widgets one [3]. In particularly, it's vastly more complicated in that it follows a more traditional software 18n model - some aspects are tightly bound to the Chrome apps store for some fields. >> >> Instead of allowing manifest content to be localized within the application manifest itself, all localized content is put into "messages.json" files in a special "_locales/language-TAG" directory (where language-TAG is, for example, en-US). The developer is then required to "key" all localised data and then Chrome reconstructs the localised content by matching keys to a magic string (__MSG_*__). For example: >> >> manifest.json >> ========== >> "name": "__MSG_application_title__", "description": "__MSG_application_description__" >> >> >> _locales/de/messages.json >> =============== >> "application_title": { "message": "Eine lokalisierte gehostete >> Beispielanwendung" } >> >> >> Then the developer declares what the "default_locale" is, which works as a catch-all for when the user's locale does not match the locale of the application. >> >> Chrome then provides an API to access localised strings from within the application itself. Having the API is not a bad thing (as it takes away some of the burden of having to read files from within a package through either XHR or a file reader API), but it does lock the developer into using a particular i18n model. >> >> Other none standard features include using custom language tags [2]. These language tags are non-standard in that they don't conform to BCP 47. As such, some region, language, script combinations cannot, theoretically speaking, be adequately expressed. If this affects actual populations of people, I am unsure of. >> >> >> # W3C Packaged Web Apps (widgets) 18n Model. >> The model is already fully described [3] - with plenty of examples. It supports both manifest level localizations as all directory-based localisation in a manner similar to Google's. >> >> http://www.w3.org/TR/widgets/#internationalization-and-localization >> >> [1] https://gist.github.com/marcoscaceres/5055717 >> [2] https://developers.google.com/chrome/web-store/docs/i18n >> [3] >> http://www.w3.org/TR/widgets/#internationalization-and-localization >> -- >> Marcos Caceres >> http://datadriven.com.au >> >> >> >> > >
Received on Tuesday, 12 March 2013 10:26:31 UTC