i18n-js 3.8.3 → 4.0.0.alpha1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +4 -0
  3. data/.github/FUNDING.yml +1 -1
  4. data/.github/ISSUE_TEMPLATE/bug_report.md +41 -0
  5. data/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
  6. data/.github/PULL_REQUEST_TEMPLATE.md +38 -0
  7. data/.github/dependabot.yml +15 -0
  8. data/.github/workflows/ruby-tests.yml +61 -0
  9. data/.gitignore +11 -7
  10. data/.rubocop.yml +12 -0
  11. data/CHANGELOG.md +12 -535
  12. data/CODE_OF_CONDUCT.md +74 -0
  13. data/CONTRIBUTING.md +79 -0
  14. data/Gemfile +3 -0
  15. data/LICENSE.md +20 -0
  16. data/README.md +86 -1030
  17. data/Rakefile +10 -20
  18. data/exe/i18n +5 -0
  19. data/i18n-js.gemspec +47 -29
  20. data/lib/guard/i18n-js.rb +78 -0
  21. data/lib/guard/i18n-js/templates/Guardfile +10 -0
  22. data/lib/guard/i18n-js/version.rb +13 -0
  23. data/lib/i18n-js.rb +66 -1
  24. data/lib/i18n-js/cli.rb +47 -0
  25. data/lib/i18n-js/cli/command.rb +43 -0
  26. data/lib/i18n-js/cli/export_command.rb +108 -0
  27. data/lib/i18n-js/cli/init_command.rb +50 -0
  28. data/lib/i18n-js/cli/ui.rb +30 -0
  29. data/lib/i18n-js/cli/version_command.rb +18 -0
  30. data/lib/i18n-js/listen.rb +80 -0
  31. data/lib/i18n-js/schema.rb +92 -0
  32. data/lib/i18n-js/version.rb +5 -0
  33. metadata +122 -194
  34. data/.editorconfig +0 -24
  35. data/.github/workflows/tests.yaml +0 -100
  36. data/.npmignore +0 -27
  37. data/Appraisals +0 -44
  38. data/app/assets/javascripts/i18n.js +0 -1095
  39. data/app/assets/javascripts/i18n/filtered.js.erb +0 -23
  40. data/app/assets/javascripts/i18n/shims.js +0 -240
  41. data/app/assets/javascripts/i18n/translations.js +0 -3
  42. data/gemfiles/i18n_0_6.gemfile +0 -7
  43. data/gemfiles/i18n_0_7.gemfile +0 -7
  44. data/gemfiles/i18n_0_8.gemfile +0 -7
  45. data/gemfiles/i18n_0_9.gemfile +0 -7
  46. data/gemfiles/i18n_1_0.gemfile +0 -7
  47. data/gemfiles/i18n_1_1.gemfile +0 -7
  48. data/gemfiles/i18n_1_2.gemfile +0 -7
  49. data/gemfiles/i18n_1_3.gemfile +0 -7
  50. data/gemfiles/i18n_1_4.gemfile +0 -7
  51. data/gemfiles/i18n_1_5.gemfile +0 -7
  52. data/gemfiles/i18n_1_6.gemfile +0 -7
  53. data/gemfiles/i18n_1_7.gemfile +0 -7
  54. data/gemfiles/i18n_1_8.gemfile +0 -7
  55. data/i18njs.png +0 -0
  56. data/lib/i18n/js.rb +0 -264
  57. data/lib/i18n/js/dependencies.rb +0 -63
  58. data/lib/i18n/js/engine.rb +0 -87
  59. data/lib/i18n/js/fallback_locales.rb +0 -70
  60. data/lib/i18n/js/formatters/base.rb +0 -25
  61. data/lib/i18n/js/formatters/js.rb +0 -39
  62. data/lib/i18n/js/formatters/json.rb +0 -13
  63. data/lib/i18n/js/middleware.rb +0 -82
  64. data/lib/i18n/js/private/config_store.rb +0 -31
  65. data/lib/i18n/js/private/hash_with_symbol_keys.rb +0 -36
  66. data/lib/i18n/js/segment.rb +0 -80
  67. data/lib/i18n/js/utils.rb +0 -78
  68. data/lib/i18n/js/version.rb +0 -7
  69. data/lib/rails/generators/i18n/js/config/config_generator.rb +0 -19
  70. data/lib/rails/generators/i18n/js/config/templates/i18n-js.yml +0 -27
  71. data/lib/tasks/export.rake +0 -8
  72. data/package.json +0 -25
  73. data/spec/fixtures/custom_path.yml +0 -5
  74. data/spec/fixtures/default.yml +0 -5
  75. data/spec/fixtures/erb.yml +0 -5
  76. data/spec/fixtures/except_condition.yml +0 -7
  77. data/spec/fixtures/js_export_dir_custom.yml +0 -7
  78. data/spec/fixtures/js_export_dir_none.yml +0 -6
  79. data/spec/fixtures/js_extend_parent.yml +0 -6
  80. data/spec/fixtures/js_extend_segment.yml +0 -6
  81. data/spec/fixtures/js_file_per_locale.yml +0 -7
  82. data/spec/fixtures/js_file_per_locale_with_fallbacks_as_default_locale_symbol.yml +0 -4
  83. data/spec/fixtures/js_file_per_locale_with_fallbacks_as_hash.yml +0 -6
  84. data/spec/fixtures/js_file_per_locale_with_fallbacks_as_locale.yml +0 -4
  85. data/spec/fixtures/js_file_per_locale_with_fallbacks_as_locale_without_fallback_translations.yml +0 -4
  86. data/spec/fixtures/js_file_per_locale_with_fallbacks_enabled.yml +0 -4
  87. data/spec/fixtures/js_file_per_locale_without_fallbacks.yml +0 -4
  88. data/spec/fixtures/js_file_with_namespace_prefix_and_pretty_print.yml +0 -9
  89. data/spec/fixtures/js_sort_translation_keys_false.yml +0 -6
  90. data/spec/fixtures/js_sort_translation_keys_true.yml +0 -6
  91. data/spec/fixtures/json_only.yml +0 -18
  92. data/spec/fixtures/locales.yml +0 -133
  93. data/spec/fixtures/merge_plurals.yml +0 -6
  94. data/spec/fixtures/merge_plurals_with_no_overrides.yml +0 -4
  95. data/spec/fixtures/merge_plurals_with_partial_overrides.yml +0 -4
  96. data/spec/fixtures/millions.yml +0 -4
  97. data/spec/fixtures/multiple_conditions.yml +0 -7
  98. data/spec/fixtures/multiple_conditions_per_locale.yml +0 -7
  99. data/spec/fixtures/multiple_files.yml +0 -7
  100. data/spec/fixtures/no_config.yml +0 -2
  101. data/spec/fixtures/no_scope.yml +0 -4
  102. data/spec/fixtures/simple_scope.yml +0 -5
  103. data/spec/js/currency.spec.js +0 -62
  104. data/spec/js/current_locale.spec.js +0 -19
  105. data/spec/js/dates.spec.js +0 -276
  106. data/spec/js/defaults.spec.js +0 -31
  107. data/spec/js/extend.spec.js +0 -110
  108. data/spec/js/interpolation.spec.js +0 -124
  109. data/spec/js/jasmine/MIT.LICENSE +0 -20
  110. data/spec/js/jasmine/jasmine-html.js +0 -190
  111. data/spec/js/jasmine/jasmine.css +0 -166
  112. data/spec/js/jasmine/jasmine.js +0 -2476
  113. data/spec/js/jasmine/jasmine_favicon.png +0 -0
  114. data/spec/js/json_parsable.spec.js +0 -14
  115. data/spec/js/locales.spec.js +0 -31
  116. data/spec/js/localization.spec.js +0 -78
  117. data/spec/js/numbers.spec.js +0 -174
  118. data/spec/js/placeholder.spec.js +0 -24
  119. data/spec/js/pluralization.spec.js +0 -219
  120. data/spec/js/prepare_options.spec.js +0 -41
  121. data/spec/js/require.js +0 -2083
  122. data/spec/js/specs.html +0 -49
  123. data/spec/js/specs_requirejs.html +0 -72
  124. data/spec/js/translate.spec.js +0 -304
  125. data/spec/js/translations.js +0 -188
  126. data/spec/js/utility_functions.spec.js +0 -20
  127. data/spec/ruby/i18n/js/fallback_locales_spec.rb +0 -84
  128. data/spec/ruby/i18n/js/segment_spec.rb +0 -261
  129. data/spec/ruby/i18n/js/utils_spec.rb +0 -106
  130. data/spec/ruby/i18n/js_spec.rb +0 -748
  131. data/spec/spec_helper.rb +0 -80
  132. data/yarn.lock +0 -131
@@ -1,80 +0,0 @@
1
- require "i18n/js/private/hash_with_symbol_keys"
2
- require "i18n/js/formatters/js"
3
- require "i18n/js/formatters/json"
4
-
5
- module I18n
6
- module JS
7
-
8
- # Class which enscapulates a translations hash and outputs a single JSON translation file
9
- class Segment
10
- OPTIONS = [:namespace, :pretty_print, :js_extend, :prefix, :suffix, :sort_translation_keys, :json_only].freeze
11
- LOCALE_INTERPOLATOR = /%\{locale\}/
12
-
13
- attr_reader *([:file, :translations] | OPTIONS)
14
-
15
- def initialize(file, translations, options = {})
16
- @file = file
17
- # `#slice` will be used
18
- # But when activesupport is absent,
19
- # the core extension from `i18n` gem will be used instead
20
- # And it's causing errors (at least in test)
21
- #
22
- # So the input is wrapped by our class for better `#slice`
23
- @translations = Private::HashWithSymbolKeys.new(translations)
24
- @namespace = options[:namespace] || 'I18n'
25
- @pretty_print = !!options[:pretty_print]
26
- @js_extend = options.key?(:js_extend) ? !!options[:js_extend] : true
27
- @prefix = options.key?(:prefix) ? options[:prefix] : nil
28
- @suffix = options.key?(:suffix) ? options[:suffix] : nil
29
- @sort_translation_keys = options.key?(:sort_translation_keys) ? !!options[:sort_translation_keys] : true
30
- @json_only = options.key?(:json_only) ? !!options[:json_only] : false
31
- end
32
-
33
- # Saves JSON file containing translations
34
- def save!
35
- if @file =~ LOCALE_INTERPOLATOR
36
- I18n.available_locales.each do |locale|
37
- write_file(file_for_locale(locale), @translations.slice(locale))
38
- end
39
- else
40
- write_file
41
- end
42
- end
43
-
44
- protected
45
-
46
- def file_for_locale(locale)
47
- @file.gsub(LOCALE_INTERPOLATOR, locale.to_s)
48
- end
49
-
50
- def write_file(_file = @file, _translations = @translations)
51
- FileUtils.mkdir_p File.dirname(_file)
52
- _translations = Utils.deep_key_sort(_translations) if @sort_translation_keys
53
- contents = formatter.format(_translations)
54
-
55
- return if File.exist?(_file) && File.read(_file) == contents
56
-
57
- File.open(_file, "w+") do |f|
58
- f << contents
59
- end
60
- end
61
-
62
- def formatter
63
- if @json_only
64
- Formatters::JSON.new(**formatter_options)
65
- else
66
- Formatters::JS.new(**formatter_options)
67
- end
68
- end
69
-
70
- def formatter_options
71
- { js_extend: @js_extend,
72
- namespace: @namespace,
73
- pretty_print: @pretty_print,
74
- prefix: @prefix,
75
- suffix: @suffix
76
- }
77
- end
78
- end
79
- end
80
- end
data/lib/i18n/js/utils.rb DELETED
@@ -1,78 +0,0 @@
1
- module I18n
2
- module JS
3
- module Utils
4
- PLURAL_KEYS = %i[zero one two few many other].freeze
5
-
6
- # Based on deep_merge by Stefan Rusterholz, see <http://www.ruby-forum.com/topic/142809>.
7
- # This method is used to handle I18n fallbacks. Given two equivalent path nodes in two locale trees:
8
- # 1. If the node in the current locale appears to be an I18n pluralization (:one, :other, etc.),
9
- # use the node, but merge in any missing/non-nil keys from the fallback (default) locale.
10
- # 2. Else if both nodes are Hashes, combine (merge) the key-value pairs of the two nodes into one,
11
- # prioritizing the current locale.
12
- # 3. Else if either node is nil, use the other node.
13
- PLURAL_MERGER = proc do |_key, v1, v2|
14
- v1 || v2
15
- end
16
- MERGER = proc do |_key, v1, v2|
17
- if Hash === v1 && Hash === v2
18
- if (v2.keys - PLURAL_KEYS).empty?
19
- slice(v2.merge(v1, &PLURAL_MERGER), v2.keys)
20
- else
21
- v1.merge(v2, &MERGER)
22
- end
23
- else
24
- v2 || v1
25
- end
26
- end
27
-
28
- HASH_NIL_VALUE_CLEANER_PROC = proc do |k, v|
29
- v.kind_of?(Hash) ? (v.delete_if(&HASH_NIL_VALUE_CLEANER_PROC); false) : v.nil?
30
- end
31
-
32
- def self.slice(hash, keys)
33
- if hash.respond_to?(:slice) # ruby 2.5 onwards
34
- hash.slice(*keys)
35
- else
36
- hash.select {|key, _| keys.include?(key)}
37
- end
38
- end
39
-
40
- def self.strip_keys_with_nil_values(hash)
41
- hash.dup.delete_if(&HASH_NIL_VALUE_CLEANER_PROC)
42
- end
43
-
44
- def self.deep_merge(target_hash, hash) # :nodoc:
45
- target_hash.merge(hash, &MERGER)
46
- end
47
-
48
- def self.deep_merge!(target_hash, hash) # :nodoc:
49
- target_hash.merge!(hash, &MERGER)
50
- end
51
-
52
- def self.deep_reject(hash, scopes = [], &block)
53
- hash.each_with_object({}) do |(k, v), memo|
54
- unless block.call(k, v, scopes + [k.to_s])
55
- memo[k] = v.kind_of?(Hash) ? deep_reject(v, scopes + [k.to_s], &block) : v
56
- end
57
- end
58
- end
59
-
60
- def self.scopes_match?(scopes1, scopes2)
61
- if scopes1.length == scopes2.length
62
- [scopes1, scopes2].transpose.all? do |scope1, scope2|
63
- scope1.to_s == '*' || scope2.to_s == '*' || scope1.to_s == scope2.to_s
64
- end
65
- end
66
- end
67
-
68
- def self.deep_key_sort(hash)
69
- # Avoid things like `true` or `1` from YAML which causes error
70
- hash.keys.sort {|a, b| a.to_s <=> b.to_s}.
71
- each_with_object({}) do |key, seed|
72
- value = hash[key]
73
- seed[key] = value.is_a?(Hash) ? deep_key_sort(value) : value
74
- end
75
- end
76
- end
77
- end
78
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module I18n
4
- module JS
5
- VERSION = "3.8.3"
6
- end
7
- end
@@ -1,19 +0,0 @@
1
- module I18n
2
- module Js
3
- class ConfigGenerator < Rails::Generators::Base
4
- # Copied files come from templates folder
5
- source_root File.expand_path('../templates', __FILE__)
6
-
7
- # Generator desc
8
- desc <<-DESC
9
- Creates a default i18n-js.yml configuration file in your app's config
10
- folder. This file allows you to customize i18n:js:export rake task
11
- outputted files.
12
- DESC
13
-
14
- def copy_initializer_file
15
- copy_file "i18n-js.yml", "config/i18n-js.yml"
16
- end
17
- end
18
- end
19
- end
@@ -1,27 +0,0 @@
1
- # Split context in several files.
2
- #
3
- # By default only one file with all translations is exported and
4
- # no configuration is required. Your settings for asset pipeline
5
- # are automatically recognized.
6
- #
7
- # If you want to split translations into several files or specify
8
- # locale contexts that will be exported, just use this file to do
9
- # so.
10
- #
11
- # For more informations about the export options with this file, please
12
- # refer to the README
13
- #
14
- #
15
- # If you're going to use the Rails 3.1 asset pipeline, change
16
- # the following configuration to something like this:
17
- #
18
- # translations:
19
- # - file: "app/assets/javascripts/i18n/translations.js"
20
- #
21
- # If you're running an old version, you can use something
22
- # like this:
23
- #
24
- # translations:
25
- # - file: "app/assets/javascripts/i18n/translations.js"
26
- # only: "*"
27
- #
@@ -1,8 +0,0 @@
1
- namespace :i18n do
2
- namespace :js do
3
- desc "Export translations to JS file(s)"
4
- task :export => :environment do
5
- I18n::JS.export
6
- end
7
- end
8
- end
data/package.json DELETED
@@ -1,25 +0,0 @@
1
- {
2
- "name": "i18n-js",
3
- "version": "3.8.0",
4
- "description": "A javascript library similar to Ruby on Rails i18n gem",
5
- "author": "Nando Vieira",
6
- "license": "MIT",
7
- "keywords": [
8
- "i18n"
9
- ],
10
- "devDependencies": {
11
- "jasmine-node": "^1.14.5"
12
- },
13
- "main": "app/assets/javascripts/i18n.js",
14
- "scripts": {
15
- "test": "./node_modules/.bin/jasmine-node spec/js"
16
- },
17
- "homepage": "https://github.com/fnando/i18n-js",
18
- "bugs": {
19
- "url": "https://github.com/fnando/i18n-js/issues"
20
- },
21
- "repository": {
22
- "type": "git",
23
- "url": "https://github.com/fnando/i18n-js.git"
24
- }
25
- }
@@ -1,5 +0,0 @@
1
- fallbacks: false
2
-
3
- translations:
4
- - file: "tmp/i18n-js/all.js"
5
- only: "*"
@@ -1,5 +0,0 @@
1
- fallbacks: false
2
-
3
- translations:
4
- - file: "tmp/i18n-js/translations.js"
5
- only: "*"
@@ -1,5 +0,0 @@
1
- fallbacks: false
2
-
3
- translations:
4
- - file: "tmp/i18n-js/translations.js"
5
- only: '<%= "*." + "date." + "formats" %>'
@@ -1,7 +0,0 @@
1
- fallbacks: false
2
-
3
- translations:
4
- - file: "tmp/i18n-js/trimmed.js"
5
- except:
6
- - "active_admin"
7
- - "mailers"
@@ -1,7 +0,0 @@
1
- fallbacks: false
2
-
3
- export_i18n_js: 'tmp/i18n-js/foo'
4
-
5
- translations:
6
- - file: "tmp/i18n-js/%{locale}.js"
7
- only: '*'
@@ -1,6 +0,0 @@
1
- fallbacks: false
2
- export_i18n_js: false
3
-
4
- translations:
5
- - file: "tmp/i18n-js/%{locale}.js"
6
- only: '*'
@@ -1,6 +0,0 @@
1
- fallbacks: false
2
- js_extend: false
3
-
4
- translations:
5
- - file: "tmp/i18n-js/js_extend_parent.js"
6
- only: "*.date.formats"
@@ -1,6 +0,0 @@
1
- fallbacks: false
2
-
3
- translations:
4
- - file: "tmp/i18n-js/js_extend_segment.js"
5
- js_extend: false
6
- only: "*.date.formats"
@@ -1,7 +0,0 @@
1
- fallbacks: false
2
-
3
- translations:
4
- - file: "tmp/i18n-js/%{locale}.js"
5
- only:
6
- - '*.date.*'
7
- - '*.admin.*'
@@ -1,4 +0,0 @@
1
- fallbacks: :default_locale
2
-
3
- translations:
4
- - file: "tmp/i18n-js/%{locale}.js"
@@ -1,6 +0,0 @@
1
- fallbacks:
2
- fr: ["de", "en"]
3
- de: "en"
4
-
5
- translations:
6
- - file: "tmp/i18n-js/%{locale}.js"
@@ -1,4 +0,0 @@
1
- fallbacks: :de
2
-
3
- translations:
4
- - file: "tmp/i18n-js/%{locale}.js"
@@ -1,4 +0,0 @@
1
- fallbacks: :pirate
2
-
3
- translations:
4
- - file: "tmp/i18n-js/%{locale}.js"
@@ -1,4 +0,0 @@
1
- fallbacks: true
2
-
3
- translations:
4
- - file: "tmp/i18n-js/%{locale}.js"
@@ -1,4 +0,0 @@
1
- fallbacks: false
2
-
3
- translations:
4
- - file: "tmp/i18n-js/%{locale}.js"
@@ -1,9 +0,0 @@
1
- fallbacks: false
2
-
3
- translations:
4
- - file: "tmp/i18n-js/%{locale}.js"
5
- only: '*'
6
- namespace: "Foo"
7
- pretty_print: true
8
- prefix: "import random from 'random-library';\n"
9
- suffix: "//test"
@@ -1,6 +0,0 @@
1
-
2
- sort_translation_keys: false
3
-
4
- translations:
5
- - file: "tmp/i18n-js/%{locale}.js"
6
- only: '*'
@@ -1,6 +0,0 @@
1
-
2
- sort_translation_keys: true
3
-
4
- translations:
5
- - file: "tmp/i18n-js/%{locale}.js"
6
- only: '*'
@@ -1,18 +0,0 @@
1
- fallbacks: false
2
- json_only: true
3
-
4
- translations:
5
- - file: "tmp/i18n-js/json_only.%{locale}.js"
6
- only:
7
- - "*.date.formats.*"
8
- - "*.number.currency.*"
9
-
10
- - file: "tmp/i18n-js/json_only_multi.js"
11
- only:
12
- - "*.date.formats.*"
13
- - "*.number.currency.*"
14
-
15
- - file: "tmp/i18n-js/json_only_multi_pretty.js"
16
- only:
17
- - "*.date.formats.*"
18
- - "*.number.currency.*"
@@ -1,133 +0,0 @@
1
- en:
2
- number:
3
- human:
4
- decimal_units:
5
- units:
6
- million: Million
7
- format:
8
- separator: "."
9
- delimiter: ","
10
- precision: 3
11
- currency:
12
- format:
13
- format: "%u%n"
14
- unit: "$"
15
- separator: "."
16
- delimiter: ","
17
- precision: 2
18
- date:
19
- formats:
20
- default: "%Y-%m-%d"
21
- short: "%b %d"
22
- long: "%B %d, %Y"
23
- day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]
24
- abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat]
25
- month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
26
- abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
27
- # order: [ :year, :month, :day ]
28
- time:
29
- formats:
30
- default: "%a, %d %b %Y %H:%M:%S %z"
31
- short: "%d %b %H:%M"
32
- long: "%B %d, %Y %H:%M"
33
- am: "am"
34
- pm: "pm"
35
- admin:
36
- show:
37
- title: "Show"
38
- note: "more details"
39
- edit:
40
- title: "Edit"
41
- foo: "Foo"
42
- fallback_test: "Success"
43
- null_test: "fallback for null"
44
- merge_plurals:
45
- one: Apple
46
- other: Apples
47
- merge_plurals_with_no_overrides:
48
- zero: "No Apple"
49
- one: Apple
50
- other: Apples
51
- merge_plurals_with_partial_overrides:
52
- one: Cat
53
- other: Cats
54
-
55
- es:
56
- number:
57
- human:
58
- decimal_units:
59
- units:
60
- million:
61
- one: millón
62
- other: millones
63
-
64
- ru:
65
- merge_plurals_with_no_overrides:
66
- one: кот
67
- few: кошек
68
- many: кошка
69
- other: кошек
70
-
71
- de:
72
- fallback_test: "Erfolg"
73
- null_test: ~
74
-
75
- fr:
76
- date:
77
- formats:
78
- default: "%d/%m/%Y"
79
- short: "%e %b"
80
- long: "%e %B %Y"
81
- long_ordinal: "%e %B %Y"
82
- only_day: "%e"
83
- day_names: [dimanche, lundi, mardi, mercredi, jeudi, vendredi, samedi]
84
- abbr_day_names: [dim, lun, mar, mer, jeu, ven, sam]
85
- month_names: [~, janvier, février, mars, avril, mai, juin, juillet, août, septembre, octobre, novembre, décembre]
86
- abbr_month_names: [~, jan., fév., mar., avr., mai, juin, juil., août, sept., oct., nov., déc.]
87
- # order: [ :day, :month, :year ]
88
- time:
89
- formats:
90
- default: "%d %B %Y %H:%M"
91
- time: "%H:%M"
92
- short: "%d %b %H:%M"
93
- long: "%A %d %B %Y %H:%M:%S %Z"
94
- long_ordinal: "%A %d %B %Y %H:%M:%S %Z"
95
- only_second: "%S"
96
- am: 'am'
97
- pm: 'pm'
98
- number:
99
- format:
100
- precision: 3
101
- separator: ','
102
- delimiter: ' '
103
- currency:
104
- format:
105
- unit: '€'
106
- precision: 2
107
- format: '%n %u'
108
- admin:
109
- show:
110
- title: "Visualiser"
111
- note: "plus de détails"
112
- edit:
113
- title: "Editer"
114
- merge_plurals:
115
- zero: Pomme
116
- one: Pomme
117
- other: Pommes
118
-
119
- en-US:
120
- merge_plurals_with_no_overrides:
121
- zero:
122
- one:
123
- other:
124
- merge_plurals_with_partial_overrides:
125
- one: Cat
126
- few:
127
- many:
128
- other:
129
-
130
- ja:
131
- admin:
132
- show:
133
- title: "Ignore me"