i18n-js 3.8.3 → 4.0.0.alpha1

Sign up to get free protection for your applications and to get access to all the features.
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"