รองรับหลายภาษาใน PHP, วิธีปฏิบัติที่ดีที่สุดหรือ?


11

ฉันกำลังแปลแอปพลิเคชัน php ของฉันให้เป็นภาษาท้องถิ่น ฉันมีปัญหาในการเลือกวิธีที่ดีที่สุดในการบรรลุเป้าหมายเดียวกัน

วิธีที่ 1: ขณะนี้กำลังจัดเก็บคำที่จะแปลในอาร์เรย์ในไฟล์ php

<?php

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

?>

ฉันใช้ฟังก์ชันเพื่อแยกและคืนแต่ละคำตามความต้องการ

วิธีที่ 2: ฉันควรใช้ไฟล์ txt ที่จัดเก็บสตริงเหมือนกันหรือไม่

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

คำถามของฉันเป็นวิธีที่ดีกว่าในแง่ของความเร็วและความพยายามในการพัฒนาแบบเดียวกันและเพราะเหตุใด

แก้ไข: ฉันต้องการทราบว่าวิธีใดในสองวิธีที่เร็วกว่าในการตอบสนองและทำไมจึงเป็นเช่นนั้น นอกจากนี้การปรับปรุงใด ๆ ในรหัสข้างต้นจะได้รับการชื่นชม !!


2
คุณได้รับการพิจารณา gettext?
sagarchalise

@sagarchalise ฉันได้ตรวจสอบแล้ว แต่ฉันต้องการสร้างวิธีการของตัวเองฉัน, e ใด ๆ ของทั้งสองข้างต้น ดังนั้นฉันต้องการทราบว่าวิธีใดทำงานได้เร็วขึ้นและเชื่อถือได้มากขึ้น! :)
sree

หากคุณต้องการทราบความเร็ว อะไรที่ทำงานเร็วกว่า 1 ล้านเท่าของวิธีแรกหรือวิธีที่สอง?
Francisco Presencia

2
อย่าประดิษฐ์ล้อที่ทำงานได้ดี
gbjbaanb

คำตอบ:


10

PHP มีความเป็นไปได้ในตัวสำหรับการแปลเป็นภาษาท้องถิ่น วิธีที่พบได้บ่อยที่สุดคือgettext - บทช่วยสอนนี้แสดงวิธีการใช้งาน

เนื่องจาก PHP 5.3 ยังมีintlซึ่งมีคุณสมบัติมากมาย (เช่นการจัดรูปแบบตัวเลขวันที่และสกุลเงินทั้งนี้ขึ้นอยู่กับสถานที่เกิดเหตุ)


ขอบคุณสำหรับคำตอบ แต่ขอทราบจากข้างต้นว่าวิธีไหนดีกว่าในการสร้างความเร็วและความน่าเชื่อถือ
sree

10

ก่อนอื่นgettextเป็นวิธีที่ดีที่จะไปดังนั้นอย่ายกเลิกถ้ามันไม่ฟังดูง่ายในตอนแรก อย่างไรก็ตามมีตัวเลือกอื่น ๆ เช่นกันที่มีประโยชน์ที่จะรู้ว่า ก่อนที่จะอธิบายให้ดูที่คำแนะนำของคุณก่อน:

เมื่อคุณarrayทำสิ่งนี้คุณมีทางออกที่ตรงไปตรงมามาก สิ่งที่ดีคือคุณสามารถจัดเก็บการแปลของคุณในที่เก็บข้อมูลแล้วโหลดลงในสคริปต์ PHP ของคุณเป็นอาร์เรย์และนั่นก็คือ อย่างไรก็ตามถ้าคุณต้องการเก็บอาเรย์ของคุณในไฟล์ PHP ให้ทำการแก้ไขมันจำเป็นต้องมี) โปรแกรมเมอร์ PHP หรือผู้ใช้ที่คุ้นเคยกับไวยากรณ์ PHP เพียงเพื่อแก้ไขไฟล์ b) ซิงค์ระหว่างไฟล์ภาษาต่าง ๆ สี่หรือห้าไฟล์ อาจค่อนข้างน่ารำคาญและมีแนวโน้มที่จะเกิดข้อผิดพลาด

สิ่งที่คุณต้องพิจารณาที่นี่คือ: จะเพิ่มองค์ประกอบใหม่ลงในไฟล์ภาษาได้อย่างไร ฉันสามารถฝากผู้แปลไว้ได้หรือควรจะเป็นโปรแกรมเมอร์ PHP

วิธีที่คุณvariableทำมันไม่เป็นประโยชน์ ทำไม? ฉันคิดว่าคุณจะมีฟังก์ชั่นสองอย่างน้อยในใบสมัครของคุณใช่ไหม? แล้วคุณจะต้องผ่านทั้งหมดของตัวแปรเหล่านี้เมื่อคุณเรียกใช้ฟังก์ชันหรือคุณต้องการที่จะglobalให้พวกเขา หากคุณคิดว่าคุณจะมีตัวแปรมากกว่าสิบแบบนี้ฉันขอแนะนำให้คุณทำเช่นนี้ อาจมีความขัดแย้งของชื่อเช่นกัน - คุณสามารถแทนที่ค่าของตัวแปรอื่นด้วยชื่อเดียวกันอย่างไรก็ตามสิ่งนี้สามารถแก้ไขได้โดยการเพิ่มคำนำหน้าแม้จะง่ายเหมือนขีดล่างดังนั้นคุณจะมี$_welcomeตัวอย่าง อย่างไรก็ตามถ้าฉันเป็นเธอฉันก็จะไม่คิดถึงมัน อย่าทำมัน

วิธีหนึ่งที่ดีในการทำคือการกำหนดค่าคงที่ด้วยคำนำหน้า ดังนั้นสำหรับตัวอย่างของคุณen.lang.phpคุณจะได้สิ่งที่ต้องการdefine( 'LABEL_WELCOME', 'Welcome' );และในของคุณคุณจะต้องno.lang.php define ( 'LABEL_WELCOME', 'Velkommen' );สิ่งที่ดีเกี่ยวกับการใช้ค่าคงที่แทนตัวแปรคือมันมีอยู่ในสคริปต์ของคุณเสมอ ดังนั้นคุณไม่จำเป็นต้องฉีดยาหรือทำให้เป็นสากล เมื่อเปรียบเทียบกับทั้งอาร์เรย์และตัวแปรพวกมันจะเร็วกว่าเพราะวิธีที่ PHP จัดการกับมัน - มันใช้พื้นที่น้อยในหน่วยความจำ ข้อเสียเปรียบคือคุณไม่สามารถส่งต่อไปยังนักแปลได้ดังนั้นคุณต้องมีนักพัฒนา PHP อีกครั้ง การซิงก์ระหว่างไฟล์ต่าง ๆ อาจทำให้เจ็บปวดอีกครั้ง

ตัวเลือกอื่นคือให้มีFunctionหรือClass / Methodเพื่อดึงข้อมูลการแปล มันจะมีประสิทธิภาพน้อยลง - แต่ฉันไม่คิดว่าคุณต้องการ micro-optimization ชนิดใด ๆ เลย แต่ข้อดีที่เพิ่มเข้ามาคือคุณสามารถใช้ตรรกะที่กำหนดเองได้ในขณะที่รับการแปล ตัวอย่างเช่นสมมติว่าผู้จัดการโครงการที่รักของคุณมาหาคุณซักถามว่าคุณสามารถปกปิดข้อความเหล่านั้นทั้งหมดเพื่อพิมพ์ใหญ่ได้หรือไม่ คุณไม่สามารถปฏิเสธได้ดังนั้นการมีฟังก์ชั่นในระหว่างสามารถช่วยคุณได้มากเมื่อคุณต้องการใช้ / เปลี่ยนรูปแบบการแปลทั้งหมดของคุณ

ในการสรุป:

  1. คิดว่านักแปลสามารถใช้มันได้อย่างไรและคิดหาวิธีแก้ปัญหา KISS ที่ใช้งานได้

  2. คิดเกี่ยวกับวิธีที่คุณสามารถซิงค์ระหว่างภาษาต่างๆ

  3. ลองคิดดูว่าอาจจำเป็นต้องใช้การแปลแบบเดียวกันหรือเปล่าให้พูดสำหรับแอปมือถือ โซลูชันข้ามแพลตฟอร์มสามารถประหยัดเวลาของคุณ อย่ายกเลิก JSON และฐานข้อมูลทั่วไป

  4. คิดเกี่ยวกับวิธีที่คุณสามารถใช้ / เปลี่ยนลอจิกเมื่อดึงการแปล

  5. ลืมเกี่ยวกับประสิทธิภาพ 99.9% ของครั้งที่คุณจะไม่ได้รับที่อยู่ไกลออกไปทำไมโครเพิ่มประสิทธิภาพเหมือนอย่างต่อเนื่องเมื่อเทียบกับตัวแปรเทียบกับสายงาน ฉันถือว่าเวลาของคุณในฐานะนักพัฒนา / พนักงานมีราคาแพงกว่าเวลาประมวลผล

อัปเดต # 1

ความดีของฉันฉันโพสต์คำตอบสำหรับคำถามอายุหนึ่งปี ทำไมไม่มีใครพูดอะไรที่นี่? เราต้องการการแจ้งเตือนสำหรับกรณีเหล่านี้

อัปเดต # 2

ทางด้านขวามันบอกว่าเป็นคำถามอายุหนึ่งปี อย่างไรก็ตามมันถูกถามเมื่อสองปีก่อน! ทุกอย่างทำให้เข้าใจผิดที่นี่!


คุณดูเหมือนนักเดินทางข้ามเวลากลับไปเวลา :) tnx สำหรับคำตอบว่า!
sree

3
@sree ใช่! ฉันมาจาก 4 เมษายน 2014! หากคุณซื้อ Facebook หรือ WhatsApp แชร์ในปี 2012 คุณไม่จำเป็นต้องเขียนโค้ด PHP ในปี 2014!
มาห์ดี

1
rofl เห็นด้วย !!!
sree
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.