From 896c79dd16fe1415c00dee500e17049d75e4a35d Mon Sep 17 00:00:00 2001 From: Piotr Sarnacki Date: Wed, 15 Jan 2014 14:40:56 +0100 Subject: [PATCH] Remove the rest of the locales related stuff --- Gemfile | 1 - Gemfile.lock | 16 - assets/scripts/app/helpers.coffee | 1 - .../app/helpers/i18n_handlebars.coffee | 34 -- assets/scripts/lib/ext/i18n.coffee | 5 - assets/scripts/spec/spec_helper.coffee | 1 - assets/scripts/spec/unit/user_spec.coffee | 1 - assets/scripts/travis.coffee | 3 - assets/scripts/vendor/i18n.js | 532 ------------------ 9 files changed, 594 deletions(-) delete mode 100644 assets/scripts/app/helpers/i18n_handlebars.coffee delete mode 100644 assets/scripts/lib/ext/i18n.coffee delete mode 100644 assets/scripts/vendor/i18n.js diff --git a/Gemfile b/Gemfile index e146149d..ca75444c 100644 --- a/Gemfile +++ b/Gemfile @@ -11,7 +11,6 @@ gem 'sinatra' group :assets do gem 'rake-pipeline', github: 'livingsocial/rake-pipeline' gem 'rake-pipeline-web-filters', github: 'wycats/rake-pipeline-web-filters' - gem 'rake-pipeline-i18n-filters' gem 'coffee-script' gem 'compass' gem 'tilt' diff --git a/Gemfile.lock b/Gemfile.lock index 80adb3af..7d836aa0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -40,28 +40,17 @@ GEM foreman (0.61.0) thor (>= 0.13.6) fssm (0.2.10) - gli (2.5.4) guard (1.6.2) listen (>= 0.6.0) lumberjack (>= 1.0.2) pry (>= 0.9.10) terminal-table (>= 1.4.3) thor (>= 0.14.6) - i18n (0.6.3) json (1.7.7) libv8 (3.16.14.3) listen (0.7.3) - localeapp (0.6.9) - gli - i18n - json - rest-client - ya2yaml - localeapp-handlebars_i18n (0.0.1) - localeapp lumberjack (1.0.2) method_source (0.8.1) - mime-types (1.21) multi_json (1.6.1) open4 (1.3.0) pry (0.9.12) @@ -87,8 +76,6 @@ GEM rb-fsevent (0.9.3) rerun (0.8.0) listen - rest-client (1.6.7) - mime-types (>= 1.16) rspec (2.13.0) rspec-core (~> 2.13.0) rspec-expectations (~> 2.13.0) @@ -116,7 +103,6 @@ GEM uglifier (1.3.0) execjs (>= 0.3.0) multi_json (~> 1.0, >= 1.0.2) - ya2yaml (0.31) yui-compressor (0.9.6) POpen4 (>= 0.1.4) @@ -129,8 +115,6 @@ DEPENDENCIES foreman guard libv8 (~> 3.16.0) - localeapp - localeapp-handlebars_i18n puma rack-cache rack-mobile-detect diff --git a/assets/scripts/app/helpers.coffee b/assets/scripts/app/helpers.coffee index ac77424a..bcbd98c1 100644 --- a/assets/scripts/app/helpers.coffee +++ b/assets/scripts/app/helpers.coffee @@ -1,4 +1,3 @@ require 'helpers/handlebars' require 'helpers/helpers' require 'helpers/urls' -require 'helpers/i18n_handlebars' diff --git a/assets/scripts/app/helpers/i18n_handlebars.coffee b/assets/scripts/app/helpers/i18n_handlebars.coffee deleted file mode 100644 index 38e6bfbc..00000000 --- a/assets/scripts/app/helpers/i18n_handlebars.coffee +++ /dev/null @@ -1,34 +0,0 @@ -I18nBoundView = Ember.View.extend Ember._Metamorph, { - - key: null, - - valueDidChange: -> - return if this.morph.isRemoved() - this.morph.html(this.valueForRender()) - - valueForRender: -> - new Handlebars.SafeString I18n.t(this.key) - - init: -> - this._super() - Travis.addObserver('locale', this, 'valueDidChange') - - didInsertElement: -> - this.valueDidChange() - - destroy: -> - Travis.removeObserver('locale', this, 'valueDidChange') - this._super() - - render: (buffer) -> - buffer.push(this.valueForRender()) -} - -Ember.Handlebars.registerHelper 't', (key, options) -> - view = options.data.view - bindView = view.createChildView(I18nBoundView, { key: key }) - view.appendChild(bindView) - # dont write any content from this helper, let the child view - # take care of itself. - false - diff --git a/assets/scripts/lib/ext/i18n.coffee b/assets/scripts/lib/ext/i18n.coffee deleted file mode 100644 index 5eec7d69..00000000 --- a/assets/scripts/lib/ext/i18n.coffee +++ /dev/null @@ -1,5 +0,0 @@ -I18n.missingTranslation = -> - key = arguments[arguments.length - 1] - value = key.split('.').pop() - $.titleize(value) - diff --git a/assets/scripts/spec/spec_helper.coffee b/assets/scripts/spec/spec_helper.coffee index c3edead9..da2366b1 100644 --- a/assets/scripts/spec/spec_helper.coffee +++ b/assets/scripts/spec/spec_helper.coffee @@ -26,7 +26,6 @@ window.signInUser = (data) -> created_at: "2011-05-10T15:43:59Z" gravatar_id: "582034b63279abeaa8e76acf12f5ee30" is_syncing: false - locale: "en" name: "Tyrion" synced_at: "2013-12-09T09:41:47Z" } diff --git a/assets/scripts/spec/unit/user_spec.coffee b/assets/scripts/spec/unit/user_spec.coffee index 8df3fcdb..81df96dc 100644 --- a/assets/scripts/spec/unit/user_spec.coffee +++ b/assets/scripts/spec/unit/user_spec.coffee @@ -17,7 +17,6 @@ test '', -> created_at: "2011-05-10T15:43:59Z" gravatar_id: "582034b63279abeaa8e76acf12f5ee30" is_syncing: false - locale: "en" name: "Tyrion" synced_at: "2013-12-09T09:41:47Z" } diff --git a/assets/scripts/travis.coffee b/assets/scripts/travis.coffee index 2491ca60..997f2b67 100644 --- a/assets/scripts/travis.coffee +++ b/assets/scripts/travis.coffee @@ -154,7 +154,6 @@ Travis.Router.reopen Ember.LinkView.reopen loadingClass: 'loading_link' -require 'ext/i18n' require 'travis/ajax' require 'travis/adapter' require 'routes' @@ -168,8 +167,6 @@ require 'tailing' require 'templates' require 'views' -require 'config/locales' - require 'travis/instrumentation' Travis.setup() diff --git a/assets/scripts/vendor/i18n.js b/assets/scripts/vendor/i18n.js deleted file mode 100644 index 43641346..00000000 --- a/assets/scripts/vendor/i18n.js +++ /dev/null @@ -1,532 +0,0 @@ -// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf -if (!Array.prototype.indexOf) { - Array.prototype.indexOf = function(searchElement /*, fromIndex */) { - "use strict"; - - if (this === void 0 || this === null) { - throw new TypeError(); - } - - var t = Object(this); - var len = t.length >>> 0; - - if (len === 0) { - return -1; - } - - var n = 0; - if (arguments.length > 0) { - n = Number(arguments[1]); - if (n !== n) { // shortcut for verifying if it's NaN - n = 0; - } else if (n !== 0 && n !== (Infinity) && n !== -(Infinity)) { - n = (n > 0 || -1) * Math.floor(Math.abs(n)); - } - } - - if (n >= len) { - return -1; - } - - var k = n >= 0 - ? n - : Math.max(len - Math.abs(n), 0); - - for (; k < len; k++) { - if (k in t && t[k] === searchElement) { - return k; - } - } - - return -1; - }; -} - -// Instantiate the object -window.I18n = {}; - -// Set default locale to english -I18n.defaultLocale = "en"; - -// Set default handling of translation fallbacks to false -I18n.fallbacks = false; - -// Set default separator -I18n.defaultSeparator = "."; - -// Set current locale to null -I18n.locale = null; - -// Set the placeholder format. Accepts `{{placeholder}}` and `%{placeholder}`. -I18n.PLACEHOLDER = /(?:\{\{|%\{)(.*?)(?:\}\}?)/gm; - -I18n.fallbackRules = { -}; - -I18n.pluralizationRules = { - en: function (n) { - return n == 0 ? ["zero", "none", "other"] : n == 1 ? "one" : "other"; - } -}; - -I18n.getFallbacks = function(locale) { - if (locale === I18n.defaultLocale) { - return []; - } else if (!I18n.fallbackRules[locale]) { - var rules = [] - , components = locale.split("-"); - - for (var l = 1; l < components.length; l++) { - rules.push(components.slice(0, l).join("-")); - } - - rules.push(I18n.defaultLocale); - - I18n.fallbackRules[locale] = rules; - } - - return I18n.fallbackRules[locale]; -} - -I18n.isValidNode = function(obj, node, undefined) { - return obj[node] !== null && obj[node] !== undefined; -}; - -I18n.lookup = function(scope, options) { - var options = options || {} - , lookupInitialScope = scope - , translations = this.prepareOptions(I18n.translations) - , locale = options.locale || I18n.currentLocale() - , messages = translations[locale] || {} - , options = this.prepareOptions(options) - , currentScope - ; - - if (typeof(scope) == "object") { - scope = scope.join(this.defaultSeparator); - } - - if (options.scope) { - scope = options.scope.toString() + this.defaultSeparator + scope; - } - - scope = scope.split(this.defaultSeparator); - - while (messages && scope.length > 0) { - currentScope = scope.shift(); - messages = messages[currentScope]; - } - - if (!messages) { - if (I18n.fallbacks) { - var fallbacks = this.getFallbacks(locale); - for (var fallback = 0; fallback < fallbacks.length; fallbacks++) { - messages = I18n.lookup(lookupInitialScope, this.prepareOptions({locale: fallbacks[fallback]}, options)); - if (messages) { - break; - } - } - } - - if (!messages && this.isValidNode(options, "defaultValue")) { - messages = options.defaultValue; - } - } - - return messages; -}; - -// Merge serveral hash options, checking if value is set before -// overwriting any value. The precedence is from left to right. -// -// I18n.prepareOptions({name: "John Doe"}, {name: "Mary Doe", role: "user"}); -// #=> {name: "John Doe", role: "user"} -// -I18n.prepareOptions = function() { - var options = {} - , opts - , count = arguments.length - ; - - for (var i = 0; i < count; i++) { - opts = arguments[i]; - - if (!opts) { - continue; - } - - for (var key in opts) { - if (!this.isValidNode(options, key)) { - options[key] = opts[key]; - } - } - } - - return options; -}; - -I18n.interpolate = function(message, options) { - options = this.prepareOptions(options); - var matches = message.match(this.PLACEHOLDER) - , placeholder - , value - , name - ; - - if (!matches) { - return message; - } - - for (var i = 0; placeholder = matches[i]; i++) { - name = placeholder.replace(this.PLACEHOLDER, "$1"); - - value = options[name]; - - if (!this.isValidNode(options, name)) { - value = "[missing " + placeholder + " value]"; - } - - regex = new RegExp(placeholder.replace(/\{/gm, "\\{").replace(/\}/gm, "\\}")); - message = message.replace(regex, value); - } - - return message; -}; - -I18n.translate = function(scope, options) { - options = this.prepareOptions(options); - var translation = this.lookup(scope, options); - - try { - if (typeof(translation) == "object") { - if (typeof(options.count) == "number") { - return this.pluralize(options.count, scope, options); - } else { - return translation; - } - } else { - return this.interpolate(translation, options); - } - } catch(err) { - return this.missingTranslation(scope); - } -}; - -I18n.localize = function(scope, value) { - switch (scope) { - case "currency": - return this.toCurrency(value); - case "number": - scope = this.lookup("number.format"); - return this.toNumber(value, scope); - case "percentage": - return this.toPercentage(value); - default: - if (scope.match(/^(date|time)/)) { - return this.toTime(scope, value); - } else { - return value.toString(); - } - } -}; - -I18n.parseDate = function(date) { - var matches, convertedDate; - - // we have a date, so just return it. - if (typeof(date) == "object") { - return date; - }; - - // it matches the following formats: - // yyyy-mm-dd - // yyyy-mm-dd[ T]hh:mm::ss - // yyyy-mm-dd[ T]hh:mm::ss - // yyyy-mm-dd[ T]hh:mm::ssZ - // yyyy-mm-dd[ T]hh:mm::ss+0000 - // - matches = date.toString().match(/(\d{4})-(\d{2})-(\d{2})(?:[ T](\d{2}):(\d{2}):(\d{2}))?(Z|\+0000)?/); - - if (matches) { - for (var i = 1; i <= 6; i++) { - matches[i] = parseInt(matches[i], 10) || 0; - } - - // month starts on 0 - matches[2] -= 1; - - if (matches[7]) { - convertedDate = new Date(Date.UTC(matches[1], matches[2], matches[3], matches[4], matches[5], matches[6])); - } else { - convertedDate = new Date(matches[1], matches[2], matches[3], matches[4], matches[5], matches[6]); - } - } else if (typeof(date) == "number") { - // UNIX timestamp - convertedDate = new Date(); - convertedDate.setTime(date); - } else if (date.match(/\d+ \d+:\d+:\d+ [+-]\d+ \d+/)) { - // a valid javascript format with timezone info - convertedDate = new Date(); - convertedDate.setTime(Date.parse(date)) - } else { - // an arbitrary javascript string - convertedDate = new Date(); - convertedDate.setTime(Date.parse(date)); - } - - return convertedDate; -}; - -I18n.toTime = function(scope, d) { - var date = this.parseDate(d) - , format = this.lookup(scope) - ; - - if (date.toString().match(/invalid/i)) { - return date.toString(); - } - - if (!format) { - return date.toString(); - } - - return this.strftime(date, format); -}; - -I18n.strftime = function(date, format) { - var options = this.lookup("date"); - - if (!options) { - return date.toString(); - } - - options.meridian = options.meridian || ["AM", "PM"]; - - var weekDay = date.getDay() - , day = date.getDate() - , year = date.getFullYear() - , month = date.getMonth() + 1 - , hour = date.getHours() - , hour12 = hour - , meridian = hour > 11 ? 1 : 0 - , secs = date.getSeconds() - , mins = date.getMinutes() - , offset = date.getTimezoneOffset() - , absOffsetHours = Math.floor(Math.abs(offset / 60)) - , absOffsetMinutes = Math.abs(offset) - (absOffsetHours * 60) - , timezoneoffset = (offset > 0 ? "-" : "+") + (absOffsetHours.toString().length < 2 ? "0" + absOffsetHours : absOffsetHours) + (absOffsetMinutes.toString().length < 2 ? "0" + absOffsetMinutes : absOffsetMinutes) - ; - - if (hour12 > 12) { - hour12 = hour12 - 12; - } else if (hour12 === 0) { - hour12 = 12; - } - - var padding = function(n) { - var s = "0" + n.toString(); - return s.substr(s.length - 2); - }; - - var f = format; - f = f.replace("%a", options.abbr_day_names[weekDay]); - f = f.replace("%A", options.day_names[weekDay]); - f = f.replace("%b", options.abbr_month_names[month]); - f = f.replace("%B", options.month_names[month]); - f = f.replace("%d", padding(day)); - f = f.replace("%e", day); - f = f.replace("%-d", day); - f = f.replace("%H", padding(hour)); - f = f.replace("%-H", hour); - f = f.replace("%I", padding(hour12)); - f = f.replace("%-I", hour12); - f = f.replace("%m", padding(month)); - f = f.replace("%-m", month); - f = f.replace("%M", padding(mins)); - f = f.replace("%-M", mins); - f = f.replace("%p", options.meridian[meridian]); - f = f.replace("%S", padding(secs)); - f = f.replace("%-S", secs); - f = f.replace("%w", weekDay); - f = f.replace("%y", padding(year)); - f = f.replace("%-y", padding(year).replace(/^0+/, "")); - f = f.replace("%Y", year); - f = f.replace("%z", timezoneoffset); - - return f; -}; - -I18n.toNumber = function(number, options) { - options = this.prepareOptions( - options, - this.lookup("number.format"), - {precision: 3, separator: ".", delimiter: ",", strip_insignificant_zeros: false} - ); - - var negative = number < 0 - , string = Math.abs(number).toFixed(options.precision).toString() - , parts = string.split(".") - , precision - , buffer = [] - , formattedNumber - ; - - number = parts[0]; - precision = parts[1]; - - while (number.length > 0) { - buffer.unshift(number.substr(Math.max(0, number.length - 3), 3)); - number = number.substr(0, number.length -3); - } - - formattedNumber = buffer.join(options.delimiter); - - if (options.precision > 0) { - formattedNumber += options.separator + parts[1]; - } - - if (negative) { - formattedNumber = "-" + formattedNumber; - } - - if (options.strip_insignificant_zeros) { - var regex = { - separator: new RegExp(options.separator.replace(/\./, "\\.") + "$") - , zeros: /0+$/ - }; - - formattedNumber = formattedNumber - .replace(regex.zeros, "") - .replace(regex.separator, "") - ; - } - - return formattedNumber; -}; - -I18n.toCurrency = function(number, options) { - options = this.prepareOptions( - options, - this.lookup("number.currency.format"), - this.lookup("number.format"), - {unit: "$", precision: 2, format: "%u%n", delimiter: ",", separator: "."} - ); - - number = this.toNumber(number, options); - number = options.format - .replace("%u", options.unit) - .replace("%n", number) - ; - - return number; -}; - -I18n.toHumanSize = function(number, options) { - var kb = 1024 - , size = number - , iterations = 0 - , unit - , precision - ; - - while (size >= kb && iterations < 4) { - size = size / kb; - iterations += 1; - } - - if (iterations === 0) { - unit = this.t("number.human.storage_units.units.byte", {count: size}); - precision = 0; - } else { - unit = this.t("number.human.storage_units.units." + [null, "kb", "mb", "gb", "tb"][iterations]); - precision = (size - Math.floor(size) === 0) ? 0 : 1; - } - - options = this.prepareOptions( - options, - {precision: precision, format: "%n%u", delimiter: ""} - ); - - number = this.toNumber(size, options); - number = options.format - .replace("%u", unit) - .replace("%n", number) - ; - - return number; -}; - -I18n.toPercentage = function(number, options) { - options = this.prepareOptions( - options, - this.lookup("number.percentage.format"), - this.lookup("number.format"), - {precision: 3, separator: ".", delimiter: ""} - ); - - number = this.toNumber(number, options); - return number + "%"; -}; - -I18n.pluralizer = function(locale) { - pluralizer = this.pluralizationRules[locale]; - if (pluralizer !== undefined) return pluralizer; - return this.pluralizationRules["en"]; -}; - -I18n.findAndTranslateValidNode = function(keys, translation) { - for (i = 0; i < keys.length; i++) { - key = keys[i]; - if (this.isValidNode(translation, key)) return translation[key]; - } - return null; -}; - -I18n.pluralize = function(count, scope, options) { - var translation; - - try { - translation = this.lookup(scope, options); - } catch (error) {} - - if (!translation) { - return this.missingTranslation(scope); - } - - var message; - options = this.prepareOptions(options); - options.count = count.toString(); - - pluralizer = this.pluralizer(this.currentLocale()); - key = pluralizer(Math.abs(count)); - keys = ((typeof key == "object") && (key instanceof Array)) ? key : [key]; - - message = this.findAndTranslateValidNode(keys, translation); - if (message == null) message = this.missingTranslation(scope, keys[0]); - - return this.interpolate(message, options); -}; - -I18n.missingTranslation = function() { - var message = '[missing "' + this.currentLocale() - , count = arguments.length - ; - - for (var i = 0; i < count; i++) { - message += "." + arguments[i]; - } - - message += '" translation]'; - - return message; -}; - -I18n.currentLocale = function() { - return (I18n.locale || I18n.defaultLocale); -}; - -// shortcuts -I18n.t = I18n.translate; -I18n.l = I18n.localize; -I18n.p = I18n.pluralize; -