Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] klasa do tłumaczenia
Forum PHP.pl > Forum > Przedszkole
hhg
moj system pracuje w dwóch językach: polskim i angielskim. Chaciałbym uelastycznic zwracane przez metody w klasach komunikaty. Toteż chcę stworzyć klase do tłumaczenia. Będzie zawierała dwie tablice: jedna z komunikatami polskimi a druga z angielskimi (pod tymi samymi indeksami odpowiedniki komunikatow w dwoch jezykach). Bedzie pewnie jakas metoda translate() zwracajaca odpowiednik komunikatu z drugiej tablicy.

Czy macie na to jakas lepsza koncepcje? bo mysle ze wpisywanie przy zwracanych wartosciach metod czegos w stylu:

$eng[45]

jest malo wymowne


z gory dzieki za pomoc
Cosi*
Ja to od dawna robię w ten prosty, ale skuteczny sposób:
- tworzę osobny plik, który będzie odpowiadał za obsługę wersji językowych i przechowywał komunikaty
- wybór wersji językowej może być realizowany w dowolny sposób, w zależności od potrzeb. Może to być zmienna przekazywana przez GET, ciastko, wpis w pliku konfiguracyjnym itp.
- komunikaty trzymam w stałych tekstowych, definiowanych po starcie programu, w zależności od wybranego języka, np.:
  1. <?php
  2. define('_PODAJ_DANE','Podaj dane');
  3. ?>

Ważne żeby nazwy stałych były intuicyjne i żeby nie kolidowały z zastrzeżonymi nazwami (można na początku użyć np. podkreślenia)
- jeżeli piszę w PHP, komunikaty umieszczam bezpośrednio w kodzie HTML:
  1. <a href="index.php"><?= _POWROT_DO_STRONY_GLOWNEJ ?></a>

Najlepiej wtedy przy testowaniu włączyć error_reporting na E_ALL i obserwować, czy czegoś nie poputaliśmy.

No i to chyba tyle. "Sprzedałem" Ci moją autorską metodę winksmiley.jpg
Pozdrawiam,
Cosi
hhg
dzieki smile.gif a co sądziesz(cie) o napisaniu tego obiektowo? jaka jest wyższość stałych nad zastosowaniem obiektowym
kosmowariat
w obiekcie też mogą być stałe ;p hmmm a może użyj smarty biggrin.gif co do oop vs stałe jestem za stałymi zdefiniowanymi w oddzielnych plikach
Cosi*
Oczywiście można zrobić sobie klasę, która będzie to obsługiwała. Po starcie programu wywołujesz konstruktor, który robi to co napisałem. Ogólnie nie mam nic przeciwko robieniu wszystkiego "na OOPa" winksmiley.jpg, tylko trzeba to robić z głową, żeby nie pisać tak:
  1. <?php
  2. class Hello
  3. {
  4.  private HelloMsg;
  5.  
  6.  function __construct()
  7.  {
  8. $this->HelloMsg = 'Hello, World!';
  9.  }
  10.  
  11.  function greeting()
  12.  {
  13. echo $this->HelloMsg;
  14.  }
  15. }
  16.  
  17. $hello = new Hello;
  18. $hello->greeting();
  19. unset($hello);
  20. ?>
biggrin.gif
A poza tym tak jak pisał kosmowariat: jeżeli mam wybierać, wybieram stałe.
tommy4
ja bym proponował utworzyć klasę oraz pliki polski.lng, english.lng (w każdej linii jedno zdanie) i później:

  1. <?php
  2. $lang = new Lang("polski");
  3. ?>


w konstruktorze funkcją file załadować cały plik do tablicy, a potem jedynie:

  1. <?php
  2. $lang->get(245);
  3. ?>


żeby pobrać string o identyfikatorze 245 (z wewnętrznej tablicy).

Prosto, łatwo i przyjemnie. smile.gif
hhg
faktycznie na stałych powinno się płynnie pracować, byle trzymać się notacji np _PODSTRONA_ERR_IDENTYFIKATOR
UDAT
Już był odpowiedni temat: Wielojęzykowość
nospor
zamykam spowodu podanego wyzej. Poco drązyc wątek w kilku tematach. tak bedzie wszystko w kupie. Jesli sa dodatkowe przemyslenia to tam sie dopisac prosze.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.