Chromium Code Reviews| Index: src/extensions/experimental/i18n.js |
| =================================================================== |
| --- src/extensions/experimental/i18n.js (revision 7878) |
| +++ src/extensions/experimental/i18n.js (working copy) |
| @@ -131,13 +131,88 @@ |
| /** |
| * Creates new Collator based on current locale. |
| * @param {Object} - collation flags. See constructor. |
| - * @returns {Object} - new v8BreakIterator object. |
| + * @returns {Object} - new Collator object. |
| */ |
| v8Locale.prototype.createCollator = function(settings) { |
| return new v8Locale.Collator(this, settings); |
| }; |
| /** |
| + * DateTimeFormat class implements locale-aware date and time formatting. |
| + * @param {Object} locale - locale object to pass to formatter. |
| + * @param {Object} settings - formatting flags: |
| + * - skeleton |
| + * - dateType |
| + * - timeType |
| + * - calendar |
| + * @constructor |
| + */ |
| +v8Locale.DateTimeFormat = function(locale, settings) { |
| + native function NativeJSDateTimeFormat(); |
| + |
| + settings = v8Locale.createSettingsOrDefault_(settings, {}); |
| + |
| + var shortDate = 'yMMdd'; |
|
jungshik at Google
2011/05/13 23:37:53
Hmm... this is problematic in some locales. In Kor
Nebojša Ćirić
2011/05/17 20:40:37
Done.
|
| + var longDate = 'EEEEyMMMdd'; |
| + var shortTime = 'jm'; |
| + var mediumTime = 'jms'; |
| + var skeleton = shortDate + shortTime; |
| + if (settings.hasOwnProperty('skeleton')) { |
| + skeleton = settings['skeleton']; |
| + } else if (settings.hasOwnProperty('dateType') && |
| + settings.hasOwnProperty('timeType')) { |
|
jungshik at Google
2011/05/13 23:37:53
After our discussion, this point became unapplicab
Nebojša Ćirić
2011/05/17 20:40:37
Done.
|
| + var dt = settings['dateType']; |
| + var tt = settings['timeType']; |
| + if (dt === 'short' && tt === 'short') { |
| + skeleton = shortDate + shortTime; |
| + } else if (dt === 'short' && tt === 'medium') { |
| + skeleton = shortDate + mediumTime; |
| + } else if (dt === 'long' && tt === 'short') { |
| + skeleton = longDate + shortTime; |
| + } else if (dt === 'long' && tt === 'medium') { |
| + skeleton = longDate + mediumTime; |
| + } |
| + } else if (settings.hasOwnProperty('dateType')) { |
| + if (settings['dateType'] === 'short') { |
| + skeleton = shortDate; |
| + } else if (settings['dateType'] === 'long') { |
| + skeleton = longDate; |
| + } |
| + } else if (settings.hasOwnProperty('timeType')) { |
| + if (settings['timeType'] === 'short') { |
| + skeleton = shortTime; |
| + } else if (settings['timeType'] === 'medium') { |
| + skeleton = mediumTime; |
| + } |
| + } |
| + |
| + locale = v8Locale.createLocaleOrDefault_(locale); |
| + var formatter = NativeJSDateTimeFormat(locale.__icuLocaleID__, skeleton); |
| + |
| + /** |
| + * Clones existing date time format with possible overrides for some |
| + * of the options. |
| + * @param {!Object} overrideSettings - overrides for current format settings. |
| + * @returns {Object} - new DateTimeFormat object. |
| + */ |
| + formatter.derive = function(overrideSettings) { |
| + return new v8Locale.DateTimeFormat( |
| + locale, v8Locale.createSettingsOrDefault_(overrideSettings, settings)); |
| + }; |
| + |
| + return formatter; |
| +}; |
| + |
| +/** |
| + * Creates new DateTimeFormat based on current locale. |
| + * @param {Object} - formatting flags. See constructor. |
| + * @returns {Object} - new DateTimeFormat object. |
| + */ |
| +v8Locale.prototype.createDateTimeFormat = function(settings) { |
| + return new v8Locale.DateTimeFormat(this, settings); |
| +}; |
| + |
| +/** |
| * Merges user settings and defaults. |
| * Settings that are not of object type are rejected. |
| * Actual property values are not validated, but whitespace is trimmed if they |