Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Unified Diff: src/extensions/experimental/i18n.js

Issue 7014019: Adding DateTimeFormat class to i18n API. (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698