magic_locales 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (466) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +42 -0
  4. data/Rakefile +23 -0
  5. data/lib/app/controllers/magic_locales/base_controller.rb +16 -0
  6. data/lib/app/controllers/magic_locales/locales_controller.rb +64 -0
  7. data/lib/app/models/magic_locales/association.rb +59 -0
  8. data/lib/app/models/magic_locales/language.rb +46 -0
  9. data/lib/app/models/magic_locales/locale.rb +78 -0
  10. data/lib/app/models/magic_locales.rb +6 -0
  11. data/lib/app/views/magic_locales/_locale_switch.html.erb +39 -0
  12. data/lib/app/views/magic_locales/locales/_globalized_name_fields.html.erb +20 -0
  13. data/lib/app/views/magic_locales/locales/form.html.erb +47 -0
  14. data/lib/app/views/magic_locales/locales/index.html.erb +83 -0
  15. data/lib/assets/images/flags/countries/large/flag-at.png +0 -0
  16. data/lib/assets/images/flags/countries/large/flag-ba.png +0 -0
  17. data/lib/assets/images/flags/countries/large/flag-be.png +0 -0
  18. data/lib/assets/images/flags/countries/large/flag-bg.png +0 -0
  19. data/lib/assets/images/flags/countries/large/flag-by.png +0 -0
  20. data/lib/assets/images/flags/countries/large/flag-ca.png +0 -0
  21. data/lib/assets/images/flags/countries/large/flag-ch.png +0 -0
  22. data/lib/assets/images/flags/countries/large/flag-cy.png +0 -0
  23. data/lib/assets/images/flags/countries/large/flag-cz.png +0 -0
  24. data/lib/assets/images/flags/countries/large/flag-de.png +0 -0
  25. data/lib/assets/images/flags/countries/large/flag-dk.png +0 -0
  26. data/lib/assets/images/flags/countries/large/flag-es.png +0 -0
  27. data/lib/assets/images/flags/countries/large/flag-fi.png +0 -0
  28. data/lib/assets/images/flags/countries/large/flag-fr.png +0 -0
  29. data/lib/assets/images/flags/countries/large/flag-gb.png +0 -0
  30. data/lib/assets/images/flags/countries/large/flag-gr.png +0 -0
  31. data/lib/assets/images/flags/countries/large/flag-hr.png +0 -0
  32. data/lib/assets/images/flags/countries/large/flag-hu.png +0 -0
  33. data/lib/assets/images/flags/countries/large/flag-ie.png +0 -0
  34. data/lib/assets/images/flags/countries/large/flag-it.png +0 -0
  35. data/lib/assets/images/flags/countries/large/flag-li.png +0 -0
  36. data/lib/assets/images/flags/countries/large/flag-lt.png +0 -0
  37. data/lib/assets/images/flags/countries/large/flag-lu.png +0 -0
  38. data/lib/assets/images/flags/countries/large/flag-lv.png +0 -0
  39. data/lib/assets/images/flags/countries/large/flag-nl.png +0 -0
  40. data/lib/assets/images/flags/countries/large/flag-no.png +0 -0
  41. data/lib/assets/images/flags/countries/large/flag-pl.png +0 -0
  42. data/lib/assets/images/flags/countries/large/flag-pt.png +0 -0
  43. data/lib/assets/images/flags/countries/large/flag-ro.png +0 -0
  44. data/lib/assets/images/flags/countries/large/flag-rs.png +0 -0
  45. data/lib/assets/images/flags/countries/large/flag-ru.png +0 -0
  46. data/lib/assets/images/flags/countries/large/flag-se.png +0 -0
  47. data/lib/assets/images/flags/countries/large/flag-si.png +0 -0
  48. data/lib/assets/images/flags/countries/large/flag-sk.png +0 -0
  49. data/lib/assets/images/flags/countries/large/flag-ua.png +0 -0
  50. data/lib/assets/images/flags/countries/large/flag-us.png +0 -0
  51. data/lib/assets/images/flags/countries/large/flag-xx.png +0 -0
  52. data/lib/assets/images/flags/countries/large/square-at.png +0 -0
  53. data/lib/assets/images/flags/countries/large/square-ba.png +0 -0
  54. data/lib/assets/images/flags/countries/large/square-be.png +0 -0
  55. data/lib/assets/images/flags/countries/large/square-bg.png +0 -0
  56. data/lib/assets/images/flags/countries/large/square-by.png +0 -0
  57. data/lib/assets/images/flags/countries/large/square-ca.png +0 -0
  58. data/lib/assets/images/flags/countries/large/square-ch.png +0 -0
  59. data/lib/assets/images/flags/countries/large/square-cy.png +0 -0
  60. data/lib/assets/images/flags/countries/large/square-cz.png +0 -0
  61. data/lib/assets/images/flags/countries/large/square-de.png +0 -0
  62. data/lib/assets/images/flags/countries/large/square-dk.png +0 -0
  63. data/lib/assets/images/flags/countries/large/square-es.png +0 -0
  64. data/lib/assets/images/flags/countries/large/square-fi.png +0 -0
  65. data/lib/assets/images/flags/countries/large/square-fr.png +0 -0
  66. data/lib/assets/images/flags/countries/large/square-gb.png +0 -0
  67. data/lib/assets/images/flags/countries/large/square-gr.png +0 -0
  68. data/lib/assets/images/flags/countries/large/square-hr.png +0 -0
  69. data/lib/assets/images/flags/countries/large/square-hu.png +0 -0
  70. data/lib/assets/images/flags/countries/large/square-ie.png +0 -0
  71. data/lib/assets/images/flags/countries/large/square-it.png +0 -0
  72. data/lib/assets/images/flags/countries/large/square-li.png +0 -0
  73. data/lib/assets/images/flags/countries/large/square-lt.png +0 -0
  74. data/lib/assets/images/flags/countries/large/square-lu.png +0 -0
  75. data/lib/assets/images/flags/countries/large/square-lv.png +0 -0
  76. data/lib/assets/images/flags/countries/large/square-nl.png +0 -0
  77. data/lib/assets/images/flags/countries/large/square-no.png +0 -0
  78. data/lib/assets/images/flags/countries/large/square-pl.png +0 -0
  79. data/lib/assets/images/flags/countries/large/square-pt.png +0 -0
  80. data/lib/assets/images/flags/countries/large/square-ro.png +0 -0
  81. data/lib/assets/images/flags/countries/large/square-rs.png +0 -0
  82. data/lib/assets/images/flags/countries/large/square-ru.png +0 -0
  83. data/lib/assets/images/flags/countries/large/square-se.png +0 -0
  84. data/lib/assets/images/flags/countries/large/square-si.png +0 -0
  85. data/lib/assets/images/flags/countries/large/square-sk.png +0 -0
  86. data/lib/assets/images/flags/countries/large/square-ua.png +0 -0
  87. data/lib/assets/images/flags/countries/large/square-us.png +0 -0
  88. data/lib/assets/images/flags/countries/large/square-xx.png +0 -0
  89. data/lib/assets/images/flags/countries/medium/flag-at.png +0 -0
  90. data/lib/assets/images/flags/countries/medium/flag-ba.png +0 -0
  91. data/lib/assets/images/flags/countries/medium/flag-be.png +0 -0
  92. data/lib/assets/images/flags/countries/medium/flag-bg.png +0 -0
  93. data/lib/assets/images/flags/countries/medium/flag-by.png +0 -0
  94. data/lib/assets/images/flags/countries/medium/flag-ca.png +0 -0
  95. data/lib/assets/images/flags/countries/medium/flag-ch.png +0 -0
  96. data/lib/assets/images/flags/countries/medium/flag-cy.png +0 -0
  97. data/lib/assets/images/flags/countries/medium/flag-cz.png +0 -0
  98. data/lib/assets/images/flags/countries/medium/flag-de.png +0 -0
  99. data/lib/assets/images/flags/countries/medium/flag-dk.png +0 -0
  100. data/lib/assets/images/flags/countries/medium/flag-es.png +0 -0
  101. data/lib/assets/images/flags/countries/medium/flag-fi.png +0 -0
  102. data/lib/assets/images/flags/countries/medium/flag-fr.png +0 -0
  103. data/lib/assets/images/flags/countries/medium/flag-gb.png +0 -0
  104. data/lib/assets/images/flags/countries/medium/flag-gr.png +0 -0
  105. data/lib/assets/images/flags/countries/medium/flag-hr.png +0 -0
  106. data/lib/assets/images/flags/countries/medium/flag-hu.png +0 -0
  107. data/lib/assets/images/flags/countries/medium/flag-ie.png +0 -0
  108. data/lib/assets/images/flags/countries/medium/flag-it.png +0 -0
  109. data/lib/assets/images/flags/countries/medium/flag-li.png +0 -0
  110. data/lib/assets/images/flags/countries/medium/flag-lt.png +0 -0
  111. data/lib/assets/images/flags/countries/medium/flag-lu.png +0 -0
  112. data/lib/assets/images/flags/countries/medium/flag-lv.png +0 -0
  113. data/lib/assets/images/flags/countries/medium/flag-nl.png +0 -0
  114. data/lib/assets/images/flags/countries/medium/flag-no.png +0 -0
  115. data/lib/assets/images/flags/countries/medium/flag-pl.png +0 -0
  116. data/lib/assets/images/flags/countries/medium/flag-pt.png +0 -0
  117. data/lib/assets/images/flags/countries/medium/flag-ro.png +0 -0
  118. data/lib/assets/images/flags/countries/medium/flag-rs.png +0 -0
  119. data/lib/assets/images/flags/countries/medium/flag-ru.png +0 -0
  120. data/lib/assets/images/flags/countries/medium/flag-se.png +0 -0
  121. data/lib/assets/images/flags/countries/medium/flag-si.png +0 -0
  122. data/lib/assets/images/flags/countries/medium/flag-sk.png +0 -0
  123. data/lib/assets/images/flags/countries/medium/flag-ua.png +0 -0
  124. data/lib/assets/images/flags/countries/medium/flag-us.png +0 -0
  125. data/lib/assets/images/flags/countries/medium/flag-xx.png +0 -0
  126. data/lib/assets/images/flags/countries/medium/square-at.png +0 -0
  127. data/lib/assets/images/flags/countries/medium/square-ba.png +0 -0
  128. data/lib/assets/images/flags/countries/medium/square-be.png +0 -0
  129. data/lib/assets/images/flags/countries/medium/square-bg.png +0 -0
  130. data/lib/assets/images/flags/countries/medium/square-by.png +0 -0
  131. data/lib/assets/images/flags/countries/medium/square-ca.png +0 -0
  132. data/lib/assets/images/flags/countries/medium/square-ch.png +0 -0
  133. data/lib/assets/images/flags/countries/medium/square-cy.png +0 -0
  134. data/lib/assets/images/flags/countries/medium/square-cz.png +0 -0
  135. data/lib/assets/images/flags/countries/medium/square-de.png +0 -0
  136. data/lib/assets/images/flags/countries/medium/square-dk.png +0 -0
  137. data/lib/assets/images/flags/countries/medium/square-es.png +0 -0
  138. data/lib/assets/images/flags/countries/medium/square-fi.png +0 -0
  139. data/lib/assets/images/flags/countries/medium/square-fr.png +0 -0
  140. data/lib/assets/images/flags/countries/medium/square-gb.png +0 -0
  141. data/lib/assets/images/flags/countries/medium/square-gr.png +0 -0
  142. data/lib/assets/images/flags/countries/medium/square-hr.png +0 -0
  143. data/lib/assets/images/flags/countries/medium/square-hu.png +0 -0
  144. data/lib/assets/images/flags/countries/medium/square-ie.png +0 -0
  145. data/lib/assets/images/flags/countries/medium/square-it.png +0 -0
  146. data/lib/assets/images/flags/countries/medium/square-li.png +0 -0
  147. data/lib/assets/images/flags/countries/medium/square-lt.png +0 -0
  148. data/lib/assets/images/flags/countries/medium/square-lu.png +0 -0
  149. data/lib/assets/images/flags/countries/medium/square-lv.png +0 -0
  150. data/lib/assets/images/flags/countries/medium/square-nl.png +0 -0
  151. data/lib/assets/images/flags/countries/medium/square-no.png +0 -0
  152. data/lib/assets/images/flags/countries/medium/square-pl.png +0 -0
  153. data/lib/assets/images/flags/countries/medium/square-pt.png +0 -0
  154. data/lib/assets/images/flags/countries/medium/square-ro.png +0 -0
  155. data/lib/assets/images/flags/countries/medium/square-rs.png +0 -0
  156. data/lib/assets/images/flags/countries/medium/square-ru.png +0 -0
  157. data/lib/assets/images/flags/countries/medium/square-se.png +0 -0
  158. data/lib/assets/images/flags/countries/medium/square-si.png +0 -0
  159. data/lib/assets/images/flags/countries/medium/square-sk.png +0 -0
  160. data/lib/assets/images/flags/countries/medium/square-ua.png +0 -0
  161. data/lib/assets/images/flags/countries/medium/square-us.png +0 -0
  162. data/lib/assets/images/flags/countries/medium/square-xx.png +0 -0
  163. data/lib/assets/images/flags/countries/small/flag-at.png +0 -0
  164. data/lib/assets/images/flags/countries/small/flag-ba.png +0 -0
  165. data/lib/assets/images/flags/countries/small/flag-be.png +0 -0
  166. data/lib/assets/images/flags/countries/small/flag-bg.png +0 -0
  167. data/lib/assets/images/flags/countries/small/flag-by.png +0 -0
  168. data/lib/assets/images/flags/countries/small/flag-ca.png +0 -0
  169. data/lib/assets/images/flags/countries/small/flag-ch.png +0 -0
  170. data/lib/assets/images/flags/countries/small/flag-cy.png +0 -0
  171. data/lib/assets/images/flags/countries/small/flag-cz.png +0 -0
  172. data/lib/assets/images/flags/countries/small/flag-de.png +0 -0
  173. data/lib/assets/images/flags/countries/small/flag-dk.png +0 -0
  174. data/lib/assets/images/flags/countries/small/flag-es.png +0 -0
  175. data/lib/assets/images/flags/countries/small/flag-fi.png +0 -0
  176. data/lib/assets/images/flags/countries/small/flag-fr.png +0 -0
  177. data/lib/assets/images/flags/countries/small/flag-gb.png +0 -0
  178. data/lib/assets/images/flags/countries/small/flag-gr.png +0 -0
  179. data/lib/assets/images/flags/countries/small/flag-hr.png +0 -0
  180. data/lib/assets/images/flags/countries/small/flag-hu.png +0 -0
  181. data/lib/assets/images/flags/countries/small/flag-ie.png +0 -0
  182. data/lib/assets/images/flags/countries/small/flag-it.png +0 -0
  183. data/lib/assets/images/flags/countries/small/flag-li.png +0 -0
  184. data/lib/assets/images/flags/countries/small/flag-lt.png +0 -0
  185. data/lib/assets/images/flags/countries/small/flag-lu.png +0 -0
  186. data/lib/assets/images/flags/countries/small/flag-lv.png +0 -0
  187. data/lib/assets/images/flags/countries/small/flag-nl.png +0 -0
  188. data/lib/assets/images/flags/countries/small/flag-no.png +0 -0
  189. data/lib/assets/images/flags/countries/small/flag-pl.png +0 -0
  190. data/lib/assets/images/flags/countries/small/flag-pt.png +0 -0
  191. data/lib/assets/images/flags/countries/small/flag-ro.png +0 -0
  192. data/lib/assets/images/flags/countries/small/flag-rs.png +0 -0
  193. data/lib/assets/images/flags/countries/small/flag-ru.png +0 -0
  194. data/lib/assets/images/flags/countries/small/flag-se.png +0 -0
  195. data/lib/assets/images/flags/countries/small/flag-si.png +0 -0
  196. data/lib/assets/images/flags/countries/small/flag-sk.png +0 -0
  197. data/lib/assets/images/flags/countries/small/flag-ua.png +0 -0
  198. data/lib/assets/images/flags/countries/small/flag-us.png +0 -0
  199. data/lib/assets/images/flags/countries/small/flag-xx.png +0 -0
  200. data/lib/assets/images/flags/countries/small/square-at.png +0 -0
  201. data/lib/assets/images/flags/countries/small/square-ba.png +0 -0
  202. data/lib/assets/images/flags/countries/small/square-be.png +0 -0
  203. data/lib/assets/images/flags/countries/small/square-bg.png +0 -0
  204. data/lib/assets/images/flags/countries/small/square-by.png +0 -0
  205. data/lib/assets/images/flags/countries/small/square-ca.png +0 -0
  206. data/lib/assets/images/flags/countries/small/square-ch.png +0 -0
  207. data/lib/assets/images/flags/countries/small/square-cy.png +0 -0
  208. data/lib/assets/images/flags/countries/small/square-cz.png +0 -0
  209. data/lib/assets/images/flags/countries/small/square-de.png +0 -0
  210. data/lib/assets/images/flags/countries/small/square-dk.png +0 -0
  211. data/lib/assets/images/flags/countries/small/square-es.png +0 -0
  212. data/lib/assets/images/flags/countries/small/square-fi.png +0 -0
  213. data/lib/assets/images/flags/countries/small/square-fr.png +0 -0
  214. data/lib/assets/images/flags/countries/small/square-gb.png +0 -0
  215. data/lib/assets/images/flags/countries/small/square-gr.png +0 -0
  216. data/lib/assets/images/flags/countries/small/square-hr.png +0 -0
  217. data/lib/assets/images/flags/countries/small/square-hu.png +0 -0
  218. data/lib/assets/images/flags/countries/small/square-ie.png +0 -0
  219. data/lib/assets/images/flags/countries/small/square-it.png +0 -0
  220. data/lib/assets/images/flags/countries/small/square-li.png +0 -0
  221. data/lib/assets/images/flags/countries/small/square-lt.png +0 -0
  222. data/lib/assets/images/flags/countries/small/square-lu.png +0 -0
  223. data/lib/assets/images/flags/countries/small/square-lv.png +0 -0
  224. data/lib/assets/images/flags/countries/small/square-nl.png +0 -0
  225. data/lib/assets/images/flags/countries/small/square-no.png +0 -0
  226. data/lib/assets/images/flags/countries/small/square-pl.png +0 -0
  227. data/lib/assets/images/flags/countries/small/square-pt.png +0 -0
  228. data/lib/assets/images/flags/countries/small/square-ro.png +0 -0
  229. data/lib/assets/images/flags/countries/small/square-rs.png +0 -0
  230. data/lib/assets/images/flags/countries/small/square-ru.png +0 -0
  231. data/lib/assets/images/flags/countries/small/square-se.png +0 -0
  232. data/lib/assets/images/flags/countries/small/square-si.png +0 -0
  233. data/lib/assets/images/flags/countries/small/square-sk.png +0 -0
  234. data/lib/assets/images/flags/countries/small/square-ua.png +0 -0
  235. data/lib/assets/images/flags/countries/small/square-us.png +0 -0
  236. data/lib/assets/images/flags/countries/small/square-xx.png +0 -0
  237. data/lib/assets/images/flags/flags_cz.png +0 -0
  238. data/lib/assets/images/flags/flags_de.png +0 -0
  239. data/lib/assets/images/flags/flags_en.png +0 -0
  240. data/lib/assets/images/flags/flags_es.png +0 -0
  241. data/lib/assets/images/flags/flags_fr.png +0 -0
  242. data/lib/assets/images/flags/flags_it.png +0 -0
  243. data/lib/assets/images/flags/flags_pl.png +0 -0
  244. data/lib/assets/images/flags/flags_ru.png +0 -0
  245. data/lib/assets/images/flags/flags_uk.png +0 -0
  246. data/lib/assets/images/flags/locales/large/flag-bg.png +0 -0
  247. data/lib/assets/images/flags/locales/large/flag-cs.png +0 -0
  248. data/lib/assets/images/flags/locales/large/flag-da.png +0 -0
  249. data/lib/assets/images/flags/locales/large/flag-de.png +0 -0
  250. data/lib/assets/images/flags/locales/large/flag-el.png +0 -0
  251. data/lib/assets/images/flags/locales/large/flag-en.png +0 -0
  252. data/lib/assets/images/flags/locales/large/flag-es.png +0 -0
  253. data/lib/assets/images/flags/locales/large/flag-fi.png +0 -0
  254. data/lib/assets/images/flags/locales/large/flag-fr.png +0 -0
  255. data/lib/assets/images/flags/locales/large/flag-hr.png +0 -0
  256. data/lib/assets/images/flags/locales/large/flag-hu.png +0 -0
  257. data/lib/assets/images/flags/locales/large/flag-it.png +0 -0
  258. data/lib/assets/images/flags/locales/large/flag-nl.png +0 -0
  259. data/lib/assets/images/flags/locales/large/flag-pl.png +0 -0
  260. data/lib/assets/images/flags/locales/large/flag-pt.png +0 -0
  261. data/lib/assets/images/flags/locales/large/flag-ru.png +0 -0
  262. data/lib/assets/images/flags/locales/large/flag-sv.png +0 -0
  263. data/lib/assets/images/flags/locales/large/flag-uk.png +0 -0
  264. data/lib/assets/images/flags/locales/large/flag-xx.png +0 -0
  265. data/lib/assets/images/flags/locales/large/square-bg.png +0 -0
  266. data/lib/assets/images/flags/locales/large/square-cs.png +0 -0
  267. data/lib/assets/images/flags/locales/large/square-da.png +0 -0
  268. data/lib/assets/images/flags/locales/large/square-de.png +0 -0
  269. data/lib/assets/images/flags/locales/large/square-el.png +0 -0
  270. data/lib/assets/images/flags/locales/large/square-en.png +0 -0
  271. data/lib/assets/images/flags/locales/large/square-es.png +0 -0
  272. data/lib/assets/images/flags/locales/large/square-fi.png +0 -0
  273. data/lib/assets/images/flags/locales/large/square-fr.png +0 -0
  274. data/lib/assets/images/flags/locales/large/square-hr.png +0 -0
  275. data/lib/assets/images/flags/locales/large/square-hu.png +0 -0
  276. data/lib/assets/images/flags/locales/large/square-it.png +0 -0
  277. data/lib/assets/images/flags/locales/large/square-nl.png +0 -0
  278. data/lib/assets/images/flags/locales/large/square-pl.png +0 -0
  279. data/lib/assets/images/flags/locales/large/square-pt.png +0 -0
  280. data/lib/assets/images/flags/locales/large/square-ru.png +0 -0
  281. data/lib/assets/images/flags/locales/large/square-sv.png +0 -0
  282. data/lib/assets/images/flags/locales/large/square-uk.png +0 -0
  283. data/lib/assets/images/flags/locales/large/square-xx.png +0 -0
  284. data/lib/assets/images/flags/locales/medium/flag-bg.png +0 -0
  285. data/lib/assets/images/flags/locales/medium/flag-cs.png +0 -0
  286. data/lib/assets/images/flags/locales/medium/flag-da.png +0 -0
  287. data/lib/assets/images/flags/locales/medium/flag-de.png +0 -0
  288. data/lib/assets/images/flags/locales/medium/flag-el.png +0 -0
  289. data/lib/assets/images/flags/locales/medium/flag-en.png +0 -0
  290. data/lib/assets/images/flags/locales/medium/flag-es.png +0 -0
  291. data/lib/assets/images/flags/locales/medium/flag-fi.png +0 -0
  292. data/lib/assets/images/flags/locales/medium/flag-fr.png +0 -0
  293. data/lib/assets/images/flags/locales/medium/flag-hr.png +0 -0
  294. data/lib/assets/images/flags/locales/medium/flag-hu.png +0 -0
  295. data/lib/assets/images/flags/locales/medium/flag-it.png +0 -0
  296. data/lib/assets/images/flags/locales/medium/flag-nl.png +0 -0
  297. data/lib/assets/images/flags/locales/medium/flag-pl.png +0 -0
  298. data/lib/assets/images/flags/locales/medium/flag-pt.png +0 -0
  299. data/lib/assets/images/flags/locales/medium/flag-ru.png +0 -0
  300. data/lib/assets/images/flags/locales/medium/flag-sv.png +0 -0
  301. data/lib/assets/images/flags/locales/medium/flag-uk.png +0 -0
  302. data/lib/assets/images/flags/locales/medium/flag-xx.png +0 -0
  303. data/lib/assets/images/flags/locales/medium/square-bg.png +0 -0
  304. data/lib/assets/images/flags/locales/medium/square-cs.png +0 -0
  305. data/lib/assets/images/flags/locales/medium/square-da.png +0 -0
  306. data/lib/assets/images/flags/locales/medium/square-de.png +0 -0
  307. data/lib/assets/images/flags/locales/medium/square-el.png +0 -0
  308. data/lib/assets/images/flags/locales/medium/square-en.png +0 -0
  309. data/lib/assets/images/flags/locales/medium/square-es.png +0 -0
  310. data/lib/assets/images/flags/locales/medium/square-fi.png +0 -0
  311. data/lib/assets/images/flags/locales/medium/square-fr.png +0 -0
  312. data/lib/assets/images/flags/locales/medium/square-hr.png +0 -0
  313. data/lib/assets/images/flags/locales/medium/square-hu.png +0 -0
  314. data/lib/assets/images/flags/locales/medium/square-it.png +0 -0
  315. data/lib/assets/images/flags/locales/medium/square-nl.png +0 -0
  316. data/lib/assets/images/flags/locales/medium/square-pl.png +0 -0
  317. data/lib/assets/images/flags/locales/medium/square-pt.png +0 -0
  318. data/lib/assets/images/flags/locales/medium/square-ru.png +0 -0
  319. data/lib/assets/images/flags/locales/medium/square-sv.png +0 -0
  320. data/lib/assets/images/flags/locales/medium/square-uk.png +0 -0
  321. data/lib/assets/images/flags/locales/medium/square-xx.png +0 -0
  322. data/lib/assets/images/flags/locales/small/flag-bg.png +0 -0
  323. data/lib/assets/images/flags/locales/small/flag-cs.png +0 -0
  324. data/lib/assets/images/flags/locales/small/flag-da.png +0 -0
  325. data/lib/assets/images/flags/locales/small/flag-de.png +0 -0
  326. data/lib/assets/images/flags/locales/small/flag-el.png +0 -0
  327. data/lib/assets/images/flags/locales/small/flag-en.png +0 -0
  328. data/lib/assets/images/flags/locales/small/flag-es.png +0 -0
  329. data/lib/assets/images/flags/locales/small/flag-fi.png +0 -0
  330. data/lib/assets/images/flags/locales/small/flag-fr.png +0 -0
  331. data/lib/assets/images/flags/locales/small/flag-hr.png +0 -0
  332. data/lib/assets/images/flags/locales/small/flag-hu.png +0 -0
  333. data/lib/assets/images/flags/locales/small/flag-it.png +0 -0
  334. data/lib/assets/images/flags/locales/small/flag-nl.png +0 -0
  335. data/lib/assets/images/flags/locales/small/flag-pl.png +0 -0
  336. data/lib/assets/images/flags/locales/small/flag-pt.png +0 -0
  337. data/lib/assets/images/flags/locales/small/flag-ru.png +0 -0
  338. data/lib/assets/images/flags/locales/small/flag-sv.png +0 -0
  339. data/lib/assets/images/flags/locales/small/flag-uk.png +0 -0
  340. data/lib/assets/images/flags/locales/small/flag-xx.png +0 -0
  341. data/lib/assets/images/flags/locales/small/square-bg.png +0 -0
  342. data/lib/assets/images/flags/locales/small/square-cs.png +0 -0
  343. data/lib/assets/images/flags/locales/small/square-da.png +0 -0
  344. data/lib/assets/images/flags/locales/small/square-de.png +0 -0
  345. data/lib/assets/images/flags/locales/small/square-el.png +0 -0
  346. data/lib/assets/images/flags/locales/small/square-en.png +0 -0
  347. data/lib/assets/images/flags/locales/small/square-es.png +0 -0
  348. data/lib/assets/images/flags/locales/small/square-fi.png +0 -0
  349. data/lib/assets/images/flags/locales/small/square-fr.png +0 -0
  350. data/lib/assets/images/flags/locales/small/square-hr.png +0 -0
  351. data/lib/assets/images/flags/locales/small/square-hu.png +0 -0
  352. data/lib/assets/images/flags/locales/small/square-it.png +0 -0
  353. data/lib/assets/images/flags/locales/small/square-nl.png +0 -0
  354. data/lib/assets/images/flags/locales/small/square-pl.png +0 -0
  355. data/lib/assets/images/flags/locales/small/square-pt.png +0 -0
  356. data/lib/assets/images/flags/locales/small/square-ru.png +0 -0
  357. data/lib/assets/images/flags/locales/small/square-sv.png +0 -0
  358. data/lib/assets/images/flags/locales/small/square-uk.png +0 -0
  359. data/lib/assets/images/flags/locales/small/square-xx.png +0 -0
  360. data/lib/generators/magic_locales/install_generator.rb +57 -0
  361. data/lib/generators/magic_locales/templates/locale_seeds.rb +253 -0
  362. data/lib/generators/magic_locales/templates/magic_logales_migration.rb +52 -0
  363. data/lib/magic_locales/flag_helper.rb +25 -0
  364. data/lib/magic_locales/globalized_fields.rb +50 -0
  365. data/lib/magic_locales/magic_locale_helper.rb +56 -0
  366. data/lib/magic_locales/rails.rb +14 -0
  367. data/lib/magic_locales/railtie.rb +14 -0
  368. data/lib/magic_locales/version.rb +3 -0
  369. data/lib/magic_locales.rb +48 -0
  370. data/lib/tasks/magic_locales_tasks.rake +4 -0
  371. data/spec/dummy/README.rdoc +28 -0
  372. data/spec/dummy/Rakefile +6 -0
  373. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  374. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  375. data/spec/dummy/app/controllers/application_controller.rb +13 -0
  376. data/spec/dummy/app/controllers/pages_controller.rb +7 -0
  377. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  378. data/spec/dummy/app/models/user.rb +2 -0
  379. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  380. data/spec/dummy/app/views/pages/start.html.erb +4 -0
  381. data/spec/dummy/bin/bundle +3 -0
  382. data/spec/dummy/bin/rails +4 -0
  383. data/spec/dummy/bin/rake +4 -0
  384. data/spec/dummy/bin/setup +29 -0
  385. data/spec/dummy/config/application.rb +32 -0
  386. data/spec/dummy/config/boot.rb +5 -0
  387. data/spec/dummy/config/database.yml +25 -0
  388. data/spec/dummy/config/environment.rb +5 -0
  389. data/spec/dummy/config/environments/development.rb +41 -0
  390. data/spec/dummy/config/environments/production.rb +79 -0
  391. data/spec/dummy/config/environments/test.rb +42 -0
  392. data/spec/dummy/config/initializers/assets.rb +11 -0
  393. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  394. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  395. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  396. data/spec/dummy/config/initializers/inflections.rb +16 -0
  397. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  398. data/spec/dummy/config/initializers/session_store.rb +3 -0
  399. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  400. data/spec/dummy/config/locales/de.yml +23 -0
  401. data/spec/dummy/config/locales/en.yml +23 -0
  402. data/spec/dummy/config/routes.rb +69 -0
  403. data/spec/dummy/config/secrets.yml +22 -0
  404. data/spec/dummy/config.ru +4 -0
  405. data/spec/dummy/db/development.sqlite3 +0 -0
  406. data/spec/dummy/db/migrate/20150326132056_create_users.rb +10 -0
  407. data/spec/dummy/db/migrate/20150327111103_add_magic_locales.rb +52 -0
  408. data/spec/dummy/db/schema.rb +55 -0
  409. data/spec/dummy/db/seeds/locales.rb +253 -0
  410. data/spec/dummy/db/test.sqlite3 +0 -0
  411. data/spec/dummy/log/development.log +5867 -0
  412. data/spec/dummy/log/test.log +678 -0
  413. data/spec/dummy/public/404.html +67 -0
  414. data/spec/dummy/public/422.html +67 -0
  415. data/spec/dummy/public/500.html +66 -0
  416. data/spec/dummy/public/favicon.ico +0 -0
  417. data/spec/dummy/tmp/cache/assets/development/sprockets/024ec9501b30fe45282911b840b95ffd +0 -0
  418. data/spec/dummy/tmp/cache/assets/development/sprockets/02e9e067530411f9e8123dca02f6ff7f +0 -0
  419. data/spec/dummy/tmp/cache/assets/development/sprockets/074e9fbce40e24f8b28b1fc419afd07a +0 -0
  420. data/spec/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  421. data/spec/dummy/tmp/cache/assets/development/sprockets/21f772d42fa066bbb2690192ed5ed28e +0 -0
  422. data/spec/dummy/tmp/cache/assets/development/sprockets/2411c11cae47b66bae08066a80d33e61 +0 -0
  423. data/spec/dummy/tmp/cache/assets/development/sprockets/269c6b04e68cc5602d3ee011d00fcc05 +0 -0
  424. data/spec/dummy/tmp/cache/assets/development/sprockets/293b3165375686f4941a8a967c3b2fec +0 -0
  425. data/spec/dummy/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  426. data/spec/dummy/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  427. data/spec/dummy/tmp/cache/assets/development/sprockets/370393cb1156c25fa00a39d653697c8d +0 -0
  428. data/spec/dummy/tmp/cache/assets/development/sprockets/41d8cb90d821f2faa18b0be59347d510 +0 -0
  429. data/spec/dummy/tmp/cache/assets/development/sprockets/42db62a71d5a47a160d8038d54834f08 +0 -0
  430. data/spec/dummy/tmp/cache/assets/development/sprockets/48f57106a764c5f5e4876c1ab8be9ca9 +0 -0
  431. data/spec/dummy/tmp/cache/assets/development/sprockets/5465f2e305aaf65b93498c3a5d9aebc2 +0 -0
  432. data/spec/dummy/tmp/cache/assets/development/sprockets/56e985588935cfd4d641219a1584f915 +0 -0
  433. data/spec/dummy/tmp/cache/assets/development/sprockets/5735ad5d8f92eda6585edd72f471470c +0 -0
  434. data/spec/dummy/tmp/cache/assets/development/sprockets/59ab73a37d5a12d11b3365666bd0d8d6 +0 -0
  435. data/spec/dummy/tmp/cache/assets/development/sprockets/646c34fdfbbd07273fd5021aa010ff84 +0 -0
  436. data/spec/dummy/tmp/cache/assets/development/sprockets/6a2b720a99cba7ffe285776300e1ae8a +0 -0
  437. data/spec/dummy/tmp/cache/assets/development/sprockets/6d2720be6b7611d63ad724de6855d329 +0 -0
  438. data/spec/dummy/tmp/cache/assets/development/sprockets/6e13c429fec3bb2c4462ce5fccccc207 +0 -0
  439. data/spec/dummy/tmp/cache/assets/development/sprockets/6e95a606c68bf03114949988a1d00a93 +0 -0
  440. data/spec/dummy/tmp/cache/assets/development/sprockets/7132c3d0b265177e337d319046310c94 +0 -0
  441. data/spec/dummy/tmp/cache/assets/development/sprockets/85aa152164ab917381b159865995d714 +0 -0
  442. data/spec/dummy/tmp/cache/assets/development/sprockets/8f095dc51026dd316e721df9b6264f1f +0 -0
  443. data/spec/dummy/tmp/cache/assets/development/sprockets/92519516b5581b79a3f015efca646527 +0 -0
  444. data/spec/dummy/tmp/cache/assets/development/sprockets/a24b7203c0701cdd550ac682572308d9 +0 -0
  445. data/spec/dummy/tmp/cache/assets/development/sprockets/a5d5de529f675db47e45239d04813511 +0 -0
  446. data/spec/dummy/tmp/cache/assets/development/sprockets/ace9e4bc7b337ae5b1a74c6c320c741c +0 -0
  447. data/spec/dummy/tmp/cache/assets/development/sprockets/b79f7e12174354c395efcaf0d45e8a11 +0 -0
  448. data/spec/dummy/tmp/cache/assets/development/sprockets/c0fb3be9dbb3bc8844922eaff0d55201 +0 -0
  449. data/spec/dummy/tmp/cache/assets/development/sprockets/c1c793bef76a3aae9123e4df19d92c21 +0 -0
  450. data/spec/dummy/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  451. data/spec/dummy/tmp/cache/assets/development/sprockets/d3d39ac7e36a2e7a3554834eaa26669c +0 -0
  452. data/spec/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  453. data/spec/dummy/tmp/cache/assets/development/sprockets/ef972caaba894735135ce2f663a012ce +0 -0
  454. data/spec/dummy/tmp/cache/assets/development/sprockets/f03bb1af911f80ff9df0283b3a788a63 +0 -0
  455. data/spec/dummy/tmp/cache/assets/development/sprockets/f30844584fa4b683673368e5a23eed7f +0 -0
  456. data/spec/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  457. data/spec/dummy/tmp/cache/assets/development/sprockets/fb084b448735966191ed041270ff5212 +0 -0
  458. data/spec/dummy/tmp/cache/assets/development/sprockets/ffe3973c98878fae13cf4974dee3ae68 +0 -0
  459. data/spec/dummy/tmp/pids/server.pid +1 -0
  460. data/spec/models/magic_locales/association_spec.rb +60 -0
  461. data/spec/models/magic_locales/language_spec.rb +15 -0
  462. data/spec/models/magic_locales/locale_spec.rb +33 -0
  463. data/spec/models/user_spec.rb +14 -0
  464. data/spec/rails_helper.rb +51 -0
  465. data/spec/spec_helper.rb +87 -0
  466. metadata +688 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 498e601a13a04035afb16656a7cf9af152e67472
4
+ data.tar.gz: 360ebf86c851db764f25fe4e509befb3d684b4ae
5
+ SHA512:
6
+ metadata.gz: fb9a01f7921ebbe5ca7d0c4ae95a2687b2a9872ba7f9aa7fbce22e420b453c76d590183b56e0fe2a3586d49ad14d3d51e6147fc5d6a24c76bf55be9df04c0177
7
+ data.tar.gz: f1a2b08cad2fea9d4d3dfbd010c2e244b336fb801499aeeaf4ef7af6a4fe91527d8d3da8c6e0ba4d6a2e87e30157c3f9e52cf85251f88a0859f3cf1facce9fce
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2015 Torsten Wetzel
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.
data/README.md ADDED
@@ -0,0 +1,42 @@
1
+ # MagicLocales
2
+
3
+ Rails gem to help with translations and locale changing.
4
+ Uses simple locale style like **`:en`** or **`:de`** .. more complex (**`en-US`**) style may follow.
5
+
6
+ The gem includes a seed file with most common european locales.
7
+
8
+
9
+ ## Usage
10
+ - add gem to your gemfile
11
+ ```ruby
12
+ gem "magic_locales"
13
+ ```
14
+
15
+ - run install generator
16
+ ```ruby
17
+ rails g magic_locales:install
18
+ ```
19
+
20
+ - check new migration and migrate your database
21
+ ```ruby
22
+ bundle exec rake db:migrate
23
+ ```
24
+
25
+
26
+ ### Controller-Helper
27
+ - in your application controller:
28
+ ```ruby
29
+
30
+ include MagicLocaleHelper
31
+
32
+ before_action :get_user_language
33
+
34
+ ```
35
+
36
+ `include MagicLocaleHelper` loads in the helper and `before_action :get_user_language` checks user language *(via db-field or accept-language)* .. now you can access your users `@accept_language`.
37
+
38
+
39
+
40
+
41
+ #### License
42
+ This project rocks and uses MIT-LICENSE.
data/Rakefile ADDED
@@ -0,0 +1,23 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'MagicLocales'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+
18
+
19
+
20
+
21
+
22
+ Bundler::GemHelper.install_tasks
23
+
@@ -0,0 +1,16 @@
1
+ # encoding: utf-8
2
+ class MagicLocales::BaseController < ApplicationController
3
+
4
+ # => layout proc { |controller| controller.request.xhr? ? false : "application" }
5
+
6
+ before_action :authenticate_visitor
7
+
8
+
9
+ private
10
+
11
+ # overwrite for authentication
12
+ def authenticate_visitor
13
+ true
14
+ end
15
+
16
+ end
@@ -0,0 +1,64 @@
1
+ # encoding: utf-8
2
+ class MagicLocales::LocalesController < MagicLocales::BaseController
3
+
4
+ # => layout proc { |controller| controller.request.xhr? ? 'xhr' : get_layout }
5
+ layout proc { |controller| controller.request.xhr? ? false : "application" }
6
+
7
+ def index
8
+ # => @locales = ::MagicLocales::Locale.includes(:translations).with_translations(I18n.locale).order( 'mgclang_locale_translations.name ASC' )
9
+ @locales = MagicLocales::Locale.where(locale_state: "live").includes(:translations).with_translations(I18n.locale).order( 'mgclang_locale_translations.name ASC' )
10
+ @locales += MagicLocales::Locale.where(locale_state: "active").includes(:translations).with_translations(I18n.locale).order( 'mgclang_locale_translations.name ASC' )
11
+ @locales += MagicLocales::Locale.where(locale_state: "inactive").includes(:translations).with_translations(I18n.locale).order( 'mgclang_locale_translations.name ASC' )
12
+ end
13
+
14
+ def new
15
+ @locale = MagicLocales::Locale.new()
16
+ render :form
17
+ end
18
+
19
+ def create
20
+ @locale = MagicLocales::Locale.new(locale_params)
21
+ if @locale.save
22
+ redirect_to action: :index, notice: "Saved locale"
23
+ else
24
+ redirect_to action: :index, alert: "Error! #{@locale.errors.full_messages.join(" ")}"
25
+ end
26
+ end
27
+
28
+ def edit
29
+ @locale = MagicLocales::Locale.find(params[:id])
30
+ render :form
31
+ end
32
+
33
+ def update
34
+ @locale = MagicLocales::Locale.find(params[:id])
35
+ if @locale.update(locale_params)
36
+ redirect_to action: :index, notice: "Saved locale"
37
+ else
38
+ redirect_to action: :index, alert: "Error! #{@locale.errors.full_messages.join(" ")}"
39
+ end
40
+ end
41
+
42
+ def trigger
43
+ @locale = MagicLocales::Locale.find( params[:id] )
44
+ @locale.do_transition!( params[:state].to_sym )
45
+ redirect_to action: :index
46
+ end
47
+
48
+ def change_locale
49
+ if I18n.available_locales.include?( params[:locale].to_sym )
50
+ session[:user_locale] = params[:locale]
51
+ session[:locale] = params[:locale]
52
+ I18n.locale = params[:locale]
53
+ end
54
+ redirect_to url_for( Rails.application.routes.recognize_path( params[:back] ).merge({locale: params[:locale]}) ), notice: I18n.t("messages.locale_changed", locale: params[:locale])
55
+ end
56
+
57
+ private
58
+
59
+ # Never trust parameters from the scary internet, only allow the white list through.
60
+ def locale_params
61
+ params.require(:magic_locales_locale).permit(:name, :natural_name, :iso_code, :translations_attributes => [:id, :name, :locale])
62
+ end
63
+ end
64
+
@@ -0,0 +1,59 @@
1
+ # encoding: utf-8
2
+ module MagicLocales
3
+ module Association
4
+
5
+ def self.included(base)
6
+ base.send :extend, ClassMethods
7
+ end
8
+
9
+ ## C L A S S - M E T H O D S # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
10
+ module ClassMethods
11
+
12
+ def has_one_language
13
+ # send :include, InstanceMethods
14
+
15
+ has_one :language,
16
+ -> { where(level: 'native', default: true) },
17
+ as: :owner,
18
+ class_name: "MagicLocales::Language",
19
+ dependent: :destroy
20
+
21
+ accepts_nested_attributes_for :language, allow_destroy: true, reject_if: :all_blank
22
+ end
23
+
24
+
25
+ def has_languages
26
+ # send :include, InstanceMethods
27
+
28
+ has_many :spoken_languages,
29
+ as: :owner,
30
+ class_name: "MagicLocales::Language",
31
+ dependent: :destroy
32
+
33
+ has_many :foreign_languages,
34
+ -> { where.not(level: 'native') },
35
+ as: :owner,
36
+ class_name: "MagicLocales::Language",
37
+ dependent: :destroy
38
+
39
+ has_many :native_languages,
40
+ -> { where(level: 'native') },
41
+ as: :owner,
42
+ class_name: "MagicLocales::Language",
43
+ dependent: :destroy
44
+
45
+ accepts_nested_attributes_for :spoken_languages, allow_destroy: true, reject_if: :all_blank
46
+ end
47
+
48
+
49
+ end #> ClassMethods
50
+
51
+ ## I N S T A N C E - M E T H O D S # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
52
+ module InstanceMethods
53
+
54
+ # ...
55
+
56
+ end #> InstanceMethods
57
+
58
+ end
59
+ end
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+ class MagicLocales::Language < ActiveRecord::Base
3
+
4
+ # =====> R E W R I T E S <================================================================= #
5
+ MODEL_PARAMS = [ :id, :locale_id, :level, :_destroy ]
6
+
7
+ # =====> C O N S T A N T S <=============================================================== #
8
+ LEVELS = %w(basic medium advanced excelent) # => and 'native'
9
+
10
+ # =====> A S S O Z I A T I O N S <========================================================= #
11
+ belongs_to :user, class_name: "User", foreign_key: :user_id
12
+ belongs_to :locale, class_name: "Wizard::Locale", foreign_key: :locale_id
13
+
14
+
15
+ # =====> A T T R I B U T E S <============================================================= #
16
+ delegate :name, :iso_code, to: :locale, allow_nil: true
17
+
18
+
19
+ # =====> V A L I D A T I O N <============================================================= #
20
+ validates :locale, presence: true
21
+
22
+
23
+ # =====> C A L L B A C K S <=============================================================== #
24
+ # before_validation :clean_up_values
25
+
26
+
27
+ # =====> S C O P E S <===================================================================== #
28
+
29
+ # =====> C L A S S - M E T H O D S <======================================================= #
30
+
31
+ # =====> I N S T A N C E - M E T H O D S <================================================= #
32
+
33
+ # =====> P R I V A T E ! <======================================================== # # # # # # # #
34
+ private
35
+
36
+ # def clean_up_values
37
+ # if self.iso_code.present? && self.iso_code_changed?
38
+ # self.iso_code = if self.iso_code.split("-").count > 1
39
+ # "#{self.iso_code.split("-")[0].to_s.downcase}-#{self.iso_code.split("-")[1].to_s.upcase}"
40
+ # else
41
+ # self.iso_code.to_s.downcase
42
+ # end
43
+ # end
44
+ # end
45
+
46
+ end
@@ -0,0 +1,78 @@
1
+ # encoding: utf-8
2
+ class MagicLocales::Locale < ActiveRecord::Base
3
+
4
+ # =====> R E W R I T E S <================================================================= #
5
+
6
+ # =====> C O N S T A N T S <=============================================================== #
7
+ STATES = %w(inactive active live)
8
+
9
+ # =====> A S S O Z I A T I O N S <========================================================= #
10
+
11
+ # =====> A T T R I B U T E S <============================================================= #
12
+ translates :name, fallbacks_for_empty_translations: true
13
+ accepts_nested_attributes_for :translations, reject_if: proc { |attributes| attributes['name'].blank? }
14
+
15
+
16
+ # =====> V A L I D A T I O N <============================================================= #
17
+ validates :iso_code, presence: true, length: { in: 2..6 }, format: { with: /\A[a-z]{2}(-[A-Z]{2,3})?\z/ }
18
+
19
+
20
+ # =====> C A L L B A C K S <=============================================================== #
21
+ before_validation :clean_up_values
22
+
23
+
24
+ # =====> S C O P E S <===================================================================== #
25
+ # default_scope { includes(:translations).with_translations(I18n.available_locales).order( 'locale_state ASC, wizard_locale_translations.name ASC' ) }
26
+ # default_scope { includes(:translations).with_translations(I18n.locale).order( 'wizard_locale_translations.name ASC' ) }
27
+
28
+
29
+ # =====> C L A S S - M E T H O D S <======================================================= #
30
+ def self.search(search)
31
+ if search
32
+ with_translations.where('name LIKE ?', "%#{search}%")
33
+ else
34
+ with_translations
35
+ end
36
+ end
37
+
38
+ ## MicroMachine .. (Finite State Machine)
39
+ def do_transition!( transition )
40
+ state.trigger( transition.to_sym )
41
+ self.save
42
+ end
43
+
44
+ def state
45
+ @state ||= begin
46
+ fsm = MicroMachine.new(locale_state || "inactive")
47
+ fsm.when(:activate, "inactive" => "active")
48
+ fsm.when(:release, "active" => "live")
49
+ fsm.when(:deactivate, "active" => "inactive", "live" => "inactive")
50
+ fsm.on(:any) { self.locale_state = state.state }
51
+ fsm
52
+ end
53
+ end
54
+
55
+
56
+ # =====> I N S T A N C E - M E T H O D S <================================================= #
57
+ def with_translations(*locales)
58
+ locales = translated_locales if locales.empty?
59
+ includes(:translations).with_locales(locales).with_required_attributes
60
+ end
61
+
62
+
63
+ # =====> P R I V A T E ! <======================================================== # # # # # # # #
64
+ private
65
+
66
+ def clean_up_values
67
+ if self.iso_code.present? && self.iso_code_changed?
68
+ self.iso_code = if self.iso_code.split("-").count > 1
69
+ "#{self.iso_code.split("-")[0].to_s.downcase}-#{self.iso_code.split("-")[1].to_s.upcase}"
70
+ else
71
+ self.iso_code.to_s.downcase
72
+ end
73
+ end
74
+
75
+ end
76
+
77
+
78
+ end
@@ -0,0 +1,6 @@
1
+ # encoding: utf-8
2
+ module MagicLocales
3
+ def self.table_name_prefix
4
+ 'mgclang_'
5
+ end
6
+ end
@@ -0,0 +1,39 @@
1
+ <% tag ||= :div %>
2
+ <% css_class ||= "" %>
3
+ <% show_name ||= false %>
4
+ <% show_arrow ||= false %>
5
+
6
+ <%# if CONFIG[:allow_locale_change] %>
7
+ <% if system_locales.count > 1 %>
8
+
9
+ <%= content_tag tag, class: "dropdown #{css_class}" do %>
10
+ <a class="dropdown-toggle" data-toggle="dropdown" href="#">
11
+ <%= flag() %>
12
+ <%#= t("language", locale: I18n.locale.to_s) if show_name %>
13
+ <%= get_system_locales.where(iso_code: I18n.locale.to_s).any? ? get_system_locales.where(iso_code: I18n.locale.to_s).first.natural_name : t("language", locale: I18n.locale.to_s) if show_name %>
14
+ <%= raw('<b class="caret"></b>') if show_arrow %>
15
+ </a>
16
+ <ul class="dropdown-menu">
17
+ <%# CONFIG[:app_locales].each do |lcl| %>
18
+ <% if 3 == 4 %>
19
+ <% system_locales.each do |lcl| %>
20
+ <% if I18n.available_locales.include?(lcl.to_sym) %>
21
+ <li>
22
+ <a href="<%= change_locale_path(lcl, back: url_for(locale:nil)) %>"><%= flag(lcl) %> <%= t("language", locale: lcl) %></a>
23
+ </li>
24
+ <% end %>
25
+ <% end %>
26
+ <% end %>
27
+
28
+ <% get_system_locales.each do |lcl| %>
29
+ <% if I18n.available_locales.include?(lcl.iso_code.to_sym) %>
30
+ <li>
31
+ <a href="<%= change_locale_path(lcl.iso_code, back: url_for(locale:nil)) %>"><%= flag(lcl.iso_code) %> <%= lcl.natural_name %></a>
32
+ </li>
33
+ <% end %>
34
+ <% end %>
35
+ </ul>
36
+ <% end %>
37
+
38
+ <% end %>
39
+
@@ -0,0 +1,20 @@
1
+ <% system_locales.each do |lc| %>
2
+ <%= f.globalize_fields_for lc do |g| %>
3
+ <div class="row">
4
+ <div class="col-sm-5">
5
+ <%= g.label :name do %>
6
+ <%= locale_flag lc %> Name (<%= lc %>)
7
+ <% end %>
8
+ </div>
9
+ <div class="col-sm-7">
10
+ <% if (lc == I18n.locale.to_s) && f.object.errors.any? && f.object.errors.keys.include?(:name) %>
11
+ <div class="field_with_errors">
12
+ <%= g.text_field :name, class: "form-control" %>
13
+ </div>
14
+ <% else %>
15
+ <%= g.text_field :name, class: "form-control" %>
16
+ <% end %>
17
+ </div>
18
+ </div>
19
+ <% end %>
20
+ <% end %>
@@ -0,0 +1,47 @@
1
+ <%# path = @locale.id.present? ? mgclang_locale_path(@locale) : mgclang_locales_path %>
2
+ <% path = @locale.id.present? ? url_for( controller: "magic_locales/locales", action: :update, id: @locale) : url_for( controller: "magic_locales/locales", action: :create ) %>
3
+
4
+ <%= form_for @locale, url: path do |f| %>
5
+
6
+ <div class="modal-header">
7
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
8
+ <h4 class="modal-title" id="appModalLabel">locale</h4>
9
+ </div>
10
+ <div class="modal-body">
11
+
12
+ <div class="row">
13
+ <div class="col-sm-5">
14
+ <%= f.label :iso_code %>
15
+ </div>
16
+ <div class="col-sm-7">
17
+ <%= f.text_field :iso_code, class: "form-control" %>
18
+ </div>
19
+ </div>
20
+
21
+ <% if 3 == 4 %>
22
+ <div class="row">
23
+ <div class="col-sm-5">
24
+ <%= f.label :name %>
25
+ </div>
26
+ <div class="col-sm-7">
27
+ <%= f.text_field :name, class: "form-control" %>
28
+ </div>
29
+ </div>
30
+ <% end %>
31
+
32
+ <br/>
33
+
34
+ <%= render "globalized_name_fields", f: f %>
35
+
36
+ <%#= render "wizard/shared/globalized_name", f: f %>
37
+
38
+
39
+ </div>
40
+ <div class="modal-footer">
41
+ <button type="button" class="btn btn-default" data-dismiss="modal"><%= t("buttons.close") %></button>
42
+ <%= f.submit t("buttons.save", default: "Save"), data: { disable_with: 'Submiting...' }, class: "btn btn-primary" %>
43
+ </div>
44
+
45
+
46
+
47
+ <% end %>