Php में स्थानीयकरण, सबसे अच्छा अभ्यास या दृष्टिकोण?


11

मैं अपने php एप्लिकेशन को स्थानीयकृत कर रहा हूं। मुझे इसे पूरा करने के लिए सबसे अच्छा तरीका चुनने पर दुविधा है।

विधि 1: फ़िलहाल शब्दों को php फ़ाइल में एक सरणी में स्थानीयकृत करने के लिए संग्रहीत कर रहा हूँ

<?php

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

?>

मैं आवश्यकता के अनुसार प्रत्येक शब्द को निकालने और वापस करने के लिए एक फ़ंक्शन का उपयोग कर रहा हूं

विधि 2: क्या मुझे एक txt फ़ाइल का उपयोग करना चाहिए जो उसी के स्ट्रिंग को स्टोर करती है?

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

मेरा प्रश्न यह है कि एक बेहतर तरीका, गति और समान विकसित करने के प्रयास के संदर्भ में और क्यों?

संपादित करें: मैं जानना चाहूंगा कि दो में से कौन सी विधि जवाब देने में तेज है और ऐसा क्यों होगा? भी, उपरोक्त कोड पर किसी भी सुधार की सराहना की जाएगी !!


2
क्या आपने गेटटेक्स्ट पर विचार किया है?
सागरचलीज

@sagarchalise मैंने इसे देखा है, लेकिन मैं अपनी खुद की विधि का निर्माण करना चाहता हूं, i, e उपरोक्त दोनों में से कोई भी। तो, मैं जानना चाहूंगा कि कौन सी विधि तेजी से काम करती है और कौन सी अधिक विश्वसनीय है! :)
श्री

यदि आप गति के संदर्भ में जानना चाहते हैं, तो बस कुछ परीक्षण मामलों को करें। क्या तेजी से चलता है, पहली या दूसरी विधि का 1M बार?
फ्रांसिस्को प्रेसेनिया

2
ठीक काम करने वाले पहिये को सुदृढ़ न करें।
gbjbaanb

जवाबों:


10

PHP में स्थानीयकरण के लिए महान अंतर्निहित संभावनाएं हैं। सबसे आम तरीका गेटटेक्स्ट लगता है - यह ट्यूटोरियल दिखाता है कि इसका उपयोग कैसे किया जाता है।

PHP 5.3 के बाद से वहाँ भी intl है जो बहुत अधिक सुविधाएँ प्रदान करता है (उदाहरण के लिए स्थान के आधार पर संख्या, दिनांक और मुद्राओं को प्रारूपित करना)।


आपके उत्तर के लिए धन्यवाद, लेकिन, क्या मैं ऊपर से जान सकता हूं कि गति और विश्वसनीयता के मामले में कौन सा तरीका बेहतर है।
श्री

10

सबसे पहले, जाने gettextका एक अच्छा तरीका है, इसलिए इसे खारिज न करें यदि यह पहली बार में आसान नहीं है; हालांकि अन्य विकल्प भी हैं जो जानना उपयोगी है। यह समझाने से पहले कि आइए पहले अपने सुझावों पर एक नज़र डालें:

arrayऐसा करने के अपने रास्ते में, आप एक बहुत सीधा समाधान है। अच्छी बात यह है कि आप अपने अनुवादों को डेटा स्टोरेज में स्टोर कर सकते हैं, फिर इसे अपने PHP स्क्रिप्ट में एरे के रूप में लोड कर सकते हैं, और यही है। हालाँकि यदि आप अपने सरणी को PHP फ़ाइल में वैधानिक रूप से संग्रहीत करना चाहते हैं, तो इसे संपादित करने की आवश्यकता है) PHP प्रोग्रामर या एक exprienced उपयोगकर्ता, जो PHP वाक्यविन्यास से परिचित है, बस फ़ाइल को संपादित करने के लिए) यहां तक ​​कि चार या पांच अलग-अलग भाषा फ़ाइलों के बीच सिंक्रनाइज़ करना काफी कष्टप्रद हो सकता है और त्रुटियों की संभावना हो सकती है।

आपको यहां पर विचार करने की आवश्यकता है: बाद में भाषा फ़ाइल में नए तत्व कैसे जोड़े जा सकते हैं? क्या मैं इसे एक अनुवादक के पास छोड़ सकता हूं या PHP प्रोग्रामर होना चाहिए?

variableयह करने का आपका मार्ग व्यावहारिक नहीं है। क्यों? मुझे लगता है कि आपके पास कम से कम आपके आवेदन में कुछ फ़ंक्शन होंगे? तब आपको इन सभी चर को पास करने की आवश्यकता होती है जब आप फ़ंक्शन को कॉल करते हैं, या आपको globalउनकी आवश्यकता होती है। अगर आपको लगता है कि आपके पास इस तरह के दस से अधिक चर होंगे, तो मैं आपको ऐसा करने के लिए दृढ़ता से हतोत्साहित करता हूं। नाम-संघर्ष भी हो सकता है - आप संभावित रूप से एक ही नाम के साथ किसी अन्य चर के मूल्य को ओवरराइड कर सकते हैं, हालांकि यह एक अंडरस्कोर के रूप में भी सरल उपसर्ग जोड़कर हल किया जा सकता है, इसलिए आपके पास $_welcomeउदाहरण के लिए होगा। वैसे भी, अगर मैं तुम होते तो मैं इसके बारे में भी नहीं सोचता; यह मत करो।

इसे करने का एक अच्छा तरीका है कि कॉन्स्टेंट को एक उपसर्ग के साथ परिभाषित करना । इसलिए उदाहरण के लिए आपके en.lang.phpपास कुछ ऐसा होगा define( 'LABEL_WELCOME', 'Welcome' );और आपके no.lang.phpपास आपके पास होगा define ( 'LABEL_WELCOME', 'Velkommen' );। चर के बजाय निरंतर उपयोग करने के बारे में अच्छी बात यह है कि वे हमेशा आपकी स्क्रिप्ट में उपलब्ध हैं। इसलिए आपको उन्हें इंजेक्ट करने या वैश्विक करने की आवश्यकता नहीं है। दोनों सरणियों और चर की तुलना में, वे तेज़ हैं जिस तरह से PHP उन्हें संभालती है - वे मेमोरी में कम जगह लेते हैं। दोष यह है कि आप उन्हें अनुवादक के पास नहीं भेज सकते हैं, इसलिए फिर से आपको PHP डेवलपर की आवश्यकता है। इसके अलावा फ़ाइलों के बीच सिंक करना फिर से थोड़ा दर्द हो सकता है।

दूसरे विकल्प में अनुवाद को पुनः प्राप्त करने के लिए एक फंक्शन या क्लास / मेथड है। यह कम कुशल होगा - हालाँकि मुझे नहीं लगता कि आपको माइक्रो-ऑप्टिमाइज़ेशन के उस प्रकार की आवश्यकता है, लेकिन अतिरिक्त लाभ यह है कि आप अनुवाद को प्राप्त करते समय एक कस्टम तर्क को लागू कर सकते हैं। उदाहरण के लिए, किसी दिन आपके प्रिय परियोजना प्रबंधक आपसे यह पूछने के लिए आते हैं कि क्या आप उन सभी पाठों को बड़े स्तर पर कवर कर सकते हैं। आप इसे करने से मना नहीं कर सकते हैं, इसलिए जब आप अपने सभी अनुवादों के लिए एक पैटर्न लागू करना / बदलना चाहते हैं, तो बीच में एक समारोह होने से आपको बहुत मदद मिल सकती है।

इसे लपेटने के लिए:

  1. कैसे अनुवादकों के लिए इसका इस्तेमाल और उनके लिए एक काम KISS समाधान के साथ आ सकते हैं के बारे में सोचो।

  2. इस बारे में सोचें कि आप विभिन्न भाषाओं के बीच कैसे सिंक कर सकते हैं।

  3. इस बारे में सोचें कि क्या उसी अनुवाद की आवश्यकता हो सकती है, मोबाइल ऐप के लिए कहें। एक क्रॉस प्लेटफॉर्म समाधान आपके समय को बचा सकता है। JSON और साधारण डेटाबेस को खारिज न करें।

  4. अनुवादों को पुनर्प्राप्त करते समय आप तर्क को कैसे लागू / बदल सकते हैं, इसके बारे में सोचें।

  5. प्रदर्शन के बारे में भूल गए। 99.9% बार आपको यह नहीं मिलेगा कि लगातार कॉन्स्टेंट बनाम वेरिएबल्स बनाम फंक्शन कॉल्स जैसे माइक्रो-ऑप्टिमाइज़ेशन करें । मैं आपका समय एक डेवलपर / कर्मचारी के रूप में मानता हूं, जो प्रोसेसर समय के बजाय अधिक महंगा है।

अपडेट # 1

मेरी अच्छाई, मैं एक साल पुराने प्रश्न का उत्तर देता हूं। यहाँ कोई कुछ क्यों नहीं कह रहा है? हमें इन मामलों के लिए अलर्ट चाहिए।

अद्यतन # 2

दाईं ओर यह कहता है कि यह एक वर्ष पुराना प्रश्न है; हालाँकि यह दो साल पहले पूछा गया था! यहाँ सब कुछ भ्रामक है!


यू एक समय यात्री वापस समय में जैसा लगता है :) जवाब के लिए tnx हालांकि!
श्री

3
@ श्री हाँ! मैं 4 अप्रैल 2014 से आ रहा हूँ! यदि आप 2012 में कुछ फेसबुक या व्हाट्सएप शेयर खरीदते हैं, तो आपको 2014 में PHP कोड लिखने की आवश्यकता नहीं होगी!
महदी

1
Rofl सहमत हुए !!!
श्री
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.