diff options
| author | Zog | 2018-01-25 11:11:32 +0100 |
|---|---|---|
| committer | Luc Donnet | 2018-03-23 17:21:56 +0100 |
| commit | c3c01f592a33010013c0a1112e58453f5e936b5e (patch) | |
| tree | 63bd83dd2e40b94b024a1aebfe640ac4012363e9 | |
| parent | 8d95e19f17ee2fc784dc22882aeee84c24f248a7 (diff) | |
| download | chouette-core-c3c01f592a33010013c0a1112e58453f5e936b5e.tar.bz2 | |
Proposed i18n enhancements
| -rw-r--r-- | config/initializers/i18n.rb | 149 | ||||
| -rw-r--r-- | config/locales/en.yml | 1 | ||||
| -rw-r--r-- | config/locales/fr.yml | 1 |
3 files changed, 151 insertions, 0 deletions
diff --git a/config/initializers/i18n.rb b/config/initializers/i18n.rb new file mode 100644 index 000000000..ae43f2ca5 --- /dev/null +++ b/config/initializers/i18n.rb @@ -0,0 +1,149 @@ +module I18n + class << self + def translate_with_fallback key, options={}, original=nil + begin + self.translate_without_fallback(key, {raise: true}.update(options)) + rescue => e + split = key.to_s.split('.') + if split.size <= 2 + translate_without_fallback original || key, options + else + v = split.pop + v2 = split.pop + split.pop if v2 == "default" + split << "default" << v + new_key = split.join('.') + translate_with_fallback new_key, options, original || key + end + end + end + alias_method_chain :translate, :fallback + alias_method :t, :translate + end + + def self.tc(key, params={}) + self.t('label_with_colon', label: key.t(params)).html_safe + end + + def self.tmf(key, params={}) + model, col = key.split "." + begin + self.t "activerecord.attributes.#{key}", {raise: true}.update(params) + rescue + begin + self.t "activerecord.attributes.common.#{col}", {raise: true}.update(params) + rescue + begin + self.t "simple_form.labels.#{key}", {raise: true}.update(params) + rescue + "activerecord.attributes.#{key}".t params + end + end + end + end + + def self.tmfc(key, params={}) + self.t('label_with_colon', label: self.tmf(key, params)).html_safe + end + + def self.missing_keys_logger + @@my_logger ||= Logger.new("#{Rails.root}/log/missing_keys.log") + end + + def self.log_missing_key key, params={} + missing_keys_logger.info "key: '#{key}', locale: '#{I18n.locale}', params: #{params}" + end + + def self.t_with_default(key, params={}) + begin + self.t(key, {raise: true}.update(params)) + rescue + if Rails.env.development? + log_missing_key key, params + "<span class='label label-danger' title='#{self.t(key, params)}'>!</span>#{key.split('.').last}".html_safe + else + key.split('.').last + end + end + end +end + +module EnhancedI18n + def t(params={}) + I18n.t_with_default(self, params) + end + + def tc(params={}) + I18n.tc(self, params) + end + + def tmf(params={}) + I18n.tmf(self, params) + end + + def tmfc(params={}) + I18n.tmfc(self, params) + end +end + +module EnhancedTimeI18n + def l(params={}) + I18n.l(self, params) + end +end + +class Symbol + include EnhancedI18n +end + +class String + include EnhancedI18n +end + +class Time + include EnhancedTimeI18n +end + +class DateTime + include EnhancedTimeI18n +end + +class Date + include EnhancedTimeI18n +end + +class ActiveRecord::Base + # Human name of the class (plural) + def self.t opts={} + "activerecord.models.#{i18n_key}".t({count: 2}.update(opts)) + end + + # Human name of the class (singular) + def self.ts opts={} + self.t({count: 1}.update(opts)) + end + + # Human name of the class (with comma) + def self.tc(params={}) + I18n.tc(i18n_key, params) + end + + # Human name of the attribute + def self.tmf(attribute, params={}) + I18n.tmf "#{i18n_key}.#{attribute}", params + end + + # Translate the given action on the model, with default + def self.t_action(action, params={}) + begin + I18n.translate_without_fallback "#{i18n_key.pluralize}.actions.#{action}", ({raise: true}.update(params)) + rescue + I18n.translate_without_fallback "actions.#{action}", params + end + end + + private + def self.i18n_key + model_name.to_s.underscore.gsub('/', '_') + end +end diff --git a/config/locales/en.yml b/config/locales/en.yml index 8af8067db..05d21a1f2 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -2,6 +2,7 @@ en: "true": "Yes" "false": "No" "unknown": "Unknown" + label_with_colon: "%{label}: " time: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index e1f52ff55..733ba05b9 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -2,6 +2,7 @@ fr: "true": "Oui" "false": "Non" "unknown": "Non précisé" + label_with_colon: "%{label} : " time: formats: |
