Lokalizacja w php, najlepsza praktyka czy podejście?

11

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 !!

sree
źródło
2
zastanawiałeś się nad gettextem?
sagarchalise
@sagarchalise Zajrzałem do tego, ale chcę zbudować własną metodę, tj. dowolną z powyższych dwóch. Chciałbym więc wiedzieć, która metoda działa szybciej, a która jest bardziej niezawodna! :)
sree
Jeśli chcesz poznać szybkość, po prostu zrób kilka przypadków testowych. Co działa szybciej, 1M razy pierwsza lub druga metoda?
Francisco Presencia
2
Nie wymyślaj koła, które działa dobrze.
gbjbaanb

Odpowiedzi:

10

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).

oezi
źródło
Dziękuję za odpowiedź, ale czy mogę wiedzieć z powyższego, którą metodę lepiej skonstruować pod względem szybkości i niezawodności.
sree
10

Po pierwsze, gettextjest 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 arrayetapie 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 variabledroga 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 potrzebujesz globalich. 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ć $_welcomena przykład. W każdym razie, gdybym był tobą, nawet bym o tym nie pomyślał; Nie rób tego

Jednym dobrym sposobem na to jest zdefiniowanie Stałych z prefiksem. Na przykład w swoim en.lang.phpbędziecie mieli coś takiego, define( 'LABEL_WELCOME', 'Welcome' );aw swoim no.lang.phpbędziecie mieli define ( '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:

  1. Zastanów się, w jaki sposób tłumacze mogą z niego korzystać, i opracuj dla nich działające rozwiązanie KISS.

  2. Zastanów się, jak zachować synchronizację między różnymi językami.

  3. 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.

  4. Zastanów się, jak możesz zastosować / zmienić logikę podczas pobierania tłumaczeń.

  5. 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!

Mahdi
źródło
wyglądasz jak podróżnik w czasie w czasie :) tnx po odpowiedź!
sree
3
@ree Tak! Przyjdę od 4 kwietnia 2014 roku! Jeśli kupisz jakieś akcje Facebooka lub WhatsApp w 2012 roku, nie będziesz musiał pisać kodu PHP w 2014 roku!
Mahdi
1
rofl zgodził się !!!
sree