Php, en iyi uygulama veya yaklaşım yerelleştirme?


11

Ben php uygulamamı yerelleştiriyorum. Aynı şeyi başarmak için en iyi yöntemi seçme konusunda bir ikilem var.

Yöntem 1: Şu anda bir php dosyasındaki bir dizide yerelleştirilecek sözcükleri saklıyorum

<?php

$values = array (
                        'welcome' => 'bienvenida'
                ); 

?>

İhtiyaca göre her kelimeyi çıkarmak ve döndürmek için bir işlev kullanıyorum

Yöntem 2: Aynı dizeyi depolayan bir txt dosyası kullanmalı mıyım?

<?php
$welcome = 'bienvenida'; 
?>

Benim sorum, bunu geliştirmek için hız ve çaba açısından hangisi daha iyi bir yöntemdir ve neden?

Düzenleme: İki hangi yöntem yanıt vermede daha hızlı olduğunu bilmek istiyorum ve neden bu olurdu? Ayrıca, yukarıdaki kodda herhangi bir gelişme takdir edilecektir !!


2
gettext'i düşündün mü?
sagarchalise

@sagarchalise içine baktım, ama kendi yöntemimi oluşturmak istiyorum, i, e yukarıdaki ikisinden herhangi biri. Yani, hangi yöntemin daha hızlı ve hangisinin daha güvenilir olduğunu bilmek istiyorum! :)
sree

Hız açısından bilmek istiyorsanız, sadece bazı test senaryoları yapın. Ne daha hızlı çalışır, birinci veya ikinci yöntemin 1 milyon katı?
Francisco Presencia

2
İyi çalışan bir tekerleği yeniden icat etmeyin.
gbjbaanb

Yanıtlar:


10

PHP'nin yerelleştirme için mükemmel yerleşik olanakları vardır. En yaygın yol gettext gibi görünüyor - bu eğitici nasıl kullanıldığını gösteriyor.

PHP 5.3'ten beri çok daha fazla özellik sunan intl var (örneğin, yerel ayara bağlı olarak sayıları, tarihleri ​​ve para birimlerini biçimlendirmek için).


Cevabınız için teşekkür ederim, ancak hız ve güvenilirlik açısından hangi yöntemin daha iyi yapılandırılacağını yukarıdan öğrenebilir miyim.
sree

10

Öncelikle, gettextgitmek için iyi bir yoldur, bu yüzden başlangıçta kolay gelmiyorsa reddetmeyin; Ancak bilmeniz gereken başka seçenekler de vardır. Bunu açıklamadan önce önce önerilerinize göz atalım:

Bunu arrayyapma yolunuzda, oldukça basit bir çözümünüz var. İyi olan şey, çevirilerinizi bir veri deposunda saklayabilmeniz ve daha sonra PHP betiğinize bir dizi olarak yükleyebilmenizdir. Ancak dizinizi statik olarak bir PHP dosyasında saklamak istiyorsanız, düzenlemek için a) PHP programcısı veya PHP sözdizimine aşina olan deneyimli bir kullanıcı, sadece dosyayı düzenlemek için b) dört veya beş farklı dil dosyası arasında senkronizasyon gerekir oldukça sinir bozucu ve hatalara yatkın olabilir.

Burada dikkate almanız gerekenler: Daha sonra dil dosyasına nasıl yeni öğeler ekleyebilirim? Bir çevirmene bırakabilir miyim yoksa bir PHP programcısı mı olmalı?

Sizin variablebunu yapmanın -way pratik değildir. Neden? En azından uygulamanızda birkaç işleve sahip olacağınızı varsayıyorum, değil mi? Daha sonra işlevi çağırdığınızda tüm bu değişkenleri iletmeniz veya globalonlara ihtiyacınız vardır. Böyle ondan fazla değişkeniniz olacağını düşünüyorsanız, bunu yapmanızı kesinlikle tavsiye etmiyorum. Ad çakışması da olabilir - aynı ada sahip başka bir değişkenin değerini potansiyel olarak geçersiz kılabilirsiniz, ancak bu, bir alt çizgi kadar basit bir önek ekleyerek çözülebilir, bu nedenle $_welcomeörneğin sahip olacaksınız . Her neyse, sen olsaydım bile düşünmezdim; Yapma.

Bunu yapmanın iyi bir yolu Sabitleri bir önekle tanımlamaktır . Yani örneğin sizin en.lang.phpiçinizde bir şey olacak define( 'LABEL_WELCOME', 'Welcome' );ve sizin no.lang.phpiçinizde olacak define ( 'LABEL_WELCOME', 'Velkommen' );. Değişkenler yerine sabit kullanma ile ilgili en iyi şey, komut dosyasında her zaman kullanılabilir olmasıdır. Yani onları enjekte etmenize ya da küreselleştirmenize gerek yok. Hem dizilere hem de değişkenlere kıyasla, PHP'nin bunları işleme biçimi nedeniyle daha hızlıdır - bellekte daha az yer kaplarlar. Dezavantajı onları çevirmen geçiremezsiniz, bu yüzden tekrar bir PHP geliştirici gerekir. Ayrıca dosyalar arasında senkronizasyon yapmak biraz acı verici olabilir.

Diğer seçenek, çeviriyi almak için bir İşlev veya Sınıf / Yöntem kullanmaktır. Daha az verimli olacaktır - ancak bu tür bir mikro optimizasyona ihtiyacınız olduğunu düşünmüyorum, ancak ek avantaj, çeviriyi alırken özel bir mantık uygulayabilmenizdir. Örneğin, bir gün, sevgili proje yöneticinizin size bu metinlerin tümünü büyük harfe dönüştürüp dönüştüremeyeceğinizi sorduğunu hayal edin. Bunu yapmayı reddedemezsiniz, bu nedenle, aralarında bir işlev olması, tüm çevirilerinize bir desen uygulamanız / değiştirmeniz gerektiğinde size çok yardımcı olabilir.

Özetlemek için:

  1. Çevirmenlerin bunu nasıl kullanabileceğini düşünün ve onlar için çalışan bir KISS çözümü bulun.

  2. Farklı diller arasında nasıl senkronizasyon yapabileceğinizi düşünün.

  3. Aynı çevirinin gerekli olup olmadığını düşünün, mobil uygulama için diyelim. Çapraz platform çözümü zamandan tasarruf edebilir. JSON ve sıradan Veritabanlarını atmayın.

  4. Çevirileri alırken mantığı nasıl uygulayabileceğinizi / değiştirebileceğinizi düşünün.

  5. Performansı unuttum. % 99,9 oranında Constant vs. Değişkenler ve İşlev Çağrıları gibi mikro optimizasyon yapmak için o kadar ileri gitmeyeceksiniz . Bir geliştirici / personel olarak işlemci zamanından ziyade daha pahalı olduğunu düşünüyorum.

Güncelleme # 1

Aman tanrım, bir yaşındaki soruya cevap gönderdim. Neden kimse burada bir şey söylemiyor? Bu durumlar için uyarılara ihtiyacımız var.

Güncelleme # 2

Sağ tarafta bunun eski bir soru olduğunu söylüyor; Ancak iki yıl önce istendi! Burada her şey yanıltıcı!


u geri zaman içinde bir zaman gezgin gibi bakmak :) cevap için olsa tnx!
sree

3
@sree Evet! 4 Nisan 2014'ten geliyorum! 2012'de bazı Facebook veya WhatsApp paylaşımları satın alırsanız, 2014'te PHP kodu yazmanıza gerek kalmayacak!
Mehdi

1
rofl kabul etti !!!
sree
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.