Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Podstawianie stringów
Forum PHP.pl > Forum > Przedszkole
phpamator
Wymyśliłem sobie, zrobić dwujęzyczna stronę (na potrzeby edukacyjne oczywiście) i trochę utknłem bo mi array_search owszem wyszukuje ale ... często źle, źle bo np w tablicy mam kilkakrotnie występujce ciagi znaków no i zamiast jeden raz powiela mi te stringi.
W sumie samo podstawianie to prosta funkcja, jak jednak zmusić, żeby array_search wyszukiwał mi tylko stringi które pasuja 1:1, poniższy kod działa całkiem dobrze:

  1. function transIt($data,$loc) {
  2. echo '<pre>';
  3. echo $data;
  4. $translation = array('Żadany: ' => 'Requested: ','Nowa licencja: ' => 'New licence: ','Oto twój nowy klucz licencyjny: ' => 'Here is your new license key: ','Keypoints - licencja' => 'Keypoints - license',', skopiuj i wklej w okienku `Klucz licencyjny w module` ' => ', copy and paste it into `License key in module` ',' i wciśnij `Zapisz`.' => ' and click `Save`.');
  5. if ($loc == 'pl-PL'){
  6. $key = array_search($data, $translacja);
  7. }else{
  8. $key = array_search($data, $translation);
  9. }
  10. echo $key;
  11. return $key;
  12. }

wyczytałem, że można też użyć preg_grep albo preg_match.
Podpowiedzcie, jaka metoda będzie najszybsza, najlepsza, najodpowiedniejsza?


viking
http://php.net/manual/en/function.gettext.php
phpamator
Dzięki viking'u.
Nie chciałem zewnętrznego pliku do tego zatrudniać bo to ma być tylko do podmiany dosłownie kilku zdań.
Dlatego zrobiłem w ten sposób.
Może nie jest to zły pomysł użyć get_text()
szukam, jak powinien wygldać sformatowany tekst do tego.
bo jakoś nie widzę nigdzie.

To ma być .po?

  1. msgid ""
  2. msgstr ""
  3. "Project-Id-Version: Lingohub 1.0.1\n"
  4. "Report-Msgid-Bugs-To: support@lingohub.com \n"
  5. "Last-Translator: Marko Bošković <marko@lingohub.com>\n"
  6. "Language: de\n"
  7. "MIME-Version: 1.0\n"
  8. "Content-Type: text/plain; charset=UTF-8\n"
  9. "Content-Transfer-Encoding: 8bit\n"
  10. "Plural-Forms: nplurals=2; plural=(n != 1);\n"
  11.  
  12. msgid "Let’s make the web multilingual."
  13. msgstr "Machen wir das Internet mehrsprachig."
  14.  
  15. msgid "We connect developers and translators around the globe "
  16. "on Lingohub for a fantastic localization experience."
  17. msgstr "Wir verbinden Entwickler mit Übersetzern weltweit "
  18. "auf Lingohub für ein fantastisches Lokalisierungs-Erlebnis."
  19.  
  20. msgid "Welcome back, %1$s! Your last visit was on %2$s"
  21. msgstr "Willkommen zurück, %1$s! Dein letzter Besuch war am %2$s"
  22.  
  23. msgid "%d page read."
  24. msgid_plural "%d pages read."
  25. msgstr[0] "Eine Seite gelesen wurde."
  26. msgstr[1] "%d Seiten gelesen wurden."
miccom
A nie lepiej w osobnym pliku ( np. pl.php, de.php, ru.php itd. ) definiować teksty do tłumaczenia, a potem z zależności jaki lang wybierze klient- taki plik ładować do nagłówka?
phpamator
No może i lepiej ale jak napisałem to nie ma tłumaczyć całej strony tylko dosłownie kilka zdan więc nie bardzo widzę sens.
Stad moje pomysly z tablica i podmianka stringow
Pyton_000
No to tak:

Oczywiście duże uproszczenie smile.gif

  1. function getTrans(string $key, string $lang = 'pl') {
  2. $langs = [
  3. 'pl' => [
  4. 'new_license' => 'Nowa licencja: ',
  5. ],
  6. 'en' => [
  7. 'new_license' => 'New licence: ',
  8. ]
  9. ];
  10.  
  11. return $langs[$lang][$key];
  12. }
phpamator
Hej python_000, a czy przypadkiem nie będzie to robiło dokładnie tego samego co search_array() ?
Czy w tym przypadku będzie podstawiało całe/pasujące stringi ?


Próbuję ale wywala mi błąd 500.
... przepisałem kropka w kropkę od ciebie, podstawiłem tylko swoje stringi i d...pa ...aaaa
po usunięciu 'string' z argumentów funkcji działa ...
leonpro778
Cytat(phpamator @ 26.06.2018, 23:18:12 ) *
po usunięciu 'string' z argumentów funkcji działa ...


Przesiądź się na PHP 7+
phpamator
Jest szansa, że tak zrobię tongue.gif
Dzięki za podpowiedź smile.gif
Pyton_000
No w 2018 to już by wypadało smile.gif
phpamator
Kurcze gdybym miał dostęp do shella na wszystkich serwerach i mógł bez przeszkód zmienić wersję .... pewnie już dawno bym to zrobił.
Ale nie wszędzie mogę, więc muszę dostosować kod do najniższej wersji jaka mam, prosiłem administratorów na niektórych serwerach o zmiany to mi powiedzieli .... off.
"będziemy zmieniać ...... kiedyś" tongue.gif

no ... kicha
Pyton_000
Zmień serwery w takim razie bo nie widzę sensu trzymania kodu w PHP <7 bo te wersje są już nie wspierane.
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.