magic_locales 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +42 -0
- data/Rakefile +23 -0
- data/lib/app/controllers/magic_locales/base_controller.rb +16 -0
- data/lib/app/controllers/magic_locales/locales_controller.rb +64 -0
- data/lib/app/models/magic_locales/association.rb +59 -0
- data/lib/app/models/magic_locales/language.rb +46 -0
- data/lib/app/models/magic_locales/locale.rb +78 -0
- data/lib/app/models/magic_locales.rb +6 -0
- data/lib/app/views/magic_locales/_locale_switch.html.erb +39 -0
- data/lib/app/views/magic_locales/locales/_globalized_name_fields.html.erb +20 -0
- data/lib/app/views/magic_locales/locales/form.html.erb +47 -0
- data/lib/app/views/magic_locales/locales/index.html.erb +83 -0
- data/lib/assets/images/flags/countries/large/flag-at.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-ba.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-be.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-bg.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-by.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-ca.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-ch.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-cy.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-cz.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-de.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-dk.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-es.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-fi.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-fr.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-gb.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-gr.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-hr.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-hu.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-ie.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-it.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-li.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-lt.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-lu.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-lv.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-nl.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-no.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-pl.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-pt.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-ro.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-rs.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-ru.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-se.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-si.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-sk.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-ua.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-us.png +0 -0
- data/lib/assets/images/flags/countries/large/flag-xx.png +0 -0
- data/lib/assets/images/flags/countries/large/square-at.png +0 -0
- data/lib/assets/images/flags/countries/large/square-ba.png +0 -0
- data/lib/assets/images/flags/countries/large/square-be.png +0 -0
- data/lib/assets/images/flags/countries/large/square-bg.png +0 -0
- data/lib/assets/images/flags/countries/large/square-by.png +0 -0
- data/lib/assets/images/flags/countries/large/square-ca.png +0 -0
- data/lib/assets/images/flags/countries/large/square-ch.png +0 -0
- data/lib/assets/images/flags/countries/large/square-cy.png +0 -0
- data/lib/assets/images/flags/countries/large/square-cz.png +0 -0
- data/lib/assets/images/flags/countries/large/square-de.png +0 -0
- data/lib/assets/images/flags/countries/large/square-dk.png +0 -0
- data/lib/assets/images/flags/countries/large/square-es.png +0 -0
- data/lib/assets/images/flags/countries/large/square-fi.png +0 -0
- data/lib/assets/images/flags/countries/large/square-fr.png +0 -0
- data/lib/assets/images/flags/countries/large/square-gb.png +0 -0
- data/lib/assets/images/flags/countries/large/square-gr.png +0 -0
- data/lib/assets/images/flags/countries/large/square-hr.png +0 -0
- data/lib/assets/images/flags/countries/large/square-hu.png +0 -0
- data/lib/assets/images/flags/countries/large/square-ie.png +0 -0
- data/lib/assets/images/flags/countries/large/square-it.png +0 -0
- data/lib/assets/images/flags/countries/large/square-li.png +0 -0
- data/lib/assets/images/flags/countries/large/square-lt.png +0 -0
- data/lib/assets/images/flags/countries/large/square-lu.png +0 -0
- data/lib/assets/images/flags/countries/large/square-lv.png +0 -0
- data/lib/assets/images/flags/countries/large/square-nl.png +0 -0
- data/lib/assets/images/flags/countries/large/square-no.png +0 -0
- data/lib/assets/images/flags/countries/large/square-pl.png +0 -0
- data/lib/assets/images/flags/countries/large/square-pt.png +0 -0
- data/lib/assets/images/flags/countries/large/square-ro.png +0 -0
- data/lib/assets/images/flags/countries/large/square-rs.png +0 -0
- data/lib/assets/images/flags/countries/large/square-ru.png +0 -0
- data/lib/assets/images/flags/countries/large/square-se.png +0 -0
- data/lib/assets/images/flags/countries/large/square-si.png +0 -0
- data/lib/assets/images/flags/countries/large/square-sk.png +0 -0
- data/lib/assets/images/flags/countries/large/square-ua.png +0 -0
- data/lib/assets/images/flags/countries/large/square-us.png +0 -0
- data/lib/assets/images/flags/countries/large/square-xx.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-at.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-ba.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-be.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-bg.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-by.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-ca.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-ch.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-cy.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-cz.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-de.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-dk.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-es.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-fi.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-fr.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-gb.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-gr.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-hr.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-hu.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-ie.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-it.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-li.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-lt.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-lu.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-lv.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-nl.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-no.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-pl.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-pt.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-ro.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-rs.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-ru.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-se.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-si.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-sk.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-ua.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-us.png +0 -0
- data/lib/assets/images/flags/countries/medium/flag-xx.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-at.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-ba.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-be.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-bg.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-by.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-ca.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-ch.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-cy.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-cz.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-de.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-dk.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-es.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-fi.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-fr.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-gb.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-gr.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-hr.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-hu.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-ie.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-it.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-li.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-lt.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-lu.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-lv.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-nl.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-no.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-pl.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-pt.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-ro.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-rs.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-ru.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-se.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-si.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-sk.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-ua.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-us.png +0 -0
- data/lib/assets/images/flags/countries/medium/square-xx.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-at.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-ba.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-be.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-bg.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-by.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-ca.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-ch.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-cy.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-cz.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-de.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-dk.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-es.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-fi.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-fr.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-gb.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-gr.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-hr.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-hu.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-ie.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-it.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-li.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-lt.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-lu.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-lv.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-nl.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-no.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-pl.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-pt.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-ro.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-rs.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-ru.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-se.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-si.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-sk.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-ua.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-us.png +0 -0
- data/lib/assets/images/flags/countries/small/flag-xx.png +0 -0
- data/lib/assets/images/flags/countries/small/square-at.png +0 -0
- data/lib/assets/images/flags/countries/small/square-ba.png +0 -0
- data/lib/assets/images/flags/countries/small/square-be.png +0 -0
- data/lib/assets/images/flags/countries/small/square-bg.png +0 -0
- data/lib/assets/images/flags/countries/small/square-by.png +0 -0
- data/lib/assets/images/flags/countries/small/square-ca.png +0 -0
- data/lib/assets/images/flags/countries/small/square-ch.png +0 -0
- data/lib/assets/images/flags/countries/small/square-cy.png +0 -0
- data/lib/assets/images/flags/countries/small/square-cz.png +0 -0
- data/lib/assets/images/flags/countries/small/square-de.png +0 -0
- data/lib/assets/images/flags/countries/small/square-dk.png +0 -0
- data/lib/assets/images/flags/countries/small/square-es.png +0 -0
- data/lib/assets/images/flags/countries/small/square-fi.png +0 -0
- data/lib/assets/images/flags/countries/small/square-fr.png +0 -0
- data/lib/assets/images/flags/countries/small/square-gb.png +0 -0
- data/lib/assets/images/flags/countries/small/square-gr.png +0 -0
- data/lib/assets/images/flags/countries/small/square-hr.png +0 -0
- data/lib/assets/images/flags/countries/small/square-hu.png +0 -0
- data/lib/assets/images/flags/countries/small/square-ie.png +0 -0
- data/lib/assets/images/flags/countries/small/square-it.png +0 -0
- data/lib/assets/images/flags/countries/small/square-li.png +0 -0
- data/lib/assets/images/flags/countries/small/square-lt.png +0 -0
- data/lib/assets/images/flags/countries/small/square-lu.png +0 -0
- data/lib/assets/images/flags/countries/small/square-lv.png +0 -0
- data/lib/assets/images/flags/countries/small/square-nl.png +0 -0
- data/lib/assets/images/flags/countries/small/square-no.png +0 -0
- data/lib/assets/images/flags/countries/small/square-pl.png +0 -0
- data/lib/assets/images/flags/countries/small/square-pt.png +0 -0
- data/lib/assets/images/flags/countries/small/square-ro.png +0 -0
- data/lib/assets/images/flags/countries/small/square-rs.png +0 -0
- data/lib/assets/images/flags/countries/small/square-ru.png +0 -0
- data/lib/assets/images/flags/countries/small/square-se.png +0 -0
- data/lib/assets/images/flags/countries/small/square-si.png +0 -0
- data/lib/assets/images/flags/countries/small/square-sk.png +0 -0
- data/lib/assets/images/flags/countries/small/square-ua.png +0 -0
- data/lib/assets/images/flags/countries/small/square-us.png +0 -0
- data/lib/assets/images/flags/countries/small/square-xx.png +0 -0
- data/lib/assets/images/flags/flags_cz.png +0 -0
- data/lib/assets/images/flags/flags_de.png +0 -0
- data/lib/assets/images/flags/flags_en.png +0 -0
- data/lib/assets/images/flags/flags_es.png +0 -0
- data/lib/assets/images/flags/flags_fr.png +0 -0
- data/lib/assets/images/flags/flags_it.png +0 -0
- data/lib/assets/images/flags/flags_pl.png +0 -0
- data/lib/assets/images/flags/flags_ru.png +0 -0
- data/lib/assets/images/flags/flags_uk.png +0 -0
- data/lib/assets/images/flags/locales/large/flag-bg.png +0 -0
- data/lib/assets/images/flags/locales/large/flag-cs.png +0 -0
- data/lib/assets/images/flags/locales/large/flag-da.png +0 -0
- data/lib/assets/images/flags/locales/large/flag-de.png +0 -0
- data/lib/assets/images/flags/locales/large/flag-el.png +0 -0
- data/lib/assets/images/flags/locales/large/flag-en.png +0 -0
- data/lib/assets/images/flags/locales/large/flag-es.png +0 -0
- data/lib/assets/images/flags/locales/large/flag-fi.png +0 -0
- data/lib/assets/images/flags/locales/large/flag-fr.png +0 -0
- data/lib/assets/images/flags/locales/large/flag-hr.png +0 -0
- data/lib/assets/images/flags/locales/large/flag-hu.png +0 -0
- data/lib/assets/images/flags/locales/large/flag-it.png +0 -0
- data/lib/assets/images/flags/locales/large/flag-nl.png +0 -0
- data/lib/assets/images/flags/locales/large/flag-pl.png +0 -0
- data/lib/assets/images/flags/locales/large/flag-pt.png +0 -0
- data/lib/assets/images/flags/locales/large/flag-ru.png +0 -0
- data/lib/assets/images/flags/locales/large/flag-sv.png +0 -0
- data/lib/assets/images/flags/locales/large/flag-uk.png +0 -0
- data/lib/assets/images/flags/locales/large/flag-xx.png +0 -0
- data/lib/assets/images/flags/locales/large/square-bg.png +0 -0
- data/lib/assets/images/flags/locales/large/square-cs.png +0 -0
- data/lib/assets/images/flags/locales/large/square-da.png +0 -0
- data/lib/assets/images/flags/locales/large/square-de.png +0 -0
- data/lib/assets/images/flags/locales/large/square-el.png +0 -0
- data/lib/assets/images/flags/locales/large/square-en.png +0 -0
- data/lib/assets/images/flags/locales/large/square-es.png +0 -0
- data/lib/assets/images/flags/locales/large/square-fi.png +0 -0
- data/lib/assets/images/flags/locales/large/square-fr.png +0 -0
- data/lib/assets/images/flags/locales/large/square-hr.png +0 -0
- data/lib/assets/images/flags/locales/large/square-hu.png +0 -0
- data/lib/assets/images/flags/locales/large/square-it.png +0 -0
- data/lib/assets/images/flags/locales/large/square-nl.png +0 -0
- data/lib/assets/images/flags/locales/large/square-pl.png +0 -0
- data/lib/assets/images/flags/locales/large/square-pt.png +0 -0
- data/lib/assets/images/flags/locales/large/square-ru.png +0 -0
- data/lib/assets/images/flags/locales/large/square-sv.png +0 -0
- data/lib/assets/images/flags/locales/large/square-uk.png +0 -0
- data/lib/assets/images/flags/locales/large/square-xx.png +0 -0
- data/lib/assets/images/flags/locales/medium/flag-bg.png +0 -0
- data/lib/assets/images/flags/locales/medium/flag-cs.png +0 -0
- data/lib/assets/images/flags/locales/medium/flag-da.png +0 -0
- data/lib/assets/images/flags/locales/medium/flag-de.png +0 -0
- data/lib/assets/images/flags/locales/medium/flag-el.png +0 -0
- data/lib/assets/images/flags/locales/medium/flag-en.png +0 -0
- data/lib/assets/images/flags/locales/medium/flag-es.png +0 -0
- data/lib/assets/images/flags/locales/medium/flag-fi.png +0 -0
- data/lib/assets/images/flags/locales/medium/flag-fr.png +0 -0
- data/lib/assets/images/flags/locales/medium/flag-hr.png +0 -0
- data/lib/assets/images/flags/locales/medium/flag-hu.png +0 -0
- data/lib/assets/images/flags/locales/medium/flag-it.png +0 -0
- data/lib/assets/images/flags/locales/medium/flag-nl.png +0 -0
- data/lib/assets/images/flags/locales/medium/flag-pl.png +0 -0
- data/lib/assets/images/flags/locales/medium/flag-pt.png +0 -0
- data/lib/assets/images/flags/locales/medium/flag-ru.png +0 -0
- data/lib/assets/images/flags/locales/medium/flag-sv.png +0 -0
- data/lib/assets/images/flags/locales/medium/flag-uk.png +0 -0
- data/lib/assets/images/flags/locales/medium/flag-xx.png +0 -0
- data/lib/assets/images/flags/locales/medium/square-bg.png +0 -0
- data/lib/assets/images/flags/locales/medium/square-cs.png +0 -0
- data/lib/assets/images/flags/locales/medium/square-da.png +0 -0
- data/lib/assets/images/flags/locales/medium/square-de.png +0 -0
- data/lib/assets/images/flags/locales/medium/square-el.png +0 -0
- data/lib/assets/images/flags/locales/medium/square-en.png +0 -0
- data/lib/assets/images/flags/locales/medium/square-es.png +0 -0
- data/lib/assets/images/flags/locales/medium/square-fi.png +0 -0
- data/lib/assets/images/flags/locales/medium/square-fr.png +0 -0
- data/lib/assets/images/flags/locales/medium/square-hr.png +0 -0
- data/lib/assets/images/flags/locales/medium/square-hu.png +0 -0
- data/lib/assets/images/flags/locales/medium/square-it.png +0 -0
- data/lib/assets/images/flags/locales/medium/square-nl.png +0 -0
- data/lib/assets/images/flags/locales/medium/square-pl.png +0 -0
- data/lib/assets/images/flags/locales/medium/square-pt.png +0 -0
- data/lib/assets/images/flags/locales/medium/square-ru.png +0 -0
- data/lib/assets/images/flags/locales/medium/square-sv.png +0 -0
- data/lib/assets/images/flags/locales/medium/square-uk.png +0 -0
- data/lib/assets/images/flags/locales/medium/square-xx.png +0 -0
- data/lib/assets/images/flags/locales/small/flag-bg.png +0 -0
- data/lib/assets/images/flags/locales/small/flag-cs.png +0 -0
- data/lib/assets/images/flags/locales/small/flag-da.png +0 -0
- data/lib/assets/images/flags/locales/small/flag-de.png +0 -0
- data/lib/assets/images/flags/locales/small/flag-el.png +0 -0
- data/lib/assets/images/flags/locales/small/flag-en.png +0 -0
- data/lib/assets/images/flags/locales/small/flag-es.png +0 -0
- data/lib/assets/images/flags/locales/small/flag-fi.png +0 -0
- data/lib/assets/images/flags/locales/small/flag-fr.png +0 -0
- data/lib/assets/images/flags/locales/small/flag-hr.png +0 -0
- data/lib/assets/images/flags/locales/small/flag-hu.png +0 -0
- data/lib/assets/images/flags/locales/small/flag-it.png +0 -0
- data/lib/assets/images/flags/locales/small/flag-nl.png +0 -0
- data/lib/assets/images/flags/locales/small/flag-pl.png +0 -0
- data/lib/assets/images/flags/locales/small/flag-pt.png +0 -0
- data/lib/assets/images/flags/locales/small/flag-ru.png +0 -0
- data/lib/assets/images/flags/locales/small/flag-sv.png +0 -0
- data/lib/assets/images/flags/locales/small/flag-uk.png +0 -0
- data/lib/assets/images/flags/locales/small/flag-xx.png +0 -0
- data/lib/assets/images/flags/locales/small/square-bg.png +0 -0
- data/lib/assets/images/flags/locales/small/square-cs.png +0 -0
- data/lib/assets/images/flags/locales/small/square-da.png +0 -0
- data/lib/assets/images/flags/locales/small/square-de.png +0 -0
- data/lib/assets/images/flags/locales/small/square-el.png +0 -0
- data/lib/assets/images/flags/locales/small/square-en.png +0 -0
- data/lib/assets/images/flags/locales/small/square-es.png +0 -0
- data/lib/assets/images/flags/locales/small/square-fi.png +0 -0
- data/lib/assets/images/flags/locales/small/square-fr.png +0 -0
- data/lib/assets/images/flags/locales/small/square-hr.png +0 -0
- data/lib/assets/images/flags/locales/small/square-hu.png +0 -0
- data/lib/assets/images/flags/locales/small/square-it.png +0 -0
- data/lib/assets/images/flags/locales/small/square-nl.png +0 -0
- data/lib/assets/images/flags/locales/small/square-pl.png +0 -0
- data/lib/assets/images/flags/locales/small/square-pt.png +0 -0
- data/lib/assets/images/flags/locales/small/square-ru.png +0 -0
- data/lib/assets/images/flags/locales/small/square-sv.png +0 -0
- data/lib/assets/images/flags/locales/small/square-uk.png +0 -0
- data/lib/assets/images/flags/locales/small/square-xx.png +0 -0
- data/lib/generators/magic_locales/install_generator.rb +57 -0
- data/lib/generators/magic_locales/templates/locale_seeds.rb +253 -0
- data/lib/generators/magic_locales/templates/magic_logales_migration.rb +52 -0
- data/lib/magic_locales/flag_helper.rb +25 -0
- data/lib/magic_locales/globalized_fields.rb +50 -0
- data/lib/magic_locales/magic_locale_helper.rb +56 -0
- data/lib/magic_locales/rails.rb +14 -0
- data/lib/magic_locales/railtie.rb +14 -0
- data/lib/magic_locales/version.rb +3 -0
- data/lib/magic_locales.rb +48 -0
- data/lib/tasks/magic_locales_tasks.rake +4 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/controllers/application_controller.rb +13 -0
- data/spec/dummy/app/controllers/pages_controller.rb +7 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/models/user.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/app/views/pages/start.html.erb +4 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/bin/setup +29 -0
- data/spec/dummy/config/application.rb +32 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +41 -0
- data/spec/dummy/config/environments/production.rb +79 -0
- data/spec/dummy/config/environments/test.rb +42 -0
- data/spec/dummy/config/initializers/assets.rb +11 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/de.yml +23 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +69 -0
- data/spec/dummy/config/secrets.yml +22 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20150326132056_create_users.rb +10 -0
- data/spec/dummy/db/migrate/20150327111103_add_magic_locales.rb +52 -0
- data/spec/dummy/db/schema.rb +55 -0
- data/spec/dummy/db/seeds/locales.rb +253 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +5867 -0
- data/spec/dummy/log/test.log +678 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/024ec9501b30fe45282911b840b95ffd +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/02e9e067530411f9e8123dca02f6ff7f +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/074e9fbce40e24f8b28b1fc419afd07a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/21f772d42fa066bbb2690192ed5ed28e +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/2411c11cae47b66bae08066a80d33e61 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/269c6b04e68cc5602d3ee011d00fcc05 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/293b3165375686f4941a8a967c3b2fec +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/370393cb1156c25fa00a39d653697c8d +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/41d8cb90d821f2faa18b0be59347d510 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/42db62a71d5a47a160d8038d54834f08 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/48f57106a764c5f5e4876c1ab8be9ca9 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/5465f2e305aaf65b93498c3a5d9aebc2 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/56e985588935cfd4d641219a1584f915 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/5735ad5d8f92eda6585edd72f471470c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/59ab73a37d5a12d11b3365666bd0d8d6 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/646c34fdfbbd07273fd5021aa010ff84 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6a2b720a99cba7ffe285776300e1ae8a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6d2720be6b7611d63ad724de6855d329 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6e13c429fec3bb2c4462ce5fccccc207 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6e95a606c68bf03114949988a1d00a93 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/7132c3d0b265177e337d319046310c94 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/85aa152164ab917381b159865995d714 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8f095dc51026dd316e721df9b6264f1f +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/92519516b5581b79a3f015efca646527 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a24b7203c0701cdd550ac682572308d9 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a5d5de529f675db47e45239d04813511 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ace9e4bc7b337ae5b1a74c6c320c741c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/b79f7e12174354c395efcaf0d45e8a11 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c0fb3be9dbb3bc8844922eaff0d55201 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c1c793bef76a3aae9123e4df19d92c21 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d3d39ac7e36a2e7a3554834eaa26669c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ef972caaba894735135ce2f663a012ce +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f03bb1af911f80ff9df0283b3a788a63 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f30844584fa4b683673368e5a23eed7f +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/fb084b448735966191ed041270ff5212 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ffe3973c98878fae13cf4974dee3ae68 +0 -0
- data/spec/dummy/tmp/pids/server.pid +1 -0
- data/spec/models/magic_locales/association_spec.rb +60 -0
- data/spec/models/magic_locales/language_spec.rb +15 -0
- data/spec/models/magic_locales/locale_spec.rb +33 -0
- data/spec/models/user_spec.rb +14 -0
- data/spec/rails_helper.rb +51 -0
- data/spec/spec_helper.rb +87 -0
- 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,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">×</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 %>
|