Artykuły jmail's software

[CF](CFWheels 1.0.4) [pl] Strona wielojęzykowa [en] Multilanguage site

by 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 ;)

:, , , , , , ,

Leave a Reply

Kalendarz

Czerwiec 2010
P W Ś C P S N
« maj   lip »
 123456
78910111213
14151617181920
21222324252627
282930  
Linki sponsorowane:
fotografia slubna krakow * rękawice robocze * ecco * obuwie sportowe * zaproszenia ślubne * tanie bilety lotnicze * last minute maroko