[CF](CFWheels 1.0.4) [pl] Strona wielojęzykowa [en] Multilanguage site
by jmail on cze.04, 2010, under PHP / CF / .NET / Java
ColdFusion on Wheels ma jedną poważną wadę. Nie oferuje wsparcia dla tworzenia stron wielojęzykowych. Poszukałem trochę i znalazłem jeakiś plugin Localizer, ale niestety nie działał tak jak tego oczekiwałem.
Dlatego zdecydowałem się przygotować własne rozwiązanie i oto ono! Wsparcie dla wielu języków na stronie
1. W głównym katalogu wheelsów dodaj katalog langs
2. Do katalogu langs dodaj folder default
3. W katalogu default utwórz plik global.cfm. Trafi do niego wszystko co będziesz chciał używać w wielu kontrolerach
4. Dodaj do pliku global.cfm wszystkie wpisy, które musisz mieć w każdym kontrolerze (a przynajmniej we więcej niż jednym). Dodawaj w układzie:
Klucz:Wartość|
login:LOG IN|
signin:SIGN IN|
logout:LOGOUT|
Informacja:
- jeżeli potrzebujesz dodać dwukropek w pole wartość użyj kodu html’owego o numerze 58
- jeżeli potrzebujesz dodać | w pole wartość użyj kodu html’owego o numerze 124
5. Dodaj funkcję readLangs do pliku kontrolera Controller.cfc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <cffunction name="readLangs"> <cfset langs = StructNew()> <cfif isDefined("session.language")> <cfset langToRead="#session.language#"> <cfelse> <cfset langToRead="default"> </cfif> <cfif DirectoryExists("#application.wheels.rootPath#langs/#langToRead#")> <cfif FileExists("#application.wheels.rootPath#langs/#langToRead#/globals.mo")> <cffile action="read" file="#application.wheels.rootPath#langs/#langToRead#/globals.mo" variable="globalLang"> <cfset langsArray = ListToArray(trim(globalLang), "|")> <cfloop index="i" from="1" to="#arrayLen(langsArray)#"> <cfset langsPos = ListToArray(trim(langsArray[i]), ":")> <cfset "langs.#langsPos[1]#" = langsPos[2]> </cfloop> </cfif> </cfif> <cfif DirectoryExists("#application.wheels.rootPath#langs/#langToRead#/#Controller#")> <cfif FileExists("#application.wheels.rootPath#langs/#langToRead#/#Controller#/#Action#.mo")> <cffile action="read" file="#application.wheels.rootPath#langs/#langToRead#/#Controller#/#Action#.mo" variable="actionLang"> <cfset langsArray = ListToArray(trim(actionLang), "|")> <cfloop index="i" from="1" to="#arrayLen(langsArray)#"> <cfset langsPos = ListToArray(trim(langsArray[i]), ":")> <cfset "langs.#langsPos[1]#" = langsPos[2]> </cfloop> </cfif> </cfif> <cfset application.langs = langs> </cffunction> |
6. Dodaj funkcję getLang do pliku kontrolera Controller.cfc
1 2 3 4 5 6 7 8 9 | <cffunction name="getLang"> <cfargument name="key" required="true" hint="This argument provides a key from a structure `langs` which value will be returned"> <cfif isDefined("application.langs.#key#")> <cfset lang = #Evaluate("application.langs.#key#")#> <cfelse> <cfset lang = ""> </cfif> <cfreturn lang> </cffunction> |
7. Używaj w pliku widoku:
1 2 3 | <cfoutput> #getLang("Key")# </cfoutput> |
8. Żeby utworzyć nowy język po prostu skopiuj pliki i foldery z katalogu /langs/default do katalogu langs/nazwaAlboKodJezyka
nazwaAlboKodJezyka – to Twój własny wybór
9. Ustaw zmienną sesji session.lang na taki język na jaki chcesz zmienić
1 | <cfset session.language = "pl"> |
w moim przykładzie
10. W katalogu default i nazwaAlboKodJezyka twórz foldery tak samo jak to robisz w widokach i utwórz pliki na potrzeby akcji z nazwą pliku w postaci nazwaAkcji.mo
Dla przykładu mam kontroler Main i akcję index dlatego utworzę:
/langs/default/Main/index.mo
/langs/pl/Main/index.mo
/langs/en/Main/index.mo
i ostatnia rzecz jaką trzeba zrobić to zmienić zmienną sesji session.lnag na taką jak potrzebujuesz. Bez obaw. Jeżeli nie będzie katalogu będzie czytać z katalogu default. A jeżeli i jego nie będzie to zwróci pusty string.
To wszystko