Kom ihåg mig?
Home Menu

Menu


Hantera flera språk i MVC-Ramverk(CodeIgniter)

Ämnesverktyg Visningsalternativ
Oläst 2011-07-05, 14:53 #1
pelmereds avatar
pelmered pelmered är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: May 2010
Inlägg: 1 342
pelmered pelmered är inte uppkopplad
Har WN som tidsfördriv
pelmereds avatar
 
Reg.datum: May 2010
Inlägg: 1 342
Standard Hantera flera språk i MVC-Ramverk(CodeIgniter)

Jag håller just nu på med ett projekt i CodeIgniter där jag behöver lägga in stöd för flera språk. Det kommer till att börja med vara två språk, men det kommer troligen bli fler inom en inte alltför avlägsen tid.

De krav/önskemål jag har är:
  • Ska klara av flera språk(3+).
  • Möjligheten att lägga in nya språk ska finnas och det ska inte vara så avancerat rent tekniskt(arbetet med själva översättningen är ju inget man kommer undan).
  • Texterna ska kunna ändras ganska enkelt. Det kan vara okej om man måste kunna PHP/HTML för att kunna ändra om lösningen är bra i övrigt.
  • Ska fungera med olika vyer med samma innehåll. Tänker främst på standardwebbplats och mobil webb, men det kan bli fler.
  • Texterna ska bara behöva ändras på ett ställe för att ändringen ska komma upp i alla vyer.
  • Om det blir en databasbaserad lösning(vilket jag antar) så bör det finns möjlighet till att cachea texterna i sin helhet, företrädesvis i Memcached.

Är det någon här som har erfarenhet av detta i något MVC-ramverk(CodeIgniter eller något som liknar på det i strukturen)? Hur löste ni det då?
pelmered är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-07-05, 15:33 #2
allstars allstars är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Apr 2006
Inlägg: 2 126
allstars allstars är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Apr 2006
Inlägg: 2 126
Jag jobbar med ett .NET MVC 3 projekt där jag ändrar i routes att en språkvariabel alltid ska finnas i urlen (för sökoptimeringens skull). Standard sätter jag till sv.

På varje ActionResult i Controllerna lägger jag till ett attribut (LocalizationAttribute som ärver från ActionFilterAttribute) som lägger till efterfrågat språk (som kommer ifrån urlen) i en kontext.

Till sist har jag en helper som hämtar nuvarande språk från kontexten och presenterar på lite olika sätt beroende på användningsområde, som t ex hämtning från db där man filtrerar på current language.

Om jag gjort det för simpelt eller för krångligt för mig själv vet jag inte, men det fungerar bra tycker jag.
allstars är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-07-05, 15:48 #3
abergmans avatar
abergman abergman är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Feb 2010
Inlägg: 762
abergman abergman är inte uppkopplad
Mycket flitig postare
abergmans avatar
 
Reg.datum: Feb 2010
Inlägg: 762
Citat:
Ursprungligen postat av ITisGood.se Visa inlägg
Jag håller just nu på med ett projekt i CodeIgniter där jag behöver lägga in stöd för flera språk. Det kommer till att börja med vara två språk, men det kommer troligen bli fler inom en inte alltför avlägsen tid.

De krav/önskemål jag har är:
  • Ska klara av flera språk(3+).
  • Möjligheten att lägga in nya språk ska finnas och det ska inte vara så avancerat rent tekniskt(arbetet med själva översättningen är ju inget man kommer undan).
  • Texterna ska kunna ändras ganska enkelt. Det kan vara okej om man måste kunna PHP/HTML för att kunna ändra om lösningen är bra i övrigt.
  • Ska fungera med olika vyer med samma innehåll. Tänker främst på standardwebbplats och mobil webb, men det kan bli fler.
  • Texterna ska bara behöva ändras på ett ställe för att ändringen ska komma upp i alla vyer.
  • Om det blir en databasbaserad lösning(vilket jag antar) så bör det finns möjlighet till att cachea texterna i sin helhet, företrädesvis i Memcached.

Är det någon här som har erfarenhet av detta i något MVC-ramverk(CodeIgniter eller något som liknar på det i strukturen)? Hur löste ni det då?
Jag har för mig att det finns lang-moduler för CI.

http://codeigniter.com/wiki/i18n_Mul...ibrary_Helper/

Kanske är till någon hjälp?
abergman är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-07-06, 14:18 #4
pelmereds avatar
pelmered pelmered är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: May 2010
Inlägg: 1 342
pelmered pelmered är inte uppkopplad
Har WN som tidsfördriv
pelmereds avatar
 
Reg.datum: May 2010
Inlägg: 1 342
Citat:
Ursprungligen postat av allstars Visa inlägg
Jag jobbar med ett .NET MVC 3 projekt där jag ändrar i routes att en språkvariabel alltid ska finnas i urlen (för sökoptimeringens skull). Standard sätter jag till sv.

På varje ActionResult i Controllerna lägger jag till ett attribut (LocalizationAttribute som ärver från ActionFilterAttribute) som lägger till efterfrågat språk (som kommer ifrån urlen) i en kontext.

Till sist har jag en helper som hämtar nuvarande språk från kontexten och presenterar på lite olika sätt beroende på användningsområde, som t ex hämtning från db där man filtrerar på current language.

Om jag gjort det för simpelt eller för krångligt för mig själv vet jag inte, men det fungerar bra tycker jag.
Det var något sådant jag tänkte på också.

Har du olika vyer då eller skickar du med en array från controllern med alla texter som ska användas i vyn?

abergman: Tack, men det finns massvis med likande lösningar, till exempel den inbyggda http://codeigniter.com/user_guide/li.../language.html

Problemet är ju att det i grunden blir massa språkfiler vilket kan blir lite svårhanterligt på sikt när det blir en stor sida med massa olika språk.
pelmered är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-07-13, 23:03 #5
Kimpo Kimpo är inte uppkopplad
Medlem
 
Reg.datum: Mar 2009
Inlägg: 185
Kimpo Kimpo är inte uppkopplad
Medlem
 
Reg.datum: Mar 2009
Inlägg: 185
Själv kör jag också .net mvc3 och har byggt en väldigt simpel lösning men fungerar bra för mina ändamål.

Har en tabell [LanguageResources] med en kolumn för nycklar(detta är ett beskrivande strängvärde) och en för värden(själva språkfraserna) och sen en tredje som är id:t för själva språket. Sen cachar jag dem i minnet som en dictionary/namevalue collection och kan fråga efter dem vilket går extremt fort.

Sedan kan du köra på en annan tabell som heter [Languages] där du har alla språken. Har du väldigt bra konventioner för hur all kod skrivs i din "business layer" så skulle du kunna lagra namnen på språken där då det är inte varje dag man slänger in nya språk. Men att ha dem i en tabell är nog att föredra.

obs: Detta använder jag för kortare fraser som namn olika element på sidan som knappar där det står save / spara , kontakta oss / contact us osv...

för ren content med mycket text bör man nog köra på nån annan lösning, mer CMS likt


vad är det för typ av site? Ska en och samma domän presentera innehållet på olika språk (beroende på url parametrar eller användarinställningar) eller kommer varje språk att få en egen domän?
Kimpo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-07-14, 10:01 #6
allstars allstars är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Apr 2006
Inlägg: 2 126
allstars allstars är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Apr 2006
Inlägg: 2 126
Citat:
Ursprungligen postat av ITisGood.se Visa inlägg
Det var något sådant jag tänkte på också.

Har du olika vyer då eller skickar du med en array från controllern med alla texter som ska användas i vyn?

abergman: Tack, men det finns massvis med likande lösningar, till exempel den inbyggda http://codeigniter.com/user_guide/li.../language.html

Problemet är ju att det i grunden blir massa språkfiler vilket kan blir lite svårhanterligt på sikt när det blir en stor sida med massa olika språk.
Nej samma vyer till alla språk. Jag använder resursfiler för språkversioner.
Då det plockas upp i global.asax (routingen) så sätts språket i någon context som sedan används när .net själv hämtar den resursfil till aktuellt språk.

Hellre en språkfil för varje språk (där standardspråket alltid är komplett) än att skapa olika vyer beroende på språk.
allstars är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-07-14, 21:36 #7
Althalos Althalos är inte uppkopplad
Medlem
 
Reg.datum: Jan 2006
Inlägg: 282
Althalos Althalos är inte uppkopplad
Medlem
 
Reg.datum: Jan 2006
Inlägg: 282
Citat:
Ursprungligen postat av ITisGood.se Visa inlägg
Det var något sådant jag tänkte på också.

Har du olika vyer då eller skickar du med en array från controllern med alla texter som ska användas i vyn?

abergman: Tack, men det finns massvis med likande lösningar, till exempel den inbyggda http://codeigniter.com/user_guide/li.../language.html

Problemet är ju att det i grunden blir massa språkfiler vilket kan blir lite svårhanterligt på sikt när det blir en stor sida med massa olika språk.
Man vill ju ha språkfiler och inte behöva ändra i vyerna. T.ex. verkar det finns en implementering av gettext som bl.a. används av Wordpress:
http://codeigniter.com/wiki/Category...tion::Gettext/

Jag har översatt Wordpress-sidor med gettext och det har fungerat bra...
Althalos är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-07-15, 02:14 #8
pelmereds avatar
pelmered pelmered är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: May 2010
Inlägg: 1 342
pelmered pelmered är inte uppkopplad
Har WN som tidsfördriv
pelmereds avatar
 
Reg.datum: May 2010
Inlägg: 1 342
Citat:
Ursprungligen postat av Kimpo Visa inlägg
Själv kör jag också .net mvc3 och har byggt en väldigt simpel lösning men fungerar bra för mina ändamål.

Har en tabell [LanguageResources] med en kolumn för nycklar(detta är ett beskrivande strängvärde) och en för värden(själva språkfraserna) och sen en tredje som är id:t för själva språket. Sen cachar jag dem i minnet som en dictionary/namevalue collection och kan fråga efter dem vilket går extremt fort.

Sedan kan du köra på en annan tabell som heter [Languages] där du har alla språken. Har du väldigt bra konventioner för hur all kod skrivs i din "business layer" så skulle du kunna lagra namnen på språken där då det är inte varje dag man slänger in nya språk. Men att ha dem i en tabell är nog att föredra.

obs: Detta använder jag för kortare fraser som namn olika element på sidan som knappar där det står save / spara , kontakta oss / contact us osv...

för ren content med mycket text bör man nog köra på nån annan lösning, mer CMS likt
Jag hade tänkt lite på något i stil med det där också. Jag tycker det känns bättre att ha texterna i databasen än att ha dem i textfiler. Känns lättare att underhålla plus att man ganska enkelt kan bygga ett webbinterferera för att ändra i texterna om vill senare(så att andra som inte har programmeringskunskaper kan ändra).

Jag funderade lite på om man skulle göra en sån där lösning men att man har två tabeller med text. En med korta texter(datatyp: VARCHAR(255)) och en med längre beskrivande texter(datatyp: TEXT). Är det en bra lösning eller är det bättre att köra en med TEXT för allt?
Texterna kommer ju cachas i memcached med lång TTL så de kommer nästan aldrig läsas ifrån databasen så det kanske inte gör något om man använder TEXT även för korta värden?

Citat:
Ursprungligen postat av Kimpo Visa inlägg
vad är det för typ av site? Ska en och samma domän presentera innehållet på olika språk (beroende på url parametrar eller användarinställningar) eller kommer varje språk att få en egen domän?
Det är en webbtjänst med en kontrollpanel. Det är kommer vara mest ganska korta texter men även en del längre beskrivande texter och hjälptexter.

Jag tror jag kommer köra på domän.com/en/... och domän.com/se/. Möjligen kommer vissa länder få en egen domän senare. Det är inte helt klart i dagsläget.
pelmered är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-07-15, 18:38 #9
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Citat:
Ursprungligen postat av ITisGood.se Visa inlägg
Jag funderade lite på om man skulle göra en sån där lösning men att man har två tabeller med text. En med korta texter(datatyp: VARCHAR(255)) och en med längre beskrivande texter(datatyp: TEXT). Är det en bra lösning eller är det bättre att köra en med TEXT för allt?
Texterna kommer ju cachas i memcached med lång TTL så de kommer nästan aldrig läsas ifrån databasen så det kanske inte gör något om man använder TEXT även för korta värden?
Rätt tänkt. Cachar du din data i ett annat lager så är det effektiviteten i det lagret som blir det viktiga i slutändan.

Själv tittade jag på gettext, tmx, tbx, xliff etc nyligen till ett nytt projekt men kom fram till att det finns alldeles för dåligt med smidiga, stabila och plattformoberoende öppna mjukvaror för hantering av alla dessa (för att inte tala om att många av formaten i sig redan har en del tveksamheter). Att göra en webb-admin med import/export till en databas kändes mycket bättre.
Clarence är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 21:55.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017