Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Rozne jezyki serwisu., Pomysl na implementacje ?
thornag
post
Post #1





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


Witam.

Od dluzszego czasu zastanawiam sie jak skutecznie wprowadzic do serwisu pliki jezykowe.
Pierwsze nasuwaja sie stale. Tylko ze w miare tworzenia serwisu liczba stalych rosnie tak ze Ciezko sie w nich polapac. problem jest takze jesli mamy np e-mail w srodku ktorego chcemy wprowadzic zmienne. Trzeba wtedy ten email dzielic na kilka czesci. EMAIL_BODY1 EMAIL_BODY2 itp. Do tego dochodzi fakt ze czasami w roznych jezykach rozne slowa sa krotsze lub dlusze, badz tez do wyjasnienia czegos wystarcza dwa badz tez 15 slow, nie zawsze musi sie to wpasowac w styl strony.

Biorac pod uwage ostatnie zdanie, zaczalem rozwazac robienie osobnych szablonow dola kazdego jezyka. Niby to wygodne bo napewno wszystko bedzie dobrze wygladalo, ale co jesli zechce dodac nowy element na strone. Majac 10 jezykow bede musial wprowadzic zmiane w 10*ilosc templatow plikow.

ogolnie tak zle i tak niedobrze smile.gif

Jak wy zrealizowaliscie obsluge wielu jezykow ?

Ten post edytował thornag 30.08.2006, 11:57:43


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 18)
dyktek
post
Post #2





Grupa: Zarejestrowani
Postów: 240
Pomógł: 0
Dołączył: 18.01.2004
Skąd: rzeszów / kraków

Ostrzeżenie: (0%)
-----


jesli chodzi o dane z bazy to robiłem to tak smile.gif


  1. tabela artykuły


id---art_pl---art_en-----cos tam dalej-------

w sesji trzymam info o wybranym języku i potem mozna nawet zrobić coś takiego
  1. SELECT id, art_'.$Lang.', cos FROM tralalal
Go to the top of the page
+Quote Post
thornag
post
Post #3





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


Na to tez wpadlem uzywam poki co. Jednak nie chodzi mi o zmienna zawartosc strony a o ta stala. Jak slowa zaloguj, zarejestruj itp itp.


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
czachor
post
Post #4





Grupa: Zarejestrowani
Postów: 897
Pomógł: 40
Dołączył: 16.12.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Ja używam TMX (Translation Memory eXchange).
Dane trzymasz w pliku XML, potem wszystko jest w tablicy. Tutaj masz klasę z przykładem do obsługi tego.

Osobiście jestem zadowolony.

Ten post edytował czachor 30.08.2006, 12:32:35


--------------------
how many SEO experts does it take to change a light bulb,lightbulb,light,bulb,lamp,lighting,switch,sex,xxx
5-Reasons-why-you-should-NEVER-fix-a-computer-for-free
Go to the top of the page
+Quote Post
thornag
post
Post #5





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


Dzieki, wydaje mi sie ze XMl rzeczywiscie dobrze sobie z tym poradzi.

Mimo wszystko moze jeszcze jakies inne sugestie ?

@czachor => Sprawdzielm wlasnei ta klase. W sumie oprocz tego ze zapisujemy to wszystko w pliku XML i mamy otoczke obiektowa do parsowania tego XML w niczym sie to dla mnie nie rozni od zwyklych stalych. Dalej moze tego byc tyle ze sie nie da polapac o co chodzi. Aczkolwiek moze innego lepszego rozwiazania po prostu nie ma.

Ten post edytował thornag 30.08.2006, 12:43:22


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
s_w_ir
post
Post #6





Grupa: Zarejestrowani
Postów: 315
Pomógł: 1
Dołączył: 6.08.2003
Skąd: Kielce

Ostrzeżenie: (0%)
-----


Ja robiłem tak, w osbnym pliku(inny plik dla każdego języka):
  1. <?php
  2. class Dane{
  3. var $komunikaty=array("Nie podałeś nazwy katalogu, lub podałeś błedną składnie ze znacznikami HTML",
  4. "Katalog o podanej nazwie już istnieje",
  5. "Nie ma żadnego pliku do usunięcia",
  6. "Nie można usunąć pliku <font color="black">",
  7. "</font>. Podany plik nie istnieje",
  8. "Nie masz uprawnien aby sie dostać do tego folderu",
  9. "Weryfikuj i dodaj",
  10. "Źle wpisane imię",
  11. "Źle wpisane nazwisko",
  12. "Błędny adres Email",
  13. "Użykownik o takim loginie juz isnieje", //10
  14. "Błędna nazwa użytkownika",
  15.  
  16. ...
  17. "Nazwa",
  18. "Rozmiar",
  19. "Zmodyfikowany", //30
  20. "Utwórz Katalog",
  21. "Nazwa Katalogu:",
  22. "Utwórz Katalog",
  23. "Usuń Plik lub Katalog",
  24. "Wybierz plik lub katalog:",
  25. "Usuń",
  26. "Wyślij plik na server",
  27. "Wyślij");  //38
  28. ?>


Użycie:
  1. <?php
  2. else{
  3. Operacje::blad($Dane->komunikaty[5]);
  4. $obecny_kat = $_SESSION["sciezka"] = $_SESSION["user"];
  5. }
  6. ?>
Go to the top of the page
+Quote Post
thornag
post
Post #7





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


I pamietasz te wszystkie komunikaty tongue.gif (w sensie numery) ? Jesli serwis jest naprawde duzo to mozna sie w tym pogubic latwiej niz w stalych.


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
php programmer
post
Post #8





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

Ostrzeżenie: (0%)
-----


ja to zrobiłem w taki sposób że dany wiersz miał jedną kolumnę identyfikującą
napisaną po angielsku, jakieś krótkie słow lub zwrot, a reszta kolumn to pełne zwroty w danym języku

np:

Save, Zapisz, Zapisaju
Cancel, Anukuj, Anulaju
OK, OK, OK
ConfirmDetele Czy na pewno chcesz skasować?, Czi na piewno chacziu skasowaju?
TypeName Podaj nazwe, podaju nazwaju
Go to the top of the page
+Quote Post
thornag
post
Post #9





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


@php_programmer Przyklad uzycia ? Cos mi sie to nie widzi smile.gif


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
php programmer
post
Post #10





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

Ostrzeżenie: (0%)
-----


  1. <?php
  2.  
  3. require('config/database.php');
  4. require('config/smarty.php');
  5.  
  6. if (!isset($_SESSION['language']))
  7.  $_SESSION['language'] = 'polish';
  8.  
  9. $query = " SELECT * FROM labels ";
  10. $result = mysql_query($query) or die(mysql_error());
  11. while ($row = mysql_fetch_array($result))
  12.  $labels[$row['name']] = $row[$_SESSION['language']];
  13.  
  14. $smarty->assign('labels',$labels);
  15. ?>


Natomiast w templatach mozesz zrobic cos takiego

  1. {$labels.descr}
  2. <inbut type="button" value="{labels.cancel}">
  3. <inbut type="button" value="{labels.save}">
Go to the top of the page
+Quote Post
s_w_ir
post
Post #11





Grupa: Zarejestrowani
Postów: 315
Pomógł: 1
Dołączył: 6.08.2003
Skąd: Kielce

Ostrzeżenie: (0%)
-----


Cytat(thornag @ 30.08.2006, 13:44:35 ) *
I pamietasz te wszystkie komunikaty tongue.gif (w sensie numery) ? Jesli serwis jest naprawde duzo to mozna sie w tym pogubic latwiej niz w stalych.


Wiesz najpierw robie wszystko po polsku bez tej klasy. Dopiero po skończonej robocie biore się za umiędzynarodowienie zamieniając komunikaty na te zmienne. Wszystko zależy od organizacji podczas pisania aplikacji. Potem to jest już zmiana każdego wpisu pokoleji na zmienną i nadawanie kolejnych numerów. Mi osobiście to odopowiada tym bardziej, że łatwo po tej całej robocie wszytsko pozmieniać. Wszytskie komunikaty są edytowalne w jednym miejscu.
Go to the top of the page
+Quote Post
thornag
post
Post #12





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


No to mamy Stale, Baze danych i XML.

@php_programmer W sumie niezle to to, tylko ze za kazdym razem musze ladowac wszystkie rekordy, duzo niepotrzebnych danych. Mozna by w sumie cachowac hmm


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
php programmer
post
Post #13





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

Ostrzeżenie: (0%)
-----


@s_w_ir:
Już przerabiałem coś takiego,
jak przyjdzie potrzeba jakiejś modyfikacji
i z kodzie masz powiedzmy 20-30 wyrazów
to nie wiesz jaki numer do jakiego wyrazu jest,
zalecam uzywanie słów, najlepiej angielskich bo nie maja ogonkow
i najlepiej jako elementy jakies wiekszej czesci tak jak u mnie w przykłądzie
{$labels.save}
od razu wiesz ze ta zmienna to tylko etykietka
i nie myli się z innymi zmiennymi,

Cytat
kazdym razem musze ladowac wszystkie rekordy

zgadza sie, kod podałem tak zgrubsza bez zbędnych szczegółów
zawsze mozna zmodyfikowac zapytanie aby brało tylko to co trzeba
np mozna w baze dać dodtkową kolumnę z informacją
na jakiej stronie jest dany label i pobierac w danym momencie labele
tylko z danej strony na której obecnie jestesmy,

mozna jeszcze ewentualnie zmienną $labels zserializować i zapisac w sesji

Ten post edytował php programmer 30.08.2006, 13:32:44
Go to the top of the page
+Quote Post
MiB
post
Post #14





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 30.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Witam!

Ja od dłuższego czasu robię to tak (mix wersji php programmer i s_w_ir`a ;) ):

plik: /languages/lng.pl.php

  1. <?php
  2.  
  3. // menu
  4. $lng['L_ARTICLES']='Artykuły';
  5. $lng['L_ADD']='Dodaj';
  6. $lng['L_SITE_SETTINGS']='Ustawienia';
  7. /...
  8. ?>


W pliku index.php:

  1. <?php
  2. $lang=$core->URL->fetch('lang',SITE_DEF_LANG);
  3. switch($lang) {
  4. case 'pl':
  5. case 'en':
  6. case 'du':
  7. require_once('/languages/lng.'.$lng.'.php');
  8. default:
  9. require_once('/languages/lng.'.SITE_DEF_LANG.'.php');
  10. }
  11. $core->smarty->assign('lng',$lng);
  12. ?>


W szablonie użycie takie jak pokazał php programmer. Myślałem nawet kiedyś o zastosowaniu prefiltra do Smarty, żeby przeparsował same ustawienia językowe "raz, a porzadnie" (można nadać compile_id na cache szablonu Smarty i już mamy wiele języków :D).

Co do przechowywania tego na bazie - można. Nad tym też kiedyś myslałem. Po zedytowaniu tego można odswiezyć taki pliczek lng.X.php i potem juz tylko inkludować go.

A jak miałaby wyglądać struktura takiej tabeli?

Ot po prostu:
  1. lang | id | value


lang - oznaczenie języka (pl, du, en)
id - identyfikator (u s_w_ir`a liczbowe, u mnie string)
value - wartość w danym języku

Pobranie:
  1. SELECT `id`, `value` FROM languages WHERE lang=''.$lang.''


Nie mamy żadnych ograniczeń w ilości języków (dodanie nowego języka != dodanie nowej kolumny).

Pozdrawiam

Ten post edytował MiB 30.08.2006, 13:37:50
Go to the top of the page
+Quote Post
s_w_ir
post
Post #15





Grupa: Zarejestrowani
Postów: 315
Pomógł: 1
Dołączył: 6.08.2003
Skąd: Kielce

Ostrzeżenie: (0%)
-----


php programmer - no wiesz mi takie coś:
Kod
"Nie masz uprawnien aby sie dostać do tego folderu",
        "Weryfikuj i dodaj",
        "Źle wpisane imię",

mówi więcej niż label.save, ponieważ jeśli piszesz aplikacje sam to doskonale wiesz gdzie taki komunikat się pojawia, pozatym większość haseł jest tłumaczona dosłownie(więc nie musisz tego zawsze wiedzieć). Inna sprawa, że w razie wątpliwości możemy sobie komentować gdzie co się gdzie znajduje, albo w jakim kontekście. Komentowanie jest zalecane(ba, to obowiązek) w każdym większym projekcie, więc jeśli nie komentujesz to się i tak pogubisz.

Ten post edytował s_w_ir 30.08.2006, 13:37:48
Go to the top of the page
+Quote Post
php programmer
post
Post #16





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

Ostrzeżenie: (0%)
-----


Cytat
"Nie masz uprawnien aby sie dostać do tego folderu",
"Weryfikuj i dodaj",
"Źle wpisane imię",



PermissionDirError
CheckAndAdd
BadName

Ten post edytował php programmer 30.08.2006, 13:44:17
Go to the top of the page
+Quote Post
s_w_ir
post
Post #17





Grupa: Zarejestrowani
Postów: 315
Pomógł: 1
Dołączył: 6.08.2003
Skąd: Kielce

Ostrzeżenie: (0%)
-----


OK, no to w czym problem, zamieniam polskie texty na angielskie odpowiedniki, ewentualnie troche inaczej aby utrzymać kontekst. Zmiana w jednym pliku, nie ingeruje w kod, chyba to było celem.

lece do miasta teraz więc już się nie kłóce winksmiley.jpg
Go to the top of the page
+Quote Post
bim2
post
Post #18





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


Ja obstawiam php programmer winksmiley.jpg Tak jest np. w phpBB tyle że tam jest na plikach. Bardzo fajnie się tak robi i prosto.


--------------------
Go to the top of the page
+Quote Post
thornag
post
Post #19





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


@bim2 W Mambo ktore ja uwazam za najlepszy darmowy CMS (chociaz juz chyba nie jest darmowy) porobili to na stalych, co wcale nei oznacza ze dobrze.

Ogolnie chyba zdecyduje sie na kolejne miksowe rozwiazanie smile.gif Baza danych z indentyfikatorem strony (choc tutaj trzeba przemyslec co bedzie jak ta sama fraza bedzie na kilku stronach) i jakas klasa ladujaca co trzeba i tworzaca z tego tablice.
Co do samej bazy danych zdecyduje sie jednak na wzor jedna kolumna jeden jezyk.

W kazdym badz razie dzieki za dyskusje.


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 10:01