├── .gitignore
├── .s2i
├── .gitkeep
└── bin
│ ├── .gitkeep
│ ├── README
│ ├── assemble
│ └── run
├── Gemfile
├── LICENSE
├── README.md
├── Rakefile
├── amber.gemspec
├── bin
└── amber
├── lib
├── amber.rb
└── amber
│ ├── cli.rb
│ ├── i18n.rb
│ ├── logger.rb
│ ├── menu.rb
│ ├── page_array.rb
│ ├── render
│ ├── apache.rb
│ ├── asset.rb
│ ├── filter
│ │ ├── autolink.rb
│ │ ├── bracketlink.rb
│ │ └── variables.rb
│ ├── helpers
│ │ ├── blog_helper.rb
│ │ ├── date_helper.rb
│ │ ├── haml_helper.rb
│ │ ├── html_helper.rb
│ │ ├── language_helper.rb
│ │ └── navigation_helper.rb
│ ├── layout.rb
│ ├── sass_helper.rb
│ ├── table_of_contents.rb
│ ├── template.rb
│ └── view.rb
│ ├── server.rb
│ ├── site.rb
│ ├── site_configuration.rb
│ ├── static_page.rb
│ ├── static_page
│ ├── filesystem.rb
│ ├── page_properties.rb
│ ├── property_set.rb
│ └── render.rb
│ ├── templates
│ ├── apache_config.erb
│ ├── apache_config_with_prefix.erb
│ ├── config.rb
│ └── htaccess.erb
│ └── version.rb
├── locales
└── rails-i18n
│ ├── MIT-LICENSE.txt
│ ├── README.md
│ ├── af.yml
│ ├── ar.yml
│ ├── az.yml
│ ├── bg.yml
│ ├── bn.yml
│ ├── bs.yml
│ ├── ca.yml
│ ├── cs.yml
│ ├── cy.yml
│ ├── da.yml
│ ├── de-AT.yml
│ ├── de-CH.yml
│ ├── de.yml
│ ├── el.yml
│ ├── en-AU.yml
│ ├── en-CA.yml
│ ├── en-GB.yml
│ ├── en-IE.yml
│ ├── en-IN.yml
│ ├── en-NZ.yml
│ ├── en-US.yml
│ ├── en-ZA.yml
│ ├── en.yml
│ ├── eo.yml
│ ├── es-419.yml
│ ├── es-AR.yml
│ ├── es-CL.yml
│ ├── es-CO.yml
│ ├── es-CR.yml
│ ├── es-EC.yml
│ ├── es-MX.yml
│ ├── es-PA.yml
│ ├── es-PE.yml
│ ├── es-US.yml
│ ├── es-VE.yml
│ ├── es.yml
│ ├── et.yml
│ ├── eu.yml
│ ├── fa.yml
│ ├── fi.yml
│ ├── fr-CA.yml
│ ├── fr-CH.yml
│ ├── fr.yml
│ ├── gl.yml
│ ├── he.yml
│ ├── hi-IN.yml
│ ├── hi.yml
│ ├── hr.yml
│ ├── hu.yml
│ ├── id.yml
│ ├── is.yml
│ ├── iso-639-2
│ ├── csb.yml
│ ├── dsb.yml
│ ├── fur.yml
│ ├── gsw-CH.yml
│ ├── hsb.yml
│ ├── pap-AW.yml
│ ├── pap-CW.yml
│ └── scr.yml
│ ├── it-CH.yml
│ ├── it.yml
│ ├── ja.yml
│ ├── km.yml
│ ├── kn.yml
│ ├── ko.yml
│ ├── lo.yml
│ ├── lt.yml
│ ├── lv.yml
│ ├── mk.yml
│ ├── mn.yml
│ ├── ms.yml
│ ├── nb.yml
│ ├── ne.yml
│ ├── nl.yml
│ ├── nn.yml
│ ├── or.yml
│ ├── pl.yml
│ ├── pt-BR.yml
│ ├── pt.yml
│ ├── rm.yml
│ ├── ro.yml
│ ├── ru.yml
│ ├── sk.yml
│ ├── sl.yml
│ ├── sr.yml
│ ├── sv.yml
│ ├── sw.yml
│ ├── ta.yml
│ ├── th.yml
│ ├── tl.yml
│ ├── tr.yml
│ ├── uk.yml
│ ├── ur.yml
│ ├── uz.yml
│ ├── vi.yml
│ ├── wo.yml
│ ├── zh-CN.yml
│ ├── zh-HK.yml
│ ├── zh-TW.yml
│ └── zh-YUE.yml
└── test
├── files
└── toc.yml
├── site
├── amber
│ ├── config.rb
│ ├── layouts
│ │ └── default.html.haml
│ ├── locales
│ │ └── en.yml
│ └── menu.txt
├── apache.conf
├── apache_with_prefix.conf
└── pages
│ ├── aaa
│ ├── asset.css
│ ├── de.md
│ └── en.md
│ ├── autoalias
│ ├── blue
│ │ ├── en.md
│ │ └── purple
│ │ │ └── en.md
│ ├── en.md
│ └── red
│ │ ├── blue
│ │ ├── en.md
│ │ └── green
│ │ │ └── en.md
│ │ ├── en.md
│ │ └── orange
│ │ └── en.md
│ ├── bbb
│ ├── ccc
│ │ ├── de.md
│ │ └── en.md
│ ├── ddd.md
│ └── en.md
│ ├── de.md
│ ├── en.md
│ ├── fff.de.md
│ ├── fff.en.md
│ └── rtl.md
├── test_helper.rb
└── unit
├── apache_test.rb
├── property_test.rb
├── render_test.rb
├── test_helper.rb
└── toc_test.rb
/.gitignore:
--------------------------------------------------------------------------------
1 | test/site/public
2 | notes.txt
3 | *.gem
4 | Gemfile.lock
5 | test/site/apache.log
--------------------------------------------------------------------------------
/.s2i/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leapcode/amber/af08447b47a1d104bf920fcb9caca5ad36adb6bc/.s2i/.gitkeep
--------------------------------------------------------------------------------
/.s2i/bin/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leapcode/amber/af08447b47a1d104bf920fcb9caca5ad36adb6bc/.s2i/bin/.gitkeep
--------------------------------------------------------------------------------
/.s2i/bin/README:
--------------------------------------------------------------------------------
1 | This folder can contain scripts that can be used during various points in the
2 | S2I process. For more information on the types of scripts that can be placed
3 | here, and their required details, please see:
4 | https://github.com/openshift/source-to-image/blob/master/docs/builder_image.md#s2i-scripts
5 |
--------------------------------------------------------------------------------
/.s2i/bin/assemble:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -e
4 |
5 | export RACK_ENV=${RACK_ENV:-"production"}
6 |
7 | echo "---> Installing application source ..."
8 | cp -Rf /tmp/src/. ./
9 |
10 | echo "---> Building your Ruby application from source ..."
11 | if [ -f Gemfile ]; then
12 | ADDTL_BUNDLE_ARGS=""
13 | if [ -f Gemfile.lock ]; then
14 | ADDTL_BUNDLE_ARGS="--deployment"
15 | fi
16 |
17 | if [[ "$RAILS_ENV" == "development" || "$RACK_ENV" == "development" ]]; then
18 | BUNDLE_WITHOUT=${BUNDLE_WITHOUT:-"test"}
19 | elif [[ "$RAILS_ENV" == "test" || "$RACK_ENV" == "test" ]]; then
20 | BUNDLE_WITHOUT=${BUNDLE_WITHOUT:-"development"}
21 | else
22 | BUNDLE_WITHOUT=${BUNDLE_WITHOUT:-"development:test"}
23 | fi
24 |
25 | echo "---> Running 'bundle install ${ADDTL_BUNDLE_ARGS}' ..."
26 | bundle install --path ./bundle ${ADDTL_BUNDLE_ARGS}
27 |
28 | echo "---> Cleaning up unused ruby gems ..."
29 | bundle clean -V
30 | fi
31 |
32 | # Fix source directory permissions
33 | fix-permissions ./
34 |
35 | # Make the ./tmp folder world writeable as Rails or other frameworks might use
36 | # it to store temporary data (uploads/cache/sessions/etcd).
37 | # The ./db folder has to be writeable as well because when Rails complete the
38 | # migration it writes the schema version into ./db/schema.db
39 | set +e
40 | [[ -d ./tmp ]] && chgrp -R 0 ./tmp && chmod -R g+rw ./tmp
41 | [[ -d ./db ]] && chgrp -R 0 ./db && chmod -R g+rw ./db
42 | set -e
43 |
44 | echo "---> CUSTOM S2I ASSEMBLE COMPLETE"
45 |
--------------------------------------------------------------------------------
/.s2i/bin/run:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -e
4 |
5 | export RACK_ENV=${RACK_ENV:-"production"}
6 |
7 | echo "---> CUSTOM S2I RUN COMPLETE"
8 |
9 | cd test/site
10 | bundle exec amber server 0.0.0.0
11 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source 'https://rubygems.org'
2 | gemspec
3 |
--------------------------------------------------------------------------------
/Rakefile:
--------------------------------------------------------------------------------
1 | require "rake/testtask"
2 |
3 | ##
4 | ## TESTING
5 | ##
6 |
7 | Rake::TestTask.new do |t|
8 | t.pattern = "test/unit/*_test.rb"
9 | t.verbose = false
10 | t.warning = false
11 | end
12 | task :default => :test
13 |
--------------------------------------------------------------------------------
/amber.gemspec:
--------------------------------------------------------------------------------
1 | require File.join([File.dirname(__FILE__),'lib','amber','version.rb'])
2 |
3 | Gem::Specification.new do |s|
4 | s.name = "amber"
5 | s.version = Amber::VERSION
6 | s.summary = "Static website generator"
7 | s.description = "Amber is a super simple and super flexible static website generator with support for nice localization and navigation."
8 | s.authors = ["Elijah Sparrow"]
9 | s.email = ["elijah@leap.se"]
10 | s.files = Dir["{lib}/**/*.rb", "{lib}/**/*.erb", "{locales}/**/*.yml", "bin/*", "LICENSE", "*.md"]
11 | s.homepage = "https://github.com/leapcode/amber"
12 | s.license = "AGPL-1.0"
13 | s.executables << 'amber'
14 | s.bindir = 'bin'
15 | s.required_ruby_version = '>= 1.9'
16 |
17 | s.add_runtime_dependency 'i18n', '> 0.8.0'
18 | s.add_runtime_dependency 'haml', '> 5.0.0', '< 6.0.0'
19 | s.add_runtime_dependency 'haml-contrib', '~> 1.0'
20 | s.add_runtime_dependency 'RedCloth', '~> 4.3'
21 | s.add_runtime_dependency 'rdiscount', '~> 2.1'
22 | s.add_runtime_dependency 'tilt', '~> 2.0'
23 | s.add_runtime_dependency 'sass', '~> 3.2'
24 |
25 | # security pinnings
26 | s.add_runtime_dependency 'nokogiri', '>= 1.8.5'
27 | s.add_runtime_dependency 'ffi', '>= 1.9.24'
28 | end
29 |
--------------------------------------------------------------------------------
/bin/amber:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 |
3 | if ARGV.include?('--debug')
4 | if RUBY_VERSION =~ /^2/
5 | require 'byebug'
6 | else
7 | require 'debugger'
8 | end
9 | end
10 |
11 | begin
12 | require 'amber'
13 | rescue LoadError
14 | base_dir = File.expand_path('..', File.dirname(File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__))
15 | ["#{base_dir}/lib"].each do |path|
16 | $LOAD_PATH.unshift(path) unless $LOAD_PATH.include?(path)
17 | end
18 | require 'amber'
19 | end
20 |
21 | def process_command_line_arguments
22 | @command = nil
23 | @command_arg = nil
24 | @verbose = false
25 | loop do
26 | case ARGV[0]
27 | when 'init' then @command = ARGV.shift; @command_arg = ARGV.shift
28 | when 'build' then @command = ARGV.shift
29 | when 'rebuild' then @command = ARGV.shift
30 | when 'clean' then @command = 'clear'; ARGV.shift
31 | when 'clear' then @command = ARGV.shift
32 | when 'server' then @command = ARGV.shift; @command_arg = ARGV.shift
33 | when 'apache' then @command = ARGV.shift; @command_arg = ARGV.shift
34 | when 'version' then version
35 | when '--version' then version
36 | when '--debug' then ARGV.shift
37 | when '--help' then usage
38 | when 'help' then usage
39 | when '-h' then usage
40 | when '-v' then @verbose = true; ARGV.shift
41 | when /^-/ then usage("Unknown option: #{ARGV[0].inspect}")
42 | else break
43 | end
44 | end
45 | usage("No command given") unless @command
46 | end
47 |
48 | def usage(msg=nil)
49 | $stderr.puts(msg) if msg
50 | $stderr.puts
51 | $stderr.puts("Usage: #{File.basename($0)} [OPTIONS] COMMAND")
52 | $stderr.puts
53 | $stderr.puts("COMMAND may be one or more of:
54 | init DIRECTORY -- Create a new amber site in DIRECTORY.
55 | build -- Render static html pages.
56 | rebuild -- Runs `clear` then `build`.
57 | server [[HOST][:PORT]] -- Runs mini web server bound to HOST:PORT (defaults to #{Amber::DEFAULT_HOST}:#{Amber::DEFAULT_PORT}).
58 | clear -- Erase static HTML pages.
59 | clean -- Alias for `clear`.
60 | apache DIRECTORY -- Prints out appropriate apache2 config for the given DIRECTORY.
61 | help -- This message.
62 | version -- Print version and exit.")
63 | $stderr.puts
64 | $stderr.puts("OPTIONS may be one or more of:
65 | -v -- Run in verbose mode.
66 | --version -- Print version and exit.
67 | --debug -- Enable debugger.")
68 | exit(2)
69 | end
70 |
71 | def version
72 | puts Amber::VERSION
73 | exit
74 | end
75 |
76 | def main
77 | process_command_line_arguments
78 | if @verbose
79 | Amber.logger.level = Logger::DEBUG
80 | end
81 | Amber::CLI.new(Dir.pwd).send(@command, {:port => @port, :verbose => @verbose, :arg => @command_arg})
82 | end
83 |
84 | main
--------------------------------------------------------------------------------
/lib/amber.rb:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 |
3 | require 'logger'
4 |
5 | # ensure that we load sass from a gem, not the sass included in some
6 | # versions of haml.
7 | gem 'sass'
8 | require 'sass'
9 | require 'haml'
10 |
11 | module Amber
12 |
13 | class MissingTemplate < StandardError
14 | end
15 |
16 | # Possible page suffixes. Only files with these suffixes are treated as pages
17 | PAGE_SUFFIXES = %w(haml md markdown text textile rst html html.haml)
18 |
19 | # Possible variable file suffixes. Only files with these suffixesare treated
20 | # as variable files.
21 | VAR_SUFFIXES = %w(json yaml yml)
22 |
23 | DEFAULT_HOST = '127.0.0.1'
24 | DEFAULT_PORT = '8000'
25 |
26 | def self.env
27 | if defined?(TESTING) && TESTING==true
28 | :test
29 | elsif defined?(Amber::Server)
30 | :developmet
31 | else
32 | :production
33 | end
34 | end
35 |
36 | end
37 |
38 | require 'amber/version'
39 | require 'amber/cli'
40 | require 'amber/logger'
41 | require 'amber/i18n'
42 |
43 | require 'amber/menu'
44 | require 'amber/site'
45 | require 'amber/site_configuration'
46 |
47 | require 'amber/static_page'
48 | require 'amber/static_page/filesystem'
49 | require 'amber/static_page/render'
50 | require 'amber/static_page/property_set'
51 | require 'amber/static_page/page_properties'
52 | require 'amber/page_array'
53 |
54 | require 'amber/render/layout'
55 | require 'amber/render/view'
56 | require 'amber/render/template'
57 | require 'amber/render/asset'
58 | require 'amber/render/table_of_contents'
59 | require 'amber/render/apache'
60 | require 'amber/render/filter/autolink'
61 | require 'amber/render/filter/bracketlink'
62 | require 'amber/render/filter/variables'
63 | require 'amber/render/sass_helper'
64 |
--------------------------------------------------------------------------------
/lib/amber/cli.rb:
--------------------------------------------------------------------------------
1 | require 'fileutils'
2 |
3 | module Amber
4 | class CLI
5 |
6 | def initialize(root, *args)
7 | @options = {}
8 | @options = args.pop if args.last.is_a?(::Hash)
9 | @root = File.expand_path(root)
10 | end
11 |
12 | def init(options)
13 | new_dir = options[:arg]
14 | mkdir(new_dir, nil)
15 | mkdir('amber', new_dir)
16 | copy_template_file('config.rb', 'amber', new_dir)
17 | touch('amber/menu.txt', new_dir)
18 | mkdir('amber/layouts', new_dir)
19 | mkdir('amber/locales', new_dir)
20 | mkdir('public', new_dir)
21 | mkdir('pages', new_dir)
22 | end
23 |
24 | def build(options)
25 | site = Site.new(@root)
26 | site.load_pages
27 | site.render
28 | end
29 |
30 | def clear(options)
31 | site = Site.new(@root)
32 | site.clear
33 | end
34 |
35 | def clean(options)
36 | clear(options)
37 | end
38 |
39 | def rebuild(options)
40 | site = Site.new(@root)
41 | site.continue_on_error = false
42 | site.load_pages
43 | FileUtils.mkdir_p(site.dest_dir) unless File.exist?(site.dest_dir)
44 | gitkeep = File.exist?(File.join(site.dest_dir, '.gitkeep'))
45 | temp_render = File.join(File.dirname(site.dest_dir), 'public-tmp')
46 | temp_old_pages = File.join(File.dirname(site.dest_dir), 'remove-me')
47 | site.with_destination(temp_render) do
48 | site.render
49 | end
50 | FileUtils.mv(site.dest_dir, temp_old_pages)
51 | FileUtils.mv(temp_render, site.dest_dir)
52 | site.with_destination(temp_old_pages) do
53 | site.clear
54 | FileUtils.rm_r(temp_old_pages)
55 | end
56 | if gitkeep
57 | FileUtils.touch(File.join(site.dest_dir, '.gitkeep'))
58 | end
59 | ensure
60 | # cleanup if something goes wrong.
61 | FileUtils.rm_r(temp_render) if temp_render && File.exist?(temp_render)
62 | FileUtils.rm_r(temp_old_pages) if temp_old_pages && File.exist?(temp_old_pages)
63 | end
64 |
65 | def server(options)
66 | require 'amber/server'
67 | host = nil
68 | port = nil
69 | if options[:arg]
70 | host, port = options[:arg].split(':')
71 | end
72 | if host.nil? || host.empty?
73 | host = DEFAULT_HOST
74 | end
75 | if port.nil? || port.empty?
76 | port = DEFAULT_PORT
77 | end
78 | site = Site.new(@root)
79 | Amber::Server.start(:port => port, :host => host, :site => site)
80 | end
81 |
82 | def apache(options)
83 | site = Site.new(@root)
84 | directory = options[:arg]
85 | unless directory
86 | puts "Missing DIRECTORY argument"
87 | exit 1
88 | end
89 | directory = directory.gsub(%r{^/|/$}, '')
90 | Amber::Render::Apache.echo_config(site, directory)
91 | end
92 |
93 | private
94 |
95 | def mkdir(dir, context)
96 | if context
97 | path = File.join(context, dir)
98 | print_path = File.join(File.basename(context), dir)
99 | else
100 | path = dir
101 | print_path = dir
102 | end
103 | unless Dir.exist?(path)
104 | if File.exist?(path)
105 | puts "Could not make directory `#{print_path}`. File already exists."
106 | exit(1)
107 | end
108 | FileUtils.mkdir_p(path)
109 | puts "* Creating `#{print_path}`"
110 | end
111 | end
112 |
113 | def touch(file, context)
114 | path = File.join(context, file)
115 | unless File.exist?(path)
116 | FileUtils.touch(path)
117 | puts "* Creating `#{File.basename(context)}/#{file}`"
118 | end
119 | end
120 |
121 | def copy_template_file(template_file, destination, context)
122 | template_file_path = File.dirname(__FILE__) + "/templates/#{template_file}"
123 | copy(template_file_path, destination, context)
124 | end
125 |
126 | def copy(source, destination, context)
127 | destination_path = File.join(context, destination)
128 | FileUtils.copy(source, destination_path)
129 | puts "* Creating `#{File.basename(context)}/#{destination}/#{File.basename(source)}`"
130 | end
131 |
132 | end
133 | end
134 |
--------------------------------------------------------------------------------
/lib/amber/i18n.rb:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 |
3 | require 'i18n'
4 | require 'i18n/backend/fallbacks'
5 |
6 | I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
7 | I18n.enforce_available_locales = false
8 |
9 | I18n.load_path += Dir[File.join(File.expand_path('../../../locales', __FILE__), '/**/*.{yml,yaml}')]
10 |
11 | module Amber
12 |
13 | #
14 | # Languages that might possibly be supported.
15 | #
16 | # https://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers
17 | #
18 | POSSIBLE_LANGUAGES = {
19 | :zh => ['中文', 'zh', 1, false], # Chinese
20 | :es => ['Español', 'es', 2, false],
21 | :en => ['English', 'en', 3, false],
22 | :hi => ['Hindi', 'hi', 4, false],
23 | :ar => ['العربية', 'ar', 5, true], # Arabic
24 | :pt => ['Português', 'pt', 6, false],
25 | :ru => ['Pyccĸий', 'ru', 7, false], # Russian
26 | :ja => ['日本語', 'ja', 8, false], # Japanese
27 | :pa => ['ਪੰਜਾਬੀ', 'pa', 9, false], # Punjabi
28 | :de => ['Deutsch', 'de', 10, false],
29 | :vi => ['Tiếng Việt','vi', 11, false], # Vietnamese
30 | :fr => ['Français', 'fr', 12, false],
31 | :ur => ['اُردُو', 'ur', 13, false], # Urdu
32 | :fa => ['فارسی', 'fa', 14, false], # Farsi / Persian
33 | :tr => ['Türkçe', 'tr', 15, false], # Turkish
34 | :it => ['Italiano', 'it', 16, false],
35 | :el => ['Ελληνικά', 'el', 17, false], # Greek
36 | :pl => ['Polski', 'pl', 18, false], # Polish
37 | :ca => ['Català', 'ca', 19, false]
38 | }
39 |
40 | # Although everywhere else we use symbols for locales, this array should be strings:
41 | POSSIBLE_LANGUAGE_CODES = POSSIBLE_LANGUAGES.keys.map(&:to_s)
42 |
43 | end
44 |
--------------------------------------------------------------------------------
/lib/amber/logger.rb:
--------------------------------------------------------------------------------
1 | require 'logger'
2 |
3 | module Amber
4 |
5 | def self.logger
6 | @logger ||= begin
7 | logger = Logger.new(STDOUT)
8 | logger.level = Logger::INFO
9 | logger.formatter = proc do |severity, datetime, progname, msg|
10 | "#{severity}: #{msg}\n"
11 | end
12 | logger
13 | end
14 | end
15 |
16 | def self.log_exception(e)
17 | Amber.logger.error(e)
18 | Amber.logger.error(e.backtrace.join("\n "))
19 | end
20 |
21 | end
22 |
--------------------------------------------------------------------------------
/lib/amber/menu.rb:
--------------------------------------------------------------------------------
1 | #
2 | # A navigation menu class
3 | #
4 |
5 | module Amber
6 | class Menu
7 | attr_accessor :parent
8 | attr_accessor :children
9 | attr_accessor :name
10 |
11 | #
12 | # load the menu.txt file and build the in-memory menu array
13 | #
14 | def load(menu_file_path)
15 | File.open(menu_file_path) do |file|
16 | parse_menu(file)
17 | end
18 | end
19 |
20 | def initialize(name, parent=nil)
21 | self.name = name
22 | self.parent = parent
23 | self.children = []
24 | end
25 |
26 | ##
27 | ## public methods
28 | ##
29 |
30 | #
31 | # returns the menu under the item that matches item_name.
32 | #
33 | def submenu(item_name=nil)
34 | if item_name
35 | self.children.detect {|child| child.name == item_name}
36 | else
37 | self.children
38 | end
39 | end
40 |
41 | #
42 | # returns path from root to this leaf as an array
43 | #
44 | def path
45 | @path ||= begin
46 | if parent == nil
47 | []
48 | else
49 | parent.path + [name]
50 | end
51 | end
52 | end
53 |
54 | def path_str
55 | @path_str ||= path.join('/')
56 | end
57 |
58 | def each(&block)
59 | children.each(&block)
60 | end
61 |
62 | def size
63 | children.size
64 | end
65 |
66 | #
67 | # returns true if menu's path starts with +path_prefix+
68 | #
69 | def path_starts_with?(path_prefix)
70 | array_starts_with?(path, path_prefix)
71 | end
72 |
73 | def path_prefix_of?(full_path)
74 | array_starts_with?(full_path, path)
75 | end
76 |
77 | #
78 | # returns true if this menu item is the terminus menu item for path.
79 | # (meaning that there are no children that match more path segments)
80 | #
81 | def leaf_for_path?(path)
82 | return false unless path_prefix_of?(path)
83 | next_path_segment = (path - self.path).first
84 | return false if next_path_segment.nil?
85 | return !children.detect {|i| i.name == next_path_segment}
86 | end
87 |
88 | def inspect(indent=0)
89 | lines = []
90 | lines << ' '*indent + '- ' + self.name
91 | self.children.each do |child|
92 | lines << child.inspect(indent+1)
93 | end
94 | lines.join("\n")
95 | end
96 |
97 | #
98 | # private & protected methods
99 | #
100 |
101 | protected
102 |
103 | def add_child(name)
104 | self.children << Menu.new(name, self)
105 | end
106 |
107 | private
108 |
109 | def array_starts_with?(big_array, small_array)
110 | small_array.length.times do |i|
111 | if small_array[i] != big_array[i]
112 | return false
113 | end
114 | end
115 | return true
116 | end
117 |
118 |
119 | def parse_menu(file)
120 | while true
121 | item = file.readline
122 | if item.strip.chars.any? && item !~ /^\s*#/
123 | depth = item.scan(" ").size
124 | last_menu_at_depth(depth).add_child(item.strip)
125 | end
126 | end
127 | rescue EOFError
128 | # done loading
129 | end
130 |
131 | #
132 | # returns the last list of children at the specified depth
133 | #
134 | def last_menu_at_depth(depth)
135 | menu = self
136 | depth.times { menu = menu.children.last }
137 | menu
138 | end
139 |
140 | end
141 | end
--------------------------------------------------------------------------------
/lib/amber/page_array.rb:
--------------------------------------------------------------------------------
1 | #
2 | # Array of StaticPages
3 | #
4 |
5 | require 'bigdecimal'
6 |
7 | module Amber
8 | class PageArray < Array
9 |
10 | def limit(num)
11 | PageArray.new(self[0..(num-1)])
12 | end
13 |
14 | #
15 | # available options:
16 | #
17 | # :locale -- the locale to use when comparing attributes
18 | # :direction -- either :asc or :desc
19 | # :numeric -- if true, attributes are cast as numbers before comparison
20 | #
21 | def order_by(attr, options={})
22 | locale = options[:locale] || I18n.locale
23 | direction = options[:direction] || :asc
24 | array = sort do |a,b|
25 | if direction == :desc
26 | a, b = b, a
27 | end
28 | a_prop = a.prop(locale, attr)
29 | b_prop = b.prop(locale, attr)
30 | if options[:numeric]
31 | a_prop = to_numeric(a_prop)
32 | b_prop = to_numeric(b_prop)
33 | end
34 | if a_prop.nil? && b_prop.nil?
35 | 0
36 | elsif a_prop.nil?
37 | 1
38 | elsif b_prop.nil?
39 | -1
40 | else
41 | a_prop <=> b_prop
42 | end
43 | end
44 | # remove pages from the results that have no value set for the attr
45 | array.delete_if do |page|
46 | page.prop(locale, attr).nil?
47 | end
48 | return PageArray.new.replace array
49 | end
50 |
51 | def to_numeric(anything)
52 | num = BigDecimal(anything.to_s)
53 | if num.frac == 0
54 | num.to_i
55 | else
56 | num.to_f
57 | end
58 | end
59 |
60 | end
61 | end
--------------------------------------------------------------------------------
/lib/amber/render/apache.rb:
--------------------------------------------------------------------------------
1 | module Amber
2 | module Render
3 | class Apache
4 |
5 | def self.write_htaccess(site, src_dir, dst_dir)
6 | src_htaccess_file = File.join(src_dir, '.htaccess')
7 | dst_htaccess_file = File.join(dst_dir, '.htaccess')
8 | template = Tilt::ERBTemplate.new(template_path("htaccess.erb"))
9 |
10 | tail_content = nil
11 | if File.exist?(src_htaccess_file)
12 | tail_content = File.read(src_htaccess_file)
13 | end
14 | File.open(dst_htaccess_file, 'w', :encoding => 'UTF-8') do |f|
15 | f.write template.render(context_object(:site => site))
16 | if tail_content
17 | f.write "\n\n"
18 | f.write tail_content
19 | end
20 | end
21 | end
22 |
23 | def self.echo_config(site, directory)
24 | template = Tilt::ERBTemplate.new(
25 | site.path_prefix ? template_path('apache_config_with_prefix.erb') : template_path('apache_config.erb')
26 | )
27 | puts template.render(context_object(:site => site, :directory => directory))
28 | end
29 |
30 | def self.context_object(variables)
31 | object = Object.new
32 | variables.each do |name, value|
33 | object.instance_variable_set("@#{name}", value)
34 | end
35 | object
36 | end
37 |
38 | def self.template_path(filename)
39 | File.expand_path("../templates/#{filename}", File.dirname(__FILE__))
40 | end
41 |
42 | end
43 | end
44 | end
45 |
--------------------------------------------------------------------------------
/lib/amber/render/asset.rb:
--------------------------------------------------------------------------------
1 | #
2 | # For rendering things that are assets, like sass files.
3 | # Maybe images too?
4 | #
5 |
6 | require 'sass'
7 |
8 | module Amber
9 | module Render
10 | class Asset
11 |
12 | RENDER_MAP = {
13 | '.sass' => {:method => 'render_sass', :new_suffix => '.css', :args => [:sass]},
14 | '.scss' => {:method => 'render_sass', :new_suffix => '.css', :args => [:scss]}
15 | }
16 |
17 | SOURCE_MAP = {
18 | '.css' => ['.sass', '.scss']
19 | }
20 |
21 | def self.render(src_file, dst_file)
22 | unless Dir.exist?(File.dirname(dst_file))
23 | FileUtils.mkdir_p(File.dirname(dst_file))
24 | end
25 | File.unlink(dst_file) if File.exist?(dst_file)
26 | src_ext = File.extname(src_file)
27 | renderer = RENDER_MAP[src_ext]
28 | if renderer
29 | if File.basename(src_file) !~ /^_/ # skip partials
30 | content = self.send(renderer[:method], *([src_file] + renderer[:args]))
31 | new_dst_file = dst_file.sub(/#{Regexp.escape(src_ext)}$/, renderer[:new_suffix])
32 | File.open(new_dst_file,'w') do |w|
33 | w.write(content)
34 | end
35 | end
36 | elsif File.basename(src_file) == '.htaccess'
37 | # existing htaccess file must be copied, not linked, since
38 | # the render will change its contents.
39 | FileUtils.cp(src_file, dst_file)
40 | else
41 | File.link(src_file, dst_file)
42 | end
43 | rescue SystemCallError => exc
44 | Amber.log_exception(exc)
45 | end
46 |
47 | #
48 | # Render assets in a single directory (does not walk
49 | # directory tree). Files prefixed with an _ are treated
50 | # as partials and not rendered.
51 | #
52 | def self.render_dir(src_dir, dst_dir)
53 | Dir.chdir(src_dir) do
54 | Dir.glob('*').each do |file|
55 | if File.directory?(file) ||
56 | file =~ /^\./ ||
57 | file =~ /^_/
58 | next
59 | end
60 | src_file = File.join(src_dir, file)
61 | dst_file = File.join(dst_dir, file)
62 | render(src_file, dst_file)
63 | end
64 | end
65 | end
66 |
67 | def self.render_sass(src_file, syntax)
68 | engine = Sass::Engine.new(
69 | File.read(src_file),
70 | :syntax => syntax,
71 | :load_paths => [File.dirname(src_file)],
72 | :style => self.sass_render_style
73 | )
74 | engine.render
75 | end
76 |
77 | def self.sass_render_style
78 | Amber::env == :production ? :compact : :nested
79 | end
80 |
81 | end
82 | end
83 | end
84 |
--------------------------------------------------------------------------------
/lib/amber/render/filter/autolink.rb:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 | # adapted from https://github.com/tenderlove/rails_autolink
3 | # MIT license
4 |
5 | module Amber
6 | module Render
7 | module Filter
8 | module Autolink
9 |
10 | def self.run(text)
11 | auto_link_email_addresses(auto_link_urls(text))
12 | end
13 |
14 | private
15 |
16 | AUTO_LINK_RE = %r{
17 | (?: ((?:ed2k|ftp|http|https|irc|mailto|news|gopher|nntp|telnet|webcal|xmpp|callto|feed|svn|urn|aim|rsync|tag|ssh|sftp|rtsp|afs|file):)// | www\. )
18 | [^\s<\u00A0]+
19 | }ix
20 |
21 | # regexps for determining context, used high-volume
22 | AUTO_LINK_CRE = [/<[^>]+$/, /^[^>]*>/, //i, /<\/a>/i]
23 |
24 | AUTO_EMAIL_LOCAL_RE = /[\w.!#\$%&'*\/=?^`{|}~+-]/
25 | AUTO_EMAIL_RE = /[\w.!#\$%+-]\.?#{AUTO_EMAIL_LOCAL_RE}*@[\w-]+(?:\.[\w-]+)+/
26 |
27 | BRACKETS = { ']' => '[', ')' => '(', '}' => '{' }
28 |
29 | WORD_PATTERN = RUBY_VERSION < '1.9' ? '\w' : '\p{Word}'
30 |
31 | # Turns all urls into clickable links. If a block is given, each url
32 | # is yielded and the result is used as the link text.
33 | def self.auto_link_urls(text)
34 | text.gsub(AUTO_LINK_RE) do
35 | scheme, href = $1, $&
36 | punctuation = []
37 |
38 | if auto_linked?($`, $')
39 | # do not change string; URL is already linked
40 | href
41 | else
42 | # don't include trailing punctuation character as part of the URL
43 | while href.sub!(/[^#{WORD_PATTERN}\/-]$/, '')
44 | punctuation.push $&
45 | if opening = BRACKETS[punctuation.last] and href.scan(opening).size > href.scan(punctuation.last).size
46 | href << punctuation.pop
47 | break
48 | end
49 | end
50 |
51 | #link_text = block_given?? yield(href) : href
52 | link_text = href.sub(/^#{scheme}\/\//,'')
53 | href = 'http://' + href unless scheme
54 | %(#{link_text}) + punctuation.reverse.join('')
55 | end
56 | end
57 | end
58 |
59 | # Turns all email addresses into clickable links.
60 | def self.auto_link_email_addresses(text)
61 | text.gsub(AUTO_EMAIL_RE) do
62 | text = $&
63 |
64 | if auto_linked?($`, $')
65 | text
66 | else
67 | #display_text = (block_given?) ? yield(text) : text
68 | #display_text = text
69 | text.gsub!('@', '@').gsub!('.', '.')
70 | %(#{text})
71 | end
72 | end
73 | end
74 |
75 | # Detects already linked context or position in the middle of a tag
76 | def self.auto_linked?(left, right)
77 | (left =~ AUTO_LINK_CRE[0] and right =~ AUTO_LINK_CRE[1]) or
78 | (left.rindex(AUTO_LINK_CRE[2]) and $' !~ AUTO_LINK_CRE[3])
79 | end
80 |
81 | end
82 | end
83 | end
84 | end
--------------------------------------------------------------------------------
/lib/amber/render/filter/bracketlink.rb:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 |
3 | #
4 | # bracket links are links in the form [[label => target]] or [[page-name]]
5 | #
6 |
7 | module Amber
8 | module Render
9 | module Filter
10 | module Bracketlink
11 |
12 | # linking using double square brackets
13 | BRACKET_LINK_RE = /
14 | \[\[ # start [[
15 | ([^\[\]]+) # $text : one or more characters that are not [ or ] ($1)
16 | \]\] # end ]]
17 | /x
18 |
19 | def self.run(text, &block)
20 | text.gsub(BRACKET_LINK_RE) do |m|
21 | link_text = $~[1].strip
22 | if link_text =~ /^.+\s*[-=]>\s*.+$/
23 | # link_text == "from -> to"
24 | from, to = link_text.split(/\s*[-=]>\s*/)[0..1]
25 | from = "" unless from.instance_of? String # \ sanity check for
26 | to = "" unless from.instance_of? String # / badly formed links
27 | else
28 | # link_text == "to" (ie, no link label)
29 | from = nil
30 | to = link_text
31 | end
32 | yield(from, to)
33 | end
34 | end
35 |
36 | end
37 | end
38 | end
39 | end
--------------------------------------------------------------------------------
/lib/amber/render/filter/variables.rb:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 |
3 | #
4 | # bracket links are links in the form [[label => target]] or [[page-name]]
5 | #
6 |
7 | module Amber
8 | module Render
9 | module Filter
10 | module Variables
11 |
12 | # variable expansion uses {{ }}
13 | VARIABLES_RE = /
14 | \{\{ # start {{
15 | ([^\{\}]+) # $text : one or more characters that are not { or } ($1)
16 | \}\} # end }}
17 | /x
18 |
19 | def self.run(text, &block)
20 | text.gsub(VARIABLES_RE) do |m|
21 | variable_name = $~[1].strip
22 | yield(variable_name)
23 | end
24 | end
25 |
26 | end
27 | end
28 | end
29 | end
--------------------------------------------------------------------------------
/lib/amber/render/helpers/blog_helper.rb:
--------------------------------------------------------------------------------
1 | module Amber
2 | module Render
3 | module BlogHelper
4 |
5 | def recent_summaries(options={}, &block)
6 | limit = options[:limit] || @site.pagination_size
7 | order = options[:order] || :posted_at
8 | direction = options[:direction] || :desc
9 | #partial = options[:partial]
10 | if options[:path]
11 | @site.find_page(options[:path])
12 | else
13 | root = @site.root
14 | end
15 | if root
16 | pages = root.all_children.order_by(order, :direction => direction).limit(limit)
17 | haml do
18 | pages.each do |page|
19 | if block
20 | yield page
21 | else
22 | render_page_summary(page)
23 | end
24 | end
25 | end
26 | end
27 | end
28 |
29 | #@def news_feed_link
30 | # link_to(image_tag('/img/feed-icon-14x14.png'), "/#{I18n.locale}/news.atom")
31 | #end
32 |
33 | end
34 | end
35 | end
36 |
--------------------------------------------------------------------------------
/lib/amber/render/helpers/date_helper.rb:
--------------------------------------------------------------------------------
1 | module Amber
2 | module Render
3 | module HtmlHelper
4 | def time_tag(date_or_time, *args, &block)
5 | options = args.last.is_a?(Hash) ? args.pop : {}
6 | format = options.delete(:format) || :long
7 | content = args.first || I18n.l(date_or_time, :format => format)
8 | #datetime = date_or_time.acts_like?(:time) ? date_or_time.xmlschema : date_or_time.iso8601
9 | datetime = date_or_time.iso8601
10 | content_tag(:time, content, {:datetime => datetime}.merge(options), &block)
11 | end
12 | end
13 | end
14 | end
--------------------------------------------------------------------------------
/lib/amber/render/helpers/haml_helper.rb:
--------------------------------------------------------------------------------
1 | require 'pathname'
2 |
3 | module HamlHelper
4 |
5 | #
6 | # acts like haml_tag, capture_haml, or haml_concat, depending on how it is called.
7 | #
8 | # two or more args --> like haml_tag
9 | # one arg and a block --> like haml_tag
10 | # zero args and a block --> like capture_haml
11 | # one arg and no block --> like haml_concat
12 | #
13 | # additionally, we allow the use of more than one class.
14 | #
15 | # some examples of these usages:
16 | #
17 | # def display_robot(robot)
18 | # haml do # like capture_haml
19 | # haml '.head', robot.head_html # like haml_tag
20 | # haml '.head' do # same
21 | # haml robot.head_html
22 | # end
23 | # haml '.body.metal', robot.body_html # like haml_tag, but with multiple classes
24 | # haml 'link' # like haml_concat
25 | # end
26 | # end
27 | #
28 | # wrapping the helper in a capture_haml call is very useful, because then
29 | # the helper can be used wherever a normal helper would be.
30 | #
31 | def haml(name=nil, *args, &block)
32 | if name
33 | if args.empty? and block.nil?
34 | haml_concat name
35 | else
36 | if name =~ /^(.*?\.[^\.]*)(\..*)$/
37 | # allow chaining of classes if there are multiple '.' in the first arg
38 | name = $1
39 | classes = $2.gsub('.',' ')
40 | hsh = args.detect{|i| i.is_a?(Hash)}
41 | unless hsh
42 | hsh = {}
43 | args << hsh
44 | end
45 | hsh[:class] = classes
46 | end
47 | haml_tag(name, *args, &block)
48 | end
49 | else
50 | capture_haml(&block)
51 | end
52 | end
53 |
54 | def content_tag(name, content_or_options_with_block = nil, options = nil, &block)
55 | if block_given?
56 | options = content_or_options_with_block if content_or_options_with_block.is_a?(Hash)
57 | capture_haml { haml(name, options, &block) }
58 | else
59 | capture_haml { haml_tag(name, content_or_options_with_block, options) }
60 | end
61 | end
62 |
63 | end
--------------------------------------------------------------------------------
/lib/amber/render/helpers/html_helper.rb:
--------------------------------------------------------------------------------
1 | module Amber
2 | module Render
3 | module HtmlHelper
4 |
5 | #
6 | # return html markup suitable for setting the href base
7 | # of the document. If this is added to the document's HEAD,
8 | # then relative urls will work as expected even though the
9 | # url path does not end with a '/'
10 | #
11 | def html_head_base
12 | if @page
13 | ""
14 | else
15 | ""
16 | end
17 | end
18 |
19 | #
20 | # link_to like rails
21 | def link_to(label, url, options=nil)
22 | link({label => url}, options)
23 | end
24 |
25 | #
26 | # three forms:
27 | #
28 | # (1) link('page-name')
29 | # (2) link('label' => 'page-name')
30 | # (3) link('label' => 'https://url')
31 | #
32 | # both accept optional options hash:
33 | #
34 | # (1) link('page-name', :class => 'x')
35 | # (2) link('label' => 'page-name', :class => 'x')
36 | #
37 | def link(name, options=nil)
38 | options = nil if options && !options.is_a?(Hash)
39 | klass = nil
40 | if name.is_a? Hash
41 | klass = name.delete(:class)
42 | label, name = name.to_a.first
43 | if label.is_a? Symbol
44 | label = I18n.t label
45 | end
46 | end
47 | klass ||= options[:class] if options
48 | if name =~ /^#/ || name =~ /^http/ || name =~ /\./
49 | path = name
50 | label ||= name
51 | else
52 | if index = name.index('#')
53 | anchor = name[index..-1]
54 | name_without_anchor = name[0..(index-1)]
55 | else
56 | anchor = ''
57 | name_without_anchor = name
58 | end
59 | page = @site.find_page(name_without_anchor)
60 | if page
61 | label ||= page.nav_title
62 | path = amber_path(page) + anchor
63 | else
64 | puts "warning: dead link to `#{name_without_anchor}` from page `/#{I18n.locale}/#{@page.path.join('/')}`"
65 | label ||= name_without_anchor
66 | label += ' [dead link]'
67 | path = name_without_anchor
68 | end
69 | end
70 | if klass
71 | %(#{label})
72 | else
73 | %(#{label})
74 | end
75 | end
76 |
77 | #
78 | # returns the ideal full url path for a page or path (expressed as an array).
79 | #
80 | def amber_path(page_or_array, locale=I18n.locale)
81 | page = nil
82 | if page_or_array.is_a? Array
83 | page = @site.find_page_by_path(page_or_array)
84 | elsif page_or_array.is_a? StaticPage
85 | page = page_or_array
86 | end
87 | if page.nil?
88 | return ''
89 | end
90 | full_path = []
91 | full_path << @site.path_prefix if @site.path_prefix
92 | full_path << locale # always do this?
93 | if page.aliases(locale).any?
94 | full_path += page.aliases(locale).first
95 | else
96 | full_path += page.path
97 | end
98 | "/" + full_path.join('/')
99 | end
100 |
101 | end
102 | end
103 | end
104 |
--------------------------------------------------------------------------------
/lib/amber/render/helpers/language_helper.rb:
--------------------------------------------------------------------------------
1 | module Amber
2 | module Render
3 | module LanguageHelper
4 |
5 | def t(*args)
6 | I18n.t(*args, default: I18n.t(args.first, locale: I18n.default_locale))
7 | end
8 |
9 | def translation_missing?
10 | !@page.content_file_exists?(I18n.locale)
11 | end
12 |
13 | # return array of arrays, each array with: language_name, language_code, current_url_with_locale_switch
14 | #
15 | # [ ['English', :en, 'en/about-us'] ]
16 | #
17 | def available_languages
18 | @site.locales.collect { |locale|
19 | [Amber::POSSIBLE_LANGUAGES[locale][0], locale, "/"+([locale]+current_page_path).join('/')]
20 | }
21 | end
22 |
23 | end
24 | end
25 | end
--------------------------------------------------------------------------------
/lib/amber/render/layout.rb:
--------------------------------------------------------------------------------
1 | #
2 | # A Layout is similar to a layout in Rails (a template that decorates the pages)
3 | #
4 |
5 | gem 'tilt', '>= 2.0.0'
6 | require 'tilt'
7 | require 'haml'
8 |
9 | module Amber
10 | module Render
11 |
12 | class Layout
13 | def self.load(layout_dir=nil)
14 | @layout_dirs ||= []
15 | @layout_dirs << layout_dir if layout_dir
16 | reload
17 | end
18 |
19 | def self.reload
20 | @layouts ||= {}
21 | @layouts['default'] = DefaultLayout.new
22 | @layout_dirs.each do |dir|
23 | Dir.glob("#{dir}/*").each do |layout_file|
24 | name = File.basename(layout_file).sub(/^([^\.]*).*$/, "\\1")
25 | @layouts[name] = Layout.new(layout_file)
26 | end
27 | end
28 | end
29 |
30 | def self.[](layout)
31 | @layouts[layout]
32 | end
33 |
34 | def initialize(file_path, &block)
35 | if file_path =~ /\.haml$/
36 | # https://www.rubydoc.info/gems/haml/5.0.1/Haml/Options
37 | @template = Tilt::HamlTemplate.new(
38 | file_path, default_encoding: 'UTF-8', escape_html: false
39 | )
40 | else
41 | @template = Tilt.new(
42 | file_path, default_encoding: 'UTF-8', &block
43 | )
44 | end
45 | end
46 |
47 | def render(view, &block)
48 | @template.render(view, &block)
49 | end
50 | end
51 |
52 | class DefaultLayout < Layout
53 | def initialize
54 | @template = Tilt::StringTemplate.new {DEFAULT}
55 | end
56 | DEFAULT = '
57 |
58 |
59 | #{ @page.nav_title } - #{@site.title}
60 |
61 |
62 |
63 | #{ yield }
64 |
65 | '
66 | end
67 |
68 | end
69 | end
70 |
--------------------------------------------------------------------------------
/lib/amber/render/sass_helper.rb:
--------------------------------------------------------------------------------
1 | require 'sass'
2 |
3 | module Amber
4 | module SassFunctions
5 | def image_url(path)
6 | Sass::Script::String.new("url(/assets/images/#{path.value})")
7 | end
8 | end
9 | end
10 |
11 | ::Sass::Script::Functions.send :include, Amber::SassFunctions
12 |
--------------------------------------------------------------------------------
/lib/amber/site_configuration.rb:
--------------------------------------------------------------------------------
1 | #
2 | # A class for a site's configuration.
3 | # Site configuration file is eval'ed in the context of an instance of SiteConfiguration
4 | #
5 | # A site can have multiple sub sites, each with their own configurations (called mount points)
6 | #
7 |
8 | require 'pathname'
9 |
10 | module Amber
11 | class SiteConfiguration
12 |
13 | attr_accessor :title
14 | attr_accessor :pagination_size
15 | attr_accessor :locales
16 | attr_accessor :default_locale
17 | attr_accessor :path_prefix
18 | alias :path :path_prefix
19 | attr_accessor :short_paths
20 |
21 | attr_accessor :menu
22 |
23 | attr_accessor :root_dir
24 | attr_accessor :pages_dir
25 | attr_accessor :dest_dir
26 | attr_accessor :config_dir
27 | attr_accessor :config_file
28 | attr_accessor :layouts_dir
29 | attr_accessor :path
30 | attr_accessor :menu_file
31 | attr_accessor :locales_dir
32 | attr_accessor :timestamp
33 |
34 | # an array of SiteConfigurations that are attached as sub-sites
35 | # to this one.
36 | attr_accessor :children
37 |
38 | extend Forwardable
39 | def_delegators :@site, :pages, :find_page, :find_pages, :find_page_by_path,
40 | :find_page_by_name, :continue_on_error, :root
41 |
42 | ##
43 | ## CLASS METHODS
44 | ##
45 |
46 | def self.load(site, root_dir, options={})
47 | SiteConfiguration.new(site, root_dir, options)
48 | end
49 |
50 | ##
51 | ## INSTANCE METHODS
52 | ##
53 |
54 | #
55 | # accepts a file_path to a configuration file.
56 | #
57 | def initialize(site, root_dir, options={})
58 | @children = []
59 | @path_prefix = nil
60 | @site = site
61 | @root_dir = File.expand_path(find_in_directory_tree('amber', 'config.rb', root_dir))
62 | if @root_dir == '/'
63 | puts "Could not find amber/config.rb in the directory tree. Run `amber` from inside an amber website directory"
64 | exit(1)
65 | end
66 | @pages_dir = File.join(@root_dir, 'pages')
67 | @dest_dir = File.join(@root_dir, 'public')
68 | @config_dir = File.join(@root_dir, 'amber')
69 | @config_file = config_path('config.rb')
70 | @menu_file = config_path('menu.txt')
71 | @locales_dir = config_path('locales')
72 | @layouts_dir = config_path('layouts')
73 | @title = "untitled"
74 | @pagination_size = 20
75 |
76 | @menu = Menu.new('root')
77 | @menu.load(@menu_file) if @menu_file
78 |
79 | self.eval
80 | @path_prefix = options[:path_prefix] if options[:path_prefix]
81 | self.cleanup
82 |
83 | reset_timestamp
84 | Render::Layout.load(@layouts_dir)
85 | end
86 |
87 | #
88 | # map('/path' => '../othersite')
89 | #
90 | def map(path_to_directory_source, options={})
91 | path, root_dir = path_to_directory_source.to_a.first
92 | config = self.load(@site, root_dir, {:path_prefix => path})
93 | @site.add_config(config)
94 | end
95 |
96 | def cleanup
97 | @locale ||= I18n.default_locale
98 | I18n.default_locale = @locale
99 | @locales ||= [@locale]
100 | @locales.map! {|locale|
101 | if Amber::POSSIBLE_LANGUAGE_CODES.include?(locale.to_s)
102 | locale.to_sym
103 | else
104 | nil
105 | end
106 | }.compact
107 | if @path_prefix
108 | @path_prefix.gsub!(%r{^/|/$}, '')
109 | @path_prefix = nil if @path_prefix == ''
110 | end
111 | end
112 |
113 | #def pages_changed?
114 | # self.changed? || @children.detect {|child| child.changed?}
115 | #end
116 |
117 | def eval
118 | self.instance_eval(File.read(@config_file), @config_file)
119 | end
120 |
121 | def config_path(file)
122 | path = File.join(@config_dir, file)
123 | if File.exist?(path)
124 | path
125 | else
126 | nil
127 | end
128 | end
129 |
130 | def reset_timestamp
131 | @timestamp = File.mtime(@pages_dir)
132 | end
133 |
134 | def find_in_directory_tree(target_dir_name, target_file_name, directory_tree=nil)
135 | search_dir = directory_tree || Dir.pwd
136 | while search_dir != "/"
137 | Dir.foreach(search_dir) do |f|
138 | if f == target_dir_name && File.exist?(File.join(search_dir, f,target_file_name))
139 | return search_dir
140 | end
141 | end
142 | search_dir = File.dirname(search_dir)
143 | end
144 | return search_dir
145 | end
146 |
147 | end
148 | end
--------------------------------------------------------------------------------
/lib/amber/static_page.rb:
--------------------------------------------------------------------------------
1 | #
2 | # class StaticPage
3 | #
4 | # represents a static website page.
5 | # see also static_page/*.rb
6 | #
7 |
8 | module Amber
9 | class StaticPage
10 |
11 | attr_accessor :path, # array of path segments
12 | :children, # array of child pages
13 | :name, # the name of the page
14 | :file_path, #
15 | :parent, # parent page (nil for root page)
16 | :config, # associated SiteConfiguration (site might have several)
17 | :site, # associated Site (only one)
18 | :valid # `false` if there is some problem with this page.
19 |
20 | attr_reader :props # set of page properties (PropertySet)
21 |
22 | alias_method :valid?, :valid
23 |
24 | ##
25 | ## INSTANCE METHODS
26 | ##
27 |
28 | FORBIDDEN_PAGE_CHARS_RE = /[A-Z\.\?\|\[\]\{\}\$\^\*~!@#%&='"<>]/
29 |
30 | def initialize(parent, name, file_path=nil, path_prefix="/")
31 | @valid = true
32 | @children = PageArray.new # array of StaticPages
33 | @nav_title = {} # key is locale
34 | @title = {} # key is locale
35 |
36 | @name, @suffix = parse_source_file_name(name)
37 |
38 | # set @parent & @path
39 | if parent
40 | @parent = parent
41 | @config = @parent.config
42 | @parent.add_child(self)
43 | @path = [@parent.path, @name].flatten.compact
44 | else
45 | @path = (path_prefix||"").split('/')
46 | end
47 |
48 | if @name =~ FORBIDDEN_PAGE_CHARS_RE
49 | Amber.logger.error "Illegal page name #{@name} at path /#{self.path.join('/')} -- must not have symbols, uppercase, or periods."
50 | @valid = false
51 | end
52 |
53 | # set the @file_path
54 | if file_path
55 | @file_path = file_path
56 | elsif @parent && @parent.file_path
57 | @file_path = File.join(@parent.file_path, @name)
58 | else
59 | raise 'file path must be specified or in parent'
60 | end
61 |
62 | @simple_page = !File.directory?(@file_path)
63 |
64 | # eval the property headers, if any
65 | @props = load_properties()
66 | end
67 |
68 | def add_child(page)
69 | @children << page
70 | end
71 |
72 | def all_children
73 | PageArray.new(child_tree.flatten.compact)
74 | end
75 |
76 | def inspect
77 | "<'#{@path.join('/')}' #{children.inspect}>"
78 | end
79 |
80 | def title(locale=I18n.locale)
81 | @title[locale] ||= begin
82 | @props.prop_with_fallback(locale, [:title, :nav_title]) || @name
83 | end
84 | end
85 |
86 | def nav_title(locale=I18n.locale)
87 | @nav_title[locale] ||= begin
88 | @props.prop_with_fallback(locale, [:nav_title, :title]) || @name
89 | end
90 | end
91 |
92 | #
93 | # returns title iff explicitly set.
94 | #
95 | def explicit_title(locale)
96 | @props.prop_without_inheritance(locale, :title) ||
97 | @props.prop_without_inheritance(I18n.default_locale, :title)
98 | end
99 |
100 | def id
101 | self.name
102 | end
103 |
104 | #
105 | # returns a child matching +name+, if any.
106 | #
107 | def child(name)
108 | children.detect {|child| child.name == name}
109 | end
110 |
111 | def prop(*args)
112 | @props.prop(*args)
113 | end
114 |
115 | def vars
116 | @vars ||= load_variables
117 | end
118 |
119 | def var(name, locale=I18n.locale)
120 | (vars[locale] || vars[I18n.default_locale] || {})[name.to_s]
121 | end
122 |
123 | #
124 | # Returns array of locale symbols for all locales with properties set
125 | # Note: there might be a content for a locale that does not show up in this array,
126 | # if the content file does not set any properties.
127 | #
128 | def locales
129 | @props.locales
130 | end
131 |
132 | def path_str
133 | self.path.join('/')
134 | end
135 |
136 | #
137 | # returns an array of normalized aliases based on the :alias property
138 | # defined for a page.
139 | #
140 | # aliases are defined with a leading slash for absolute paths, or without a slash
141 | # for relative paths. this method converts this to a format that amber uses
142 | # (all absolute, with no leading slash, as an array instead of a string).
143 | #
144 | def aliases(locale=I18n.default_locale)
145 | @aliases ||= begin
146 | aliases_hash = Hash.new([])
147 | @props.locales.each do |l|
148 | aliases = @props.prop_without_inheritance(l, :alias)
149 | aliases_hash[l] = begin
150 | if aliases.nil?
151 | []
152 | else
153 | [aliases].flatten.collect {|alias_path|
154 | if alias_path =~ /^\//
155 | alias_path.sub(/^\//, '').split('/')
156 | elsif @parent
157 | @parent.path + [alias_path]
158 | else
159 | alias_path.split('/')
160 | end
161 | }
162 | end
163 | end
164 | end
165 | aliases_hash
166 | end
167 | @aliases[locale]
168 | end
169 |
170 | protected
171 |
172 | def child_tree
173 | [self, children.collect{|child| child.child_tree}]
174 | end
175 |
176 | end
177 | end
--------------------------------------------------------------------------------
/lib/amber/static_page/page_properties.rb:
--------------------------------------------------------------------------------
1 | #
2 | # Holds many PropertySets for a StaticPage, one PropertySet per locale.
3 | #
4 | # setting the property (in en.haml):
5 | #
6 | # - @title = 'hi'
7 | #
8 | # getting the property
9 | #
10 | # page.props.title # Uses I18n.locale
11 | # page.props.prop(:es, :title) # explicitly uses locale :es
12 | #
13 |
14 | require 'i18n'
15 | require 'time'
16 | require 'rubygems'
17 | require 'haml'
18 | require 'RedCloth'
19 |
20 | module Amber
21 | class StaticPage
22 | class PageProperties
23 |
24 | def initialize(page=nil)
25 | @page = page
26 | @locales = {}
27 | end
28 |
29 | #
30 | # evaluate the template_string, and load the variables defined into an AttrObject.
31 | #
32 | def eval(template_string, locale=I18n.default_locale)
33 | locale = locale.to_sym # locales are always symbols
34 |
35 | # render to the template to get the instance variables
36 | ps = PropertySet.new
37 | begin
38 | # template is evaluated with binding of ps object
39 | Haml::Engine.new(template_string, :format => :html5).render(ps)
40 | rescue Exception => exc
41 | raise exc if defined?(TESTING)
42 | end
43 |
44 | # convert date/time variables to objects of class Time
45 | ps.instance_variables.grep(/_at$/).each do |time_variable|
46 | ps.instance_variable_set(time_variable, Time.parse(ps.instance_variable_get(time_variable)))
47 | end
48 |
49 | # save the AttrObject
50 | @locales[locale] = ps
51 | end
52 |
53 | #
54 | # allows property_set.propname shortcut, assumes default locale
55 | #
56 | def method_missing(method)
57 | prop(I18n.locale, method)
58 | end
59 |
60 | #def locale(l)
61 | # @locales[l.to_sym] || @locales[I18n.default_locale]
62 | #end
63 |
64 | #
65 | # get an attribute value for a particular locale.
66 | # if `inherited` is true, we do not consider special non-inheritable properties.
67 | #
68 | def prop(locale, var_name, inherited=false)
69 | return nil unless locale
70 | properties = @locales[locale.to_sym]
71 | value = (properties.get(var_name, inherited) if properties)
72 | if value.nil? && locale != I18n.default_locale
73 | properties = @locales[I18n.default_locale]
74 | value = properties.get(var_name, inherited) if properties
75 | end
76 | if value.nil? && @page && @page.parent
77 | value = @page.parent.prop(locale, var_name, true)
78 | end
79 | value
80 | end
81 |
82 | #
83 | # like prop(), but does not allow inheritance
84 | #
85 | def prop_without_inheritance(locale, var_name)
86 | properties = @locales[locale.to_sym]
87 | if properties
88 | properties.get(var_name)
89 | else
90 | nil
91 | end
92 | end
93 |
94 | #
95 | # like prop_without_inheritance, but defaults to default_locale and tries multiple properties
96 | #
97 | def prop_with_fallback(locale, var_names)
98 | [locale, I18n.default_locale].each do |l|
99 | var_names.each do |var|
100 | value = prop_without_inheritance(l, var)
101 | return value if value
102 | end
103 | end
104 | return nil
105 | end
106 |
107 | def set_prop(locale, var_name, value)
108 | properties = @locales[locale.to_sym]
109 | if properties
110 | properties.set(var_name, value)
111 | end
112 | end
113 |
114 | #
115 | # returns an array of locale symbols that are active for this page.
116 | #
117 | def locales
118 | @locales.keys
119 | end
120 |
121 | #
122 | # tries to get the value of an inherited variable
123 | #
124 | #def get_inherited_var(var_name, locale=I18n.locale)
125 | # if @page && @page.parent && @page.parent.props
126 | # @page.parent.props.get_var(var_name, locale)
127 | # end
128 | #end
129 | end
130 | end
131 | end
--------------------------------------------------------------------------------
/lib/amber/static_page/property_set.rb:
--------------------------------------------------------------------------------
1 | #
2 | # A simple class to hold a set of properties for a page.
3 | #
4 | # There is a separate property set for each locale. The PageProperties object holds many PropertySets, one
5 | # for each locale.
6 | #
7 | # When the template for a page is evaluated, all the member variabled defined in that template
8 | # are loaded as member variables of the PropertySet instance. (e.g. properties are eval'ed
9 | # in context of PropertySet instance)
10 | #
11 | # the "@this" variable is to set variables that should not be inherited
12 | #
13 |
14 | module Amber
15 | class StaticPage
16 | class PropertySet
17 |
18 | def initialize
19 | @this = ThisPropertySet.new
20 | end
21 |
22 | def method_missing(method, *args)
23 | if method =~ /=$/
24 | set(method, args.first)
25 | else
26 | get(method)
27 | end
28 | end
29 |
30 | def textile(str)
31 | RedCloth.new(str).to_html
32 | end
33 |
34 | #
35 | # get the value of a property
36 | #
37 | # the @this properties are non-inheritable. If `inheritable_only` is true, we don't consider them
38 | # when returning the property value.
39 | #
40 | def get(property_name, inheritable_only=false)
41 | if inheritable_only || @this.nil?
42 | safe_instance_get("@#{property_name}")
43 | else
44 | value = @this.get(property_name)
45 | if value.nil?
46 | value = safe_instance_get("@#{property_name}")
47 | end
48 | value
49 | end
50 | end
51 |
52 | #
53 | # set the value of a property
54 | #
55 | # if the property has a non-nil value set in the @this prop set, then we set it there.
56 | # otherwise, it is set in the inheritable set.
57 | #
58 | def set(property_name, value)
59 | property_name = property_name.to_s.sub(/=$/, '')
60 | instance_variable = "@" + property_name
61 | if @this.nil? || @this.get(property_name).nil?
62 | instance_variable_set(instance_variable, value)
63 | else
64 | @this.instance_variable_set(instance_variable, value)
65 | end
66 | end
67 |
68 | def to_s
69 | "<" + instance_variables.map{|v| "#{v}=#{instance_variable_get(v)}"}.join(', ') + ">"
70 | end
71 |
72 | private
73 |
74 | def safe_instance_get(prop_name)
75 | if !instance_variable_defined?(prop_name)
76 | instance_variable_set(prop_name, nil)
77 | end
78 | instance_variable_get(prop_name)
79 | end
80 | end
81 |
82 | class ThisPropertySet < PropertySet
83 | def initialize
84 | @this = nil
85 | end
86 | end
87 |
88 | end
89 | end
--------------------------------------------------------------------------------
/lib/amber/static_page/render.rb:
--------------------------------------------------------------------------------
1 | #
2 | # All the StaticPage code that deals with rendering
3 | #
4 |
5 | require 'i18n'
6 | require 'fileutils'
7 | require 'pathname'
8 |
9 | module Amber
10 | class StaticPage
11 |
12 | #
13 | # render without layout, possibly with via a rails request
14 | #
15 | # RAILS
16 | # def render_to_string(renderer=nil)
17 | # begin
18 | # render_locale(renderer, I18n.locale)
19 | # rescue ActionView::MissingTemplate, MissingTemplate => exc
20 | # begin
21 | # render_locale(renderer, I18n.default_locale)
22 | # rescue
23 | # Amber.logger.error "ERROR: could not file template path #{self.template_path}"
24 | # raise exc
25 | # end
26 | # end
27 | # end
28 |
29 | #
30 | # render a static copy
31 | #
32 | # dest_dir - e.g. amber_root/public/
33 | #
34 | def render_to_file(dest_dir, options={})
35 | render_content_files(dest_dir, options)
36 | render_assets(dest_dir)
37 | @props.locales.each do |locale|
38 | if aliases(locale).any?
39 | link_page_aliases(dest_dir, aliases(locale), locale)
40 | end
41 | end
42 | end
43 |
44 | #
45 | # creates symlinks for aliases to this page.
46 | # called by Page#render_to_file and Site#render_short_path_aliases
47 | #
48 | def link_page_aliases(dest_dir, alias_paths, locale=I18n.default_locale)
49 | alias_paths.each do |alias_path|
50 | alias_file_path = File.join(dest_dir, alias_path)
51 | #if locale != I18n.default_locale
52 | # alias_file_path += ".#{locale}"
53 | #end
54 | alias_file_path = Pathname.new(alias_file_path)
55 | page_file_path = Pathname.new(File.join(dest_dir, *@path))
56 | symlink(page_file_path, alias_file_path)
57 | end
58 | end
59 |
60 | private
61 |
62 | # RAILS
63 | # def render_locale(renderer, locale)
64 | # if renderer && is_haml_template?(locale)
65 | # renderer.render_to_string(:template => self.template_path(locale), :layout => false).html_safe
66 | # else
67 | # render_static_locale(locale).html_safe
68 | # end
69 | # end
70 |
71 | # RAILS
72 | # def render_static_locale(locale)
73 | # content_files.each do |file_locale, content_file|
74 | # if locale == file_locale
75 | # return Render::View.new(self, self.mount_point).render({file: content_file}, {locale: file_locale})
76 | # end
77 | # end
78 | # raise MissingTemplate.new(template_path(locale))
79 | # end
80 |
81 | # called only by render_to_file
82 | def render_assets(dest_dir)
83 | asset_files.each do |asset_file|
84 | src_file = File.join(@file_path, asset_file)
85 | dst_file = File.join(dest_dir, *@path, asset_file)
86 | Render::Asset.render(src_file, dst_file)
87 | end
88 | end
89 |
90 | #
91 | # create a symlink. arguments must be of type Pathname.
92 | #
93 | def symlink(from_path, to_path)
94 | to_path = realpath(to_path)
95 | target = from_path.relative_path_from(to_path).to_s.sub(/^\.\.\//, '')
96 | if !to_path.dirname.directory?
97 | Amber.logger.warn { "On page `#{@file_path}`, the parent directories for alias name `#{to_path}` don't exist. Skipping alias." }
98 | return
99 | end
100 | if to_path.exist? && to_path.symlink?
101 | File.unlink(to_path)
102 | end
103 | if !to_path.exist?
104 | Amber.logger.debug { "Symlink #{to_path} => #{target}" }
105 | FileUtils.ln_s(target, to_path)
106 | end
107 | end
108 |
109 | def realpath(pathname)
110 | dir = pathname.dirname
111 | if dir.directory? || dir.symlink?
112 | dir.realpath + pathname.basename
113 | else
114 | pathname
115 | end
116 | end
117 |
118 | # called only by render_to_file
119 | def render_content_files(dest_dir, options)
120 | view = Render::View.new(self, @config)
121 | @config.locales.each do |file_locale|
122 | content_file = content_file(file_locale)
123 | next unless content_file
124 | dest = destination_file(dest_dir, file_locale)
125 | unless Dir.exist?(File.dirname(dest))
126 | FileUtils.mkdir_p(File.dirname(dest))
127 | end
128 | if options[:force] || !File.exist?(dest) || File.mtime(content_file) > File.mtime(dest)
129 | File.open(dest, 'w') do |f|
130 | layout = @props.layout || 'default'
131 | f.write view.render({page: self, layout: layout}, {locale: file_locale})
132 | end
133 | end
134 | end
135 | end
136 |
137 | end
138 | end
--------------------------------------------------------------------------------
/lib/amber/templates/apache_config.erb:
--------------------------------------------------------------------------------
1 | AccessFileName .htaccess
2 | DocumentRoot "/<%= @directory %>"
3 | ">
4 | AllowOverride FileInfo Indexes Options=All,MultiViews
5 |
6 | Order deny,allow
7 | Allow from all
8 |
9 |
10 | Require all granted
11 |
12 |
--------------------------------------------------------------------------------
/lib/amber/templates/apache_config_with_prefix.erb:
--------------------------------------------------------------------------------
1 | AccessFileName .htaccess
2 | AliasMatch ^/[a-z]{2}/<%=@site.path_prefix%>(/.+|/|)$ "/<%=@directory%>/$1"
3 | Alias /<%=@site.path_prefix%> "/<%=@directory%>/"
4 |
5 | /">
6 | AllowOverride FileInfo Indexes Options=All,MultiViews
7 |
8 | Order deny,allow
9 | Allow from all
10 |
11 |
12 | Require all granted
13 |
14 |
15 |
--------------------------------------------------------------------------------
/lib/amber/templates/config.rb:
--------------------------------------------------------------------------------
1 | @title = "Your site's title"
2 | @default_locale = :en
3 | @locales = [:en, :fr]
4 | @short_paths = true
5 |
--------------------------------------------------------------------------------
/lib/amber/version.rb:
--------------------------------------------------------------------------------
1 | module Amber
2 | unless defined?(Amber::VERSION)
3 | VERSION = '0.3.12'
4 | end
5 | end
--------------------------------------------------------------------------------
/locales/rails-i18n/MIT-LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright (c) 2008-2012 Sven Fuchs and contributors (see https://github.com/svenfuchs/rails-i18n/contributors)
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining
4 | a copy of this software and associated documentation files (the
5 | "Software"), to deal in the Software without restriction, including
6 | without limitation the rights to use, copy, modify, merge, publish,
7 | distribute, sublicense, and/or sell copies of the Software, and to
8 | permit persons to whom the Software is furnished to do so, subject to
9 | the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be
12 | included in all copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
22 |
--------------------------------------------------------------------------------
/locales/rails-i18n/README.md:
--------------------------------------------------------------------------------
1 | This is a copy of https://github.com/svenfuchs/rails-i18n
2 |
3 | We don't use the gem, because we don't want the railties dependency.
4 |
5 |
--------------------------------------------------------------------------------
/locales/rails-i18n/az.yml:
--------------------------------------------------------------------------------
1 | az:
2 | date:
3 | abbr_day_names:
4 | - B.
5 | - B.E.
6 | - Ç.A.
7 | - Ç.
8 | - C.A.
9 | - C.
10 | - Ş.
11 | abbr_month_names:
12 | -
13 | - Yan
14 | - Fev
15 | - Mar
16 | - Apr
17 | - May
18 | - İyn
19 | - İyl
20 | - Avq
21 | - Sen
22 | - Okt
23 | - Noy
24 | - Dek
25 | day_names:
26 | - Bazar
27 | - Bazar ertəsi
28 | - Çərşənbə axşamı
29 | - Çərşənbə
30 | - Cümə axşamı
31 | - Cümə
32 | - Şənbə
33 | formats:
34 | default: ! '%d.%m.%Y'
35 | long: ! '%d %B %Y'
36 | short: ! '%d %b'
37 | month_names:
38 | -
39 | - Yanvar
40 | - Fevral
41 | - Mart
42 | - Aprel
43 | - May
44 | - İyun
45 | - İyul
46 | - Avqust
47 | - Sentyabr
48 | - Oktyabr
49 | - Noyabr
50 | - Dekabr
51 | order:
52 | - :day
53 | - :month
54 | - :year
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: təxminən 1 saat
59 | other: təxminən %{count} saat
60 | about_x_months:
61 | one: təxminən 1 ay
62 | other: təxminən %{count} ay
63 | about_x_years:
64 | one: təxminən 1 il
65 | other: təxminən %{count} il
66 | almost_x_years:
67 | one: təqribən 1 il
68 | other: təqribən %{count} il
69 | half_a_minute: yarım dəqiqə
70 | less_than_x_minutes:
71 | one: 1 dəqiqədən az
72 | other: ! '%{count} dəqiqədən az'
73 | less_than_x_seconds:
74 | one: 1 saniyədən az
75 | other: ! '%{count} saniyədən az'
76 | over_x_years:
77 | one: 1 ildən çox
78 | other: ! '%{count} ildən çox'
79 | x_days:
80 | one: 1 gün
81 | other: ! '%{count} gün'
82 | x_minutes:
83 | one: 1 dəqiqə
84 | other: ! '%{count} dəqiqə'
85 | x_months:
86 | one: 1 ay
87 | other: ! '%{count} ay'
88 | x_seconds:
89 | one: 1 saniyə
90 | other: ! '%{count} saniyə'
91 | prompts:
92 | day: Gün
93 | hour: Saat
94 | minute: Dəqiqə
95 | month: Ay
96 | second: Saniyə
97 | year: İl
98 | errors:
99 | format: ! '%{attribute} %{message}'
100 | messages:
101 | accepted: qəbul olunmalıdır
102 | blank: boş ola bilməz
103 | confirmation: təsdiqə uygun deyil
104 | empty: boş ola bilməz
105 | equal_to: ! '%{count}-ə bərabər olmalıdır'
106 | even: cüt olmalıdır
107 | exclusion: qorunur
108 | greater_than: ! '%{count}-dən böyük olmalıdır'
109 | greater_than_or_equal_to: böyük və ya %{count}-ə bərabər olmalıdır
110 | inclusion: siyahiyə daxil deyil
111 | invalid: yalnışdır
112 | less_than: ! '%{count}-dən kiçik olmalıdır'
113 | less_than_or_equal_to: kiçik və ya %{count}-ə bərabər olmalıdır
114 | not_a_number: rəqəm deyil
115 | not_an_integer: tam rəqəm olmalıdır
116 | odd: tək olmalıdır
117 | record_invalid: ! 'Yoxlama uğursuz oldu: %{errors}'
118 | taken: artıq mövcuddur
119 | too_long: çox uzundur (%{count} simvoldan çox olmalı deyil)
120 | too_short: çox qısadır (%{count} simvoldan az olmalı deyil)
121 | wrong_length: uzunluqu səhvdir (%{count} simvol olmalıdır)
122 | template:
123 | body: ! 'Aşağıdaki səhvlər üzə çıxdı:'
124 | header:
125 | one: ! '%{model} saxlanmadı: 1 səhv'
126 | other: ! '%{model} saxlanmadı: %{count} səhv'
127 | helpers:
128 | select:
129 | prompt: Seçin
130 | submit:
131 | create: ! '%{model} yarat'
132 | submit: ! '%{model} saxla'
133 | update: ! '%{model} yenilə'
134 | number:
135 | currency:
136 | format:
137 | delimiter: ! ' '
138 | format: ! '%n %u'
139 | precision: 2
140 | separator: .
141 | significant: false
142 | strip_insignificant_zeros: false
143 | unit: AZN
144 | format:
145 | delimiter: ! ' '
146 | precision: 3
147 | separator: .
148 | significant: false
149 | strip_insignificant_zeros: false
150 | human:
151 | decimal_units:
152 | format: ! '%n %u'
153 | units:
154 | billion: Milyard
155 | million: Milyon
156 | quadrillion: Katrilyon
157 | thousand: Min
158 | trillion: Trilyon
159 | unit: ''
160 | format:
161 | delimiter: ''
162 | precision: 1
163 | significant: false
164 | strip_insignificant_zeros: false
165 | storage_units:
166 | format: ! '%n %u'
167 | units:
168 | byte:
169 | one: Bayt
170 | other: Bayt
171 | gb: GB
172 | kb: KB
173 | mb: MB
174 | tb: TB
175 | percentage:
176 | format:
177 | delimiter: ''
178 | precision:
179 | format:
180 | delimiter: ''
181 | support:
182 | array:
183 | last_word_connector: ! ' və '
184 | two_words_connector: ! ' və '
185 | words_connector: ! ', '
186 | time:
187 | am: günortaya qədər
188 | formats:
189 | default: ! '%a, %d %b %Y, %H:%M:%S %z'
190 | long: ! '%d %B %Y, %H:%M'
191 | short: ! '%d %b, %H:%M'
192 | pm: günortadan sonra
193 |
--------------------------------------------------------------------------------
/locales/rails-i18n/bn.yml:
--------------------------------------------------------------------------------
1 | bn:
2 | date:
3 | abbr_day_names:
4 | - রবিবার
5 | - সোমবার
6 | - মঙ্গলবার
7 | - বুধবার
8 | - বৃহস্পতিবার
9 | - শুক্রবার
10 | - শনিবার
11 | abbr_month_names:
12 | -
13 | - জানুয়ারি
14 | - ফেব্রুয়ারি
15 | - মার্চ
16 | - এপ্রিল
17 | - মে
18 | - জুন
19 | - জুলাই
20 | - অগাস্ট
21 | - সেপ্টেমবার
22 | - অক্টোবার
23 | - নভেম্বার
24 | - ডিসেম্বার
25 | day_names:
26 | - রবিবার
27 | - সোমবার
28 | - মঙ্গলবার
29 | - বুধবার
30 | - বৃহস্পতিবার
31 | - শুক্রবার
32 | - শনিবার
33 | formats:
34 | default: ! '%e/%m/%Y'
35 | long: ! '%e de %B de %Y'
36 | short: ! '%e de %b'
37 | month_names:
38 | -
39 | - জানুয়ারি
40 | - ফেব্রুয়ারি
41 | - মার্চ
42 | - এপ্রিল
43 | - মে
44 | - জুন
45 | - জুলাই
46 | - অগাস্ট
47 | - সেপ্টেমবার
48 | - অক্টোবার
49 | - নভেম্বার
50 | - ডিসেম্বার
51 | order:
52 | - :year
53 | - :month
54 | - :day
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: প্রায় ১ ঘন্টা
59 | other: প্রায় %{count} ঘন্টা
60 | about_x_months:
61 | one: প্রায় ১ মাস
62 | other: প্রায় %{count} মাস
63 | about_x_years:
64 | one: প্রায় ১ বছর
65 | other: প্রায় %{count} বছর
66 | half_a_minute: অার্ধেক মিনিট
67 | less_than_x_minutes:
68 | one: ১ মিনিটের কম
69 | other: ! '%{count} মিনিটের কম'
70 | less_than_x_seconds:
71 | one: ! '১ সেকেন্ডর কম '
72 | other: ! '%{count} সেকেন্ডের কম'
73 | over_x_years:
74 | one: ১ বছরের বেশি
75 | other: ! '%{count} বছরের বেশি'
76 | x_days:
77 | one: ১ দিন
78 | other: ! '%{count} দিন'
79 | x_minutes:
80 | one: ১ মিনিট
81 | other: ! '%{count} মিনিট'
82 | x_months:
83 | one: ১ মাস
84 | other: ! '%{count} মাস'
85 | x_seconds:
86 | one: ১ সেকেন্ড
87 | other: ! '%{count} সেকেন্ড'
88 | prompts:
89 | day: দিন
90 | hour: ঘন্টা
91 | minute: মিনিট
92 | month: মাস
93 | second: সেকেন্ড
94 | year: বছর
95 | errors:
96 | format: ! '%{attribute} %{message}'
97 | messages:
98 | accepted: গ্রাহ্য করতে হবে
99 | blank: ফাঁকা রাখা যাবে না
100 | confirmation: অনুমোদনের সঙ্গে মিলছে না
101 | empty: খালি রাখা যাবে না
102 | equal_to: ! '%{count} এর সঙ্গে সমান হতে হবে'
103 | even: জোড় হতে হবে
104 | exclusion: রিসার্ভ করা অাছে
105 | greater_than: ! '%{count} থেকে বড়ো হতে হবে'
106 | greater_than_or_equal_to: ! '%{count} থেকে বড়ো অথবা তার সমান হতে হবে'
107 | inclusion: লিস্টে অন্তর্ভুক্ত নয়
108 | invalid: সঠিক নয়
109 | less_than: ! '%{count} থেকে ছোটো হতে হবে'
110 | less_than_or_equal_to: ! '%{count} থেকে ছোটো অথবা তার সমান হতে হবে'
111 | not_a_number: নম্বর নয়
112 | odd: বেজোড় হতে হবে
113 | taken: অাগেই নিয়ে নেওয়া হয়েছে
114 | too_long: খুব বড়ো (সর্বোচ্চ %{count} অক্ষর)
115 | too_short: খুব ছোটো (সর্বনিম্ন %{count} অক্ষর)
116 | wrong_length: দৈর্ঘ্যটি সঠিক নয় (%{count} অক্ষর হতে হবে)
117 | template:
118 | body: ! 'এই ফিল্ডগুলোতে কিছু সমস্যা দেখা দিয়েছে:'
119 | header:
120 | one: ১ টি ত্রুটির কারনে %{model} সংরক্ষন করা সম্ভব হয়নি
121 | other: ! '%{count} টি ত্রুটির কারনে %{model} সংরক্ষন করা সম্ভব হয়নি'
122 | number:
123 | currency:
124 | format:
125 | delimiter: ! ','
126 | format: ! '%u %n'
127 | precision: 2
128 | separator: .
129 | significant: false
130 | strip_insignificant_zeros: false
131 | unit: ₹
132 | format:
133 | delimiter: ! ','
134 | precision: 2
135 | separator: .
136 | significant: false
137 | strip_insignificant_zeros: false
138 | human:
139 | decimal_units:
140 | format: ! '%n %u'
141 | units:
142 | unit: ''
143 | format:
144 | delimiter: ''
145 | precision: 1
146 | significant: true
147 | strip_insignificant_zeros: true
148 | storage_units:
149 | format: ! '%n %u'
150 | units:
151 | byte:
152 | one: Byte
153 | other: Bytes
154 | gb: GB
155 | kb: KB
156 | mb: MB
157 | tb: TB
158 | percentage:
159 | format:
160 | delimiter: ''
161 | precision:
162 | format:
163 | delimiter: ''
164 | support:
165 | array:
166 | last_word_connector: ! ', এবং '
167 | two_words_connector: ! ' এবং '
168 | words_connector: ! ', '
169 | time:
170 | am: am
171 | formats:
172 | default: ! '%A, %e de %B de %Y %H:%M:%S %z'
173 | long: ! '%e de %B de %Y %H:%M'
174 | short: ! '%e de %b %H:%M'
175 | pm: pm
176 |
--------------------------------------------------------------------------------
/locales/rails-i18n/ca.yml:
--------------------------------------------------------------------------------
1 | ca:
2 | date:
3 | abbr_day_names:
4 | - Dg
5 | - Dl
6 | - Dm
7 | - Dc
8 | - Dj
9 | - Dv
10 | - Ds
11 | abbr_month_names:
12 | -
13 | - Gen
14 | - Feb
15 | - Mar
16 | - Abr
17 | - Mai
18 | - Jun
19 | - Jul
20 | - Ago
21 | - Set
22 | - Oct
23 | - Nov
24 | - Des
25 | day_names:
26 | - Diumenge
27 | - Dilluns
28 | - Dimarts
29 | - Dimecres
30 | - Dijous
31 | - Divendres
32 | - Dissabte
33 | formats:
34 | default: ! '%d-%m-%Y'
35 | long: ! '%d de %B de %Y'
36 | short: ! '%d de %b'
37 | month_names:
38 | -
39 | - Gener
40 | - Febrer
41 | - Març
42 | - Abril
43 | - Maig
44 | - Juny
45 | - Juliol
46 | - Agost
47 | - Setembre
48 | - Octubre
49 | - Novembre
50 | - Desembre
51 | order:
52 | - :day
53 | - :month
54 | - :year
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: aproximadament 1 hora
59 | other: aproximadament %{count} hores
60 | about_x_months:
61 | one: aproximadament 1 mes
62 | other: aproximadament %{count} mesos
63 | about_x_years:
64 | one: aproximadament 1 any
65 | other: aproximadament %{count} anys
66 | almost_x_years:
67 | one: quasi 1 any
68 | other: quasi %{count} anys
69 | half_a_minute: mig minut
70 | less_than_x_minutes:
71 | one: menys d'1 minut
72 | other: menys de %{count} minuts
73 | less_than_x_seconds:
74 | one: menys d'1 segon
75 | other: menys de %{count} segons
76 | over_x_years:
77 | one: més d'1 any
78 | other: més de %{count} anys
79 | x_days:
80 | one: 1 dia
81 | other: ! '%{count} dies'
82 | x_minutes:
83 | one: 1 minut
84 | other: ! '%{count} minuts'
85 | x_months:
86 | one: 1 mes
87 | other: ! '%{count} mesos'
88 | x_seconds:
89 | one: 1 segon
90 | other: ! '%{count} segons'
91 | prompts:
92 | day: dia
93 | hour: hora
94 | minute: minut
95 | month: mes
96 | second: segon
97 | year: any
98 | errors:
99 | format: ! '%{attribute} %{message}'
100 | messages:
101 | accepted: ha de ser acceptat
102 | blank: no pot estar en blanc
103 | confirmation: no coincideix
104 | empty: no pot estar buit
105 | equal_to: ha de ser igual a %{count}
106 | even: ha de ser parell
107 | exclusion: està reservat
108 | greater_than: ha de ser més gran que %{count}
109 | greater_than_or_equal_to: ha de ser més gran o igual a %{count}
110 | inclusion: no està inclós a la llista
111 | invalid: no és vàlid
112 | less_than: ha de ser menor que %{count}
113 | less_than_or_equal_to: ha de ser menor o igual a %{count}
114 | not_a_number: no és un número
115 | not_an_integer: ha de ser un enter
116 | odd: ha de ser senar
117 | record_invalid: ! 'La validació ha fallat: %{errors}'
118 | taken: no està disponible
119 | too_long: és massa llarg (%{count} caràcters màxim)
120 | too_short: és massa curt (%{count} caràcters mínim)
121 | wrong_length: no té la longitud correcta (%{count} caràcters exactament)
122 | template:
123 | body: ! 'Hi ha hagut problemes amb els següents camps:'
124 | header:
125 | one: No s'ha pogut desar aquest/a %{model} perquè hi ha 1 error
126 | other: No s'ha pogut desar aquest/a %{model} perquè hi ha hagut %{count} errors
127 | helpers:
128 | select:
129 | prompt: Si us plau tria
130 | submit:
131 | create: Crear %{model}
132 | submit: Guardar %{model}
133 | update: Actualitzar %{model}
134 | number:
135 | currency:
136 | format:
137 | delimiter: .
138 | format: ! '%n %u'
139 | precision: 2
140 | separator: ! ','
141 | significant: false
142 | strip_insignificant_zeros: false
143 | unit: €
144 | format:
145 | delimiter: .
146 | precision: 3
147 | separator: ! ','
148 | significant: false
149 | strip_insignificant_zeros: false
150 | human:
151 | decimal_units:
152 | format: ! '%n %u'
153 | units:
154 | billion: mil milions
155 | million: milió
156 | quadrillion: quadrilió
157 | thousand: mil
158 | trillion: trilió
159 | unit: ''
160 | format:
161 | delimiter: ''
162 | precision: 1
163 | significant: true
164 | strip_insignificant_zeros: true
165 | storage_units:
166 | format: ! '%n %u'
167 | units:
168 | byte:
169 | one: Byte
170 | other: Bytes
171 | gb: GB
172 | kb: KB
173 | mb: MB
174 | tb: TB
175 | percentage:
176 | format:
177 | delimiter: ''
178 | precision:
179 | format:
180 | delimiter: ''
181 | support:
182 | array:
183 | last_word_connector: ! ', i '
184 | two_words_connector: ! ' i '
185 | words_connector: ! ', '
186 | time:
187 | am: am
188 | formats:
189 | default: ! '%A, %d de %B de %Y %H:%M:%S %z'
190 | long: ! '%d de %B de %Y %H:%M'
191 | short: ! '%d de %b %H:%M'
192 | pm: pm
193 |
--------------------------------------------------------------------------------
/locales/rails-i18n/eo.yml:
--------------------------------------------------------------------------------
1 | eo:
2 | date:
3 | abbr_day_names:
4 | - dim
5 | - lun
6 | - mar
7 | - mer
8 | - ĵaŭ
9 | - ven
10 | - sam
11 | abbr_month_names:
12 | -
13 | - jan.
14 | - feb.
15 | - mar.
16 | - apr.
17 | - majo
18 | - jun.
19 | - jul.
20 | - aŭg.
21 | - sep.
22 | - okt.
23 | - nov.
24 | - dec.
25 | day_names:
26 | - dimanĉo
27 | - lundo
28 | - mardo
29 | - merkredo
30 | - ĵaŭdo
31 | - vendredo
32 | - sabato
33 | formats:
34 | default: ! '%Y/%m/%d'
35 | long: ! '%e %B %Y'
36 | short: ! '%e %b'
37 | month_names:
38 | -
39 | - januaro
40 | - februaro
41 | - marto
42 | - aprilo
43 | - majo
44 | - junio
45 | - julio
46 | - aŭgusto
47 | - septembro
48 | - oktobro
49 | - novembro
50 | - decembro
51 | order:
52 | - :day
53 | - :month
54 | - :year
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: ĉirkaŭ unu horo
59 | other: ĉirkaŭ %{count} horoj
60 | about_x_months:
61 | one: ĉirkaŭ unu monato
62 | other: ĉirkaŭ %{count} monatoj
63 | about_x_years:
64 | one: ĉirkaŭ uno jaro
65 | other: ĉirkaŭ %{count} jaroj
66 | almost_x_years:
67 | one: preskaŭ unu jaro
68 | other: preskaŭ %{count} jaroj
69 | half_a_minute: duona minuto
70 | less_than_x_minutes:
71 | one: malpli ol unu minuto
72 | other: malpli ol %{count} minutoj
73 | zero: malpli ol unu minuto
74 | less_than_x_seconds:
75 | one: malpli ol unu sekundo
76 | other: malpli ol %{count} sekundoj
77 | zero: malpli ol unu sekundo
78 | over_x_years:
79 | one: pli ol unu jaro
80 | other: pli ol %{count} jaroj
81 | x_days:
82 | one: 1 tago
83 | other: ! '%{count} tagoj'
84 | x_minutes:
85 | one: 1 minuto
86 | other: ! '%{count} minutoj'
87 | x_months:
88 | one: 1 monato
89 | other: ! '%{count} monatoj'
90 | x_seconds:
91 | one: 1 sekundo
92 | other: ! '%{count} sekundoj'
93 | prompts:
94 | day: Tago
95 | hour: Horo
96 | minute: Minuto
97 | month: Monato
98 | second: Sekundo
99 | year: Jaro
100 | errors:
101 | format: ! '%{attribute} %{message}'
102 | messages:
103 | accepted: devas esti akceptita
104 | blank: devas esti kompletigita
105 | confirmation: ne kongruas kun la konfirmo
106 | empty: devas esti kompletigita
107 | equal_to: devas egali %{count}
108 | even: devas esti para
109 | exclusion: ne estas disponebla
110 | greater_than: devas superi %{count}
111 | greater_than_or_equal_to: devas superi aŭ egali %{count}
112 | inclusion: ne estas inkluzivita de la listo
113 | invalid: estas nevalida
114 | less_than: devas malsuperi %{count}
115 | less_than_or_equal_to: devas malsuperi aŭ egali %{count}
116 | not_a_number: ne estas nombro
117 | not_an_integer: devas esti entjero
118 | odd: devas esti nepara
119 | record_invalid: ! 'Validado malsukcesis: %{errors}'
120 | taken: ne estas disponebla
121 | too_long: estas tro longa (maksimume %{count} karekteroj)
122 | too_short: estas tro mallonga (minimume %{count} karakteroj)
123 | wrong_length: ne estas je ĝusta longo (devas enhavi %{count} karakterojn)
124 | template:
125 | body: ! 'Kontrolu la jenajn kampojn: '
126 | header:
127 | one: ! 'Ne eblas registri tiun %{model}: 1 eraro'
128 | other: ! 'Ne eblas registri tiun %{model}: %{count} eraroj'
129 | helpers:
130 | select:
131 | prompt: Bonvolu elekti
132 | submit:
133 | create: Krei %{model}
134 | submit: Registri tiun %{model}
135 | update: Modifi tiun %{model}
136 | number:
137 | currency:
138 | format:
139 | delimiter: ! ' '
140 | format: ! '%n %u'
141 | precision: 2
142 | separator: ! ','
143 | significant: false
144 | strip_insignificant_zeros: false
145 | unit: €
146 | format:
147 | delimiter: ! ' '
148 | precision: 3
149 | separator: ! ','
150 | significant: false
151 | strip_insignificant_zeros: false
152 | human:
153 | decimal_units:
154 | format: ! '%n %u'
155 | units:
156 | billion: miliardo
157 | million: miliono
158 | quadrillion: miliono da miliardoj
159 | thousand: mil
160 | trillion: mil miliardoj
161 | unit: ''
162 | format:
163 | delimiter: ''
164 | precision: 2
165 | significant: true
166 | strip_insignificant_zeros: true
167 | storage_units:
168 | format: ! '%n %u'
169 | units:
170 | byte:
171 | one: bitoko
172 | other: bitokoj
173 | gb: Gb
174 | kb: kb
175 | mb: Mb
176 | tb: Tb
177 | percentage:
178 | format:
179 | delimiter: ''
180 | precision:
181 | format:
182 | delimiter: ''
183 | support:
184 | array:
185 | last_word_connector: ! ' kaj '
186 | two_words_connector: ! ' kaj '
187 | words_connector: ! ', '
188 | time:
189 | am: am
190 | formats:
191 | default: ! '%d %B %Y %H:%M:%S'
192 | long: ! '%A %d %B %Y %H:%M'
193 | short: ! '%d %b %H:%M'
194 | pm: pm
195 |
--------------------------------------------------------------------------------
/locales/rails-i18n/es-CL.yml:
--------------------------------------------------------------------------------
1 | es-CL:
2 | date:
3 | abbr_day_names:
4 | - dom
5 | - lun
6 | - mar
7 | - mié
8 | - jue
9 | - vie
10 | - sáb
11 | abbr_month_names:
12 | -
13 | - ene
14 | - feb
15 | - mar
16 | - abr
17 | - may
18 | - jun
19 | - jul
20 | - ago
21 | - sep
22 | - oct
23 | - nov
24 | - dic
25 | day_names:
26 | - domingo
27 | - lunes
28 | - martes
29 | - miércoles
30 | - jueves
31 | - viernes
32 | - sábado
33 | formats:
34 | default: ! '%d/%m/%Y'
35 | long: ! '%A %d de %B de %Y'
36 | short: ! '%d de %b'
37 | month_names:
38 | -
39 | - enero
40 | - febrero
41 | - marzo
42 | - abril
43 | - mayo
44 | - junio
45 | - julio
46 | - agosto
47 | - septiembre
48 | - octubre
49 | - noviembre
50 | - diciembre
51 | order:
52 | - :day
53 | - :month
54 | - :year
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: alrededor de 1 hora
59 | other: alrededor de %{count} horas
60 | about_x_months:
61 | one: alrededor de 1 mes
62 | other: alrededor de %{count} meses
63 | about_x_years:
64 | one: alrededor de 1 año
65 | other: alrededor de %{count} años
66 | almost_x_years:
67 | one: casi 1 año
68 | other: casi %{count} años
69 | half_a_minute: medio minuto
70 | less_than_x_minutes:
71 | one: menos de 1 minuto
72 | other: menos de %{count} minutos
73 | less_than_x_seconds:
74 | one: menos de 1 segundo
75 | other: menos de %{count} segundos
76 | over_x_years:
77 | one: más de 1 año
78 | other: más de %{count} años
79 | x_days:
80 | one: 1 día
81 | other: ! '%{count} días'
82 | x_minutes:
83 | one: 1 minuto
84 | other: ! '%{count} minutos'
85 | x_months:
86 | one: 1 mes
87 | other: ! '%{count} meses'
88 | x_seconds:
89 | one: 1 segundo
90 | other: ! '%{count} segundos'
91 | prompts:
92 | day: Día
93 | hour: Hora
94 | minute: Minutos
95 | month: Mes
96 | second: Segundos
97 | year: Año
98 | errors:
99 | format: ! '%{attribute} %{message}'
100 | messages:
101 | accepted: debe ser aceptado
102 | blank: no puede estar en blanco
103 | confirmation: no coincide
104 | empty: no puede estar vacío
105 | equal_to: debe ser igual a %{count}
106 | even: debe ser par
107 | exclusion: está reservado
108 | greater_than: debe ser mayor que %{count}
109 | greater_than_or_equal_to: debe ser mayor que o igual a %{count}
110 | inclusion: no está incluido en la lista
111 | invalid: no es válido
112 | less_than: debe ser menor que %{count}
113 | less_than_or_equal_to: debe ser menor que o igual a %{count}
114 | not_a_number: no es un número
115 | not_an_integer: debe ser un entero
116 | odd: debe ser impar
117 | record_invalid: ! 'La validación falló: %{errors}'
118 | taken: ya está en uso
119 | too_long: es demasiado largo (%{count} caracteres máximo)
120 | too_short: es demasiado corto (%{count} caracteres mínimo)
121 | wrong_length: no tiene la longitud correcta (%{count} caracteres exactos)
122 | template:
123 | body: ! 'Se encontraron problemas con los siguientes campos:'
124 | header:
125 | one: No se pudo guardar este/a %{model} porque se encontró 1 error
126 | other: No se pudo guardar este/a %{model} porque se encontraron %{count} errores
127 | helpers:
128 | select:
129 | prompt: Por favor seleccione
130 | submit:
131 | create: Crear %{model}
132 | submit: Guardar %{model}
133 | update: Actualizar %{model}
134 | number:
135 | currency:
136 | format:
137 | delimiter: .
138 | format: ! '%u %n'
139 | precision: 0
140 | separator: ! ','
141 | significant: false
142 | strip_insignificant_zeros: false
143 | unit: $
144 | format:
145 | delimiter: .
146 | precision: 3
147 | separator: ! ','
148 | significant: false
149 | strip_insignificant_zeros: false
150 | human:
151 | decimal_units:
152 | format: ! '%n %u'
153 | units:
154 | billion: mil millones
155 | million: millón
156 | quadrillion: mil billones
157 | thousand: mil
158 | trillion: billón
159 | unit: ''
160 | format:
161 | delimiter: ''
162 | precision: 1
163 | significant: true
164 | strip_insignificant_zeros: true
165 | storage_units:
166 | format: ! '%n %u'
167 | units:
168 | byte:
169 | one: Byte
170 | other: Bytes
171 | gb: GB
172 | kb: KB
173 | mb: MB
174 | tb: TB
175 | percentage:
176 | format:
177 | delimiter: ''
178 | precision:
179 | format:
180 | delimiter: ''
181 | support:
182 | array:
183 | last_word_connector: ! ', y '
184 | two_words_connector: ! ' y '
185 | words_connector: ! ', '
186 | time:
187 | am: am
188 | formats:
189 | default: ! '%A, %d de %B de %Y %H:%M:%S %z'
190 | long: ! '%A %d de %B de %Y %H:%M'
191 | short: ! '%d de %b %H:%M'
192 | pm: pm
193 |
--------------------------------------------------------------------------------
/locales/rails-i18n/es-PE.yml:
--------------------------------------------------------------------------------
1 | es-PE:
2 | date:
3 | abbr_day_names:
4 | - dom
5 | - lun
6 | - mar
7 | - mié
8 | - jue
9 | - vie
10 | - sáb
11 | abbr_month_names:
12 | -
13 | - ene
14 | - feb
15 | - mar
16 | - abr
17 | - may
18 | - jun
19 | - jul
20 | - ago
21 | - sep
22 | - oct
23 | - nov
24 | - dic
25 | day_names:
26 | - domingo
27 | - lunes
28 | - martes
29 | - miércoles
30 | - jueves
31 | - viernes
32 | - sábado
33 | formats:
34 | default: ! '%d/%m/%Y'
35 | long: ! '%A, %d de %B del %Y'
36 | short: ! '%d de %b'
37 | month_names:
38 | -
39 | - enero
40 | - febrero
41 | - marzo
42 | - abril
43 | - mayo
44 | - junio
45 | - julio
46 | - agosto
47 | - septiembre
48 | - octubre
49 | - noviembre
50 | - diciembre
51 | order:
52 | - :day
53 | - :month
54 | - :year
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: cerca de 1 hora
59 | other: cerca de %{count} horas
60 | about_x_months:
61 | one: cerca de 1 mes
62 | other: cerca de %{count} meses
63 | about_x_years:
64 | one: cerca de 1 año
65 | other: cerca de %{count} años
66 | half_a_minute: medio minuto
67 | less_than_x_minutes:
68 | one: menos de 1 minuto
69 | other: menos de %{count} minutos
70 | less_than_x_seconds:
71 | one: menos de 1 segundo
72 | other: menos de %{count} segundos
73 | over_x_years:
74 | one: más de 1 año
75 | other: más de %{count} años
76 | x_days:
77 | one: 1 día
78 | other: ! '%{count} días'
79 | x_minutes:
80 | one: 1 minuto
81 | other: ! '%{count} minutos'
82 | x_months:
83 | one: 1 mes
84 | other: ! '%{count} meses'
85 | x_seconds:
86 | one: 1 segundo
87 | other: ! '%{count} segundos'
88 | prompts:
89 | day: Día
90 | hour: Hora
91 | minute: Minuto
92 | month: Mes
93 | second: Segundos
94 | year: Año
95 | errors:
96 | format: ! '%{attribute} %{message}'
97 | messages:
98 | accepted: debe ser aceptado
99 | blank: no puede estar en blanco
100 | confirmation: no coincide
101 | empty: no puede estar vacío
102 | equal_to: debe ser igual a %{count}
103 | even: debe ser un número par
104 | exclusion: está reservado
105 | greater_than: debe ser mayor que %{count}
106 | greater_than_or_equal_to: debe ser mayor o igual que %{count}
107 | inclusion: no está incluido en la lista
108 | invalid: es inválido
109 | less_than: debe ser menor que %{count}
110 | less_than_or_equal_to: debe ser menor o igual que %{count}
111 | not_a_number: no es un número
112 | odd: debe ser un número non
113 | record_invalid: ! 'Falla de validación: %{errors}'
114 | taken: ya ha sido tomado
115 | too_long:
116 | one: es demasiado largo (máximo 1 caracter)
117 | other: es demasiado largo (máximo %{count} caracteres)
118 | too_short:
119 | one: es demasiado corto (mínimo 1 caracter)
120 | other: es demasiado corto (mínimo %{count} caracteres)
121 | wrong_length:
122 | one: longitud errónea (debe ser de 1 caracter)
123 | other: longitud errónea (debe ser de %{count} caracteres)
124 | template:
125 | body: ! 'Revise que los siguientes campos sean válidos:'
126 | header:
127 | one: ! '%{model} no pudo guardarse debido a 1 error'
128 | other: ! '%{model} no pudo guardarse debido a %{count} errores'
129 | number:
130 | currency:
131 | format:
132 | delimiter: ! ','
133 | format: ! '%u%n'
134 | precision: 2
135 | separator: .
136 | significant: false
137 | strip_insignificant_zeros: false
138 | unit: S./
139 | format:
140 | delimiter: ! ','
141 | precision: 2
142 | separator: .
143 | significant: false
144 | strip_insignificant_zeros: false
145 | human:
146 | decimal_units:
147 | format: ! '%n %u'
148 | units:
149 | unit: ''
150 | format:
151 | delimiter: ! ','
152 | precision: 2
153 | significant: true
154 | strip_insignificant_zeros: true
155 | storage_units:
156 | format: ! '%n %u'
157 | units:
158 | byte:
159 | one: Byte
160 | other: Bytes
161 | gb: GB
162 | kb: KB
163 | mb: MB
164 | tb: TB
165 | percentage:
166 | format:
167 | delimiter: ! ','
168 | precision:
169 | format:
170 | delimiter: ! ','
171 | time:
172 | am: am
173 | formats:
174 | default: ! '%a, %d de %b del %Y a las %H:%M:%S %Z'
175 | long: ! '%A, %d de %B del %Y a las %I:%M %p'
176 | short: ! '%d de %b a las %H:%M hrs'
177 | pm: pm
178 |
--------------------------------------------------------------------------------
/locales/rails-i18n/es.yml:
--------------------------------------------------------------------------------
1 | es:
2 | date:
3 | abbr_day_names:
4 | - dom
5 | - lun
6 | - mar
7 | - mié
8 | - jue
9 | - vie
10 | - sáb
11 | abbr_month_names:
12 | -
13 | - ene
14 | - feb
15 | - mar
16 | - abr
17 | - may
18 | - jun
19 | - jul
20 | - ago
21 | - sep
22 | - oct
23 | - nov
24 | - dic
25 | day_names:
26 | - domingo
27 | - lunes
28 | - martes
29 | - miércoles
30 | - jueves
31 | - viernes
32 | - sábado
33 | formats:
34 | default: ! '%d/%m/%Y'
35 | long: ! '%d de %B de %Y'
36 | short: ! '%d de %b'
37 | month_names:
38 | -
39 | - enero
40 | - febrero
41 | - marzo
42 | - abril
43 | - mayo
44 | - junio
45 | - julio
46 | - agosto
47 | - septiembre
48 | - octubre
49 | - noviembre
50 | - diciembre
51 | order:
52 | - :day
53 | - :month
54 | - :year
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: alrededor de 1 hora
59 | other: alrededor de %{count} horas
60 | about_x_months:
61 | one: alrededor de 1 mes
62 | other: alrededor de %{count} meses
63 | about_x_years:
64 | one: alrededor de 1 año
65 | other: alrededor de %{count} años
66 | almost_x_years:
67 | one: casi 1 año
68 | other: casi %{count} años
69 | half_a_minute: medio minuto
70 | less_than_x_minutes:
71 | one: menos de 1 minuto
72 | other: menos de %{count} minutos
73 | less_than_x_seconds:
74 | one: menos de 1 segundo
75 | other: menos de %{count} segundos
76 | over_x_years:
77 | one: más de 1 año
78 | other: más de %{count} años
79 | x_days:
80 | one: 1 día
81 | other: ! '%{count} días'
82 | x_minutes:
83 | one: 1 minuto
84 | other: ! '%{count} minutos'
85 | x_months:
86 | one: 1 mes
87 | other: ! '%{count} meses'
88 | x_seconds:
89 | one: 1 segundo
90 | other: ! '%{count} segundos'
91 | prompts:
92 | day: Día
93 | hour: Hora
94 | minute: Minutos
95 | month: Mes
96 | second: Segundos
97 | year: Año
98 | errors:
99 | format: ! '%{attribute} %{message}'
100 | messages:
101 | accepted: debe ser aceptado
102 | blank: no puede estar en blanco
103 | confirmation: no coincide
104 | empty: no puede estar vacío
105 | equal_to: debe ser igual a %{count}
106 | even: debe ser par
107 | exclusion: está reservado
108 | greater_than: debe ser mayor que %{count}
109 | greater_than_or_equal_to: debe ser mayor que o igual a %{count}
110 | inclusion: no está incluido en la lista
111 | invalid: no es válido
112 | less_than: debe ser menor que %{count}
113 | less_than_or_equal_to: debe ser menor que o igual a %{count}
114 | not_a_number: no es un número
115 | not_an_integer: debe ser un entero
116 | odd: debe ser impar
117 | record_invalid: ! 'La validación falló: %{errors}'
118 | taken: ya está en uso
119 | too_long: es demasiado largo (%{count} caracteres máximo)
120 | too_short: es demasiado corto (%{count} caracteres mínimo)
121 | wrong_length: no tiene la longitud correcta (%{count} caracteres exactos)
122 | template:
123 | body: ! 'Se encontraron problemas con los siguientes campos:'
124 | header:
125 | one: No se pudo guardar este/a %{model} porque se encontró 1 error
126 | other: No se pudo guardar este/a %{model} porque se encontraron %{count} errores
127 | helpers:
128 | select:
129 | prompt: Por favor seleccione
130 | submit:
131 | create: Crear %{model}
132 | submit: Guardar %{model}
133 | update: Actualizar %{model}
134 | number:
135 | currency:
136 | format:
137 | delimiter: .
138 | format: ! '%n %u'
139 | precision: 2
140 | separator: ! ','
141 | significant: false
142 | strip_insignificant_zeros: false
143 | unit: €
144 | format:
145 | delimiter: .
146 | precision: 3
147 | separator: ! ','
148 | significant: false
149 | strip_insignificant_zeros: false
150 | human:
151 | decimal_units:
152 | format: ! '%n %u'
153 | units:
154 | billion: mil millones
155 | million: millón
156 | quadrillion: mil billones
157 | thousand: mil
158 | trillion: billón
159 | unit: ''
160 | format:
161 | delimiter: ''
162 | precision: 1
163 | significant: true
164 | strip_insignificant_zeros: true
165 | storage_units:
166 | format: ! '%n %u'
167 | units:
168 | byte:
169 | one: Byte
170 | other: Bytes
171 | gb: GB
172 | kb: KB
173 | mb: MB
174 | tb: TB
175 | percentage:
176 | format:
177 | delimiter: ''
178 | precision:
179 | format:
180 | delimiter: ''
181 | support:
182 | array:
183 | last_word_connector: ! ', y '
184 | two_words_connector: ! ' y '
185 | words_connector: ! ', '
186 | time:
187 | am: am
188 | formats:
189 | default: ! '%A, %d de %B de %Y %H:%M:%S %z'
190 | long: ! '%d de %B de %Y %H:%M'
191 | short: ! '%d de %b %H:%M'
192 | pm: pm
193 |
--------------------------------------------------------------------------------
/locales/rails-i18n/et.yml:
--------------------------------------------------------------------------------
1 | et:
2 | date:
3 | abbr_day_names:
4 | - P
5 | - E
6 | - T
7 | - K
8 | - N
9 | - R
10 | - L
11 | abbr_month_names:
12 | -
13 | - jaan.
14 | - veebr.
15 | - märts
16 | - apr.
17 | - mai
18 | - juuni
19 | - juuli
20 | - aug.
21 | - sept.
22 | - okt.
23 | - nov.
24 | - dets.
25 | day_names:
26 | - pühapäev
27 | - esmaspäev
28 | - teisipäev
29 | - kolmapäev
30 | - neljapäev
31 | - reede
32 | - laupäev
33 | formats:
34 | default: ! '%d.%m.%Y'
35 | long: ! '%d. %B %Y'
36 | short: ! '%d.%m.%y'
37 | month_names:
38 | -
39 | - jaanuar
40 | - veebruar
41 | - märts
42 | - aprill
43 | - mai
44 | - juuni
45 | - juuli
46 | - august
47 | - september
48 | - oktoober
49 | - november
50 | - detsember
51 | order:
52 | - :day
53 | - :month
54 | - :year
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: umbes %{count} tund
59 | other: umbes %{count} tundi
60 | about_x_months:
61 | one: umbes %{count} kuu
62 | other: umbes %{count} kuud
63 | about_x_years:
64 | one: umbes %{count} aasta
65 | other: umbes %{count} aastat
66 | almost_x_years:
67 | one: peaaegu üks aasta
68 | other: peaaegu %{count} aastat
69 | half_a_minute: pool minutit
70 | less_than_x_minutes:
71 | one: vähem kui %{count} minut
72 | other: vähem kui %{count} minutit
73 | less_than_x_seconds:
74 | one: vähem kui %{count} sekund
75 | other: vähem kui %{count} sekundit
76 | over_x_years:
77 | one: üle %{count} aasta
78 | other: üle %{count} aasta
79 | x_days:
80 | one: ! '%{count} päev'
81 | other: ! '%{count} päeva'
82 | x_minutes:
83 | one: ! '%{count} minut'
84 | other: ! '%{count} minutit'
85 | x_months:
86 | one: ! '%{count} kuu'
87 | other: ! '%{count} kuud'
88 | x_seconds:
89 | one: ! '%{count} sekund'
90 | other: ! '%{count} sekundit'
91 | prompts:
92 | day: Päev
93 | hour: Tunde
94 | minute: Minutit
95 | month: Kuu
96 | second: Sekundit
97 | year: Aasta
98 | errors:
99 | format: ! '%{attribute} %{message}'
100 | messages:
101 | accepted: peab olema heaks kiidetud
102 | blank: on täitmata
103 | confirmation: ei vasta kinnitusele
104 | empty: on tühi
105 | equal_to: peab olema võrdne arvuga %{count}
106 | even: peab olema paarisarv
107 | exclusion: on reserveeritud
108 | greater_than: ei tohi olla suurem kui %{count}
109 | greater_than_or_equal_to: peab olema suurem või võrdne arvuga %{count}
110 | inclusion: ei leidu nimekirjas
111 | invalid: ei ole korrektne
112 | less_than: peab olema vähem kui %{count}
113 | less_than_or_equal_to: peab olema vähem või võrdne arvuga %{count}
114 | not_a_number: ei ole number
115 | not_an_integer: peab olema täisarv
116 | odd: peab olema paaritu arv
117 | record_invalid: ! 'Valideerimine ebaõnnestus: %{errors}'
118 | taken: on juba võetud
119 | too_long: on liiga pikk (maksimum on %{count} tähemärki)
120 | too_short: on liiga lühike (miinimum on %{count} tähemärki)
121 | wrong_length: on vale pikkusega (peab olema %{count} tähemärki)
122 | template:
123 | body: ! 'Probleeme ilmnes järgmiste väljadega:'
124 | header:
125 | one: Üks viga takistas objekti %{model} salvestamist
126 | other: ! '%{count} viga takistasid objekti %{model} salvestamist'
127 | helpers:
128 | select:
129 | prompt: Palun vali
130 | submit:
131 | create: Loo uus %{model}
132 | submit: Salvesta %{model}
133 | update: Uuenda objekti %{model}
134 | number:
135 | currency:
136 | format:
137 | delimiter: ! ' '
138 | format: ! '%n %u'
139 | precision: 2
140 | separator: ! ','
141 | significant: false
142 | strip_insignificant_zeros: false
143 | unit: €
144 | format:
145 | delimiter: ! ' '
146 | precision: 2
147 | separator: ! ','
148 | significant: false
149 | strip_insignificant_zeros: false
150 | human:
151 | decimal_units:
152 | format: ! '%n %u'
153 | units:
154 | billion: miljard
155 | million: miljon
156 | quadrillion: kvadriljon
157 | thousand: tuhat
158 | trillion: triljon
159 | unit: ''
160 | format:
161 | delimiter: ''
162 | precision: 1
163 | significant: true
164 | strip_insignificant_zeros: true
165 | storage_units:
166 | format: ! '%n %u'
167 | units:
168 | byte:
169 | one: bait
170 | other: baiti
171 | gb: GB
172 | kb: KB
173 | mb: MB
174 | tb: TB
175 | percentage:
176 | format:
177 | delimiter: ''
178 | precision:
179 | format:
180 | delimiter: ''
181 | support:
182 | array:
183 | last_word_connector: ! ' ja '
184 | two_words_connector: ! ' ja '
185 | words_connector: ! ', '
186 | time:
187 | am: enne lõunat
188 | formats:
189 | default: ! '%d. %B %Y, %H:%M'
190 | long: ! '%a, %d. %b %Y, %H:%M:%S %z'
191 | short: ! '%d.%m.%y, %H:%M'
192 | pm: pärast lõunat
193 |
--------------------------------------------------------------------------------
/locales/rails-i18n/fa.yml:
--------------------------------------------------------------------------------
1 | fa:
2 | date:
3 | abbr_day_names:
4 | - ی
5 | - د
6 | - س
7 | - چ
8 | - پ
9 | - ج
10 | - ش
11 | abbr_month_names:
12 | -
13 | - ژانویه
14 | - فوریه
15 | - مارس
16 | - آوریل
17 | - مه
18 | - ژوئن
19 | - ژوئیه
20 | - اوت
21 | - سپتامبر
22 | - اکتبر
23 | - نوامبر
24 | - دسامبر
25 | day_names:
26 | - یکشنبه
27 | - دوشنبه
28 | - سهشنبه
29 | - چهارشنبه
30 | - پنجشنبه
31 | - جمعه
32 | - شنبه
33 | formats:
34 | default: ! '%Y/%m/%d'
35 | long: ! '%e %B %Y'
36 | short: ! '%m/%d'
37 | month_names:
38 | -
39 | - ژانویه
40 | - فوریه
41 | - مارس
42 | - آوریل
43 | - مه
44 | - ژوئن
45 | - ژوئیه
46 | - اوت
47 | - سپتامبر
48 | - اکتبر
49 | - نوامبر
50 | - دسامبر
51 | order:
52 | - :day
53 | - :month
54 | - :year
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: حدود یک ساعت
59 | other: حدود %{count} ساعت
60 | about_x_months:
61 | one: حدود یک ماه
62 | other: حدود %{count} ماه
63 | about_x_years:
64 | one: حدود یک سال
65 | other: حدود %{count} سال
66 | almost_x_years:
67 | one: حدود یک سال
68 | other: حدود %{count} سال
69 | half_a_minute: نیم دقیقه
70 | less_than_x_minutes:
71 | one: کمتر از یک دقیقه
72 | other: کمتر از %{count} دقیقه
73 | less_than_x_seconds:
74 | one: یک ثانیه
75 | other: کمتر از %{count} ثانیه
76 | over_x_years:
77 | one: بیش از یک سال
78 | other: بیش از %{count} سال
79 | x_days:
80 | one: یک روز
81 | other: ! '%{count} روز'
82 | x_minutes:
83 | one: یک دقیقه
84 | other: ! '%{count} دقیقه'
85 | x_months:
86 | one: یک ماه
87 | other: ! '%{count} ماه'
88 | x_seconds:
89 | one: یک ثانیه
90 | other: ! '%{count} ثانیه'
91 | prompts:
92 | day: روز
93 | hour: ساعت
94 | minute: دقیقه
95 | month: ماه
96 | second: ثانیه
97 | year: سال
98 | errors:
99 | format: ! '%{attribute} %{message}'
100 | messages:
101 | accepted: باید پذیرفته شود
102 | blank: نباید خالی باشد
103 | confirmation: با تایید نمیخواند
104 | empty: نمیتواند خالی باشد
105 | equal_to: باید برابر %{count} باشد
106 | even: باید زوج باشد
107 | exclusion: رزرو است
108 | greater_than: باید بزرگتر از %{count} باشد
109 | greater_than_or_equal_to: باید بزرگتر یا برابر %{count} باشد
110 | inclusion: در لیست موجود نیست
111 | invalid: نامعتبر است
112 | less_than: باید کمتر از %{count} باشد
113 | less_than_or_equal_to: باید کمتر یا برابر %{count} باشد
114 | not_a_number: عدد نیست
115 | not_an_integer: عدد صحیح نیست
116 | odd: باید فرد باشد
117 | record_invalid: رکورد نامعتبر است %{errors}
118 | taken: پیشتر گرفته شده
119 | too_long: بلند است (حداکثر %{count} کاراکتر)
120 | too_short: کوتاه است (حداقل %{count} کاراکتر)
121 | wrong_length: نااندازه است (باید %{count} کاراکتر باشد)
122 | template:
123 | body: ! 'موارد زیر مشکل داشت:'
124 | header:
125 | one: 1 خطا جلوی ذخیره این %{model} را گرفت
126 | other: ! '%{count} خطا جلوی ذخیره این %{model} را گرفت'
127 | helpers:
128 | select:
129 | prompt: لطفا انتخاب کنید
130 | submit:
131 | create: ! 'ایجاد %{model}'
132 | submit: ! 'ذخیرهی %{model}'
133 | update: ! 'بروز رسانی %{model}'
134 | number:
135 | currency:
136 | format:
137 | delimiter: ٬
138 | format: ! '%n %u'
139 | precision: 0
140 | separator: ٫
141 | significant: false
142 | strip_insignificant_zeros: false
143 | unit: ﷼
144 | format:
145 | delimiter: ٬
146 | precision: 2
147 | separator: ٫
148 | significant: false
149 | strip_insignificant_zeros: false
150 | human:
151 | decimal_units:
152 | format: ! '%n %u'
153 | units:
154 | billion: میلیارد
155 | million: میلیون
156 | quadrillion: کادریلیون
157 | thousand: هزار
158 | trillion: تریلیون
159 | unit: ''
160 | format:
161 | delimiter: ''
162 | precision: 1
163 | significant: true
164 | strip_insignificant_zeros: true
165 | storage_units:
166 | format: ! '%n %u'
167 | units:
168 | byte:
169 | one: بایت
170 | other: بایت
171 | gb: گیگابایت
172 | kb: کیلوبایت
173 | mb: مگابایت
174 | tb: ترابایت
175 | percentage:
176 | format:
177 | delimiter: ''
178 | precision:
179 | format:
180 | delimiter: ''
181 | support:
182 | array:
183 | last_word_connector: ! ' و '
184 | two_words_connector: ! ' و '
185 | words_connector: ! '، '
186 | time:
187 | am: قبل از ظهر
188 | formats:
189 | default: ! '%A، %e %B %Y، ساعت %H:%M:%S (%Z)'
190 | long: ! '%e %B %Y، ساعت %H:%M'
191 | short: ! '%e %B، ساعت %H:%M'
192 | pm: بعد از ظهر
193 |
--------------------------------------------------------------------------------
/locales/rails-i18n/fi.yml:
--------------------------------------------------------------------------------
1 | fi:
2 | date:
3 | abbr_day_names:
4 | - su
5 | - ma
6 | - ti
7 | - ke
8 | - to
9 | - pe
10 | - la
11 | abbr_month_names:
12 | -
13 | - tammi
14 | - helmi
15 | - maalis
16 | - huhti
17 | - touko
18 | - kesä
19 | - heinä
20 | - elo
21 | - syys
22 | - loka
23 | - marras
24 | - joulu
25 | day_names:
26 | - sunnuntai
27 | - maanantai
28 | - tiistai
29 | - keskiviikko
30 | - torstai
31 | - perjantai
32 | - lauantai
33 | formats:
34 | default: ! '%-d.%-m.%Y'
35 | long: ! '%A %e. %Bta %Y'
36 | short: ! '%d. %b'
37 | month_names:
38 | -
39 | - tammikuu
40 | - helmikuu
41 | - maaliskuu
42 | - huhtikuu
43 | - toukokuu
44 | - kesäkuu
45 | - heinäkuu
46 | - elokuu
47 | - syyskuu
48 | - lokakuu
49 | - marraskuu
50 | - joulukuu
51 | order:
52 | - :day
53 | - :month
54 | - :year
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: noin tunti
59 | other: noin %{count} tuntia
60 | about_x_months:
61 | one: noin kuukausi
62 | other: noin %{count} kuukautta
63 | about_x_years:
64 | one: vuosi
65 | other: noin %{count} vuotta
66 | almost_x_years:
67 | one: melkein yksi vuosi
68 | other: melkein %{count} vuotta
69 | half_a_minute: puoli minuuttia
70 | less_than_x_minutes:
71 | one: alle minuutti
72 | other: alle %{count} minuuttia
73 | less_than_x_seconds:
74 | one: alle sekunti
75 | other: alle %{count} sekuntia
76 | over_x_years:
77 | one: yli vuosi
78 | other: yli %{count} vuotta
79 | x_days:
80 | one: päivä
81 | other: ! '%{count} päivää'
82 | x_minutes:
83 | one: minuutti
84 | other: ! '%{count} minuuttia'
85 | x_months:
86 | one: kuukausi
87 | other: ! '%{count} kuukautta'
88 | x_seconds:
89 | one: sekunti
90 | other: ! '%{count} sekuntia'
91 | prompts:
92 | day: päivä
93 | hour: tunti
94 | minute: minuutti
95 | month: kuukausi
96 | second: sekunti
97 | year: vuosi
98 | errors:
99 | format: ! '%{attribute} %{message}'
100 | messages:
101 | accepted: täytyy olla hyväksytty
102 | blank: ei voi olla sisällötön
103 | confirmation: ei vastaa varmennusta
104 | empty: ei voi olla tyhjä
105 | equal_to: täytyy olla yhtä suuri kuin %{count}
106 | even: täytyy olla parillinen
107 | exclusion: on varattu
108 | greater_than: täytyy olla suurempi kuin %{count}
109 | greater_than_or_equal_to: täytyy olla suurempi tai yhtä suuri kuin %{count}
110 | inclusion: ei löydy listasta
111 | invalid: on kelvoton
112 | less_than: täytyy olla pienempi kuin %{count}
113 | less_than_or_equal_to: täytyy olla pienempi tai yhtä suuri kuin %{count}
114 | not_a_number: ei ole luku
115 | not_an_integer: ei ole kokonaisluku
116 | odd: täytyy olla pariton
117 | record_invalid: ! 'Validointi epäonnistui: %{errors}'
118 | taken: on jo käytössä
119 | too_long: on liian pitkä (saa olla enintään %{count} merkkiä)
120 | too_short: on liian lyhyt (oltava vähintään %{count} merkkiä)
121 | wrong_length: on väärän pituinen (täytyy olla täsmälleen %{count} merkkiä)
122 | template:
123 | body: ! 'Seuraavat kentät aiheuttivat ongelmia:'
124 | header:
125 | one: Virhe syötteessä esti mallin %{model} tallentamisen
126 | other: ! '%{count} virhettä esti mallin %{model} tallentamisen'
127 | helpers:
128 | select:
129 | prompt: Valitse
130 | submit:
131 | create: Luo %{model}
132 | submit: Tallenna %{model}
133 | update: Päivitä %{model}
134 | number:
135 | currency:
136 | format:
137 | delimiter: .
138 | format: ! '%n %u'
139 | precision: 2
140 | separator: ! ','
141 | significant: false
142 | strip_insignificant_zeros: false
143 | unit: €
144 | format:
145 | delimiter: .
146 | precision: 3
147 | separator: ! ','
148 | significant: false
149 | strip_insignificant_zeros: false
150 | human:
151 | decimal_units:
152 | format: ! '%n %u'
153 | units:
154 | thousand: tuhatta
155 | million: miljoonaa
156 | billion: miljardia
157 | trillion: biljoonaa
158 | quadrillion: tuhatta biljoonaa
159 | unit: ''
160 | format:
161 | delimiter: ''
162 | precision: 3
163 | significant: true
164 | strip_insignificant_zeros: true
165 | storage_units:
166 | format: ! '%n %u'
167 | units:
168 | byte:
169 | one: tavu
170 | other: tavua
171 | gb: GB
172 | kb: kB
173 | mb: MB
174 | tb: TB
175 | percentage:
176 | format:
177 | delimiter: ''
178 | precision:
179 | format:
180 | delimiter: ''
181 | support:
182 | array:
183 | last_word_connector: ! ' ja '
184 | two_words_connector: ! ' ja '
185 | words_connector: ! ', '
186 | time:
187 | am: aamupäivä
188 | formats:
189 | default: ! '%A %e. %Bta %Y %H:%M:%S %z'
190 | long: ! '%e. %Bta %Y %H.%M'
191 | short: ! '%e.%m. %H.%M'
192 | pm: iltapäivä
193 |
--------------------------------------------------------------------------------
/locales/rails-i18n/gl.yml:
--------------------------------------------------------------------------------
1 | gl:
2 | date:
3 | abbr_day_names:
4 | - Dom
5 | - Lun
6 | - Mar
7 | - Mer
8 | - Xov
9 | - Ven
10 | - Sab
11 | abbr_month_names:
12 | -
13 | - Xan
14 | - Feb
15 | - Mar
16 | - Abr
17 | - Mai
18 | - Xuñ
19 | - Xul
20 | - Ago
21 | - Set
22 | - Out
23 | - Nov
24 | - Dec
25 | day_names:
26 | - Domingo
27 | - Luns
28 | - Martes
29 | - Mércores
30 | - Xoves
31 | - Venres
32 | - Sábado
33 | formats:
34 | default: ! '%e/%m/%Y'
35 | long: ! '%A %e de %B de %Y'
36 | short: ! '%e %b'
37 | month_names:
38 | -
39 | - Xaneiro
40 | - Febreiro
41 | - Marzo
42 | - Abril
43 | - Maio
44 | - Xuño
45 | - Xullo
46 | - Agosto
47 | - Setembro
48 | - Outubro
49 | - Novembro
50 | - Decembro
51 | order:
52 | - :day
53 | - :month
54 | - :year
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: aproximadamente unha hora
59 | other: ! '%{count} horas'
60 | about_x_months:
61 | one: aproximadamente 1 mes
62 | other: ! '%{count} meses'
63 | about_x_years:
64 | one: aproximadamente 1 ano
65 | other: ! '%{count} anos'
66 | half_a_minute: medio minuto
67 | less_than_x_minutes:
68 | one: 1 minuto
69 | other: ! '%{count} minutos'
70 | zero: menos dun minuto
71 | less_than_x_seconds:
72 | few: poucos segundos
73 | one: 1 segundo
74 | other: ! '%{count} segundos'
75 | zero: menos dun segundo
76 | over_x_years:
77 | one: máis dun ano
78 | other: ! '%{count} anos'
79 | x_days:
80 | one: 1 día
81 | other: ! '%{count} días'
82 | x_minutes:
83 | one: 1 minuto
84 | other: ! '%{count} minuto'
85 | x_months:
86 | one: 1 mes
87 | other: ! '%{count} meses'
88 | x_seconds:
89 | one: 1 segundo
90 | other: ! '%{count} segundos'
91 | errors:
92 | format: ! '%{attribute} %{message}'
93 | messages:
94 | accepted: debe ser aceptado
95 | blank: non pode estar en blanco
96 | confirmation: non coincide coa confirmación
97 | empty: non pode estar valeiro
98 | equal_to: debe ser igual a %{count}
99 | even: debe ser impar
100 | exclusion: xa existe
101 | greater_than: debe ser maior que %{count}
102 | greater_than_or_equal_to: debe ser maior ou igual que %{count}
103 | inclusion: non está incluido na lista
104 | invalid: non é válido
105 | less_than: debe ser menor que %{count}
106 | less_than_or_equal_to: debe ser menor ou igual que %{count}
107 | not_a_number: non é un número
108 | odd: debe ser par
109 | taken: non está dispoñible
110 | too_long: é demasiado longo (non máis de %{count} carácteres)
111 | too_short: é demasiado curto (non menos de %{count} carácteres)
112 | wrong_length: non ten a lonxitude correcta (debe ser de %{count} carácteres)
113 | template:
114 | body: ! 'Atopáronse os seguintes problemas:'
115 | header:
116 | one: 1 erro evitou que se poidese gardar o %{model}
117 | other: ! '%{count} erros evitaron que se poidese gardar o %{model}'
118 | number:
119 | currency:
120 | format:
121 | delimiter: .
122 | format: ! '%n %u'
123 | precision: 2
124 | separator: ! ','
125 | significant: false
126 | strip_insignificant_zeros: false
127 | unit: €
128 | format:
129 | delimiter: .
130 | precision: 2
131 | separator: ! ','
132 | significant: false
133 | strip_insignificant_zeros: false
134 | human:
135 | decimal_units:
136 | format: ! '%n %u'
137 | units:
138 | unit: ''
139 | format:
140 | delimiter: ''
141 | precision: 1
142 | significant: true
143 | strip_insignificant_zeros: true
144 | storage_units:
145 | format: ! '%n %u'
146 | units:
147 | byte:
148 | one: Byte
149 | other: Bytes
150 | gb: GB
151 | kb: KB
152 | mb: MB
153 | tb: TB
154 | percentage:
155 | format:
156 | delimiter: ''
157 | precision:
158 | format:
159 | delimiter: ''
160 | support:
161 | array:
162 | last_word_connector: ! ' e '
163 | two_words_connector: ! ' e '
164 | words_connector: ! ', '
165 | time:
166 | am: ''
167 | formats:
168 | default: ! '%A, %e de %B de %Y ás %H:%M'
169 | long: ! '%A %e de %B de %Y ás %H:%M'
170 | short: ! '%e/%m, %H:%M'
171 | pm: ''
172 |
--------------------------------------------------------------------------------
/locales/rails-i18n/he.yml:
--------------------------------------------------------------------------------
1 | he:
2 | date:
3 | abbr_day_names:
4 | - א
5 | - ב
6 | - ג
7 | - ד
8 | - ה
9 | - ו
10 | - ש
11 | abbr_month_names:
12 | -
13 | - ינו
14 | - פבר
15 | - מרץ
16 | - אפר
17 | - מאי
18 | - יונ
19 | - יול
20 | - אוג
21 | - ספט
22 | - אוק
23 | - נוב
24 | - דצמ
25 | day_names:
26 | - ראשון
27 | - שני
28 | - שלישי
29 | - רביעי
30 | - חמישי
31 | - שישי
32 | - שבת
33 | formats:
34 | default: ! '%d-%m-%Y'
35 | long: ! '%e ב%B, %Y'
36 | short: ! '%e %b'
37 | month_names:
38 | -
39 | - ינואר
40 | - פברואר
41 | - מרץ
42 | - אפריל
43 | - מאי
44 | - יוני
45 | - יולי
46 | - אוגוסט
47 | - ספטמבר
48 | - אוקטובר
49 | - נובמבר
50 | - דצמבר
51 | order:
52 | - :day
53 | - :month
54 | - :year
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: בערך שעה אחת
59 | other: בערך %{count} שעות
60 | about_x_months:
61 | one: בערך חודש אחד
62 | other: בערך %{count} חודשים
63 | about_x_years:
64 | one: בערך שנה אחת
65 | other: בערך %{count} שנים
66 | almost_x_years:
67 | one: כמעט שנה
68 | other: כמעט %{count} שנים
69 | half_a_minute: חצי דקה
70 | less_than_x_minutes:
71 | one: פחות מדקה אחת
72 | other: פחות מ- %{count} דקות
73 | zero: פחות מדקה אחת
74 | less_than_x_seconds:
75 | one: פחות משניה אחת
76 | other: פחות מ- %{count} שניות
77 | zero: פחות משניה אחת
78 | over_x_years:
79 | one: מעל שנה אחת
80 | other: מעל %{count} שנים
81 | x_days:
82 | one: יום אחד
83 | other: ! '%{count} ימים'
84 | x_minutes:
85 | one: דקה אחת
86 | other: ! '%{count} דקות'
87 | x_months:
88 | one: חודש אחד
89 | other: ! '%{count} חודשים'
90 | x_seconds:
91 | one: שניה אחת
92 | other: ! '%{count} שניות'
93 | prompts:
94 | day: יום
95 | hour: שעה
96 | minute: דקה
97 | month: חודש
98 | second: שניות
99 | year: שנה
100 | errors:
101 | format: ! '%{attribute} %{message}'
102 | messages:
103 | accepted: חייב באישור
104 | blank: לא יכול להיות ריק
105 | confirmation: לא תואם לאישורו
106 | empty: לא יכול להיות ריק
107 | equal_to: חייב להיות שווה ל- %{count}
108 | even: חייב להיות זוגי
109 | exclusion: לא זמין
110 | greater_than: חייב להיות גדול מ- %{count}
111 | greater_than_or_equal_to: חייב להיות גדול או שווה ל- %{count}
112 | inclusion: לא נכלל ברשימה
113 | invalid: לא תקין
114 | less_than: חייב להיות קטן מ- %{count}
115 | less_than_or_equal_to: חייב להיות קטן או שווה ל- %{count}
116 | not_a_number: חייב להיות מספר
117 | not_an_integer: חייב להיות מספר שלם
118 | odd: חייב להיות אי זוגי
119 | record_invalid: ! 'האימות נכשל: %{errors}'
120 | taken: כבר בשימוש
121 | too_long: "ארוך מדי (יותר מ- %{count} תווים)"
122 | too_short: "קצר מדי (פחות מ- %{count} תווים)"
123 | wrong_length: "לא באורך הנכון (חייב להיות %{count} תווים)"
124 | template:
125 | body: ! 'אנא בדוק את השדות הבאים:'
126 | header:
127 | one: ! 'לא ניתן לשמור את ה%{model}: שגיאה אחת'
128 | other: ! 'לא ניתן לשמור את ה%{model}: %{count} שגיאות.'
129 | helpers:
130 | select:
131 | prompt: נא לבחור
132 | submit:
133 | create: ! 'יצירת %{model}'
134 | submit: ! 'שמור %{model}'
135 | update: ! 'עדכון %{model}'
136 | number:
137 | currency:
138 | format:
139 | delimiter: ! ','
140 | format: ! '%u %n'
141 | precision: 2
142 | separator: .
143 | significant: false
144 | strip_insignificant_zeros: false
145 | unit: ₪
146 | format:
147 | delimiter: ! ','
148 | precision: 3
149 | separator: .
150 | significant: false
151 | strip_insignificant_zeros: false
152 | human:
153 | decimal_units:
154 | format: ! '%n %u'
155 | units:
156 | billion: מיליארד
157 | million: מיליון
158 | quadrillion: קודריליון
159 | thousand: אלף
160 | trillion: טריליון
161 | unit: ''
162 | format:
163 | delimiter: ''
164 | precision: 3
165 | significant: true
166 | strip_insignificant_zeros: true
167 | storage_units:
168 | format: ! '%n %u'
169 | units:
170 | byte:
171 | one: בייט
172 | other: בתים
173 | gb: ג'יגה-בייט
174 | kb: קילו-בייט
175 | mb: מגה-בייט
176 | tb: טרה-בייט
177 | percentage:
178 | format:
179 | delimiter: ''
180 | precision:
181 | format:
182 | delimiter: ''
183 | support:
184 | array:
185 | last_word_connector: ! ', את '
186 | two_words_connector: ! ' את '
187 | words_connector: ! ', '
188 | time:
189 | am: am
190 | formats:
191 | default: ! '%a %d %b %H:%M:%S %Z %Y'
192 | long: ! '%d ב%B, %Y %H:%M'
193 | short: ! '%d %b %H:%M'
194 | pm: pm
195 |
--------------------------------------------------------------------------------
/locales/rails-i18n/hi-IN.yml:
--------------------------------------------------------------------------------
1 | hi-IN:
2 | date:
3 | abbr_day_names:
4 | - रवि
5 | - सोम
6 | - मंगल
7 | - बुध
8 | - गुरु
9 | - शुक्र
10 | - शनि
11 | abbr_month_names:
12 | -
13 | - Jan
14 | - Feb
15 | - Mar
16 | - Apr
17 | - May
18 | - Jun
19 | - Jul
20 | - Aug
21 | - Sep
22 | - Oct
23 | - Nov
24 | - Dec
25 | day_names:
26 | - रविवार
27 | - सोमवार
28 | - मंगलवार
29 | - बुधवार
30 | - गुरुवार
31 | - शुक्रवार
32 | - शनिवार
33 | formats:
34 | default: ! '%d-%m-%Y'
35 | long: ! '%B %d, %Y'
36 | short: ! '%b %d'
37 | month_names:
38 | -
39 | - जनवरी
40 | - फरवरी
41 | - मार्च
42 | - अप्रैल
43 | - मई
44 | - जून
45 | - जुलाई
46 | - अगस्त
47 | - सितंबर
48 | - अक्टूबर
49 | - नवंबर
50 | - दिसंबर
51 | order:
52 | - :day
53 | - :month
54 | - :year
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: लग - भग एक घंटा
59 | other: लग - भग %{count} घंटा
60 | about_x_months:
61 | one: लग - भग 1 महीना
62 | other: लग - भग %{count} महीना
63 | about_x_years:
64 | one: लग - भग 1 साल
65 | other: लग - भग %{count} साल
66 | almost_x_years:
67 | one: लग - भग एक साल
68 | other: लग - भग %{count} साल
69 | half_a_minute: एक आधा मिनट
70 | less_than_x_minutes:
71 | one: एक मिनट से कम
72 | other: ! '%{count} मिनट से कम'
73 | less_than_x_seconds:
74 | one: एक सेकंड से कम
75 | other: ! '%{count} सेकंड से कम'
76 | over_x_years:
77 | one: एक साल के ऊपर
78 | other: ! '%{count} साल के ऊपर'
79 | x_days:
80 | one: एक दिन
81 | other: ! '%{count} दिन'
82 | x_minutes:
83 | one: एक मिनट
84 | other: ! '%{count} मिनट'
85 | x_months:
86 | one: एक महीना
87 | other: ! '%{count} महीना'
88 | x_seconds:
89 | one: एक सेकंड
90 | other: ! '%{count} सेकंड'
91 | prompts:
92 | day: दिन
93 | hour: घंटा
94 | minute: क्षण
95 | month: माह
96 | second: सेकंड
97 | year: वर्ष
98 | errors:
99 | format: ! '%{attribute} %{message}'
100 | messages:
101 | accepted: होना स्वीकार किया जाना आवश्यक
102 | blank: खाली नहीं किया जा सकता
103 | confirmation: पुष्टिकरण मेल नहीं खाता
104 | empty: खाली नहीं किया जा सकता
105 | equal_to: ! '%{count} के लिए बराबर होना चाहिए'
106 | even: सम होना चाहिए
107 | exclusion: आरक्षित है
108 | greater_than: ! '%{count} से अधिक होना चाहिए'
109 | greater_than_or_equal_to: ! '%{count} से बड़ा या बराबर होना आवश्यक है'
110 | inclusion: सूची में शामिल नहीं है
111 | invalid: अवैध है
112 | less_than: ! '%{count} से कम होना चाहिए'
113 | less_than_or_equal_to: ! '%{count} से कम या बराबर होना आवश्यक है'
114 | not_a_number: कोई संख्या नहीं है
115 | not_an_integer: एक पूर्णांक होना चाहिए
116 | odd: विषम होना चाहिए
117 | record_invalid: ! 'सत्यापन विफल: %{errors}'
118 | taken: पहले ही ले लिया गया है
119 | too_long: बहुत लंबा है (अधिकतम %{count} अक्षरों है)
120 | too_short: बहुत छोटा है (न्यूनतम %{count} अक्षरों है)
121 | wrong_length: गलत लंबाई है (%{count} वर्ण वाले होने चाहिए)
122 | template:
123 | body: ! 'वहाँ निम्नलिखित क्षेत्रों के साथ समस्याओं रहे थे:'
124 | header:
125 | one: एक त्रुटि सहेजे जाने से इस %{model} को निषिद्ध
126 | other: ! '%{count} त्रुटियों को सहेजे जाने से इस %{model} निषिद्ध'
127 | helpers:
128 | select:
129 | prompt: कृपया चुनें
130 | submit:
131 | create: बनाएँ %{model}
132 | submit: सहेजें %{model}
133 | update: अद्यतन %{model}
134 | number:
135 | currency:
136 | format:
137 | delimiter: ! ','
138 | format: ! '%u%n'
139 | precision: 2
140 | separator: .
141 | significant: false
142 | strip_insignificant_zeros: false
143 | unit: ₹
144 | format:
145 | delimiter: ! ','
146 | precision: 3
147 | separator: .
148 | significant: false
149 | strip_insignificant_zeros: false
150 | human:
151 | decimal_units:
152 | format: ! '%n %u'
153 | units:
154 | billion: अरब
155 | million: मिल्लिओंन
156 | quadrillion: करोड़ शंख
157 | thousand: हज़ार
158 | trillion: खरब
159 | unit: ''
160 | format:
161 | delimiter: ''
162 | precision: 3
163 | significant: true
164 | strip_insignificant_zeros: true
165 | storage_units:
166 | format: ! '%n %u'
167 | units:
168 | byte:
169 | one: Byte
170 | other: Bytes
171 | gb: GB
172 | kb: KB
173 | mb: MB
174 | tb: TB
175 | percentage:
176 | format:
177 | delimiter: ''
178 | precision:
179 | format:
180 | delimiter: ''
181 | support:
182 | array:
183 | last_word_connector: ! ', और '
184 | two_words_connector: ! ' और '
185 | words_connector: ! ', '
186 | time:
187 | am: am
188 | formats:
189 | default: ! '%a, %d %b %Y %H:%M:%S %z'
190 | long: ! '%B %d, %Y %H:%M'
191 | short: ! '%d %b %H:%M'
192 | pm: pm
193 |
--------------------------------------------------------------------------------
/locales/rails-i18n/hi.yml:
--------------------------------------------------------------------------------
1 | hi:
2 | date:
3 | abbr_day_names:
4 | - रवि
5 | - सोम
6 | - मंगल
7 | - बुध
8 | - गुरु
9 | - शुक्र
10 | - शनि
11 | abbr_month_names:
12 | -
13 | - जन
14 | - फर
15 | - मार्च
16 | - अप्रै
17 | - मई
18 | - जून
19 | - जुला
20 | - अग
21 | - सितं
22 | - अक्टू
23 | - नवं
24 | - दिस
25 | day_names:
26 | - रविवार
27 | - सोमवार
28 | - मंगलवार
29 | - बुधवार
30 | - गुरुवार
31 | - शुक्रवार
32 | - शनिवार
33 | formats:
34 | default: ! '%d-%m-%Y'
35 | long: ! '%B %d, %Y'
36 | short: ! '%b %d'
37 | month_names:
38 | -
39 | - जनवरी
40 | - फरवरी
41 | - मार्च
42 | - अप्रैल
43 | - मई
44 | - जून
45 | - जुलाई
46 | - अगस्त
47 | - सितंबर
48 | - अक्टूबर
49 | - नवंबर
50 | - दिसंबर
51 | order:
52 | - :day
53 | - :month
54 | - :year
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: लगभग एक घंटा
59 | other: लगभग %{count} घंटा
60 | about_x_months:
61 | one: लगभग 1 महीना
62 | other: लगभग %{count} महीना
63 | about_x_years:
64 | one: लगभग 1 साल
65 | other: लगभग %{count} साल
66 | almost_x_years:
67 | one: लगभग एक साल
68 | other: लगभग %{count} साल
69 | half_a_minute: एक आधा मिनट
70 | less_than_x_minutes:
71 | one: एक मिनट से कम
72 | other: ! '%{count} मिनट से कम'
73 | less_than_x_seconds:
74 | one: एक सेकेंड से कम
75 | other: ! '%{count} सेकेंड से कम'
76 | over_x_years:
77 | one: एक साल के ऊपर
78 | other: ! '%{count} साल से अधिक'
79 | x_days:
80 | one: एक दिन
81 | other: ! '%{count} दिन'
82 | x_minutes:
83 | one: एक मिनट
84 | other: ! '%{count} मिनट'
85 | x_months:
86 | one: एक महीना
87 | other: ! '%{count} महीना'
88 | x_seconds:
89 | one: एक सेकेंड
90 | other: ! '%{count} सेकेंड'
91 | prompts:
92 | day: दिन
93 | hour: घंटा
94 | minute: मिनट
95 | month: माह
96 | second: सेकेंड
97 | year: वर्ष
98 | errors:
99 | format: ! '%{attribute} %{message}'
100 | messages:
101 | accepted: स्वीकार किया जाना जरूरी
102 | blank: खाली नहीं रह सकता है
103 | confirmation: पुष्टिकरण मेल नहीं खाता
104 | empty: रिक्त नहीं रह सकता है
105 | equal_to: ! '%{count} के लिए बराबर होना चाहिए'
106 | even: सम होना चाहिए
107 | exclusion: आरक्षित है
108 | greater_than: ! '%{count} से अधिक होना चाहिए'
109 | greater_than_or_equal_to: ! '%{count} से बड़ा या बराबर होना आवश्यक है'
110 | inclusion: सूची में शामिल नहीं है
111 | invalid: अवैध है
112 | less_than: ! '%{count} से कम होना चाहिए'
113 | less_than_or_equal_to: ! '%{count} से कम या बराबर होना आवश्यक है'
114 | not_a_number: कोई संख्या नहीं है
115 | not_an_integer: एक पूर्णांक होना चाहिए
116 | odd: विसम होना चाहिए
117 | record_invalid: ! 'सत्यापन विफल: %{errors}'
118 | taken: पहले ही ले लिया गया है
119 | too_long: अत्यधिक लंबा है (अधिकतम %{count} वर्ण हैं)
120 | too_short: अत्यधिक छोटा है (न्यूनतम %{count} वर्ण हैं)
121 | wrong_length: गलत लंबाई है (%{count} वर्ण युक्त होना चाहिए)
122 | template:
123 | body: ! 'निम्नलिखित क्षेत्रों के साथ समस्या थी:'
124 | header:
125 | one: इस %{model} को सहेजे जाना एक त्रुटि के कारण नहीं हुआ
126 | other: इस %{model} को सहेजे जाना %{count} त्रुटि के कारण नहीं हुआ
127 | helpers:
128 | select:
129 | prompt: कृपया चुनें
130 | submit:
131 | create: ! '%{model} बनाएँ'
132 | submit: ! '%{model} सौंपें'
133 | update: ! '%{model} अद्यतन'
134 | number:
135 | currency:
136 | format:
137 | delimiter: ! ','
138 | format: ! '%u%n'
139 | precision: 2
140 | separator: .
141 | significant: false
142 | strip_insignificant_zeros: false
143 | unit: ₹
144 | format:
145 | delimiter: ! ','
146 | precision: 3
147 | separator: .
148 | significant: false
149 | strip_insignificant_zeros: false
150 | human:
151 | decimal_units:
152 | format: ! '%n %u'
153 | units:
154 | billion: अरब
155 | million: दस करोड़
156 | quadrillion: करोड़ शंख
157 | thousand: हज़ार
158 | trillion: खरब
159 | unit: ''
160 | format:
161 | delimiter: ''
162 | precision: 3
163 | significant: true
164 | strip_insignificant_zeros: true
165 | storage_units:
166 | format: ! '%n %u'
167 | units:
168 | byte:
169 | one: Byte
170 | other: Bytes
171 | gb: GB
172 | kb: KB
173 | mb: MB
174 | tb: TB
175 | percentage:
176 | format:
177 | delimiter: ''
178 | precision:
179 | format:
180 | delimiter: ''
181 | support:
182 | array:
183 | last_word_connector: ! ', और '
184 | two_words_connector: ! ' और '
185 | words_connector: ! ', '
186 | time:
187 | am: पूर्वाह्न
188 | formats:
189 | default: ! '%a, %d %b %Y %H:%M:%S %z'
190 | long: ! '%B %d, %Y %H:%M'
191 | short: ! '%d %b %H:%M'
192 | pm: अपराह्न
193 |
--------------------------------------------------------------------------------
/locales/rails-i18n/hu.yml:
--------------------------------------------------------------------------------
1 | hu:
2 | date:
3 | abbr_day_names:
4 | - v.
5 | - h.
6 | - k.
7 | - sze.
8 | - cs.
9 | - p.
10 | - szo.
11 | abbr_month_names:
12 | -
13 | - jan.
14 | - febr.
15 | - márc.
16 | - ápr.
17 | - máj.
18 | - jún.
19 | - júl.
20 | - aug.
21 | - szept.
22 | - okt.
23 | - nov.
24 | - dec.
25 | day_names:
26 | - vasárnap
27 | - hétfő
28 | - kedd
29 | - szerda
30 | - csütörtök
31 | - péntek
32 | - szombat
33 | formats:
34 | default: ! '%Y.%m.%d.'
35 | long: ! '%Y. %B %e.'
36 | short: ! '%b %e.'
37 | month_names:
38 | -
39 | - január
40 | - február
41 | - március
42 | - április
43 | - május
44 | - június
45 | - július
46 | - augusztus
47 | - szeptember
48 | - október
49 | - november
50 | - december
51 | order:
52 | - :year
53 | - :month
54 | - :day
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: kb. 1 órája
59 | other: kb. %{count} órája
60 | about_x_months:
61 | one: kb. 1 hónapja
62 | other: kb. %{count} hónapja
63 | about_x_years:
64 | one: kb. 1 éve
65 | other: kb. %{count} éve
66 | almost_x_years:
67 | one: majdnem 1 éve
68 | other: majdnem %{count} éve
69 | half_a_minute: fél perce
70 | less_than_x_minutes:
71 | one: kevesebb, mint 1 perce
72 | other: kevesebb, mint %{count} perce
73 | less_than_x_seconds:
74 | one: kevesebb, mint 1 másodperce
75 | other: kevesebb, mint %{count} másodperce
76 | over_x_years:
77 | one: több, mint 1 éve
78 | other: több, mint %{count} éve
79 | x_days:
80 | one: 1 napja
81 | other: ! '%{count} napja'
82 | x_minutes:
83 | one: 1 perce
84 | other: ! '%{count} perce'
85 | x_months:
86 | one: 1 hónapja
87 | other: ! '%{count} hónapja'
88 | x_seconds:
89 | one: 1 másodperce
90 | other: ! '%{count} másodperce'
91 | prompts:
92 | day: Nap
93 | hour: Óra
94 | minute: Perc
95 | month: Hónap
96 | second: Másodperc
97 | year: Év
98 | errors:
99 | format: ! '%{attribute} %{message}'
100 | messages:
101 | accepted: nincs elfogadva
102 | blank: nincs megadva
103 | confirmation: nem egyezik
104 | empty: nincs megadva
105 | equal_to: pontosan %{count} kell legyen
106 | even: páros kell legyen
107 | exclusion: nem elérhető
108 | greater_than: nagyobb kell legyen, mint %{count}
109 | greater_than_or_equal_to: legalább %{count} kell legyen
110 | inclusion: nincs a listában
111 | invalid: nem megfelelő
112 | less_than: kevesebb, mint %{count} kell legyen
113 | less_than_or_equal_to: legfeljebb %{count} lehet
114 | not_a_number: nem szám
115 | not_an_integer: egész számnak kell lennie
116 | odd: páratlan kell legyen
117 | record_invalid: Sikertelen validálás %{errors}
118 | taken: már foglalt
119 | too_long: túl hosszú (nem lehet több %{count} karakternél)
120 | too_short: túl rövid (legalább %{count} karakter kell legyen)
121 | wrong_length: nem megfelelő hosszúságú (%{count} karakter szükséges)
122 | template:
123 | body: ! 'Problémás mezők:'
124 | header:
125 | one: ! '1 hiba miatt nem menthető a következő: %{model}'
126 | other: ! '%{count} hiba miatt nem menthető a következő: %{model}'
127 | helpers:
128 | select:
129 | prompt: Válasszon
130 | submit:
131 | create: Új %{model}
132 | submit: ! '%{model} mentése'
133 | update: ! '%{model} módosítása'
134 | number:
135 | currency:
136 | format:
137 | delimiter: ''
138 | format: ! '%n %u'
139 | precision: 0
140 | separator: ! ','
141 | significant: true
142 | strip_insignificant_zeros: true
143 | unit: Ft
144 | format:
145 | delimiter: ! ' '
146 | precision: 2
147 | separator: ! ','
148 | significant: true
149 | strip_insignificant_zeros: true
150 | human:
151 | decimal_units:
152 | format: ! '%n %u'
153 | units:
154 | billion: milliárd
155 | million: millió
156 | quadrillion: billiárd
157 | thousand: ezer
158 | trillion: billió
159 | unit: ''
160 | format:
161 | delimiter: ''
162 | precision: 1
163 | significant: true
164 | strip_insignificant_zeros: true
165 | storage_units:
166 | format: ! '%n %u'
167 | units:
168 | byte:
169 | one: bájt
170 | other: bájt
171 | gb: GB
172 | kb: KB
173 | mb: MB
174 | tb: TB
175 | percentage:
176 | format:
177 | delimiter: ''
178 | precision:
179 | format:
180 | delimiter: ''
181 | support:
182 | array:
183 | last_word_connector: ! ' és '
184 | two_words_connector: ! ' és '
185 | words_connector: ! ', '
186 | time:
187 | am: de.
188 | formats:
189 | default: ! '%Y. %b %e., %H:%M'
190 | long: ! '%Y. %B %e., %A, %H:%M'
191 | short: ! '%b %e., %H:%M'
192 | pm: du.
193 |
--------------------------------------------------------------------------------
/locales/rails-i18n/id.yml:
--------------------------------------------------------------------------------
1 | id:
2 | date:
3 | abbr_day_names:
4 | - Min
5 | - Sen
6 | - Sel
7 | - Rab
8 | - Kam
9 | - Jum
10 | - Sab
11 | abbr_month_names:
12 | -
13 | - Jan
14 | - Feb
15 | - Mar
16 | - Apr
17 | - Mei
18 | - Jun
19 | - Jul
20 | - Agu
21 | - Sep
22 | - Okt
23 | - Nov
24 | - Des
25 | day_names:
26 | - Minggu
27 | - Senin
28 | - Selasa
29 | - Rabu
30 | - Kamis
31 | - Jum'at
32 | - Sabtu
33 | formats:
34 | default: ! '%d %B %Y'
35 | long: ! '%A, %d %B %Y'
36 | short: ! '%d.%m.%Y'
37 | month_names:
38 | -
39 | - Januari
40 | - Februari
41 | - Maret
42 | - April
43 | - Mei
44 | - Juni
45 | - Juli
46 | - Agustus
47 | - September
48 | - Oktober
49 | - November
50 | - Desember
51 | order:
52 | - :day
53 | - :month
54 | - :year
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: sekitar satu jam
59 | other: sekitar %{count} jam
60 | about_x_months:
61 | one: sekitar sebulan
62 | other: sekitar %{count} bulan
63 | about_x_years:
64 | one: setahun
65 | other: sekitar %{count} tahun
66 | almost_x_years:
67 | one: hampir setahun
68 | other: hampir %{count} tahun
69 | half_a_minute: setengah menit
70 | less_than_x_minutes:
71 | one: kurang dari 1 menit
72 | other: kurang dari %{count} menit
73 | zero: kurang dari 1 menit
74 | less_than_x_seconds:
75 | one: kurang dari 1 detik
76 | other: kurang dari %{count} detik
77 | zero: kurang dari 1 detik
78 | over_x_years:
79 | one: lebih dari setahun
80 | other: lebih dari %{count} tahun
81 | x_days:
82 | one: sehari
83 | other: ! '%{count} hari'
84 | x_minutes:
85 | one: satu menit
86 | other: ! '%{count} menit'
87 | x_months:
88 | one: sebulan
89 | other: ! '%{count} bulan'
90 | x_seconds:
91 | one: satu detik
92 | other: ! '%{count} detik'
93 | prompts:
94 | day: Hari
95 | hour: Jam
96 | minute: Menit
97 | month: Bulan
98 | second: Detik
99 | year: Tahun
100 | errors:
101 | format: ! '%{attribute} %{message}'
102 | messages:
103 | accepted: harus diterima
104 | blank: tidak bisa kosong
105 | confirmation: ! 'tidak sesuai dengan %{attribute}'
106 | empty: tidak bisa kosong
107 | equal_to: harus sama dengan %{count}
108 | even: harus genap
109 | exclusion: sudah digunakan
110 | greater_than: harus lebih besar dari %{count}
111 | greater_than_or_equal_to: harus sama atau lebih besar dari %{count}
112 | inclusion: tidak termasuk
113 | invalid: tidak valid
114 | less_than: harus lebih kecil dari %{count}
115 | less_than_or_equal_to: harus sama atau lebih kecil dari %{count}
116 | not_a_number: bukan angka
117 | odd: harus ganjil
118 | record_invalid: ! 'Verifikasi gagal: %{errors}'
119 | taken: sudah digunakan
120 | too_long: terlalu panjang (maksimum %{count} karakter)
121 | too_short: terlalu pendek (minimum %{count} karakter)
122 | wrong_length: jumlah karakter salah (seharusnya %{count} karakter)
123 | template:
124 | body: ! 'Ada masalah dengan field berikut:'
125 | header:
126 | one: 1 kesalahan mengakibatkan %{model} ini tidak bisa disimpan
127 | other: ! '%{count} kesalahan mengakibatkan %{model} ini tidak bisa disimpan'
128 | helpers:
129 | select:
130 | prompt: Silahkan pilih
131 | submit:
132 | create: Buat %{model}
133 | submit: Simpan %{model}
134 | update: Update %{model}
135 | number:
136 | currency:
137 | format:
138 | delimiter: .
139 | format: ! '%u%n'
140 | precision: 2
141 | separator: ! ','
142 | significant: false
143 | strip_insignificant_zeros: false
144 | unit: Rp
145 | format:
146 | delimiter: .
147 | precision: 3
148 | separator: ! ','
149 | significant: false
150 | strip_insignificant_zeros: false
151 | human:
152 | decimal_units:
153 | format: ! '%n %u'
154 | units:
155 | billion: Miliar
156 | million: Juta
157 | quadrillion: Quadriliun
158 | thousand: Ribu
159 | trillion: Triliun
160 | unit: ''
161 | format:
162 | delimiter: ''
163 | precision: 3
164 | significant: true
165 | strip_insignificant_zeros: true
166 | storage_units:
167 | format: ! '%n %u'
168 | units:
169 | byte:
170 | one: Byte
171 | other: Byte
172 | gb: GB
173 | kb: KB
174 | mb: MB
175 | tb: TB
176 | percentage:
177 | format:
178 | delimiter: ''
179 | precision:
180 | format:
181 | delimiter: ''
182 | support:
183 | array:
184 | last_word_connector: ! ' dan '
185 | two_words_connector: ! ', '
186 | words_connector: ! ', '
187 | time:
188 | am: am
189 | formats:
190 | default: ! '%a, %d %b %Y %H.%M.%S %z'
191 | long: ! '%d %B %Y %H.%M'
192 | short: ! '%d %b %H.%M'
193 | pm: pm
194 |
--------------------------------------------------------------------------------
/locales/rails-i18n/iso-639-2/fur.yml:
--------------------------------------------------------------------------------
1 | fur:
2 | date:
3 | abbr_day_names:
4 | - dom
5 | - lun
6 | - mar
7 | - mie
8 | - joi
9 | - vin
10 | - sab
11 | abbr_month_names:
12 | -
13 | - Zen
14 | - Fev
15 | - Mar
16 | - Avr
17 | - Mai
18 | - Jug
19 | - Lui
20 | - Avo
21 | - Set
22 | - Otu
23 | - Nov
24 | - Dic
25 | day_names:
26 | - domenie
27 | - lunis
28 | - martars
29 | - miercus
30 | - joibe
31 | - vinars
32 | - sabide
33 | formats:
34 | default: ! '%d-%m-%Y'
35 | long: ! '%d di %B dal %Y'
36 | short: ! '%d di %b'
37 | month_names:
38 | -
39 | - Zenâr
40 | - Fevrâr
41 | - Març
42 | - Avrîl
43 | - Mai
44 | - Jugn
45 | - Lui
46 | - Avost
47 | - Setembar
48 | - Otubar
49 | - Novembar
50 | - Dicembar
51 | order:
52 | - :day
53 | - :month
54 | - :year
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: cirche une ore
59 | other: cirche %{count} oris
60 | about_x_months:
61 | one: cirche un mês
62 | other: cirche %{count} mês
63 | about_x_years:
64 | one: cirche un an
65 | other: cirche %{count} agns
66 | almost_x_years:
67 | one: cuasi un an
68 | other: cuasi %{count} agns
69 | half_a_minute: mieç minût
70 | less_than_x_minutes:
71 | one: mancul di un minût
72 | other: mancul di %{count} minûts
73 | less_than_x_seconds:
74 | one: mancul di un secont
75 | other: mancul di %{count} seconts
76 | over_x_years:
77 | one: plui di un an
78 | other: plui di %{count} agns
79 | x_days:
80 | one: 1 zornade
81 | other: ! '%{count} zornadis'
82 | x_minutes:
83 | one: 1 minût
84 | other: ! '%{count} minûts'
85 | x_months:
86 | one: 1 mês
87 | other: ! '%{count} mês'
88 | x_seconds:
89 | one: 1 secont
90 | other: ! '%{count} seconts'
91 | prompts:
92 | day: Zornade
93 | hour: Ore
94 | minute: Minût
95 | month: Mês
96 | second: Secont
97 | year: An
98 | errors:
99 | format: ! '%{attribute} %{message}'
100 | messages:
101 | accepted: al à di jessi acetât
102 | blank: nol pues jessi lassât in blanc
103 | confirmation: nol è compagn de conferme
104 | empty: nol pues jessi vueit
105 | equal_to: al à di jessi compagn di %{count}
106 | even: al à di jessi pâr
107 | exclusion: al è riservât
108 | greater_than: al à di jessi plui grant di %{count}
109 | greater_than_or_equal_to: al à di jessi plui grant o compagn di %{count}
110 | inclusion: nol è includût te liste
111 | invalid: nol è valit
112 | less_than: al à di jessi mancul di %{count}
113 | less_than_or_equal_to: al à di jessi mancul o compagn di %{count}
114 | not_a_number: nol è un numar
115 | not_an_integer: al à di jessi un numar intîr
116 | odd: al à di jessi dispar
117 | record_invalid: ! 'Convalide falide: %{errors}'
118 | taken: al è za doprât
119 | too_long: al è masse lunc (il massim al è %{count} letaris)
120 | too_short: al è masse curt (il minim al è %{count} letaris)
121 | wrong_length: nol à la lungjece juste (al à di jessi di %{count} letaris)
122 | template:
123 | body: ! 'Torne par plasê a controlâ i cjamps ca sot:'
124 | header:
125 | one: ! 'No si pues salvâ chest %{model}: 1 erôr'
126 | other: ! 'No si pues salvâ chest %{model}: %{count} erôrs.'
127 | helpers:
128 | select:
129 | prompt: Sielç par plasê
130 | submit:
131 | create: Cree %{model}
132 | submit: Salve %{model}
133 | update: Inzorne %{model}
134 | number:
135 | currency:
136 | format:
137 | delimiter: .
138 | format: ! '%n %u'
139 | precision: 2
140 | separator: ! ','
141 | significant: false
142 | strip_insignificant_zeros: false
143 | unit: €
144 | format:
145 | delimiter: .
146 | precision: 3
147 | separator: ! ','
148 | significant: false
149 | strip_insignificant_zeros: false
150 | human:
151 | decimal_units:
152 | format: ! '%n %u'
153 | units:
154 | billion: bilion
155 | million: milion
156 | quadrillion: cuadrilion
157 | thousand: miâr
158 | trillion: trilion
159 | unit: ''
160 | format:
161 | delimiter: ''
162 | precision: 1
163 | significant: true
164 | strip_insignificant_zeros: true
165 | storage_units:
166 | format: ! '%n %u'
167 | units:
168 | byte:
169 | one: Byte
170 | other: Byte
171 | gb: Gb
172 | kb: Kb
173 | mb: Mb
174 | tb: Tb
175 | percentage:
176 | format:
177 | delimiter: ''
178 | precision:
179 | format:
180 | delimiter: ''
181 | support:
182 | array:
183 | last_word_connector: ! ' e '
184 | two_words_connector: ! ' e '
185 | words_connector: ! ', '
186 | time:
187 | am: am
188 | formats:
189 | default: ! '%a %d di %b dal %Y, %H:%M:%S %z'
190 | long: ! '%d di %B dal %Y %H:%M'
191 | short: ! '%d di %b %H:%M'
192 | pm: pm
193 |
--------------------------------------------------------------------------------
/locales/rails-i18n/ja.yml:
--------------------------------------------------------------------------------
1 | ja:
2 | date:
3 | abbr_day_names:
4 | - 日
5 | - 月
6 | - 火
7 | - 水
8 | - 木
9 | - 金
10 | - 土
11 | abbr_month_names:
12 | -
13 | - 1月
14 | - 2月
15 | - 3月
16 | - 4月
17 | - 5月
18 | - 6月
19 | - 7月
20 | - 8月
21 | - 9月
22 | - 10月
23 | - 11月
24 | - 12月
25 | day_names:
26 | - 日曜日
27 | - 月曜日
28 | - 火曜日
29 | - 水曜日
30 | - 木曜日
31 | - 金曜日
32 | - 土曜日
33 | formats:
34 | default: ! '%Y/%m/%d'
35 | long: ! '%Y年%m月%d日(%a)'
36 | short: ! '%m/%d'
37 | month_names:
38 | -
39 | - 1月
40 | - 2月
41 | - 3月
42 | - 4月
43 | - 5月
44 | - 6月
45 | - 7月
46 | - 8月
47 | - 9月
48 | - 10月
49 | - 11月
50 | - 12月
51 | order:
52 | - :year
53 | - :month
54 | - :day
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: 約1時間
59 | other: 約%{count}時間
60 | about_x_months:
61 | one: 約1ヶ月
62 | other: 約%{count}ヶ月
63 | about_x_years:
64 | one: 約1年
65 | other: 約%{count}年
66 | almost_x_years:
67 | one: 1年弱
68 | other: ! '%{count}年弱'
69 | half_a_minute: 30秒前後
70 | less_than_x_minutes:
71 | one: 1分以内
72 | other: ! '%{count}分未満'
73 | less_than_x_seconds:
74 | one: 1秒以内
75 | other: ! '%{count}秒未満'
76 | over_x_years:
77 | one: 1年以上
78 | other: ! '%{count}年以上'
79 | x_days:
80 | one: 1日
81 | other: ! '%{count}日'
82 | x_minutes:
83 | one: 1分
84 | other: ! '%{count}分'
85 | x_months:
86 | one: 1ヶ月
87 | other: ! '%{count}ヶ月'
88 | x_seconds:
89 | one: 1秒
90 | other: ! '%{count}秒'
91 | prompts:
92 | day: 日
93 | hour: 時
94 | minute: 分
95 | month: 月
96 | second: 秒
97 | year: 年
98 | errors:
99 | format: ! '%{attribute}%{message}'
100 | messages:
101 | accepted: を受諾してください。
102 | blank: を入力してください。
103 | present: は入力しないでください。
104 | confirmation: と%{attribute}の入力が一致しません。
105 | empty: を入力してください。
106 | equal_to: は%{count}にしてください。
107 | even: は偶数にしてください。
108 | exclusion: は予約されています。
109 | greater_than: は%{count}より大きい値にしてください。
110 | greater_than_or_equal_to: は%{count}以上の値にしてください。
111 | inclusion: は一覧にありません。
112 | invalid: は不正な値です。
113 | less_than: は%{count}より小さい値にしてください。
114 | less_than_or_equal_to: は%{count}以下の値にしてください。
115 | not_a_number: は数値で入力してください。
116 | not_an_integer: は整数で入力してください。
117 | odd: は奇数にしてください。
118 | record_invalid: バリデーションに失敗しました。 %{errors}
119 | restrict_dependent_destroy: ! '%{record}が存在しているので削除できません。'
120 | taken: はすでに存在します。
121 | too_long: は%{count}文字以内で入力してください。
122 | too_short: は%{count}文字以上で入力してください。
123 | wrong_length: は%{count}文字で入力してください。
124 | other_than: "は%{count}以外の値にしてください。"
125 | template:
126 | body: 次の項目を確認してください。
127 | header:
128 | one: ! '%{model}にエラーが発生しました。'
129 | other: ! '%{model}に%{count}個のエラーが発生しました。'
130 | helpers:
131 | select:
132 | prompt: 選択してください。
133 | submit:
134 | create: 登録する
135 | submit: 保存する
136 | update: 更新する
137 | number:
138 | currency:
139 | format:
140 | delimiter: ! ','
141 | format: ! '%n%u'
142 | precision: 0
143 | separator: .
144 | significant: false
145 | strip_insignificant_zeros: false
146 | unit: 円
147 | format:
148 | delimiter: ! ','
149 | precision: 3
150 | separator: .
151 | significant: false
152 | strip_insignificant_zeros: false
153 | human:
154 | decimal_units:
155 | format: ! '%n %u'
156 | units:
157 | billion: 十億
158 | million: 百万
159 | quadrillion: 千兆
160 | thousand: 千
161 | trillion: 兆
162 | unit: ''
163 | format:
164 | delimiter: ''
165 | precision: 3
166 | significant: true
167 | strip_insignificant_zeros: true
168 | storage_units:
169 | format: ! '%n%u'
170 | units:
171 | byte: バイト
172 | gb: ギガバイト
173 | kb: キロバイト
174 | mb: メガバイト
175 | tb: テラバイト
176 | percentage:
177 | format:
178 | delimiter: ''
179 | format: "%n%"
180 | precision:
181 | format:
182 | delimiter: ''
183 | support:
184 | array:
185 | last_word_connector: と
186 | two_words_connector: と
187 | words_connector: と
188 | time:
189 | am: 午前
190 | formats:
191 | default: ! '%Y/%m/%d %H:%M:%S'
192 | long: ! '%Y年%m月%d日(%a) %H時%M分%S秒 %z'
193 | short: ! '%y/%m/%d %H:%M'
194 | pm: 午後
195 |
--------------------------------------------------------------------------------
/locales/rails-i18n/km.yml:
--------------------------------------------------------------------------------
1 | km:
2 | date:
3 | abbr_day_names:
4 | - អទ
5 | - ច
6 | - អ
7 | - ពុ
8 | - ព្រ
9 | - សុ
10 | - សៅ
11 | abbr_month_names:
12 | -
13 | - មករា
14 | - កុម្ភៈ
15 | - មិនា
16 | - មេសា
17 | - ឧសភា
18 | - មិថុនា
19 | - កក្កដា
20 | - សីហា
21 | - កញ្ញា
22 | - តុលា
23 | - វិច្ឆិកា
24 | - ធ្នូ
25 | day_names:
26 | - ថ្ងៃចន្ទ
27 | - ថ្ងៃអង្គារ
28 | - ថ្ងៃពុធ
29 | - ថ្ងៃព្រហស្បតិ៍
30 | - ថ្ងៃសុក្រ
31 | - ថ្ងៃសៅរ៍
32 | - ថ្ងៃអាទិត្យ
33 | formats:
34 | long: ! ”ថ្ងៃទី%e %B %Y %H:%M %Z"
35 | default: ! “%d %B %Y”
36 | short: ! “%d %b”
37 | month_names:
38 | -
39 | - ខែមករា
40 | - ខែកុម្ភៈ
41 | - ខែមិនា
42 | - ខែមេសា
43 | - ខែឧសភា
44 | - ខែមិថុនា
45 | - ខែកក្កដា
46 | - ខែសីហា
47 | - ខែកញ្ញា
48 | - ខែតុលា
49 | - ខែវិច្ឆិកា
50 | - ខែធ្នូ
51 | order:
52 | - :day
53 | - :month
54 | - :year
55 |
--------------------------------------------------------------------------------
/locales/rails-i18n/kn.yml:
--------------------------------------------------------------------------------
1 | kn:
2 | date:
3 | abbr_day_names:
4 | - ರವಿ
5 | - ಸೋಮ
6 | - ಮಂಗಳ
7 | - ಬುಧ
8 | - ಗುರು
9 | - ಶುಕ್ರ
10 | - ಶನಿ
11 | abbr_month_names:
12 | -
13 | - Jan
14 | - Feb
15 | - Mar
16 | - Apr
17 | - May
18 | - Jun
19 | - Jul
20 | - Aug
21 | - Sep
22 | - Oct
23 | - Nov
24 | - Dec
25 | day_names:
26 | - ರವಿವಾರ
27 | - ಸೋಮವಾರ
28 | - ಮಂಗಳವಾರ
29 | - ಬುಧವಾರ
30 | - ಗುರುವಾರ
31 | - ಶುಕ್ರವಾರ
32 | - ಶನಿವಾರ
33 | formats:
34 | default: ! '%Y-%m-%d'
35 | long: ! '%B %d, %Y'
36 | short: ! '%b %d'
37 | month_names:
38 | -
39 | - ಜನವರಿ
40 | - ಫೆಬ್ರವರಿ
41 | - ಮಾರ್ಚ್
42 | - ಏಪ್ರಿಲ್
43 | - ಮೇ
44 | - ಜೂನ್
45 | - ಜುಲೈ
46 | - ಆಗಸ್ಟ್
47 | - ಸೆಪ್ಟೆಂಬರ್
48 | - ಅಕ್ಟೋಬರ್
49 | - ನವಂಬರ್
50 | - ಡಿಸೆಂಬರ್
51 | order:
52 | - :year
53 | - :month
54 | - :day
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: ಸುಮಾರು ಒಂದು ಗಂಟೆ
59 | other: ಸುಮಾರು %{count} ಗಂಟೆಗಳು
60 | about_x_months:
61 | one: ಸುಮಾರು ಒಂದು ತಿಂಗಳು
62 | other: ಸುಮಾರು %{count} ತಿಂಗಳುಗಳು
63 | about_x_years:
64 | one: ಸುಮಾರು ಒಂದು ವರುಷ
65 | other: ಸುಮಾರು %{count} ವರುಷಗಳು
66 | almost_x_years:
67 | one: ಸರಿಸುಮಾರು ಒಂದು ವರುಷ
68 | other: ಸರಿಸುಮಾರು %{count} ವರುಷಗಳು
69 | half_a_minute: ಒಂದು ಅರ್ಧ ನಿಮಿಷ
70 | less_than_x_minutes:
71 | one: ಒಂದು ನಿಮಿಷಕ್ಕೂ ಕಡಿಮೆ
72 | other: ! '%{count} ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ'
73 | less_than_x_seconds:
74 | one: ಒಂದು ಸೆಕೆಂಡಿಗೂ ಕಡಿಮೆ
75 | other: ! '%{count} ಸೆಕೆಂಡಿಗಿಂತ ಕಡಿಮೆ'
76 | over_x_years:
77 | one: ಒಂದು ವರುಷಕ್ಕಿಂತ ಹೆಚ್ಚು
78 | other: ! '%{count} ವರುಷಗಳಿಗಿಂತ ಹೆಚ್ಚು'
79 | x_days:
80 | one: 1 ದಿನ
81 | other: ! '%{count} ದಿನಗಳು'
82 | x_minutes:
83 | one: 1 ನಿಮಿಷ
84 | other: ! '%{count} ನಿಮಿಷಗಳು'
85 | x_months:
86 | one: 1 ತಿಂಗಳು
87 | other: ! '%{count} ತಿಂಗಳುಗಳು'
88 | x_seconds:
89 | one: 1 ಸೆಕೆಂಡ್
90 | other: ! '%{count} ಸೆಕೆಂಡುಗಳು'
91 | prompts:
92 | day: ದಿನ
93 | hour: ಗಂಟೆ
94 | minute: ನಿಮಿಷ
95 | month: ತಿಂಗಳು
96 | second: ಸೆಕೆಂಡು
97 | year: ವರುಷ
98 | errors:
99 | format: ! '%{attribute} %{message}'
100 | messages:
101 | accepted: ಒಪ್ಪಿಕೊಳ್ಳಬೇಕು
102 | blank: ಖಾಲಿ ಬಿಡಲು ಸಧ್ಯವಿಲ್ಲ
103 | confirmation: ಸಮರ್ಥನೆ ಸರಿಬರಲ್ಲಿಲ್ಲ
104 | empty: ಖಾಲಿ ಬಿಡಲು ಸಧ್ಯವಿಲ್ಲ
105 | equal_to: ! '%{count} ಕ್ಕೆ ಸಮಾನವಾಗಿರಬೇಕು'
106 | even: ಸಮ ಆಗಿರಬೇಕು
107 | exclusion: ಕಾಯ್ದಿರಿಸಲಾಗಿದೆ
108 | greater_than: ! '%{count} ಕ್ಕಿಂತ ಹೆಚ್ಚಿರಬೇಕು'
109 | greater_than_or_equal_to: ! '%{count} ಕಿಂತ ಹೆಚ್ಚು ಅಥವಾ ಸಮಾನವಾಗಿರ ಇರಬೇಕು'
110 | inclusion: ಪಟ್ಟಿಯಲ್ಲಿ ಶಾಮೀಲು ಆಗಿಲ್ಲ
111 | invalid: ನಿರರ್ಥಕವಾಗಿದೆ
112 | less_than: ! '%{count} ಕ್ಕಿಂತ ಕಡಿಮೆ ಆಗಿರಬೇಕು'
113 | less_than_or_equal_to: ! '%{count} ಕಿಂತ ಕಡಿಮೆ ಅಥವಾ ಸಮಾನವಾಗಿರ ಇರಬೇಕು'
114 | not_a_number: ಸಂಖೆ ಆಗಿಲ್ಲ
115 | not_an_integer: ಸಂಖೆ ಆಗಿರಬೇಕು
116 | odd: ಬೆಸ ಆಗಿರಬೇಕು
117 | record_invalid: ! 'ತಪ್ಪು ಆಧಾರ: %{errors}'
118 | taken: ತೆಗೆದುಕೊಂಡಾಗಿದೆ
119 | too_long: ಬಹಳ ದೊಡ್ಡದಾಗಿದೆ (ಗರಿಷ್ಟ %{count} ಅಕ್ಷರಗಳು)
120 | too_short: ಬಹಳ ಚಿಕ್ಕದಾಗಿದೆ (ಕನಿಷ್ಠ %{count} ಅಕ್ಷರಗಳು)
121 | wrong_length: ತಪ್ಪು ಉದ್ದವಿದೆ (%{count} ಅಕ್ಷರಗಳಿರಬೇಕು)
122 | template:
123 | body: ! 'ಸಮಸ್ಯೆಗಳಿರುವ ಜಾಗಗಳು:'
124 | header:
125 | one: 1 ಧೋಷದ ಪರಿಣಾಮ %{model} ಅನ್ನು ರಚಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ
126 | other: ! '%{count} ಧೋಷಗಳ ಪರಿಣಾಮ %{model} ಅನ್ನು ರಚಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ'
127 | helpers:
128 | select:
129 | prompt: ದಯವಿಟ್ಟು ಆರಿಸಿ
130 | submit:
131 | create: ! '%{model} ರಚಿಸಿ'
132 | submit: ! '%{model} ಕಳುಹಿಸು'
133 | update: ! '%{model} ರಚಿಸಿ'
134 | number:
135 | currency:
136 | format:
137 | delimiter: ! ','
138 | format: ! '%u%n'
139 | precision: 2
140 | separator: .
141 | significant: false
142 | strip_insignificant_zeros: false
143 | unit: $
144 | format:
145 | delimiter: ! ','
146 | precision: 3
147 | separator: .
148 | significant: false
149 | strip_insignificant_zeros: false
150 | human:
151 | decimal_units:
152 | format: ! '%n %u'
153 | units:
154 | billion: ಲಕ್ಷಕೋಟಿ
155 | million: ದಶಲಕ್ಷ
156 | quadrillion: ಪದ್ಮ
157 | thousand: ಸಾವಿರ
158 | trillion: ನೀಲ್
159 | unit: ''
160 | format:
161 | delimiter: ''
162 | precision: 3
163 | significant: true
164 | strip_insignificant_zeros: true
165 | storage_units:
166 | format: ! '%n %u'
167 | units:
168 | byte:
169 | one: Byte
170 | other: Bytes
171 | gb: GB
172 | kb: KB
173 | mb: MB
174 | tb: TB
175 | percentage:
176 | format:
177 | delimiter: ''
178 | precision:
179 | format:
180 | delimiter: ''
181 | support:
182 | array:
183 | last_word_connector: ! ', ಮತ್ತು '
184 | two_words_connector: ! ' ಮತ್ತು '
185 | words_connector: ! ', '
186 | time:
187 | am: ಪ್ರಾತಃಕಾಲ
188 | formats:
189 | default: ! '%a, %d %b %Y %H:%M:%S %z'
190 | long: ! '%B %d, %Y %H:%M'
191 | short: ! '%d %b %H:%M'
192 | pm: ಅಪರನ್ನಃ
193 |
--------------------------------------------------------------------------------
/locales/rails-i18n/ko.yml:
--------------------------------------------------------------------------------
1 | ko:
2 | date:
3 | abbr_day_names:
4 | - 일
5 | - 월
6 | - 화
7 | - 수
8 | - 목
9 | - 금
10 | - 토
11 | abbr_month_names:
12 | -
13 | - 1월
14 | - 2월
15 | - 3월
16 | - 4월
17 | - 5월
18 | - 6월
19 | - 7월
20 | - 8월
21 | - 9월
22 | - 10월
23 | - 11월
24 | - 12월
25 | day_names:
26 | - 일요일
27 | - 월요일
28 | - 화요일
29 | - 수요일
30 | - 목요일
31 | - 금요일
32 | - 토요일
33 | formats:
34 | default: ! '%Y/%m/%d'
35 | long: ! '%Y년 %m월 %d일 (%a)'
36 | short: ! '%m/%d'
37 | month_names:
38 | -
39 | - 1월
40 | - 2월
41 | - 3월
42 | - 4월
43 | - 5월
44 | - 6월
45 | - 7월
46 | - 8월
47 | - 9월
48 | - 10월
49 | - 11월
50 | - 12월
51 | order:
52 | - :year
53 | - :month
54 | - :day
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: 약 한 시간
59 | other: 약 %{count}시간
60 | about_x_months:
61 | one: 약 한 달
62 | other: 약 %{count}달
63 | about_x_years:
64 | one: 약 일 년
65 | other: 약 %{count}년
66 | almost_x_years:
67 | one: 일 년 이하
68 | other: ! '%{count}년 이하'
69 | half_a_minute: 30초
70 | less_than_x_minutes:
71 | one: 일 분 이하
72 | other: ! '%{count}분 이하'
73 | less_than_x_seconds:
74 | one: 일 초 이하
75 | other: ! '%{count}초 이하'
76 | over_x_years:
77 | one: 일 년 이상
78 | other: ! '%{count}년 이상'
79 | x_days:
80 | one: 하루
81 | other: ! '%{count}일'
82 | x_minutes:
83 | one: 일 분
84 | other: ! '%{count}분'
85 | x_months:
86 | one: 한 달
87 | other: ! '%{count}달'
88 | x_seconds:
89 | one: 일 초
90 | other: ! '%{count}초'
91 | prompts:
92 | day: 일
93 | hour: 시
94 | minute: 분
95 | month: 월
96 | second: 초
97 | year: 년
98 | errors:
99 | format: ! '%{attribute} %{message}'
100 | messages:
101 | accepted: 을(를) 반드시 확인해야 합니다
102 | blank: 에 내용을 입력해 주세요
103 | confirmation: 은(는) 서로 일치해야 합니다
104 | empty: 에 내용을 입력해 주세요
105 | equal_to: 은(는) %{count}과 같아야 합니다
106 | even: 에 짝수를 입력해 주세요
107 | exclusion: 은(는) 이미 예약되어 있는 값입니다
108 | greater_than: 은(는) %{count}보다 커야 합니다
109 | greater_than_or_equal_to: 은(는) %{count}보다 크거야 같아야 합니다
110 | inclusion: 은(는) 목록에 포함되어 있는 값이 아닙니다
111 | invalid: 은(는) 올바르지 않은 값입니다
112 | less_than: 은(는) %{count}보다 작아야 합니다
113 | less_than_or_equal_to: 은(는) %{count}과 작거나 같아야 합니다
114 | not_a_number: 에 숫자를 입력해 주세요
115 | not_an_integer: 에 정수를 입력해 주세요
116 | odd: 에 홀수를 입력해 주세요
117 | record_invalid: 데이터 검증에 실패하였습니다. %{errors}
118 | taken: 은(는) 이미 존재합니다.
119 | too_long: 은(는) %{count}자를 넘을 수 없습니다
120 | too_short: 은(는) 적어도 %{count}자를 넘어야 합니다
121 | wrong_length: 은(는) %{count}자여야 합니다
122 | template:
123 | body: ! '다음 항목에 문제가 발견되었습니다:'
124 | header:
125 | one: 한 개의 오류가 발생해 %{model}를 저장 할 수 없습니다
126 | other: ! '%{count}개의 오류가 발생해 %{model}를 저장 할 수 없습니다'
127 | helpers:
128 | select:
129 | prompt: 선택해주세요
130 | submit:
131 | create: 등록
132 | submit: 제출
133 | update: 갱신
134 | number:
135 | currency:
136 | format:
137 | delimiter: ! ','
138 | format: ! '%n%u'
139 | precision: 0
140 | separator: .
141 | significant: false
142 | strip_insignificant_zeros: false
143 | unit: 원
144 | format:
145 | delimiter: ! ','
146 | precision: 3
147 | separator: .
148 | significant: false
149 | strip_insignificant_zeros: false
150 | human:
151 | decimal_units:
152 | format: ! '%n%u'
153 | units:
154 | billion: 십억
155 | million: 백만
156 | quadrillion: 경
157 | thousand: 천
158 | trillion: 조
159 | unit: ''
160 | format:
161 | delimiter: ''
162 | precision: 3
163 | significant: true
164 | strip_insignificant_zeros: true
165 | storage_units:
166 | format: ! '%n%u'
167 | units:
168 | byte: 바이트
169 | gb: 기가바이트
170 | kb: 킬로바이트
171 | mb: 메가바이트
172 | tb: 테라바이트
173 | percentage:
174 | format:
175 | delimiter: ''
176 | precision:
177 | format:
178 | delimiter: ''
179 | support:
180 | array:
181 | last_word_connector: ! ', '
182 | two_words_connector: ! '와(과) '
183 | words_connector: ! ', '
184 | time:
185 | am: 오전
186 | formats:
187 | default: ! '%Y/%m/%d %H:%M:%S'
188 | long: ! '%Y년 %m월 %d일, %H시 %M분 %S초 %Z'
189 | short: ! '%y/%m/%d %H:%M'
190 | pm: 오후
191 |
--------------------------------------------------------------------------------
/locales/rails-i18n/or.yml:
--------------------------------------------------------------------------------
1 | or:
2 | date:
3 | abbr_day_names:
4 | - ରବି
5 | - ସୋମ
6 | - ମଂଗଳ
7 | - ବୁଧ
8 | - ଗୁରୁ
9 | - ଶୁକ୍ର
10 | - ଶନି
11 | abbr_month_names:
12 | -
13 | - ଜାନୁ
14 | - ଫେବରୁ
15 | - ମାର
16 | - ଏପ୍ର
17 | - ମାଈ
18 | - ଜୁନ୍
19 | - ଜୁଲ୍
20 | - ଅଗସ୍ଟ
21 | - ସେପ୍ଟ
22 | - ଅକ୍ଟ
23 | - ନୋଭ
24 | - ଡିସ୍
25 | day_names:
26 | - ରବିବାର
27 | - ସୋମବାର
28 | - ମଗଂଳବାର
29 | - ବୁଧବାର
30 | - ଗୁରୁବାର
31 | - ଶୁକ୍ରବାର
32 | - ଶନିବାର
33 | formats:
34 | default: ! '%Y-%m-%d'
35 | long: ! '%B %d, %Y'
36 | short: ! '%b %d'
37 | month_names:
38 | -
39 | - ଜାନୁୟାରୀ
40 | - ଫେବୃୟାରୀ
41 | - ମାର୍ଚ଼
42 | - ଏପ୍ରଲ
43 | - ମାଈ
44 | - ଜୁନ୍
45 | - ଜୁଲାୟ
46 | - ଅଗଷ୍ତ
47 | - ସେପ୍ଟମ୍ବର୍
48 | - ଅକ୍ଟୋବର୍
49 | - ନୋଭେମ୍ବର
50 | - ଡିସମ୍ବର
51 | order:
52 | - :year
53 | - :month
54 | - :day
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: ପାଖାପାଖି 1 ଘଣ୍ତ
59 | other: ପାଖାପାଖି %{count} ଘଣ୍ତ
60 | about_x_months:
61 | one: ପାଖାପାଖି 1 ମାସ
62 | other: ପାଖାପାଖି %{count} ମାସ
63 | about_x_years:
64 | one: ପାଖାପାଖି 1 year
65 | other: ପାଖାପାଖି %{count} years
66 | almost_x_years:
67 | one: ଅଳ୍ପ ଉଣ 1 ବର୍ଷ
68 | other: ଅଳ୍ପ ଉଣ %{count} ବର୍ଷ
69 | half_a_minute: ଦେଢ ମିନଟ୍
70 | less_than_x_minutes:
71 | one: 1 ମିନଟ ବାକ
72 | other: ! '%{count} ମିନଟ ବାକ'
73 | less_than_x_seconds:
74 | one: 1 ସେକଣ୍ଢ ବାକ
75 | other: ! '%{count} ସେକଣ୍ଢ ବାକ'
76 | over_x_years:
77 | one: 1 ବର୍ଷରୁ ଅଧିକ
78 | other: ! '%{count} ବର୍ଷରୁ ଅଧିକ'
79 | x_days:
80 | one: 1 ଦିନ
81 | other: ! '%{count} ଦିନ'
82 | x_minutes:
83 | one: 1 ମିନଟ
84 | other: ! '%{count} ମିନଟ'
85 | x_months:
86 | one: 1 ମାସ
87 | other: ! '%{count} ମାସ'
88 | x_seconds:
89 | one: 1 ସେକଣ୍ଢ
90 | other: ! '%{count} ସେକଣ୍ଢ'
91 | prompts:
92 | day: ଦିନ
93 | hour: ଘଣ୍ତ
94 | minute: ମିନଟ
95 | month: ମାସ
96 | second: ସେକଣ୍ଢ
97 | year: ବର୍ଷ
98 | errors:
99 | format: ! '%{attribute} %{message}'
100 | messages:
101 | accepted: ଗ୍ରହଣ କରିବାର ଅଛି
102 | blank: ଖାଲି ହେଇ ପାରୀବନ
103 | confirmation: ପ୍ରମାଣ ହେଇନି
104 | empty: ଖାଲି ହେଇପାରିବନି
105 | equal_to: ! '%{count} କୁ ସମାନ'
106 | even: ଯୁଗ୍ମ ହେବାର ଅଛି
107 | exclusion: ସୁରଖିତ ଅଟେ
108 | greater_than: ! '%{count} ରୁ ବଡ ହେବାର ଅଛି'
109 | greater_than_or_equal_to: ! '%{count} ରୁ ବଡ କିମ୍ବା ସମାନ ହେବାର ଅଛି'
110 | inclusion: ସୁଚୀ ରେ ଅନ୍ତର୍ଭୁକ୍ତ ନୁହେଁ
111 | invalid: ଠିକ୍ ନୁହେଁ
112 | less_than: ! '%{count} ରୁ ଛୋଟ'
113 | less_than_or_equal_to: ! '%{count} ରୁ ଛୋଟ କିମ୍ବା ସମାନ ହେବାର ଅଛି'
114 | not_a_number: ସଂଖ୍ଯ ନୁହେଁ
115 | not_an_integer: ଗଣନ ସଂଖ୍ଯା ହେବାର ଅଛି
116 | odd: ଅଯୁଗ୍ମ ହେବାର ଅଛି
117 | record_invalid: ! 'ସଠିକ୍ ନୁହ: %{errors}'
118 | taken: ଗ୍ରହଣ କରା ଯାଇଛି
119 | too_long: ଦିର୍ଘତମ ଅଟେ(ଅତ୍ୟଧୀକ %{count} ଅଖ୍ଯର)
120 | too_short: ଅତି ସଂଖିପ୍ତ ଅଟେ (ଅତ୍ଯଳ୍ପ %{count} ଅଖ୍ଯର ଅଟେ)
121 | wrong_length: ଲମ୍ବା ଭୁଲ ଅଟେ (%{count} ଅଖ୍ଯର ହେବା ଉଚିତ୍)
122 | template:
123 | body: ! 'ନିମ୍ନ ଜାଗା ରେ ଅସୁବିଧା ହେଇଛି:'
124 | header:
125 | one: ! '1 ଭୁଲ ଯଗୁଁ ନିମ୍ନ %{model} ସୁରଖିତ ହେଇପାରି ନଥିଲା'
126 | other: ! '%{count} ଭୁଲ ଯଗୁଁ ଏହି %{model} ସୁରଖିତ ହେଇପାରି ନଥିଲା'
127 | helpers:
128 | select:
129 | prompt: ପସନ୍ଦ କର
130 | submit:
131 | create: ! '%{model} ବନାଅ'
132 | submit: ! '%{model} ସୁରଖିତ କର'
133 | update: ! '%{model} ଅାଧୂନିକରଣ କର'
134 | number:
135 | currency:
136 | format:
137 | delimiter: ! ','
138 | format: ! '%u%n'
139 | precision: 2
140 | separator: .
141 | significant: false
142 | strip_insignificant_zeros: false
143 | unit: ₹
144 | format:
145 | delimiter: ! ','
146 | precision: 3
147 | separator: .
148 | significant: ମିଥ୍ଯା
149 | strip_insignificant_zeros: ମିଥ୍ଯା
150 | human:
151 | decimal_units:
152 | format: ! '%n %u'
153 | units:
154 | billion: ବିଲିୟନ୍
155 | million: ମିଲିୟନ୍
156 | quadrillion: ହଜାର ବିଲିୟନ୍
157 | thousand: ହଜାର
158 | trillion: ଟ୍ରିଲିୟନ୍
159 | unit: ''
160 | format:
161 | delimiter: ''
162 | precision: 3
163 | significant: true
164 | strip_insignificant_zeros: true
165 | storage_units:
166 | format: ! '%n %u'
167 | units:
168 | byte:
169 | one: Byte
170 | other: Bytes
171 | gb: GB
172 | kb: KB
173 | mb: MB
174 | tb: TB
175 | percentage:
176 | format:
177 | delimiter: ''
178 | precision:
179 | format:
180 | delimiter: ''
181 | support:
182 | array:
183 | last_word_connector: ! ', ଏବଂ '
184 | two_words_connector: ! ' ଏବଂ '
185 | words_connector: ! ', '
186 | time:
187 | am: ପୁର୍ଵାହ୍ନ
188 | formats:
189 | default: ! '%a, %d %b %Y %H:%M:%S %z'
190 | long: ! '%B %d, %Y %H:%M'
191 | short: ! '%d %b %H:%M'
192 | pm: ଅପରାହ୍ନ
193 |
--------------------------------------------------------------------------------
/locales/rails-i18n/sv.yml:
--------------------------------------------------------------------------------
1 | sv:
2 | date:
3 | abbr_day_names:
4 | - sön
5 | - mån
6 | - tis
7 | - ons
8 | - tor
9 | - fre
10 | - lör
11 | abbr_month_names:
12 | -
13 | - jan
14 | - feb
15 | - mar
16 | - apr
17 | - maj
18 | - jun
19 | - jul
20 | - aug
21 | - sep
22 | - okt
23 | - nov
24 | - dec
25 | day_names:
26 | - söndag
27 | - måndag
28 | - tisdag
29 | - onsdag
30 | - torsdag
31 | - fredag
32 | - lördag
33 | formats:
34 | default: ! '%Y-%m-%d'
35 | long: ! '%e %B %Y'
36 | short: ! '%e %b'
37 | month_names:
38 | -
39 | - januari
40 | - februari
41 | - mars
42 | - april
43 | - maj
44 | - juni
45 | - juli
46 | - augusti
47 | - september
48 | - oktober
49 | - november
50 | - december
51 | order:
52 | - :day
53 | - :month
54 | - :year
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: ungefär en timme
59 | other: ungefär %{count} timmar
60 | about_x_months:
61 | one: ungefär en månad
62 | other: ungefär %{count} månader
63 | about_x_years:
64 | one: ungefär ett år
65 | other: ungefär %{count} år
66 | almost_x_years:
67 | one: nästan ett år
68 | other: nästan %{count} år
69 | half_a_minute: en halv minut
70 | less_than_x_minutes:
71 | one: mindre än en minut
72 | other: mindre än %{count} minuter
73 | less_than_x_seconds:
74 | one: mindre än en sekund
75 | other: mindre än %{count} sekunder
76 | over_x_years:
77 | one: mer än ett år
78 | other: mer än %{count} år
79 | x_days:
80 | one: en dag
81 | other: ! '%{count} dagar'
82 | x_minutes:
83 | one: en minut
84 | other: ! '%{count} minuter'
85 | x_months:
86 | one: en månad
87 | other: ! '%{count} månader'
88 | x_seconds:
89 | one: en sekund
90 | other: ! '%{count} sekunder'
91 | prompts:
92 | day: Dag
93 | hour: Timme
94 | minute: Minut
95 | month: Månad
96 | second: Sekund
97 | year: År
98 | errors:
99 | format: ! '%{attribute} %{message}'
100 | messages:
101 | accepted: måste vara accepterad
102 | blank: måste anges
103 | confirmation: stämmer inte överens
104 | empty: får ej vara tom
105 | equal_to: måste vara samma som
106 | even: måste vara jämnt
107 | exclusion: är reserverat
108 | greater_than: måste vara större än %{count}
109 | greater_than_or_equal_to: måste vara större än eller lika med %{count}
110 | inclusion: finns inte i listan
111 | invalid: har fel format
112 | less_than: måste vara mindre än %{count}
113 | less_than_or_equal_to: måste vara mindre än eller lika med %{count}
114 | not_a_number: är inte ett nummer
115 | not_an_integer: måste vara ett heltal
116 | odd: måste vara udda
117 | record_invalid: ! 'Ett fel uppstod: %{errors}'
118 | taken: används redan
119 | too_long: är för lång (maximum är %{count} tecken)
120 | too_short: är för kort (minimum är %{count} tecken)
121 | wrong_length: har fel längd (ska vara %{count} tecken)
122 | template:
123 | body: ! 'Det var problem med följande fält:'
124 | header:
125 | one: Ett fel förhindrade denna %{model} från att sparas
126 | other: ! '%{count} fel förhindrade denna %{model} från att sparas'
127 | helpers:
128 | select:
129 | prompt: Välj
130 | submit:
131 | create: Skapa %{model}
132 | submit: Spara %{model}
133 | update: Ändra %{model}
134 | number:
135 | currency:
136 | format:
137 | delimiter: ''
138 | format: ! '%n %u'
139 | precision: 2
140 | separator: ! ','
141 | significant: false
142 | strip_insignificant_zeros: false
143 | unit: kr
144 | format:
145 | delimiter: ''
146 | precision: 2
147 | separator: ! ','
148 | significant: false
149 | strip_insignificant_zeros: false
150 | human:
151 | decimal_units:
152 | format: ! '%n %u'
153 | units:
154 | billion: Miljard
155 | million: Miljon
156 | quadrillion: Biljard
157 | thousand: Tusen
158 | trillion: Biljon
159 | unit: ''
160 | format:
161 | delimiter: ''
162 | precision: 1
163 | significant: true
164 | strip_insignificant_zeros: true
165 | storage_units:
166 | format: ! '%n %u'
167 | units:
168 | byte:
169 | one: Byte
170 | other: Bytes
171 | gb: GB
172 | kb: KB
173 | mb: MB
174 | tb: TB
175 | percentage:
176 | format:
177 | delimiter: ''
178 | precision:
179 | format:
180 | delimiter: ''
181 | support:
182 | array:
183 | last_word_connector: ! ' och '
184 | two_words_connector: ! ' och '
185 | words_connector: ! ', '
186 | time:
187 | am: ''
188 | formats:
189 | default: ! '%a, %e %b %Y %H:%M:%S %z'
190 | long: ! '%e %B %Y %H:%M'
191 | short: ! '%e %b %H:%M'
192 | pm: ''
193 |
--------------------------------------------------------------------------------
/locales/rails-i18n/sw.yml:
--------------------------------------------------------------------------------
1 | sw:
2 | date:
3 | abbr_day_names:
4 | - J2
5 | - J3
6 | - J4
7 | - J5
8 | - Al
9 | - Ij
10 | - J1
11 | abbr_month_names:
12 | -
13 | - Jan
14 | - Feb
15 | - Mac
16 | - Apr
17 | - Mei
18 | - Jun
19 | - Jul
20 | - Ago
21 | - Sep
22 | - Okt
23 | - Nov
24 | - Des
25 | day_names:
26 | - Jumapili
27 | - Jumatatu
28 | - Jumanne
29 | - Jumatano
30 | - Alhamisi
31 | - Ijumaa
32 | - Jumamosi
33 | formats:
34 | default: ! '%d-%m-%Y'
35 | long: ! '%e %B, %Y'
36 | short: ! '%e %b'
37 | month_names:
38 | -
39 | - Mwezi wa kwanza
40 | - Mwezi wa pili
41 | - Mwezi wa tatu
42 | - Mwezi wa nne
43 | - Mwezi wa tano
44 | - Mwezi wa sita
45 | - Mwezi wa saba
46 | - Mwezi wa nane
47 | - Mwezi wa tisa
48 | - Mwezi wa kumi
49 | - Mwezi wa kumi na moja
50 | - Mwezi wa kumi na mbili
51 | order:
52 | - :day
53 | - :month
54 | - :year
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: kama saa limoja
59 | other: kama masaa %{count}
60 | about_x_months:
61 | one: kama mwezi 1
62 | other: kama miezi %{count}
63 | about_x_years:
64 | one: kama mwaka 1
65 | other: kama miaka %{count}
66 | almost_x_years:
67 | one: karibia mwaka
68 | other: karibia miaka %{count}
69 | half_a_minute: nusu dakika
70 | less_than_x_minutes:
71 | one: chini ya dakika 1
72 | other: chini ya dakika %{count}
73 | less_than_x_seconds:
74 | one: chini ya sekunde 1
75 | other: chini ya sekunde %{count}
76 | over_x_years:
77 | one: zaidi ya mwaka 1
78 | other: zaidi ya miaka %{count}
79 | x_days:
80 | one: siku 1
81 | other: siku %{count}
82 | x_minutes:
83 | one: dakika 1
84 | other: dakika %{count}
85 | x_months:
86 | one: mwezi 1
87 | other: miezi %{count}
88 | x_seconds:
89 | one: sekunde 1
90 | other: sekunde %{count}
91 | prompts:
92 | day: Siku
93 | hour: Saa
94 | minute: Dakika
95 | month: Mwezi
96 | second: Sekunde
97 | year: Mwaka
98 | errors:
99 | format: ! '%{attribute} %{message}'
100 | messages:
101 | accepted: lazima ikubaliwe
102 | blank: haitakiwi kuwa wazi
103 | confirmation: haifanani na hapo chini
104 | empty: haitakiwi kuwa tupu
105 | equal_to: z/iwe sawa na %{count}
106 | even: z/iwe shufwa
107 | exclusion: haiwezi kutumika
108 | greater_than: z/iwe zaidi ya %{count}
109 | greater_than_or_equal_to: z/iwe sawa ama zaidi ya %{count}
110 | inclusion: haipo kwenye orodha
111 | invalid: haifai
112 | less_than: z/isizidi %{count}
113 | less_than_or_equal_to: z/iwe sawa na, ama chini ya %{count}
114 | not_a_number: inaruhusiwa namba tu
115 | not_an_integer: inaruhusiwa namba tu
116 | odd: z/iwe witiri
117 | record_invalid: ! 'Uhalalishaji umeshindikana: %{errors}'
118 | taken: imesajiliwa
119 | too_long: ndefu sana (isizidi herufi %{count})
120 | too_short: fupi mno (isipungue herufi %{count})
121 | wrong_length: idadi ya herufi hazilingani (inatakiwa %{count})
122 | template:
123 | body: ! 'Tafadhali kagua sehemu zifuatazo:'
124 | header:
125 | one: ! '%{model} haikuhifadhiwa kwa sababu moja.'
126 | other: ! '%{model} haikuhifadhiwa kwa sababu %{count}.'
127 | helpers:
128 | select:
129 | prompt: Tafadhali teua
130 | submit:
131 | create: Unda %{model}
132 | submit: Akibisha %{model}
133 | update: Sasaisha %{model}
134 | number:
135 | currency:
136 | format:
137 | delimiter: .
138 | format: ! '%n%u'
139 | precision: 2
140 | separator: ! ','
141 | significant: false
142 | strip_insignificant_zeros: false
143 | unit: /=
144 | format:
145 | delimiter: .
146 | precision: 2
147 | separator: ! ','
148 | significant: false
149 | strip_insignificant_zeros: false
150 | human:
151 | decimal_units:
152 | format: ! '%n %u'
153 | units:
154 | billion: Bilioni
155 | million: Milioni
156 | quadrillion: Kuadrilioni
157 | thousand: Elfu
158 | trillion: Trilioni
159 | unit: ''
160 | format:
161 | delimiter: ''
162 | precision: 3
163 | significant: true
164 | strip_insignificant_zeros: true
165 | storage_units:
166 | format: ! '%n %u'
167 | units:
168 | byte: Baiti
169 | gb: GB
170 | kb: KB
171 | mb: MB
172 | tb: TB
173 | percentage:
174 | format:
175 | delimiter: ''
176 | precision:
177 | format:
178 | delimiter: ''
179 | support:
180 | array:
181 | last_word_connector: ! ', na '
182 | two_words_connector: ! ' na '
183 | words_connector: ! ', '
184 | time:
185 | am: am
186 | formats:
187 | default: ! '%a, %d %b %Y %H:%M:%S'
188 | long: ! '%A, %e. %B %Y, %H:%M:%S'
189 | short: ! '%e %b %Y %H:%M'
190 | pm: pm
191 |
--------------------------------------------------------------------------------
/locales/rails-i18n/th.yml:
--------------------------------------------------------------------------------
1 | th:
2 | date:
3 | abbr_day_names:
4 | - อา
5 | - จ
6 | - อ
7 | - พ
8 | - พฤ
9 | - ศ
10 | - ส
11 | abbr_month_names:
12 | -
13 | - ม.ค.
14 | - ก.พ.
15 | - มี.ค.
16 | - เม.ย.
17 | - พ.ค.
18 | - มิ.ย.
19 | - ก.ค.
20 | - ส.ค.
21 | - ก.ย.
22 | - ต.ค.
23 | - พ.ย.
24 | - ธ.ค.
25 | day_names:
26 | - อาทิตย์
27 | - จันทร์
28 | - อังคาร
29 | - พุธ
30 | - พฤหัสบดี
31 | - ศุกร์
32 | - เสาร์
33 | formats:
34 | default: ! '%d-%m-%Y'
35 | long: ! '%d %B %Y'
36 | short: ! '%d %b'
37 | month_names:
38 | -
39 | - มกราคม
40 | - กุมภาพันธ์
41 | - มีนาคม
42 | - เมษายน
43 | - พฤษภาคม
44 | - มิถุนายน
45 | - กรกฎาคม
46 | - สิงหาคม
47 | - กันยายน
48 | - ตุลาคม
49 | - พฤศจิกายน
50 | - ธันวาคม
51 | order:
52 | - :day
53 | - :month
54 | - :year
55 | datetime:
56 | distance_in_words:
57 | about_x_hours: ประมาณ %{count} ชั่วโมง
58 | about_x_months: ประมาณ %{count} เดือน
59 | about_x_years: ประมาณ %{count} ปี
60 | almost_x_years: เกือบ %{count} ปี
61 | half_a_minute: ครึ่งนาที
62 | less_than_x_minutes: น้อยกว่า %{count} นาที
63 | less_than_x_seconds: น้อยกว่า %{count} วินาที
64 | over_x_years: มากกว่า %{count} ปี
65 | x_days: ! '%{count} วัน'
66 | x_minutes: ! '%{count} นาที'
67 | x_months: ! '%{count} เดือน'
68 | x_seconds: ! '%{count} วินาที'
69 | prompts:
70 | day: วัน
71 | hour: ชั่วโมง
72 | minute: นาที
73 | month: เดือน
74 | second: วินาที
75 | year: ปี
76 | errors:
77 | format: ! '%{attribute} %{message}'
78 | messages:
79 | accepted: ต้องถูกยอมรับ
80 | blank: ต้องไม่เว้นว่างเอาไว้
81 | confirmation: ไม่ตรงกับการยืนยัน
82 | empty: ต้องไม่เว้นว่างเอาไว้
83 | equal_to: ต้องมีค่าเท่ากับ %{count}
84 | even: ต้องเป็นจำนวนคู่
85 | exclusion: ไม่ได้รับอนุญาตให้ใช้
86 | greater_than: ต้องมากกว่า %{count}
87 | greater_than_or_equal_to: ต้องมากกว่าหรือเท่ากับ %{count}
88 | inclusion: ไม่ได้อยู่ในรายการ
89 | invalid: ไม่ถูกต้อง
90 | less_than: ต้องมีค่าน้อยกว่า %{count}
91 | less_than_or_equal_to: ต้องมีค่าน้อยกว่าหรือเท่ากับ %{count}
92 | not_a_number: ไม่ใช่ตัวเลข
93 | not_an_integer: ไม่ใช่จำนวนเต็ม
94 | odd: ต้องเป็นจำนวนคี่
95 | record_invalid: ! 'ไม่ผ่านการตรวจสอบ: %{errors}'
96 | taken: ถูกใช้ไปแล้ว
97 | too_long: ยาวเกินไป (ต้องไม่เกิน %{count} ตัวอักษร)
98 | too_short: สั้นเกินไป (ต้องยาวกว่า %{count} ตัวอักษร)
99 | wrong_length: มีความยาวไม่ถูกต้อง (ต้องมีความยาว %{count} ตัวอักษร)
100 | template:
101 | body: ! 'โปรดตรวจสอบข้อมูลในช่องต่อไปนี้:'
102 | header: พบข้อผิดพลาด %{count} ประการ ทำให้ไม่สามารถบันทึก%{model}ได้
103 | helpers:
104 | select:
105 | prompt: โปรดเลือก
106 | submit:
107 | create: สร้าง%{model}
108 | submit: บันทึก%{model}
109 | update: ปรับปรุง%{model}
110 | number:
111 | currency:
112 | format:
113 | delimiter: ! ','
114 | format: ! '%n %u'
115 | precision: 2
116 | separator: .
117 | significant: false
118 | strip_insignificant_zeros: false
119 | unit: บาท
120 | format:
121 | delimiter: ! ','
122 | precision: 3
123 | separator: .
124 | significant: false
125 | strip_insignificant_zeros: false
126 | human:
127 | decimal_units:
128 | format: ! '%n %u'
129 | units:
130 | billion: พันล้าน
131 | million: ล้าน
132 | quadrillion: พันล้านล้าน
133 | thousand: พัน
134 | trillion: ล้านล้าน
135 | unit: ''
136 | format:
137 | delimiter: ''
138 | precision: 3
139 | significant: true
140 | strip_insignificant_zeros: true
141 | storage_units:
142 | format: ! '%n %u'
143 | units:
144 | byte: ไบต์
145 | gb: จิกะไบต์
146 | kb: กิโลไบต์
147 | mb: เมกะไบต์
148 | tb: เทระไบต์
149 | percentage:
150 | format:
151 | delimiter: ''
152 | precision:
153 | format:
154 | delimiter: ''
155 | support:
156 | array:
157 | last_word_connector: ! ', และ '
158 | two_words_connector: ! ' และ '
159 | words_connector: ! ', '
160 | time:
161 | am: ก่อนเที่ยง
162 | formats:
163 | default: ! '%a %d %b %Y %H:%M:%S %z'
164 | long: ! '%d %B %Y %H:%M น.'
165 | short: ! '%d %b %H:%M น.'
166 | pm: หลังเที่ยง
167 |
--------------------------------------------------------------------------------
/locales/rails-i18n/zh-CN.yml:
--------------------------------------------------------------------------------
1 | zh-CN:
2 | date:
3 | abbr_day_names:
4 | - 周日
5 | - 周一
6 | - 周二
7 | - 周三
8 | - 周四
9 | - 周五
10 | - 周六
11 | abbr_month_names:
12 | -
13 | - 1月
14 | - 2月
15 | - 3月
16 | - 4月
17 | - 5月
18 | - 6月
19 | - 7月
20 | - 8月
21 | - 9月
22 | - 10月
23 | - 11月
24 | - 12月
25 | day_names:
26 | - 星期日
27 | - 星期一
28 | - 星期二
29 | - 星期三
30 | - 星期四
31 | - 星期五
32 | - 星期六
33 | formats:
34 | default: ! '%Y-%m-%d'
35 | long: ! '%Y年%b%d日'
36 | short: ! '%b%d日'
37 | month_names:
38 | -
39 | - 一月
40 | - 二月
41 | - 三月
42 | - 四月
43 | - 五月
44 | - 六月
45 | - 七月
46 | - 八月
47 | - 九月
48 | - 十月
49 | - 十一月
50 | - 十二月
51 | order:
52 | - :year
53 | - :month
54 | - :day
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: 大约一小时
59 | other: 大约 %{count} 小时
60 | about_x_months:
61 | one: 大约一个月
62 | other: 大约 %{count} 个月
63 | about_x_years:
64 | one: 大约一年
65 | other: 大约 %{count} 年
66 | almost_x_years:
67 | one: 接近一年
68 | other: 接近 %{count} 年
69 | half_a_minute: 半分钟
70 | less_than_x_minutes:
71 | one: 不到一分钟
72 | other: 不到 %{count} 分钟
73 | less_than_x_seconds:
74 | one: 不到一秒
75 | other: 不到 %{count} 秒
76 | over_x_years:
77 | one: 一年多
78 | other: ! '%{count} 年多'
79 | x_days:
80 | one: 一天
81 | other: ! '%{count} 天'
82 | x_minutes:
83 | one: 一分钟
84 | other: ! '%{count} 分钟'
85 | x_months:
86 | one: 一个月
87 | other: ! '%{count} 个月'
88 | x_seconds:
89 | one: 一秒
90 | other: ! '%{count} 秒'
91 | prompts:
92 | day: 日
93 | hour: 时
94 | minute: 分
95 | month: 月
96 | second: 秒
97 | year: 年
98 | errors:
99 | format: ! '%{attribute}%{message}'
100 | messages:
101 | accepted: 必须是可被接受的
102 | blank: 不能为空字符
103 | present: 必须是空白
104 | confirmation: 与确认值不匹配
105 | empty: 不能留空
106 | equal_to: 必须等于 %{count}
107 | even: 必须为双数
108 | exclusion: 是保留关键字
109 | greater_than: 必须大于 %{count}
110 | greater_than_or_equal_to: 必须大于或等于 %{count}
111 | inclusion: 不包含于列表中
112 | invalid: 是无效的
113 | less_than: 必须小于 %{count}
114 | less_than_or_equal_to: 必须小于或等于 %{count}
115 | not_a_number: 不是数字
116 | not_an_integer: 必须是整数
117 | odd: 必须为单数
118 | record_invalid: ! '验证失败: %{errors}'
119 | restrict_dependent_destroy:
120 | one: 由于 %{record} 需要此记录,所以无法移除记录
121 | many: 由于 %{record} 需要此记录,所以无法移除记录
122 | taken: 已经被使用
123 | too_long:
124 | one: 过长(最长为一个字符)
125 | other: 过长(最长为 %{count} 个字符)
126 | too_short:
127 | one: 过短(最短为一个字符)
128 | other: 过短(最短为 %{count} 个字符)
129 | wrong_length:
130 | one: 长度非法(必须为一个字符)
131 | other: 长度非法(必须为 %{count} 个字符)
132 | other_than: 长度非法(不可为 %{count} 个字符
133 | template:
134 | body: 如下字段出现错误:
135 | header:
136 | one: 有 1 个错误发生导致「%{model}」无法被保存。
137 | other: 有 %{count} 个错误发生导致「%{model}」无法被保存。
138 | helpers:
139 | select:
140 | prompt: 请选择
141 | submit:
142 | create: 新增%{model}
143 | submit: 储存%{model}
144 | update: 更新%{model}
145 | number:
146 | currency:
147 | format:
148 | delimiter: ! ','
149 | format: ! '%u %n'
150 | precision: 2
151 | separator: .
152 | significant: false
153 | strip_insignificant_zeros: false
154 | unit: CN¥
155 | format:
156 | delimiter: ! ','
157 | precision: 3
158 | separator: .
159 | significant: false
160 | strip_insignificant_zeros: false
161 | human:
162 | decimal_units:
163 | format: ! '%n %u'
164 | units:
165 | billion: 十亿
166 | million: 百万
167 | quadrillion: 千兆
168 | thousand: 千
169 | trillion: 兆
170 | unit: ''
171 | format:
172 | delimiter: ''
173 | precision: 1
174 | significant: false
175 | strip_insignificant_zeros: false
176 | storage_units:
177 | format: ! '%n %u'
178 | units:
179 | byte:
180 | one: Byte
181 | other: Bytes
182 | gb: GB
183 | kb: KB
184 | mb: MB
185 | tb: TB
186 | percentage:
187 | format:
188 | delimiter: ''
189 | precision:
190 | format:
191 | delimiter: ''
192 | support:
193 | array:
194 | last_word_connector: ! ', 和 '
195 | two_words_connector: ! ' 和 '
196 | words_connector: ! ', '
197 | time:
198 | am: 上午
199 | formats:
200 | default: ! '%Y年%b%d日 %A %H:%M:%S %Z'
201 | long: ! '%Y年%b%d日 %H:%M'
202 | short: ! '%b%d日 %H:%M'
203 | pm: 下午
204 |
--------------------------------------------------------------------------------
/locales/rails-i18n/zh-HK.yml:
--------------------------------------------------------------------------------
1 | zh-HK:
2 | date:
3 | abbr_day_names:
4 | - 周日
5 | - 周一
6 | - 周二
7 | - 周三
8 | - 周四
9 | - 周五
10 | - 周六
11 | abbr_month_names:
12 | -
13 | - 1月
14 | - 2月
15 | - 3月
16 | - 4月
17 | - 5月
18 | - 6月
19 | - 7月
20 | - 8月
21 | - 9月
22 | - 10月
23 | - 11月
24 | - 12月
25 | day_names:
26 | - 星期日
27 | - 星期一
28 | - 星期二
29 | - 星期三
30 | - 星期四
31 | - 星期五
32 | - 星期六
33 | formats:
34 | default: ! '%Y-%m-%d'
35 | long: ! '%Y年%b%d日'
36 | short: ! '%b%d日'
37 | month_names:
38 | -
39 | - 一月
40 | - 二月
41 | - 三月
42 | - 四月
43 | - 五月
44 | - 六月
45 | - 七月
46 | - 八月
47 | - 九月
48 | - 十月
49 | - 十一月
50 | - 十二月
51 | order:
52 | - :year
53 | - :month
54 | - :day
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: 約一小時
59 | other: 約%{count}小時
60 | about_x_months:
61 | one: 約一個月
62 | other: 約%{count}個月
63 | about_x_years:
64 | one: 約一年
65 | other: 約%{count}年
66 | almost_x_years:
67 | one: 接近一年
68 | other: 接近%{count}年
69 | half_a_minute: 半分鐘
70 | less_than_x_minutes:
71 | one: 不到一分鐘
72 | other: 不到%{count}分鐘
73 | less_than_x_seconds:
74 | one: 不到一秒
75 | other: 不到%{count}秒
76 | over_x_years:
77 | one: 超過一年
78 | other: 超過%{count}年
79 | x_days:
80 | one: 一天
81 | other: ! '%{count}天'
82 | x_minutes:
83 | one: 一分鐘
84 | other: ! '%{count}分鐘'
85 | x_months:
86 | one: 一個月
87 | other: ! '%{count}個月'
88 | x_seconds:
89 | one: 一秒
90 | other: ! '%{count}秒'
91 | prompts:
92 | day: 日
93 | hour: 時
94 | minute: 分
95 | month: 月
96 | second: 秒
97 | year: 年
98 | errors:
99 | format: ! '%{message}'
100 | messages:
101 | accepted: 必定要接受%{attribute}
102 | blank: ! '%{attribute}不可以是空白'
103 | present: ! '%{attribute}必定要是空白'
104 | confirmation: ! '不符合%{attribute}'
105 | empty: ! '%{attribute}不可以留空'
106 | equal_to: ! '%{attribute}必須等於%{count}'
107 | even: ! '%{attribute}必須要是雙數'
108 | exclusion: ! '%{attribute}是被保留的關鍵字'
109 | greater_than: ! '%{attribute}必須大於%{count}'
110 | greater_than_or_equal_to: ! '%{attribute}必須大於或等於%{count}'
111 | inclusion: ! '%{attribute}沒有包含在列表中'
112 | invalid: ! '%{attribute}是無效的'
113 | less_than: ! '%{attribute}必須小於%{count}'
114 | less_than_or_equal_to: ! '%{attribute}必須小於或等於%{count}'
115 | not_a_number: ! '%{attribute}不是數字'
116 | not_an_integer: ! '%{attribute}必須是整數'
117 | odd: ! '%{attribute}必須是單數'
118 | record_invalid: ! '%{attribute}驗證失敗︰%{errors}'
119 | restrict_dependent_destroy:
120 | one: 由於%{record}依賴此記錄,無法移除
121 | many: 由於%{record}依賴此記錄,無法移除
122 | taken: ! '%{attribute}已被使用'
123 | too_long:
124 | one: 太長(最長為一個字元)
125 | other: 太長(最長為%{count}個字元)
126 | too_short:
127 | one: 太短(最少為一個字元)
128 | other: 太短(最少為%{count}個字元)
129 | wrong_length:
130 | one: 字數錯誤 (應為一個字元)
131 | other: 字數錯誤 (應為%{count}個字元)
132 | other_than: ! '%{attribute}唔可以係%{count}'
133 | template:
134 | body: 以下欄位發生問題︰
135 | header:
136 | one: 發生一項錯誤,以致%{model}未能儲存。
137 | other: 發生%{count}項錯誤,以致%{model}未能儲存。
138 | helpers:
139 | select:
140 | prompt: 請選擇
141 | submit:
142 | create: 新增%{model}
143 | submit: 儲存%{model}
144 | update: 更新%{model}
145 | number:
146 | currency:
147 | format:
148 | delimiter: ! ','
149 | format: ! '%u %n'
150 | precision: 2
151 | separator: .
152 | significant: false
153 | strip_insignificant_zeros: false
154 | unit: HK$
155 | format:
156 | delimiter: ! ','
157 | precision: 3
158 | separator: .
159 | significant: false
160 | strip_insignificant_zeros: false
161 | human:
162 | decimal_units:
163 | format: ! '%n %u'
164 | units:
165 | billion: 十億
166 | million: 百萬
167 | quadrillion: 千兆
168 | thousand: 千
169 | trillion: 兆
170 | unit: ''
171 | format:
172 | delimiter: ''
173 | precision: 1
174 | significant: false
175 | strip_insignificant_zeros: false
176 | storage_units:
177 | format: ! '%n %u'
178 | units:
179 | byte:
180 | one: Byte
181 | other: Bytes
182 | gb: GB
183 | kb: KB
184 | mb: MB
185 | tb: TB
186 | percentage:
187 | format:
188 | delimiter: ''
189 | format: '%n%'
190 | precision:
191 | format:
192 | delimiter: ''
193 | support:
194 | array:
195 | last_word_connector: ! '和'
196 | two_words_connector: ! '和'
197 | words_connector: 、
198 | time:
199 | am: 上午
200 | formats:
201 | default: ! '%Y年%b%d日 %A %H:%M:%S %Z'
202 | long: ! '%Y年%b%d日 %H:%M'
203 | short: ! '%b%d日 %H:%M'
204 | pm: 下午
205 |
--------------------------------------------------------------------------------
/locales/rails-i18n/zh-TW.yml:
--------------------------------------------------------------------------------
1 | zh-TW:
2 | date:
3 | abbr_day_names:
4 | - 周日
5 | - 周一
6 | - 周二
7 | - 周三
8 | - 周四
9 | - 周五
10 | - 周六
11 | abbr_month_names:
12 | -
13 | - 1月
14 | - 2月
15 | - 3月
16 | - 4月
17 | - 5月
18 | - 6月
19 | - 7月
20 | - 8月
21 | - 9月
22 | - 10月
23 | - 11月
24 | - 12月
25 | day_names:
26 | - 星期日
27 | - 星期一
28 | - 星期二
29 | - 星期三
30 | - 星期四
31 | - 星期五
32 | - 星期六
33 | formats:
34 | default: ! '%Y-%m-%d'
35 | long: ! '%Y年%b%d日'
36 | short: ! '%b%d日'
37 | month_names:
38 | -
39 | - 一月
40 | - 二月
41 | - 三月
42 | - 四月
43 | - 五月
44 | - 六月
45 | - 七月
46 | - 八月
47 | - 九月
48 | - 十月
49 | - 十一月
50 | - 十二月
51 | order:
52 | - :year
53 | - :month
54 | - :day
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: 大約一小時
59 | other: 大約 %{count} 小時
60 | about_x_months:
61 | one: 大約一個月
62 | other: 大約 %{count} 個月
63 | about_x_years:
64 | one: 大約一年
65 | other: 大約 %{count} 年
66 | almost_x_years:
67 | one: 接近一年
68 | other: 接近 %{count} 年
69 | half_a_minute: 半分鐘
70 | less_than_x_minutes:
71 | one: 不到一分鐘
72 | other: 不到 %{count} 分鐘
73 | less_than_x_seconds:
74 | one: 不到一秒
75 | other: 不到 %{count} 秒
76 | over_x_years:
77 | one: 一年多
78 | other: ! '%{count} 年多'
79 | x_days:
80 | one: 一天
81 | other: ! '%{count} 天'
82 | x_minutes:
83 | one: 一分鐘
84 | other: ! '%{count} 分鐘'
85 | x_months:
86 | one: 一個月
87 | other: ! '%{count} 個月'
88 | x_seconds:
89 | one: 一秒
90 | other: ! '%{count} 秒'
91 | prompts:
92 | day: 日
93 | hour: 時
94 | minute: 分
95 | month: 月
96 | second: 秒
97 | year: 年
98 | errors:
99 | format: ! '%{attribute} %{message}'
100 | messages:
101 | accepted: 必須是可被接受的
102 | blank: 不能是空白字元
103 | present: 必須是空白
104 | confirmation: 兩次輸入須一致
105 | empty: 不能留空
106 | equal_to: 必須等於 %{count}
107 | even: 必須是偶數
108 | exclusion: 是被保留的關鍵字
109 | greater_than: 必須大於 %{count}
110 | greater_than_or_equal_to: 必須大於或等於 %{count}
111 | inclusion: 沒有包含在列表中
112 | invalid: 是無效的
113 | less_than: 必須小於 %{count}
114 | less_than_or_equal_to: 必須小於或等於 %{count}
115 | not_a_number: 不是數字
116 | not_an_integer: 必須是整數
117 | odd: 必須是奇數
118 | record_invalid: ! '校驗失敗: %{errors}'
119 | restrict_dependent_destroy:
120 | one: 由於 %{record} 需要此記錄,所以無法移除記錄
121 | many: 由於 %{record} 需要此記錄,所以無法移除記錄
122 | taken: 已經被使用
123 | too_long:
124 | one: 過長(最長是一個字)
125 | other: 過長(最長是 %{count} 個字)
126 | too_short:
127 | one: 過短(最短是一個字)
128 | other: 過短(最短是 %{count} 個字)
129 | wrong_length:
130 | one: 字數錯誤 (必須是一個字)
131 | other: 字數錯誤 (必須是 %{count} 個字)
132 | other_than: 不可以是 %{count} 個字
133 | template:
134 | body: 以下欄位發生問題:
135 | header:
136 | one: 有 1 個錯誤發生使得「%{model}」無法被儲存。
137 | other: 有 %{count} 個錯誤發生使得「%{model}」無法被儲存。
138 | helpers:
139 | select:
140 | prompt: 請選擇
141 | submit:
142 | create: 新增%{model}
143 | submit: 儲存%{model}
144 | update: 更新%{model}
145 | number:
146 | currency:
147 | format:
148 | delimiter: ! ','
149 | format: ! '%u %n'
150 | precision: 2
151 | separator: .
152 | significant: false
153 | strip_insignificant_zeros: false
154 | unit: NT$
155 | format:
156 | delimiter: ! ','
157 | precision: 3
158 | separator: .
159 | significant: false
160 | strip_insignificant_zeros: false
161 | human:
162 | decimal_units:
163 | format: ! '%n %u'
164 | units:
165 | billion: 十億
166 | million: 百萬
167 | quadrillion: 千兆
168 | thousand: 千
169 | trillion: 兆
170 | unit: ''
171 | format:
172 | delimiter: ''
173 | precision: 1
174 | significant: false
175 | strip_insignificant_zeros: false
176 | storage_units:
177 | format: ! '%n %u'
178 | units:
179 | byte:
180 | one: 位元組
181 | other: 位元組
182 | gb: GB
183 | kb: KB
184 | mb: MB
185 | tb: TB
186 | percentage:
187 | format:
188 | delimiter: ''
189 | precision:
190 | format:
191 | delimiter: ''
192 | support:
193 | array:
194 | last_word_connector: ! ', 和 '
195 | two_words_connector: ! ' 和 '
196 | words_connector: ! ', '
197 | time:
198 | am: 上午
199 | formats:
200 | default: ! '%Y年%b%d日 %A %H:%M:%S %Z'
201 | long: ! '%Y年%b%d日 %H:%M'
202 | short: ! '%b%d日 %H:%M'
203 | pm: 下午
204 |
--------------------------------------------------------------------------------
/locales/rails-i18n/zh-YUE.yml:
--------------------------------------------------------------------------------
1 | zh-YUE:
2 | date:
3 | abbr_day_names:
4 | - 周日
5 | - 周一
6 | - 周二
7 | - 周三
8 | - 周四
9 | - 周五
10 | - 周六
11 | abbr_month_names:
12 | -
13 | - 1月
14 | - 2月
15 | - 3月
16 | - 4月
17 | - 5月
18 | - 6月
19 | - 7月
20 | - 8月
21 | - 9月
22 | - 10月
23 | - 11月
24 | - 12月
25 | day_names:
26 | - 星期日
27 | - 星期一
28 | - 星期二
29 | - 星期三
30 | - 星期四
31 | - 星期五
32 | - 星期六
33 | formats:
34 | default: ! '%Y-%m-%d'
35 | long: ! '%Y年%b%d日'
36 | short: ! '%b%d日'
37 | month_names:
38 | -
39 | - 一月
40 | - 二月
41 | - 三月
42 | - 四月
43 | - 五月
44 | - 六月
45 | - 七月
46 | - 八月
47 | - 九月
48 | - 十月
49 | - 十一月
50 | - 十二月
51 | order:
52 | - :year
53 | - :month
54 | - :day
55 | datetime:
56 | distance_in_words:
57 | about_x_hours:
58 | one: 大概一個鐘
59 | other: 大概%{count}個鐘
60 | about_x_months:
61 | one: 大概一個月
62 | other: 大概%{count}個月
63 | about_x_years:
64 | one: 大概一年
65 | other: 大概%{count}年
66 | almost_x_years:
67 | one: 差唔多一年
68 | other: 差唔多%{count}年
69 | half_a_minute: 半分鐘
70 | less_than_x_minutes:
71 | one: 唔夠一分鐘
72 | other: 唔夠%{count}分鐘
73 | less_than_x_seconds:
74 | one: 唔夠一秒
75 | other: 唔夠%{count}秒
76 | over_x_years:
77 | one: 超過一年
78 | other: 超過%{count}年
79 | x_days:
80 | one: 一日
81 | other: ! '%{count}日'
82 | x_minutes:
83 | one: 一分鐘
84 | other: ! '%{count}分鐘'
85 | x_months:
86 | one: 一個月
87 | other: ! '%{count}個月'
88 | x_seconds:
89 | one: 一秒
90 | other: ! '%{count}秒'
91 | prompts:
92 | day: 日
93 | hour: 點
94 | minute: 分
95 | month: 月
96 | second: 秒
97 | year: 年
98 | errors:
99 | format: ! '%{message}'
100 | messages:
101 | accepted: 一定要接受%{attribute}
102 | blank: ! '%{attribute}唔可以空白'
103 | present: ! '%{attribute}要空白'
104 | confirmation: ! '%{attribute}唔夾'
105 | empty: ! '%{attribute}唔可以漏空'
106 | equal_to: ! '%{attribute}要係%{count}'
107 | even: ! '%{attribute}要係雙數'
108 | exclusion: ! '%{attribute}唔用得'
109 | greater_than: ! '%{attribute}要大過%{count}'
110 | greater_than_or_equal_to: ! '%{attribute}要大過或者等於%{count}'
111 | inclusion: ! '%{attribute}唔喺表入面'
112 | invalid: ! '%{attribute}無效'
113 | less_than: ! '%{attribute}要細過%{count}'
114 | less_than_or_equal_to: ! '%{attribute}要細過或者等於%{count}'
115 | not_a_number: ! '%{attribute}唔係一個數'
116 | not_an_integer: ! '%{attribute}要係整數'
117 | odd: ! '%{attribute}要係單數'
118 | record_invalid: ! '%{attribute}有問題︰%{errors}'
119 | restrict_dependent_destroy:
120 | one: 唔可以刪除,因為%{record}要用佢
121 | many: 唔可以刪除,因為%{record}要用佢
122 | taken: ! '%{attribute}已經用過'
123 | too_long:
124 | one: 太長(最多1個字)
125 | other: 太長(最多%{count}個字)
126 | too_short:
127 | one: 太短(最少1個字)
128 | other: 太短(最少%{count}個字)
129 | wrong_length:
130 | one: 唔啱字數 (要係1個字)
131 | other: 唔啱字數 (要係%{count}個字)
132 | other_than: ! '%{attribute}唔可以係%{count}'
133 | template:
134 | body: 呢啲有問題︰
135 | header:
136 | one: 有一個問題,%{model}儲存唔到。
137 | other: 有%{count}個問題,%{model}儲存唔到。
138 | helpers:
139 | select:
140 | prompt: 喺度揀
141 | submit:
142 | create: 新嘅%{model}
143 | submit: 儲存%{model}
144 | update: 更新%{model}
145 | number:
146 | currency:
147 | format:
148 | delimiter: ! ','
149 | format: ! '%u %n'
150 | precision: 2
151 | separator: .
152 | significant: false
153 | strip_insignificant_zeros: false
154 | unit: HK$
155 | format:
156 | delimiter: ! ','
157 | precision: 3
158 | separator: .
159 | significant: false
160 | strip_insignificant_zeros: false
161 | human:
162 | decimal_units:
163 | format: ! '%n %u'
164 | units:
165 | billion: 十億
166 | million: 百萬
167 | quadrillion: 千兆
168 | thousand: 千
169 | trillion: 兆
170 | unit: ''
171 | format:
172 | delimiter: ''
173 | precision: 1
174 | significant: false
175 | strip_insignificant_zeros: false
176 | storage_units:
177 | format: ! '%n %u'
178 | units:
179 | byte:
180 | one: Byte
181 | other: Bytes
182 | gb: GB
183 | kb: KB
184 | mb: MB
185 | tb: TB
186 | percentage:
187 | format:
188 | delimiter: ''
189 | format: '%n%'
190 | precision:
191 | format:
192 | delimiter: ''
193 | support:
194 | array:
195 | last_word_connector: 同
196 | two_words_connector: 同
197 | words_connector: 、
198 | time:
199 | am: 上晝
200 | formats:
201 | default: ! '%Y年%b%d號 %A %H:%M:%S %Z'
202 | long: ! '%Y年%b%d號 %H:%M'
203 | short: ! '%b%d號 %H:%M'
204 | pm: 下晝
205 |
--------------------------------------------------------------------------------
/test/site/amber/config.rb:
--------------------------------------------------------------------------------
1 | @title = "Site Title"
2 | if $path_prefix
3 | @path_prefix = $path_prefix
4 | end
5 | @default_locale = :en
6 | @locales = [:en, :de]
7 | @short_paths = true
8 |
--------------------------------------------------------------------------------
/test/site/amber/layouts/default.html.haml:
--------------------------------------------------------------------------------
1 | = yield
--------------------------------------------------------------------------------
/test/site/amber/locales/en.yml:
--------------------------------------------------------------------------------
1 | en:
2 | yep: Yep!
--------------------------------------------------------------------------------
/test/site/amber/menu.txt:
--------------------------------------------------------------------------------
1 | aaa
2 | bbb
3 | ccc
4 | ddd
5 | fff
--------------------------------------------------------------------------------
/test/site/apache.conf:
--------------------------------------------------------------------------------
1 | Listen 8888
2 | HostnameLookups Off
3 | PidFile DIR/apache.pid
4 | ServerName 127.0.0.1
5 |
6 | LogLevel debug rewrite:trace4
7 | ErrorLogFormat "%m %M"
8 | ErrorLog DIR/apache.log
9 | CustomLog DIR/apache.log "%r"
10 |
11 | LoadModule mpm_event_module /usr/lib/apache2/modules/mod_mpm_event.so
12 | LoadModule authz_core_module /usr/lib/apache2/modules/mod_authz_core.so
13 | LoadModule alias_module /usr/lib/apache2/modules/mod_alias.so
14 | LoadModule negotiation_module /usr/lib/apache2/modules/mod_negotiation.so
15 | LoadModule mime_module /usr/lib/apache2/modules/mod_mime.so
16 | LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
17 | LoadModule dir_module /usr/lib/apache2/modules/mod_dir.so
18 |
19 | TypesConfig /etc/mime.types
20 | DefaultLanguage en
21 | AddLanguage en .en
22 | AddLanguage de .de
23 |
24 |
25 | ServerAdmin webmaster@localhost
26 |
27 | AccessFileName .htaccess
28 | DocumentRoot "DIR/public"
29 |
30 | AllowOverride FileInfo Indexes Options=All,MultiViews
31 |
32 | Order deny,allow
33 | Allow from all
34 |
35 |
36 | Require all granted
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/test/site/apache_with_prefix.conf:
--------------------------------------------------------------------------------
1 | Listen 8888
2 | HostnameLookups Off
3 | PidFile DIR/apache.pid
4 | ServerName 127.0.0.1
5 |
6 | LogLevel debug rewrite:trace4
7 | ErrorLogFormat "%m %M"
8 | ErrorLog DIR/apache.log
9 | CustomLog DIR/apache.log "%r"
10 |
11 | LoadModule mpm_event_module /usr/lib/apache2/modules/mod_mpm_event.so
12 | LoadModule authz_core_module /usr/lib/apache2/modules/mod_authz_core.so
13 | LoadModule alias_module /usr/lib/apache2/modules/mod_alias.so
14 | LoadModule negotiation_module /usr/lib/apache2/modules/mod_negotiation.so
15 | LoadModule mime_module /usr/lib/apache2/modules/mod_mime.so
16 | LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
17 | LoadModule dir_module /usr/lib/apache2/modules/mod_dir.so
18 |
19 | TypesConfig /etc/mime.types
20 | DefaultLanguage en
21 | AddLanguage en .en
22 | AddLanguage de .de
23 |
24 |
25 | ServerAdmin webmaster@localhost
26 |
27 | DocumentRoot /srv
28 |
29 | AccessFileName .htaccess
30 | AliasMatch ^/[a-z]{2}/test(/.+|/|)$ DIR/public/$1
31 | Alias /test DIR/public/
32 |
33 |
34 | AllowOverride FileInfo Indexes Options=All,MultiViews
35 |
36 | Order deny,allow
37 | Allow from all
38 |
39 |
40 | Require all granted
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/test/site/pages/aaa/asset.css:
--------------------------------------------------------------------------------
1 | asset
--------------------------------------------------------------------------------
/test/site/pages/aaa/de.md:
--------------------------------------------------------------------------------
1 | de aaa
--------------------------------------------------------------------------------
/test/site/pages/aaa/en.md:
--------------------------------------------------------------------------------
1 | en aaa
--------------------------------------------------------------------------------
/test/site/pages/autoalias/blue/en.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leapcode/amber/af08447b47a1d104bf920fcb9caca5ad36adb6bc/test/site/pages/autoalias/blue/en.md
--------------------------------------------------------------------------------
/test/site/pages/autoalias/blue/purple/en.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leapcode/amber/af08447b47a1d104bf920fcb9caca5ad36adb6bc/test/site/pages/autoalias/blue/purple/en.md
--------------------------------------------------------------------------------
/test/site/pages/autoalias/en.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leapcode/amber/af08447b47a1d104bf920fcb9caca5ad36adb6bc/test/site/pages/autoalias/en.md
--------------------------------------------------------------------------------
/test/site/pages/autoalias/red/blue/en.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leapcode/amber/af08447b47a1d104bf920fcb9caca5ad36adb6bc/test/site/pages/autoalias/red/blue/en.md
--------------------------------------------------------------------------------
/test/site/pages/autoalias/red/blue/green/en.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leapcode/amber/af08447b47a1d104bf920fcb9caca5ad36adb6bc/test/site/pages/autoalias/red/blue/green/en.md
--------------------------------------------------------------------------------
/test/site/pages/autoalias/red/en.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leapcode/amber/af08447b47a1d104bf920fcb9caca5ad36adb6bc/test/site/pages/autoalias/red/en.md
--------------------------------------------------------------------------------
/test/site/pages/autoalias/red/orange/en.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leapcode/amber/af08447b47a1d104bf920fcb9caca5ad36adb6bc/test/site/pages/autoalias/red/orange/en.md
--------------------------------------------------------------------------------
/test/site/pages/bbb/ccc/de.md:
--------------------------------------------------------------------------------
1 | de ccc
--------------------------------------------------------------------------------
/test/site/pages/bbb/ccc/en.md:
--------------------------------------------------------------------------------
1 | en ccc
--------------------------------------------------------------------------------
/test/site/pages/bbb/ddd.md:
--------------------------------------------------------------------------------
1 | ddd
--------------------------------------------------------------------------------
/test/site/pages/bbb/en.md:
--------------------------------------------------------------------------------
1 | bbbbbbbb
2 |
3 | * bb
4 | * bb
5 |
--------------------------------------------------------------------------------
/test/site/pages/de.md:
--------------------------------------------------------------------------------
1 | de root
--------------------------------------------------------------------------------
/test/site/pages/en.md:
--------------------------------------------------------------------------------
1 | @toc = false
2 |
3 | en root
--------------------------------------------------------------------------------
/test/site/pages/fff.de.md:
--------------------------------------------------------------------------------
1 | de fff
--------------------------------------------------------------------------------
/test/site/pages/fff.en.md:
--------------------------------------------------------------------------------
1 | en fff
--------------------------------------------------------------------------------
/test/site/pages/rtl.md:
--------------------------------------------------------------------------------
1 | @title = 'right to left'
2 |
3 | التمساح [[تسمية => aaa]] قارب
4 |
5 |
--------------------------------------------------------------------------------
/test/test_helper.rb:
--------------------------------------------------------------------------------
1 | $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
2 |
3 | TESTING=true
4 |
5 | require 'rubygems'
6 | gem 'minitest'
7 | require 'minitest/autorun'
8 | require 'amber'
9 |
10 | class Minitest::Test
11 |
12 | def setup
13 | end
14 |
15 | def load_yaml_docs(file)
16 | filepath = File.dirname(__FILE__) + '/files/' + file
17 | data = {}
18 | YAML::load_stream(File.open(filepath)) do |doc|
19 | key = doc.delete("name")
20 | data[key] = doc
21 | end
22 | data
23 | end
24 |
25 | end
26 |
--------------------------------------------------------------------------------
/test/unit/property_test.rb:
--------------------------------------------------------------------------------
1 | require File.expand_path('test_helper', File.dirname(__FILE__))
2 |
3 | class PropertyTest < Minitest::Test
4 |
5 | class Page
6 | attr_accessor :parent
7 | attr_accessor :props
8 | def initialize
9 | self.props = Amber::StaticPage::PageProperties.new(self)
10 | end
11 | def prop(*args)
12 | props.prop(*args)
13 | end
14 | end
15 |
16 | def setup
17 | text_en = %(
18 | - @title = 'hi'
19 | - @author = 'you'
20 | - @created_at = 'Sun Aug 12 18:32:20 PDT 2012'
21 | - @color = 'periwinkle'
22 | - @false_value = false
23 | - @this.local_value = 'robot overlord'
24 | - @this.local_false = false
25 | - ignored = 1
26 | )
27 | text_es = %(
28 | - @title = 'hola'
29 | - @author = 'tu'
30 | - @heading = textile 'h1. hi'
31 | )
32 | @page_top = Page.new
33 | @pp = @page_top.props
34 | @page_bottom = Page.new
35 | @page_bottom.parent = @page_top
36 |
37 | @pp.eval(text_en, 'en')
38 | @pp.eval(text_es, 'es')
39 |
40 | I18n.locale = :en
41 | end
42 |
43 | def test_simple_properties
44 | assert_equal 'hi', @pp.title
45 | assert_equal 'you', @pp.author
46 | assert_equal false, @pp.false_value
47 | assert_nil @pp.ignored
48 | end
49 |
50 | def test_simple_locale
51 | assert_equal 'hi', @pp.prop(:en, :title)
52 | assert_equal 'hola', @pp.prop('es', 'title')
53 | assert_equal false, @pp.prop('es', 'false_value')
54 | assert_nil @pp.prop('es', 'ignored')
55 |
56 | I18n.locale = :en
57 | assert_equal 'hi', @pp.title
58 | I18n.locale = :es
59 | assert_equal 'hola', @pp.title
60 | end
61 |
62 | def test_fallback
63 | assert_equal 'periwinkle', @pp.prop(:es, :color)
64 | end
65 |
66 | def test_date
67 | assert_equal Time.parse('Sun Aug 12 18:32:20 PDT 2012'), @pp.prop(:es, 'created_at')
68 | end
69 |
70 | def test_textile
71 | assert_equal "hi
", @pp.prop('es', :heading)
72 | end
73 |
74 | def test_local_property
75 | assert_equal 'robot overlord', @pp.local_value
76 | assert_equal 'robot overlord', @page_top.prop(:en, 'local_value')
77 | assert_equal false, @page_top.prop(:en, :local_false)
78 | assert_equal 'robot overlord', @page_top.prop(:es, :local_value)
79 | assert_nil @page_bottom.prop(:en, :local_value)
80 | assert_nil @page_bottom.prop(:es, :local_value)
81 | end
82 |
83 | def test_inheritance
84 | assert_equal 'periwinkle', @page_bottom.prop(:en, :color)
85 | end
86 |
87 | end
88 |
--------------------------------------------------------------------------------
/test/unit/render_test.rb:
--------------------------------------------------------------------------------
1 | require File.expand_path('test_helper', File.dirname(__FILE__))
2 |
3 | class RenderTest < Minitest::Test
4 |
5 | def setup
6 | end
7 |
8 | def test_bracket_links
9 | texts = {
10 | "[[page-name]]" => [nil, 'page-name'],
11 | " [[ page-name ]] " => [nil, 'page-name'],
12 | "[[ label => page-name ]]" => ['label', 'page-name'],
13 | " [[label->page-name]] " => ['label', 'page-name'],
14 | "x[[page-name]]y" => [nil, 'page-name'],
15 | "[[ how do I? => carefully ]]" => ['how do I?', 'carefully']
16 | }
17 | texts.each do |markup, expected|
18 | Amber::Render::Filter::Bracketlink.run(markup) do |from, to|
19 | assert_equal expected, [from, to]
20 | end
21 | end
22 | end
23 |
24 | end
25 |
--------------------------------------------------------------------------------
/test/unit/test_helper.rb:
--------------------------------------------------------------------------------
1 | require File.dirname(File.dirname(__FILE__)) + '/test_helper'
--------------------------------------------------------------------------------
/test/unit/toc_test.rb:
--------------------------------------------------------------------------------
1 | require File.expand_path('test_helper', File.dirname(__FILE__))
2 |
3 | class TocTest < Minitest::Test
4 |
5 | def setup
6 | @texts ||= load_yaml_docs 'toc.yml'
7 | end
8 |
9 | def test_texts
10 | @texts.each do |name, test|
11 | if test['enabled']
12 | in_html = RedCloth.new(test['in']).to_html
13 | options = Hash[(test['options']||{}).map{|k,v| [k.to_sym,v]}] # convert keys to use symbols
14 | regex_toc = (Amber::Render::RegexTableOfContents.new(in_html, options) if test['backend'] != 'nokogiri')
15 | nokogiri_toc = (Amber::Render::NokogiriTableOfContents.new(in_html, options) if test['backend'] != 'regex')
16 | [regex_toc, nokogiri_toc].compact.each do |toc|
17 | if test['style'] == 'toc'
18 | html = toc.to_toc
19 | elsif test['style'] == 'both'
20 | html = toc.to_toc + "\n" + toc.to_html
21 | else
22 | html = toc.to_html
23 | end
24 | assert_equal test['out'], html, "toc test `#{name}` failed (using #{toc.class.name})"
25 | end
26 | end
27 | end
28 | end
29 |
30 | end
31 |
--------------------------------------------------------------------------------