ฉันดิ้นรนกับคำถามนี้มาหลายเดือนแล้ว แต่ฉันไม่ได้อยู่ในสถานการณ์ที่ฉันต้องสำรวจตัวเลือกทั้งหมดก่อนหน้านี้ ตอนนี้ฉันรู้สึกว่าถึงเวลาที่ต้องทำความรู้จักกับความเป็นไปได้และสร้างความชอบส่วนตัวของฉันเองเพื่อใช้ในโครงการที่กำลังจะมาถึง
ก่อนอื่นให้ฉันเขียนสถานการณ์ที่ฉันกำลังมองหา
ฉันกำลังจะอัพเกรด / พัฒนาระบบการจัดการเนื้อหาซึ่งฉันได้ใช้มาระยะหนึ่งแล้ว อย่างไรก็ตามฉันรู้สึกว่าหลายภาษาเป็นการพัฒนาระบบนี้อย่างยอดเยี่ยม ก่อนที่ฉันจะไม่ใช้เฟรมเวิร์กใด ๆ แต่ฉันจะใช้ Laraval4 สำหรับโครงการที่กำลังจะมาถึง Laravel ดูเหมือนจะเป็นทางเลือกที่ดีที่สุดในการเขียนโค้ด PHP Sidenote: Laraval4 should be no factor in your answer
. ฉันกำลังมองหาวิธีการแปลทั่วไปที่เป็นแพลตฟอร์ม / กรอบงานอิสระ
สิ่งที่ควรแปล
เนื่องจากระบบที่ฉันกำลังมองหาต้องการที่จะเป็นมิตรกับผู้ใช้มากที่สุดวิธีการจัดการการแปลควรอยู่ภายใน CMS ไม่จำเป็นต้องเริ่มการเชื่อมต่อ FTP เพื่อแก้ไขไฟล์การแปลหรือเทมเพลตการแยกวิเคราะห์ html / php ใด ๆ
นอกจากนี้ฉันกำลังมองหาวิธีที่ง่ายที่สุดในการแปลหลายตารางฐานข้อมูลบางทีโดยไม่จำเป็นต้องสร้างตารางเพิ่มเติม
ฉันเกิดอะไรขึ้นกับตัวเอง
ขณะที่ฉันค้นหาอ่านและลองทำสิ่งต่าง ๆ ด้วยตัวเองแล้ว มีตัวเลือกสองสามอย่างที่ฉันมี แต่ฉันก็ยังไม่รู้สึกว่าฉันได้วิธีการฝึกฝนที่ดีที่สุดสำหรับสิ่งที่ฉันต้องการจริงๆ ตอนนี้นี่คือสิ่งที่ฉันคิด แต่วิธีนี้ก็มีผลข้างเคียงด้วย
- แม่แบบ PHP Parsed : ระบบแม่แบบควรจะแยกวิเคราะห์โดย PHP วิธีนี้ฉันสามารถแทรกพารามิเตอร์ที่แปลแล้วลงใน HTML ได้โดยไม่ต้องเปิดเทมเพลตและแก้ไขมัน นอกจากนั้น PHP แยกแม่แบบให้ฉันมีความสามารถที่จะมี 1 แม่แบบสำหรับเว็บไซต์ที่สมบูรณ์แทนการมีโฟลเดอร์ย่อยสำหรับแต่ละภาษา (ที่ฉันเคยมีมาก่อน) วิธีการเข้าถึงเป้าหมายนี้อาจเป็นได้ทั้ง Smarty, TemplatePower, Blade ของ Laravel หรือตัวแยกวิเคราะห์เทมเพลตอื่น ๆ อย่างที่ฉันบอกไปว่าสิ่งนี้ควรเป็นอิสระต่อโซลูชันที่เป็นลายลักษณ์อักษร
- ฐานข้อมูลขับเคลื่อน : บางทีฉันไม่จำเป็นต้องพูดถึงเรื่องนี้อีกครั้ง แต่การแก้ปัญหาควรเป็นฐานข้อมูลขับเคลื่อน CMS มีวัตถุประสงค์เพื่อมุ่งเน้นเชิงวัตถุและ MVC ดังนั้นฉันจะต้องคิดถึงโครงสร้างข้อมูลเชิงตรรกะสำหรับสตริง ในฐานะที่เป็นแม่แบบของฉันจะมีโครงสร้าง: แม่แบบ / ควบคุม / View.php
Controller.View.parameter
บางทีโครงสร้างนี้จะทำให้ความรู้สึกมากที่สุด: ตารางฐานข้อมูลจะมีข้อมูลเหล่านี้เป็นเวลานานกับvalue
ฟิลด์ ภายในแม่แบบที่เราสามารถใช้วิธีการเรียงลำดับบางอย่างเช่นและพารามิเตอร์ที่มีecho __('Controller.View.welcome', array('name', 'Joshua'))
Welcome, :name
ดังนั้นผลลัพธ์ที่Welcome, Joshua
ได้ นี่เป็นวิธีที่ดีในการทำเช่นนี้เพราะพารามิเตอร์เช่น: ชื่อนั้นง่ายต่อการเข้าใจโดยบรรณาธิการ - โหลดฐานข้อมูลต่ำ : แน่นอนว่าระบบดังกล่าวจะทำให้โหลดฐานข้อมูลโหลดหากสตริงเหล่านี้จะถูกโหลดในระหว่างการเดินทาง ดังนั้นฉันจะต้องมีระบบแคชที่แสดงผลไฟล์ภาษาอีกครั้งทันทีที่มีการแก้ไข / บันทึกในสภาพแวดล้อมการบริหาร เนื่องจากไฟล์ถูกสร้างขึ้นจึงจำเป็นต้องมีโครงร่างระบบไฟล์ที่ดี ฉันเดาว่าเราสามารถไปด้วย
languages/en_EN/Controller/View.php
หรือ. ini สิ่งที่เหมาะกับคุณที่สุด บางที. ini จะถูกแยกวิเคราะห์เร็วขึ้นในที่สุด fouldformat parameter=value;
นี้ควรมีข้อมูลในส่วน ฉันเดาว่านี่เป็นวิธีที่ดีที่สุดในการทำเช่นนี้เนื่องจากแต่ละมุมมองที่แสดงผลสามารถรวมเป็นไฟล์ภาษาของตัวเองหากมีอยู่ ควรโหลดพารามิเตอร์ภาษาไปยังมุมมองเฉพาะและไม่อยู่ในขอบเขตส่วนกลางเพื่อป้องกันไม่ให้พารามิเตอร์เขียนทับกัน - การแปลตารางฐานข้อมูล : อันที่จริงสิ่งนี้เป็นสิ่งที่ฉันกังวลมากที่สุด ฉันกำลังมองหาวิธีสร้างการแปลของข่าว / หน้า / ฯลฯ เร็วที่สุดเท่าที่จะทำได้. การมีสองตารางสำหรับแต่ละโมดูล (ตัวอย่าง
News
และNews_translations
) เป็นตัวเลือก แต่มันรู้สึกอยากทำงานมากเพื่อให้ได้ระบบที่ดี หนึ่งในสิ่งที่ฉันมาด้วยจะขึ้นอยู่กับdata versioning
ระบบที่ผมเขียน: มีหนึ่งชื่อตารางฐานข้อมูลTranslations
ตารางนี้มีการผสมผสานเอกลักษณ์ของlanguage
,tablename
และprimarykey
. ตัวอย่างเช่น: en_En / News / 1 (อ้างอิงจากรายการข่าวภาษาอังกฤษที่มี ID = 1) แต่มีข้อเสียอย่างใหญ่หลวง 2 ประการสำหรับวิธีนี้: อันดับแรกของตารางทั้งหมดมีแนวโน้มที่จะได้รับข้อมูลจำนวนมากในฐานข้อมูลและอย่างที่สองมันเป็นงานที่ต้องใช้การตั้งค่านี้เพื่อค้นหาตาราง ตัวอย่างเช่นการค้นหาบุ้ง SEO ของรายการจะเป็นการค้นหาข้อความแบบเต็มซึ่งเป็นใบ้สวย แต่ในทางกลับกัน: มันเป็นวิธีที่รวดเร็วในการสร้างเนื้อหาที่แปลได้ในทุก ๆ โต๊ะอย่างรวดเร็ว แต่ฉันไม่เชื่อว่าโปรนี้จะช่วยลดน้ำหนักของคอน - Front-end Work : Front-end ก็ต้องมีความคิดด้วยเช่นกัน แน่นอนว่าเราจะเก็บภาษาที่มีอยู่ในฐานข้อมูลและ (de) ใช้งานภาษาที่เราต้องการ วิธีนี้สคริปต์สามารถสร้างรายการแบบหล่นลงเพื่อเลือกภาษาและส่วนหลังสามารถตัดสินใจได้โดยอัตโนมัติว่าการแปลใดที่สามารถทำได้โดยใช้ CMS ภาษาที่เลือก (เช่น en_EN) จะถูกนำมาใช้เมื่อรับไฟล์ภาษาสำหรับการดูหรือเพื่อให้ได้การแปลที่ถูกต้องสำหรับรายการเนื้อหาในเว็บไซต์
ดังนั้นพวกเขาอยู่ที่นั่น ความคิดของฉันจนถึงตอนนี้ พวกเขายังไม่ได้รวมตัวเลือกการแปลสำหรับวันที่ ฯลฯ แต่เนื่องจากเซิร์ฟเวอร์ของฉันรองรับ PHP5.3.2 + ตัวเลือกที่ดีที่สุดคือการใช้ส่วนขยาย intl ตามที่อธิบายไว้ที่นี่: http://devzone.zend.com/1500/internationalization-in -php-53 / - แต่นี่จะใช้ในสนามกีฬาแห่งการพัฒนาในภายหลัง สำหรับตอนนี้ปัญหาหลักคือทำอย่างไรถึงจะมีแนวปฏิบัติที่ดีที่สุดในการแปลเนื้อหาในเว็บไซต์
นอกจากทุกสิ่งที่ฉันอธิบายไว้ที่นี่ฉันยังมีอีกสิ่งหนึ่งที่ฉันยังไม่ได้ตัดสินใจมันดูเหมือนคำถามง่าย ๆ แต่จริงๆแล้วมันทำให้ฉันปวดหัว:
แปล URL หรือไม่ เราควรทำสิ่งนี้หรือไม่? และในทางใด
ดังนั้น .. ถ้าฉันมี URL นี้http://www.domain.com/about-us
และภาษาอังกฤษเป็นภาษาเริ่มต้นของฉัน ควรแปล URL นี้เป็นภาษาของhttp://www.domain.com/over-ons
ฉันเมื่อฉันเลือกดัชท์เป็นภาษาของฉันหรือไม่ /about
หรือเราควรจะไปถนนง่ายและก็เปลี่ยนเนื้อหาของที่มองเห็นหน้า สิ่งสุดท้ายดูเหมือนจะเป็นตัวเลือกที่ไม่ถูกต้องเพราะจะสร้าง URL เดียวกันหลายเวอร์ชันการทำดัชนีเนื้อหานี้จะล้มเหลวอย่างถูกวิธี
ตัวเลือกอื่นกำลังใช้http://www.domain.com/nl/about-us
แทน สิ่งนี้จะสร้าง URL ที่ไม่ซ้ำกันสำหรับแต่ละเนื้อหา นอกจากนี้สิ่งนี้จะง่ายกว่าในการไปใช้ภาษาอื่นตัวอย่างเช่นhttp://www.domain.com/en/about-us
และ URL ที่ให้ไว้นั้นง่ายต่อการเข้าใจสำหรับทั้งผู้เข้าชม Google และคน เมื่อใช้ตัวเลือกนี้เราจะทำอย่างไรกับภาษาเริ่มต้น ภาษาเริ่มต้นควรลบภาษาที่เลือกตามค่าเริ่มต้นหรือไม่ ดังนั้นการเปลี่ยนเส้นทางhttp://www.domain.com/en/about-us
ไปที่http://www.domain.com/about-us
... ในสายตาของฉันนี่เป็นทางออกที่ดีที่สุดเพราะเมื่อตั้งค่า CMS สำหรับภาษาเดียวเท่านั้นไม่จำเป็นต้องมีการระบุภาษานี้ใน URL
และตัวเลือกที่สามคือการรวมกันจากทั้งสองตัวเลือก: ใช้ "language-identification-less" -URL ( http://www.domain.com/about-us
) สำหรับภาษาหลัก และใช้ URL ที่มีตัวบุ้ง SEO ที่แปลสำหรับภาษาย่อย: http://www.domain.com/nl/over-ons
&http://www.domain.com/de/uber-uns
ฉันหวังว่าคำถามของฉันจะทำให้คุณหัวร้าวพวกเขาก็จะระเบิดแน่นอน! มันช่วยฉันได้แล้วที่จะทำสิ่งต่าง ๆ เป็นคำถามที่นี่ ให้โอกาสฉันในการตรวจสอบวิธีการที่ฉันใช้มาก่อนและความคิดที่ฉันมีสำหรับ CMS ที่กำลังจะมาถึง
ฉันขอขอบคุณที่สละเวลาอ่านข้อความกลุ่มนี้!
// Edit #1
:
ฉันลืมพูดถึง: ฟังก์ชั่น __ () เป็นนามแฝงในการแปลสตริงที่กำหนด ภายในวิธีนี้จะเห็นได้ชัดว่าควรมีวิธีการเรียงกลับบางส่วนที่โหลดข้อความเริ่มต้นเมื่อยังไม่มีการแปล หากการแปลหายไปก็ควรจะแทรกหรือแปลไฟล์ใหม่