Lokalizuję moją aplikację php. Mam dylemat wyboru najlepszej metody osiągnięcia tego samego.
Metoda 1: Obecnie przechowuję słowa do zlokalizowania w tablicy w pliku php
<?php
$values = array (
'welcome' => 'bienvenida'
);
?>
Korzystam z funkcji, aby wyodrębnić i zwrócić każde słowo zgodnie z wymaganiami
Metoda 2: Czy powinienem użyć pliku txt, który przechowuje taki sam ciąg znaków?
<?php
$welcome = 'bienvenida';
?>
Moje pytanie brzmi, która metoda jest lepsza pod względem szybkości i wysiłku, aby ją opracować i dlaczego?
Edycja: Chciałbym wiedzieć, która z dwóch metod jest szybsza w odpowiedzi i dlaczego? mile widziane są również wszelkie ulepszenia powyższego kodu !!
php
localization
sree
źródło
źródło
Odpowiedzi:
PHP ma świetne wbudowane możliwości lokalizacji. Najczęstszym sposobem wydaje się być gettext - ten samouczek pokazuje, jak się go używa.
Od PHP 5.3 istnieje również wersja międzynarodowa, która oferuje o wiele więcej funkcji (na przykład do formatowania liczb, dat i walut w zależności od ustawień regionalnych).
źródło
Po pierwsze,
gettext
jest to dobra droga, więc nie zwalniaj, jeśli na początku nie będzie to łatwe; Istnieją jednak również inne opcje, które warto znać. Zanim to wyjaśnimy, spójrzmy najpierw na twoje sugestie:Na tym
array
etapie masz całkiem proste rozwiązanie. Dobrą rzeczą jest to, że możesz przechowywać swoje tłumaczenia w pamięci danych, a następnie załadować je do skryptu PHP jako tablicę i to wszystko. Jednak jeśli chcesz przechowywać tablicę statycznie w pliku PHP, to jej edycja wymaga a) programisty PHP lub doświadczonego użytkownika znającego składnię PHP, tylko do edycji pliku b) synchronizacji między nawet czterema lub pięcioma różnymi plikami językowymi może być dość irytujące i podatne na błędy.Należy tutaj wziąć pod uwagę: Jak później dodać nowe elementy do pliku językowego? Czy mogę zostawić to tłumaczowi, czy powinien być programista PHP?
Twoja
variable
droga do tego nie jest praktyczna. Czemu? Zakładam, że będziesz mieć kilka funkcji przynajmniej w swojej aplikacji, prawda? Następnie musisz przekazać wszystkie te zmienne, gdy wywołujesz funkcję lub potrzebujeszglobal
ich. Jeśli uważasz, że będziesz mieć więcej niż dziesięć takich zmiennych, to zdecydowanie odradzam ci to zrobić. Może również wystąpić konflikt nazw - możesz potencjalnie zastąpić wartość innej zmiennej o tej samej nazwie, jednak można to rozwiązać, dodając prefiks nawet tak prosty jak znak podkreślenia, więc będziesz mieć$_welcome
na przykład. W każdym razie, gdybym był tobą, nawet bym o tym nie pomyślał; Nie rób tegoJednym dobrym sposobem na to jest zdefiniowanie Stałych z prefiksem. Na przykład w swoim
en.lang.php
będziecie mieli coś takiego,define( 'LABEL_WELCOME', 'Welcome' );
aw swoimno.lang.php
będziecie mielidefine ( 'LABEL_WELCOME', 'Velkommen' );
. Dobrą rzeczą w używaniu stałej zamiast zmiennych jest to, że zawsze są one dostępne w skrypcie. Więc nie musisz ich wstrzykiwać ani globalizować. W porównaniu z tablicami i zmiennymi są one szybsze ze względu na sposób, w jaki PHP je obsługuje - zajmują mniej miejsca w pamięci. Wadą jest to, że nie możesz przekazać ich tłumaczowi, więc ponownie potrzebujesz programisty PHP. Również synchronizacja między plikami może znów sprawiać trochę bólu.Inną opcją jest posiadanie funkcji lub klasy / metody pobierania tłumaczenia. Będzie mniej wydajny - nie sądzę jednak, aby w ogóle potrzebował tego rodzaju mikrooptymalizacji, ale dodatkową zaletą jest możliwość zastosowania niestandardowej logiki podczas pobierania tłumaczenia. Wyobraź sobie na przykład, że pewnego dnia twój ukochany kierownik projektu przychodzi do ciebie z pytaniem, czy możesz ukryć wszystkie te litery wielkimi literami. Nie możesz tego odmówić, więc posiadanie funkcji pośredniej może ci bardzo pomóc, kiedy musisz zastosować / zmienić wzór we wszystkich swoich tłumaczeniach.
Podsumowując:
Zastanów się, w jaki sposób tłumacze mogą z niego korzystać, i opracuj dla nich działające rozwiązanie KISS.
Zastanów się, jak zachować synchronizację między różnymi językami.
Zastanów się, czy to samo tłumaczenie może być potrzebne, powiedzmy w przypadku aplikacji mobilnej. Rozwiązanie wieloplatformowe może zaoszczędzić Twój czas. Nie zwalniaj JSON i zwykłych baz danych.
Zastanów się, jak możesz zastosować / zmienić logikę podczas pobierania tłumaczeń.
Zapomniałem o wydajności. 99,9% razy nie zajdzie tak daleko, aby dokonać mikrooptymalizacji, takich jak stała vs. zmienne vs. wywołania funkcji . Zakładam, że twój czas jako programisty / personelu jest droższy niż czas procesora.
Aktualizacja nr 1
Mój Boże, zamieszczam odpowiedź na roczne pytanie. Dlaczego nikt tu nic nie mówi? Potrzebujemy alertów w tych przypadkach.
Aktualizacja nr 2
Po prawej stronie napisano, że to pytanie z roku na rok; Jednak zostało to zadane dwa lata temu! Tutaj wszystko jest mylące!
źródło