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'; |
+ 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')) { |
+ 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 |