active_i18n 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (138) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +105 -0
  4. data/Rakefile +35 -0
  5. data/app/assets/images/active_i18n/flags.png +0 -0
  6. data/app/assets/javascripts/active_i18n.js +1 -0
  7. data/app/assets/javascripts/active_i18n/layout.js.coffee +31 -0
  8. data/app/assets/stylesheets/active_i18n.css.sass +5 -0
  9. data/app/assets/stylesheets/active_i18n/application.css +13 -0
  10. data/app/assets/stylesheets/active_i18n/flags.css.scss +258 -0
  11. data/app/assets/stylesheets/active_i18n/list.css.sass +70 -0
  12. data/app/assets/stylesheets/active_i18n/sidebar.css.sass +60 -0
  13. data/app/assets/stylesheets/active_i18n/structure.css.sass +4 -0
  14. data/app/controllers/active_i18n/application_controller.rb +4 -0
  15. data/app/helpers/active_i18n/view_helper.rb +66 -0
  16. data/app/views/active_i18n/_content.html.haml +36 -0
  17. data/app/views/active_i18n/_sidebar.html.haml +5 -0
  18. data/app/views/layouts/active_i18n/application.html.erb +14 -0
  19. data/config/locales/en.yml +76 -0
  20. data/config/routes.rb +2 -0
  21. data/lib/active_i18n.rb +32 -0
  22. data/lib/active_i18n/active_admin.rb +28 -0
  23. data/lib/active_i18n/base_store.rb +42 -0
  24. data/lib/active_i18n/engine.rb +18 -0
  25. data/lib/active_i18n/translations_store.rb +26 -0
  26. data/lib/active_i18n/version.rb +3 -0
  27. data/lib/tasks/active_i18n_tasks.rake +4 -0
  28. data/spec/dummy/README.rdoc +261 -0
  29. data/spec/dummy/Rakefile +7 -0
  30. data/spec/dummy/app/admin/admin_users.rb +20 -0
  31. data/spec/dummy/app/admin/dashboard.rb +33 -0
  32. data/spec/dummy/app/admin/translation.rb +4 -0
  33. data/spec/dummy/app/assets/javascripts/active_admin.js +2 -0
  34. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  35. data/spec/dummy/app/assets/stylesheets/active_admin.css.scss +32 -0
  36. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  37. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  38. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  39. data/spec/dummy/app/models/admin_user.rb +17 -0
  40. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  41. data/spec/dummy/config.ru +4 -0
  42. data/spec/dummy/config/application.rb +66 -0
  43. data/spec/dummy/config/boot.rb +10 -0
  44. data/spec/dummy/config/database.yml +25 -0
  45. data/spec/dummy/config/environment.rb +5 -0
  46. data/spec/dummy/config/environments/development.rb +37 -0
  47. data/spec/dummy/config/environments/production.rb +67 -0
  48. data/spec/dummy/config/environments/test.rb +37 -0
  49. data/spec/dummy/config/initializers/active_admin.rb +210 -0
  50. data/spec/dummy/config/initializers/active_i18n.rb +3 -0
  51. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  52. data/spec/dummy/config/initializers/devise.rb +256 -0
  53. data/spec/dummy/config/initializers/inflections.rb +15 -0
  54. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  55. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  56. data/spec/dummy/config/initializers/session_store.rb +8 -0
  57. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  58. data/spec/dummy/config/locales/devise.en.yml +59 -0
  59. data/spec/dummy/config/locales/en.yml +5 -0
  60. data/spec/dummy/config/locales/en_test.yml +7 -0
  61. data/spec/dummy/config/locales/pl_test.yml +5 -0
  62. data/spec/dummy/config/routes.rb +7 -0
  63. data/spec/dummy/db/development.sqlite3 +0 -0
  64. data/spec/dummy/db/migrate/20140811102607_devise_create_admin_users.rb +48 -0
  65. data/spec/dummy/db/migrate/20140811102609_create_admin_notes.rb +17 -0
  66. data/spec/dummy/db/migrate/20140811102610_move_admin_notes_to_comments.rb +26 -0
  67. data/spec/dummy/db/schema.rb +49 -0
  68. data/spec/dummy/db/test.sqlite3 +0 -0
  69. data/spec/dummy/log/development.log +36840 -0
  70. data/spec/dummy/log/test.log +961 -0
  71. data/spec/dummy/public/404.html +26 -0
  72. data/spec/dummy/public/422.html +26 -0
  73. data/spec/dummy/public/500.html +25 -0
  74. data/spec/dummy/public/favicon.ico +0 -0
  75. data/spec/dummy/script/rails +6 -0
  76. data/spec/dummy/spec/factories/admin_users.rb +6 -0
  77. data/spec/dummy/spec/models/admin_user_spec.rb +5 -0
  78. data/spec/dummy/tmp/cache/assets/C58/410/sprockets%2F5c7886d2d5716b050cd38b9121769471 +0 -0
  79. data/spec/dummy/tmp/cache/assets/C7F/FE0/sprockets%2Fd8b50477b1b153638c7346534a0877da +0 -0
  80. data/spec/dummy/tmp/cache/assets/C8C/900/sprockets%2F1112043d14fe51296aa033bd024d0b78 +0 -0
  81. data/spec/dummy/tmp/cache/assets/C9A/D60/sprockets%2Fa62368179337c7154198e2786eeec9a8 +0 -0
  82. data/spec/dummy/tmp/cache/assets/CAD/C50/sprockets%2F8319a9f588005b0a424b90472c6a9a3f +0 -0
  83. data/spec/dummy/tmp/cache/assets/CAF/020/sprockets%2F9454bc172681345fa525aff08281b74c +0 -0
  84. data/spec/dummy/tmp/cache/assets/CB8/1D0/sprockets%2Fb510c0fc9803866436178e77582c7bad +0 -0
  85. data/spec/dummy/tmp/cache/assets/CBC/0B0/sprockets%2Fc0bba633769759659c7d4f0a2224499d +0 -0
  86. data/spec/dummy/tmp/cache/assets/CBF/620/sprockets%2F109dfac52e95799730667ba8e11e2765 +0 -0
  87. data/spec/dummy/tmp/cache/assets/CCD/670/sprockets%2F08edc1d5a073b0625304ba682985a24b +0 -0
  88. data/spec/dummy/tmp/cache/assets/CDB/040/sprockets%2Fc732474e67003a4eb840eb44c5ca9385 +0 -0
  89. data/spec/dummy/tmp/cache/assets/CDD/600/sprockets%2F65df7604a9339ce6a3d1923b472ee400 +0 -0
  90. data/spec/dummy/tmp/cache/assets/CE1/540/sprockets%2F305fa586dc7c7615d59e593120abf353 +0 -0
  91. data/spec/dummy/tmp/cache/assets/CEA/470/sprockets%2F8303f8f5f77c51100f64ff283ea6757a +0 -0
  92. data/spec/dummy/tmp/cache/assets/CEC/BA0/sprockets%2F7c5072074b471dff1cbf726f3786e548 +0 -0
  93. data/spec/dummy/tmp/cache/assets/D10/870/sprockets%2F5e7ab7f11ed7390a5ff8950121c40e49 +0 -0
  94. data/spec/dummy/tmp/cache/assets/D24/D10/sprockets%2Ff884c60f003f6ce75e3ef9f53891375a +0 -0
  95. data/spec/dummy/tmp/cache/assets/D28/200/sprockets%2Fb030b1c02160352cc756faec0ef883d5 +0 -0
  96. data/spec/dummy/tmp/cache/assets/D29/620/sprockets%2F3d664b0b71ca2fb901d77dce24215a32 +0 -0
  97. data/spec/dummy/tmp/cache/assets/D2D/2F0/sprockets%2Fd8ccd71f1767785f8489039e3d6c8a5b +0 -0
  98. data/spec/dummy/tmp/cache/assets/D33/CA0/sprockets%2F4dbc63d52f13068b8e72f3dd1107ba27 +0 -0
  99. data/spec/dummy/tmp/cache/assets/D36/2D0/sprockets%2Fcdfd2af48a61389a0dc7c751025504b7 +0 -0
  100. data/spec/dummy/tmp/cache/assets/D38/540/sprockets%2F86e1ad844bc9df4491a2a52b870421db +0 -0
  101. data/spec/dummy/tmp/cache/assets/D41/DE0/sprockets%2F9c89ee33751a67901a0ceead0d82781b +0 -0
  102. data/spec/dummy/tmp/cache/assets/D43/110/sprockets%2Fd5e364fe2e128443f5250e419af9bbc8 +0 -0
  103. data/spec/dummy/tmp/cache/assets/D44/3F0/sprockets%2F29e1206c858c89cf5453cf370dc2eca4 +0 -0
  104. data/spec/dummy/tmp/cache/assets/D45/110/sprockets%2F87892bd05e664b62bdbbc1e3704b67d9 +0 -0
  105. data/spec/dummy/tmp/cache/assets/D45/240/sprockets%2F5fa87c4a361e5f2866c52e12257c9ead +0 -0
  106. data/spec/dummy/tmp/cache/assets/D46/EB0/sprockets%2F663efa9a78c238c8a3aaf09a07d74627 +0 -0
  107. data/spec/dummy/tmp/cache/assets/D48/640/sprockets%2F9f4f18d910b678b1d0777e04cdaf6f24 +0 -0
  108. data/spec/dummy/tmp/cache/assets/D4B/C50/sprockets%2Ff28e143f4b4887e0f5e8cff05227c55b +0 -0
  109. data/spec/dummy/tmp/cache/assets/D59/D70/sprockets%2Fed9f0de1b65ae8d7ef89087c83728461 +0 -0
  110. data/spec/dummy/tmp/cache/assets/D60/F90/sprockets%2F85a232fb35c16bf87279047aa1ccbbb2 +0 -0
  111. data/spec/dummy/tmp/cache/assets/D62/770/sprockets%2F76a285eb6576ee1f11132bcd07f0eea0 +0 -0
  112. data/spec/dummy/tmp/cache/assets/D67/0C0/sprockets%2F09eed8ed6f341c0c429007ab0219ee7c +0 -0
  113. data/spec/dummy/tmp/cache/assets/D68/E10/sprockets%2F36d13da052a68af78a38a6dec93bd900 +0 -0
  114. data/spec/dummy/tmp/cache/assets/D6C/2F0/sprockets%2F107964995ee0c0bae0b46fdae574fa42 +0 -0
  115. data/spec/dummy/tmp/cache/assets/D6D/540/sprockets%2Fedbc4e34cd1e2cc70b7428678932aa92 +0 -0
  116. data/spec/dummy/tmp/cache/assets/D72/C80/sprockets%2Fa1430f4544581c9e76e56fcfdbe41c3e +0 -0
  117. data/spec/dummy/tmp/cache/assets/D7B/5F0/sprockets%2Fa4b788c26c44568cb71b3c79edc4b7f4 +0 -0
  118. data/spec/dummy/tmp/cache/assets/D8A/7E0/sprockets%2F2ce302007a5d81840ddc07b7cb1d5ffc +0 -0
  119. data/spec/dummy/tmp/cache/assets/D8F/670/sprockets%2F810ec022c6fe22bdec817bd7c0d808c1 +0 -0
  120. data/spec/dummy/tmp/cache/assets/D93/4C0/sprockets%2F857ecd2092cee11f740b3cf2e373ad2a +0 -0
  121. data/spec/dummy/tmp/cache/assets/D97/F90/sprockets%2Fc016a87d244c59a9a39ca8a90febe10b +0 -0
  122. data/spec/dummy/tmp/cache/assets/DA4/970/sprockets%2Fa93e382f3ec0e5b8cf765c062b946bcd +0 -0
  123. data/spec/dummy/tmp/cache/assets/DA8/D80/sprockets%2F0c96c0d9696bd756aad0d36bcf77db47 +0 -0
  124. data/spec/dummy/tmp/cache/assets/DBB/7C0/sprockets%2F00b6b9b17a4f12bae8eb17ef61abe731 +0 -0
  125. data/spec/dummy/tmp/cache/assets/DC7/A30/sprockets%2F5c6134fae4cb1a1dc4ae77cf661d42e9 +0 -0
  126. data/spec/dummy/tmp/cache/assets/DC9/A70/sprockets%2Fa0ca172bddf418f3ccd34a8e77725a8d +0 -0
  127. data/spec/dummy/tmp/cache/assets/DCE/840/sprockets%2F266fbe1ca258f3ccfec16753dafd4409 +0 -0
  128. data/spec/dummy/tmp/cache/assets/DDE/420/sprockets%2Ffb8b186d5bf0307f86f65fc787d2adeb +0 -0
  129. data/spec/dummy/tmp/cache/assets/DEE/CC0/sprockets%2Fa3dbe0de23a16d72f3abc3cd9388b80a +0 -0
  130. data/spec/dummy/tmp/cache/assets/DF1/BE0/sprockets%2Fcbdfaa7ea4d66d31e20da6754b4534dc +0 -0
  131. data/spec/dummy/tmp/cache/assets/DFA/E20/sprockets%2Ffe14bdb79b2a9dbf0b539198d3aba6b4 +0 -0
  132. data/spec/dummy/tmp/cache/assets/E27/B80/sprockets%2Fbced6cfc13bcfab45a1fa5b479d15486 +0 -0
  133. data/spec/dummy/tmp/cache/assets/E57/9A0/sprockets%2Fdf25986ad4babcf83acc6ac19e2a04fd +0 -0
  134. data/spec/lib/active_i18n_base_score_spec.rb +21 -0
  135. data/spec/lib/active_i18n_spec.rb +27 -0
  136. data/spec/lib/active_i18n_translations_store_spec.rb +34 -0
  137. data/spec/spec_helper.rb +15 -0
  138. metadata +471 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 26eca2ee0f77fb8ee7cf37356613964224cadb2c
4
+ data.tar.gz: 7b83b04895c1141a7b8a81d52b4c17f5474ba1c7
5
+ SHA512:
6
+ metadata.gz: ce1a5896923cdd3b8579d676bfc84538f3fd802e5065a29b00721c53ec8c119f18f9d43806692835d0f4bec2eb305419bc54a1d4fcc3ef822506ee2c49b90b0f
7
+ data.tar.gz: 693b4459d1e73b8ef7ffe7f09c4b128d49b487f1458c4ff7a555dfa19d7194cf5aef08797eb3d4b980c05e746a0a3da8fac43dbff029206df420eaed6e10d983
@@ -0,0 +1,20 @@
1
+ Copyright 2014 YOURNAME
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.
@@ -0,0 +1,105 @@
1
+ # ActiveI18n
2
+
3
+ ActiveI18n is an translation panel designed to work inside an activeadmin.
4
+
5
+ how it looks:
6
+
7
+ <a href="./screen.png"><img src="./screen.png"></a>
8
+
9
+ ### ActiveAdmin and Rails version
10
+
11
+ This library was tested only on rails 3.2.x. with activeadmin 0.6.x Porting to 4.x rails version is in progress.
12
+
13
+ ### Prerequisites
14
+
15
+ 1. [activeadmin](http://activeadmin.info/) gem
16
+ 2. [active_skin](https://github.com/rstgroup/active_skin) gem (optional for better looking)
17
+
18
+ ### Installation
19
+
20
+ ##### 0. make sure you have activeadmin installed
21
+
22
+ ##### 1. add gems to your gemfile:
23
+
24
+ ```ruby
25
+ # gemfile
26
+ gem "activeadmin", "~> 0.6.3"
27
+ gem "active_skin" #for better looking
28
+ gem "active_i18n"
29
+ gem "redis" # when you are using Redis as a translations store
30
+ ```
31
+
32
+ and bundle install
33
+
34
+ ##### 2. add rails initializer
35
+
36
+ create file active_i18n.rb in config/initializers
37
+
38
+ ```ruby
39
+ # config/initializers/active_i18n.rb
40
+ ActiveI18n.config(
41
+ store: I18n::Backend::KeyValue.new(Redis.new),
42
+ except: ["testtranslationkey", "date", "datetime"]
43
+ )
44
+ ```
45
+
46
+ *store*: sets translation store (in this example redis database)
47
+ *except*: removes some of the keys from the sidebar (optional)
48
+
49
+ If you are using redis you also will need to run the redis server `redis-server` in console
50
+
51
+ ##### 3. define languages to translate
52
+
53
+ now having everything set up you could narrow the list of available languages (if not your users will see in selectboxes list of all available locales) and select base locale. You could do this in application.rb
54
+
55
+ ```ruby
56
+ config.i18n.default_locale = :en
57
+ config.i18n.available_locales = [:en, :pl, :de] #placing :en again allows users to change default texts on your website
58
+ ```
59
+
60
+ ##### 4. add translation to the active admin menu
61
+
62
+ in your app/admin folder create new file called translations.rb (or whatever)
63
+
64
+ ```ruby
65
+ ActiveAdmin.register_translation "Translations",
66
+ :parent => "CMS",
67
+ :priority => 2,
68
+ :label => "Translations"
69
+ ```
70
+ hash is the same as in menu function in ActiveAdmin.
71
+
72
+ ##### 5. add css and js
73
+
74
+ inside active_admin.js add active_i18n:
75
+
76
+ ```
77
+ ...
78
+ //= require active_admin/base
79
+ ...
80
+
81
+ //= require active_i18n
82
+
83
+ ```
84
+
85
+ and inside active_admin.css.scss also add active_i18n:
86
+ ```scss
87
+ ...
88
+ @import "active_admin/mixins";
89
+ @import "active_admin/base";
90
+ @import "active_skin";
91
+ ...
92
+
93
+ @import "active_i18n";
94
+
95
+ ```
96
+
97
+ ##### and you are ready to go
98
+
99
+ ## Contributing
100
+
101
+ 1. Fork it ( http://github.com/rstgroup/active_i18n/fork )
102
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
103
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
104
+ 4. Push to the branch (`git push origin my-new-feature`)
105
+ 5. Create new Pull Request
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'ActiveI18n'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
24
+ load 'rails/tasks/engine.rake'
25
+
26
+
27
+
28
+ Bundler::GemHelper.install_tasks
29
+
30
+ Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each {|f| load f }
31
+ require 'rspec/core'
32
+ require 'rspec/core/rake_task'
33
+ desc "Run all specs in spec directory (excluding plugin specs)"
34
+ RSpec::Core::RakeTask.new(:spec => 'app:db:test:prepare')
35
+ task :default => :spec
@@ -0,0 +1 @@
1
+ //= require_tree ./active_i18n
@@ -0,0 +1,31 @@
1
+ $ ->
2
+ $("#change_locale").change () ->
3
+ window.location = $(this).find(":selected").data("url")
4
+
5
+
6
+ $(".translation .translated").each () ->
7
+ w = $(this)
8
+ form = w.find("form")
9
+ content = w.find(".content")
10
+ form.hide().each () ->
11
+ form = $(this)
12
+ form.find("li.cancel a").click () ->
13
+ form.hide()
14
+ content.show()
15
+ false
16
+
17
+ form.submit () ->
18
+ $.ajax(
19
+ url: $(this).attr("action"),
20
+ type: "POST"
21
+ data: {translation: form.find("textarea").val()}
22
+ success: (ret) ->
23
+ content.text(ret).show()
24
+ form.hide()
25
+ )
26
+ false
27
+
28
+
29
+ content.click () ->
30
+ w.find("form").show()
31
+ $(this).hide()
@@ -0,0 +1,5 @@
1
+ @import "//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css"
2
+ @import "active_i18n/flags"
3
+ @import "active_i18n/structure"
4
+ @import "active_i18n/list"
5
+ @import "active_i18n/sidebar"
@@ -0,0 +1,13 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
9
+ * compiled file, but it's generally better to create a new file per style scope.
10
+ *
11
+ *= require_self
12
+ *= require_tree .
13
+ */
@@ -0,0 +1,258 @@
1
+ .flag {
2
+ display: inline-block;
3
+ width: 16px;
4
+ height: 11px;
5
+ background: image-url("active_i18n/flags.png") no-repeat;
6
+ }
7
+
8
+ .flag.flag-ad {background-position: -16px 0}
9
+ .flag.flag-ae {background-position: -32px 0}
10
+ .flag.flag-af {background-position: -48px 0}
11
+ .flag.flag-ag {background-position: -64px 0}
12
+ .flag.flag-ai {background-position: -80px 0}
13
+ .flag.flag-al {background-position: -96px 0}
14
+ .flag.flag-am {background-position: -112px 0}
15
+ .flag.flag-an {background-position: -128px 0}
16
+ .flag.flag-ao {background-position: -144px 0}
17
+ .flag.flag-ar {background-position: -160px 0}
18
+ .flag.flag-as {background-position: -176px 0}
19
+ .flag.flag-at {background-position: -192px 0}
20
+ .flag.flag-au {background-position: -208px 0}
21
+ .flag.flag-aw {background-position: -224px 0}
22
+ .flag.flag-az {background-position: -240px 0}
23
+ .flag.flag-ba {background-position: 0 -11px}
24
+ .flag.flag-bb {background-position: -16px -11px}
25
+ .flag.flag-bd {background-position: -32px -11px}
26
+ .flag.flag-be {background-position: -48px -11px}
27
+ .flag.flag-bf {background-position: -64px -11px}
28
+ .flag.flag-bg {background-position: -80px -11px}
29
+ .flag.flag-bh {background-position: -96px -11px}
30
+ .flag.flag-bi {background-position: -112px -11px}
31
+ .flag.flag-bj {background-position: -128px -11px}
32
+ .flag.flag-bm {background-position: -144px -11px}
33
+ .flag.flag-bn {background-position: -160px -11px}
34
+ .flag.flag-bo {background-position: -176px -11px}
35
+ .flag.flag-br {background-position: -192px -11px}
36
+ .flag.flag-bs {background-position: -208px -11px}
37
+ .flag.flag-bt {background-position: -224px -11px}
38
+ .flag.flag-bv {background-position: -240px -11px}
39
+ .flag.flag-bw {background-position: 0 -22px}
40
+ .flag.flag-by {background-position: -16px -22px}
41
+ .flag.flag-bz {background-position: -32px -22px}
42
+ .flag.flag-ca {background-position: -48px -22px}
43
+ .flag.flag-catalonia {background-position: -64px -22px}
44
+ .flag.flag-cd {background-position: -80px -22px}
45
+ .flag.flag-cf {background-position: -96px -22px}
46
+ .flag.flag-cg {background-position: -112px -22px}
47
+ .flag.flag-ch {background-position: -128px -22px}
48
+ .flag.flag-ci {background-position: -144px -22px}
49
+ .flag.flag-ck {background-position: -160px -22px}
50
+ .flag.flag-cl {background-position: -176px -22px}
51
+ .flag.flag-cm {background-position: -192px -22px}
52
+ .flag.flag-cn {background-position: -208px -22px}
53
+ .flag.flag-co {background-position: -224px -22px}
54
+ .flag.flag-cr {background-position: -240px -22px}
55
+ .flag.flag-cu {background-position: 0 -33px}
56
+ .flag.flag-cv {background-position: -16px -33px}
57
+ .flag.flag-cw {background-position: -32px -33px}
58
+ .flag.flag-cy {background-position: -48px -33px}
59
+ .flag.flag-cz {background-position: -64px -33px}
60
+ .flag.flag-de {background-position: -80px -33px}
61
+ .flag.flag-dj {background-position: -96px -33px}
62
+ .flag.flag-dk {background-position: -112px -33px}
63
+ .flag.flag-dm {background-position: -128px -33px}
64
+ .flag.flag-do {background-position: -144px -33px}
65
+ .flag.flag-dz {background-position: -160px -33px}
66
+ .flag.flag-ec {background-position: -176px -33px}
67
+ .flag.flag-ee {background-position: -192px -33px}
68
+ .flag.flag-eg {background-position: -208px -33px}
69
+ .flag.flag-eh {background-position: -224px -33px}
70
+ .flag.flag-england {background-position: -240px -33px}
71
+ .flag.flag-er {background-position: 0 -44px}
72
+ .flag.flag-es {background-position: -16px -44px}
73
+ .flag.flag-et {background-position: -32px -44px}
74
+ .flag.flag-eu {background-position: -48px -44px}
75
+ .flag.flag-fi {background-position: -64px -44px}
76
+ .flag.flag-fj {background-position: -80px -44px}
77
+ .flag.flag-fk {background-position: -96px -44px}
78
+ .flag.flag-fm {background-position: -112px -44px}
79
+ .flag.flag-fo {background-position: -128px -44px}
80
+ .flag.flag-fr {background-position: -144px -44px}
81
+ .flag.flag-ga {background-position: -160px -44px}
82
+ .flag.flag-en {background-position: -176px -44px}
83
+ .flag.flag-gd {background-position: -192px -44px}
84
+ .flag.flag-ge {background-position: -208px -44px}
85
+ .flag.flag-gf {background-position: -224px -44px}
86
+ .flag.flag-gg {background-position: -240px -44px}
87
+ .flag.flag-gh {background-position: 0 -55px}
88
+ .flag.flag-gi {background-position: -16px -55px}
89
+ .flag.flag-gl {background-position: -32px -55px}
90
+ .flag.flag-gm {background-position: -48px -55px}
91
+ .flag.flag-gn {background-position: -64px -55px}
92
+ .flag.flag-gp {background-position: -80px -55px}
93
+ .flag.flag-gq {background-position: -96px -55px}
94
+ .flag.flag-gr {background-position: -112px -55px}
95
+ .flag.flag-gs {background-position: -128px -55px}
96
+ .flag.flag-gt {background-position: -144px -55px}
97
+ .flag.flag-gu {background-position: -160px -55px}
98
+ .flag.flag-gw {background-position: -176px -55px}
99
+ .flag.flag-gy {background-position: -192px -55px}
100
+ .flag.flag-hk {background-position: -208px -55px}
101
+ .flag.flag-hm {background-position: -224px -55px}
102
+ .flag.flag-hn {background-position: -240px -55px}
103
+ .flag.flag-hr {background-position: 0 -66px}
104
+ .flag.flag-ht {background-position: -16px -66px}
105
+ .flag.flag-hu {background-position: -32px -66px}
106
+ .flag.flag-ic {background-position: -48px -66px}
107
+ .flag.flag-id {background-position: -64px -66px}
108
+ .flag.flag-ie {background-position: -80px -66px}
109
+ .flag.flag-il {background-position: -96px -66px}
110
+ .flag.flag-im {background-position: -112px -66px}
111
+ .flag.flag-in {background-position: -128px -66px}
112
+ .flag.flag-io {background-position: -144px -66px}
113
+ .flag.flag-iq {background-position: -160px -66px}
114
+ .flag.flag-ir {background-position: -176px -66px}
115
+ .flag.flag-is {background-position: -192px -66px}
116
+ .flag.flag-it {background-position: -208px -66px}
117
+ .flag.flag-je {background-position: -224px -66px}
118
+ .flag.flag-jm {background-position: -240px -66px}
119
+ .flag.flag-jo {background-position: 0 -77px}
120
+ .flag.flag-jp {background-position: -16px -77px}
121
+ .flag.flag-ke {background-position: -32px -77px}
122
+ .flag.flag-kg {background-position: -48px -77px}
123
+ .flag.flag-kh {background-position: -64px -77px}
124
+ .flag.flag-ki {background-position: -80px -77px}
125
+ .flag.flag-km {background-position: -96px -77px}
126
+ .flag.flag-kn {background-position: -112px -77px}
127
+ .flag.flag-kp {background-position: -128px -77px}
128
+ .flag.flag-kr {background-position: -144px -77px}
129
+ .flag.flag-kurdistan {background-position: -160px -77px}
130
+ .flag.flag-kw {background-position: -176px -77px}
131
+ .flag.flag-ky {background-position: -192px -77px}
132
+ .flag.flag-kz {background-position: -208px -77px}
133
+ .flag.flag-la {background-position: -224px -77px}
134
+ .flag.flag-lb {background-position: -240px -77px}
135
+ .flag.flag-lc {background-position: 0 -88px}
136
+ .flag.flag-li {background-position: -16px -88px}
137
+ .flag.flag-lk {background-position: -32px -88px}
138
+ .flag.flag-lr {background-position: -48px -88px}
139
+ .flag.flag-ls {background-position: -64px -88px}
140
+ .flag.flag-lt {background-position: -80px -88px}
141
+ .flag.flag-lu {background-position: -96px -88px}
142
+ .flag.flag-lv {background-position: -112px -88px}
143
+ .flag.flag-ly {background-position: -128px -88px}
144
+ .flag.flag-ma {background-position: -144px -88px}
145
+ .flag.flag-mc {background-position: -160px -88px}
146
+ .flag.flag-md {background-position: -176px -88px}
147
+ .flag.flag-me {background-position: -192px -88px}
148
+ .flag.flag-mg {background-position: -208px -88px}
149
+ .flag.flag-mh {background-position: -224px -88px}
150
+ .flag.flag-mk {background-position: -240px -88px}
151
+ .flag.flag-ml {background-position: 0 -99px}
152
+ .flag.flag-mm {background-position: -16px -99px}
153
+ .flag.flag-mn {background-position: -32px -99px}
154
+ .flag.flag-mo {background-position: -48px -99px}
155
+ .flag.flag-mp {background-position: -64px -99px}
156
+ .flag.flag-mq {background-position: -80px -99px}
157
+ .flag.flag-mr {background-position: -96px -99px}
158
+ .flag.flag-ms {background-position: -112px -99px}
159
+ .flag.flag-mt {background-position: -128px -99px}
160
+ .flag.flag-mu {background-position: -144px -99px}
161
+ .flag.flag-mv {background-position: -160px -99px}
162
+ .flag.flag-mw {background-position: -176px -99px}
163
+ .flag.flag-mx {background-position: -192px -99px}
164
+ .flag.flag-my {background-position: -208px -99px}
165
+ .flag.flag-mz {background-position: -224px -99px}
166
+ .flag.flag-na {background-position: -240px -99px}
167
+ .flag.flag-nc {background-position: 0 -110px}
168
+ .flag.flag-ne {background-position: -16px -110px}
169
+ .flag.flag-nf {background-position: -32px -110px}
170
+ .flag.flag-ng {background-position: -48px -110px}
171
+ .flag.flag-ni {background-position: -64px -110px}
172
+ .flag.flag-nl {background-position: -80px -110px}
173
+ .flag.flag-no {background-position: -96px -110px}
174
+ .flag.flag-np {background-position: -112px -110px}
175
+ .flag.flag-nr {background-position: -128px -110px}
176
+ .flag.flag-nu {background-position: -144px -110px}
177
+ .flag.flag-nz {background-position: -160px -110px}
178
+ .flag.flag-om {background-position: -176px -110px}
179
+ .flag.flag-pa {background-position: -192px -110px}
180
+ .flag.flag-pe {background-position: -208px -110px}
181
+ .flag.flag-pf {background-position: -224px -110px}
182
+ .flag.flag-pg {background-position: -240px -110px}
183
+ .flag.flag-ph {background-position: 0 -121px}
184
+ .flag.flag-pk {background-position: -16px -121px}
185
+ .flag.flag-pl {background-position: -32px -121px}
186
+ .flag.flag-pm {background-position: -48px -121px}
187
+ .flag.flag-pn {background-position: -64px -121px}
188
+ .flag.flag-pr {background-position: -80px -121px}
189
+ .flag.flag-ps {background-position: -96px -121px}
190
+ .flag.flag-pt {background-position: -112px -121px}
191
+ .flag.flag-pw {background-position: -128px -121px}
192
+ .flag.flag-py {background-position: -144px -121px}
193
+ .flag.flag-qa {background-position: -160px -121px}
194
+ .flag.flag-re {background-position: -176px -121px}
195
+ .flag.flag-ro {background-position: -192px -121px}
196
+ .flag.flag-rs {background-position: -208px -121px}
197
+ .flag.flag-ru {background-position: -224px -121px}
198
+ .flag.flag-rw {background-position: -240px -121px}
199
+ .flag.flag-sa {background-position: 0 -132px}
200
+ .flag.flag-sb {background-position: -16px -132px}
201
+ .flag.flag-sc {background-position: -32px -132px}
202
+ .flag.flag-scotland {background-position: -48px -132px}
203
+ .flag.flag-sd {background-position: -64px -132px}
204
+ .flag.flag-se {background-position: -80px -132px}
205
+ .flag.flag-sg {background-position: -96px -132px}
206
+ .flag.flag-sh {background-position: -112px -132px}
207
+ .flag.flag-si {background-position: -128px -132px}
208
+ .flag.flag-sk {background-position: -144px -132px}
209
+ .flag.flag-sl {background-position: -160px -132px}
210
+ .flag.flag-sm {background-position: -176px -132px}
211
+ .flag.flag-sn {background-position: -192px -132px}
212
+ .flag.flag-so {background-position: -208px -132px}
213
+ .flag.flag-somaliland {background-position: -224px -132px}
214
+ .flag.flag-sr {background-position: -240px -132px}
215
+ .flag.flag-ss {background-position: 0 -143px}
216
+ .flag.flag-st {background-position: -16px -143px}
217
+ .flag.flag-sv {background-position: -32px -143px}
218
+ .flag.flag-sx {background-position: -48px -143px}
219
+ .flag.flag-sy {background-position: -64px -143px}
220
+ .flag.flag-sz {background-position: -80px -143px}
221
+ .flag.flag-tc {background-position: -96px -143px}
222
+ .flag.flag-td {background-position: -112px -143px}
223
+ .flag.flag-tf {background-position: -128px -143px}
224
+ .flag.flag-tg {background-position: -144px -143px}
225
+ .flag.flag-th {background-position: -160px -143px}
226
+ .flag.flag-tj {background-position: -176px -143px}
227
+ .flag.flag-tk {background-position: -192px -143px}
228
+ .flag.flag-tl {background-position: -208px -143px}
229
+ .flag.flag-tm {background-position: -224px -143px}
230
+ .flag.flag-tn {background-position: -240px -143px}
231
+ .flag.flag-to {background-position: 0 -154px}
232
+ .flag.flag-tr {background-position: -16px -154px}
233
+ .flag.flag-tt {background-position: -32px -154px}
234
+ .flag.flag-tv {background-position: -48px -154px}
235
+ .flag.flag-tw {background-position: -64px -154px}
236
+ .flag.flag-tz {background-position: -80px -154px}
237
+ .flag.flag-ua {background-position: -96px -154px}
238
+ .flag.flag-ug {background-position: -112px -154px}
239
+ .flag.flag-um {background-position: -128px -154px}
240
+ .flag.flag-us {background-position: -144px -154px}
241
+ .flag.flag-uy {background-position: -160px -154px}
242
+ .flag.flag-uz {background-position: -176px -154px}
243
+ .flag.flag-va {background-position: -192px -154px}
244
+ .flag.flag-vc {background-position: -208px -154px}
245
+ .flag.flag-ve {background-position: -224px -154px}
246
+ .flag.flag-vg {background-position: -240px -154px}
247
+ .flag.flag-vi {background-position: 0 -165px}
248
+ .flag.flag-vn {background-position: -16px -165px}
249
+ .flag.flag-vu {background-position: -32px -165px}
250
+ .flag.flag-wales {background-position: -48px -165px}
251
+ .flag.flag-wf {background-position: -64px -165px}
252
+ .flag.flag-ws {background-position: -80px -165px}
253
+ .flag.flag-ye {background-position: -96px -165px}
254
+ .flag.flag-yt {background-position: -112px -165px}
255
+ .flag.flag-za {background-position: -128px -165px}
256
+ .flag.flag-zanzibar {background-position: -144px -165px}
257
+ .flag.flag-zm {background-position: -160px -165px}
258
+ .flag.flag-zw {background-position: -176px -165px}