एक PHP लाइब्रेरी लिखने पर विचार करें, जो पैकगिस्ट या नाशपाती के माध्यम से प्रकाशित हो जाएगा। यह मनमाने ढंग से सेटिंग्स में इसका उपयोग कर सहकर्मी डेवलपर्स को संबोधित किया जाता है।एक PHP तृतीय-पक्ष लाइब्रेरी को अंतर्राष्ट्रीयकरण कैसे करें
इस पुस्तकालय में ग्राहक के लिए निर्धारित कुछ स्थिति संदेश होंगे। मैं इस कोड को अंतर्राष्ट्रीय कैसे बना सकता हूं, ताकि लाइब्रेरी का उपयोग करने वाले डेवलपर्स को अपनी स्थानीयकरण विधि में प्लग करने की उच्चतम स्वतंत्रता हो? मैं कुछ भी नहीं मानना चाहता, खासकर गेटटेक्स्ट का उपयोग करने के लिए देव को मजबूर नहीं करना चाहता।
एक उदाहरण पर काम करने के लिए, के इस वर्ग डालें:
class Example {
protected $message = "I'd like to be translated in your client's language.";
public function callMe() {
return $this->message;
}
public function callMeToo($user) {
return sprintf('Hi %s, nice to meet you!', $user);
}
}
वहाँ दो समस्याओं यहाँ हैं: मैं अनुवाद के लिए निजी $message
कैसे चिह्नित करते हैं, और कैसे मैं डेवलपर के अंदर स्ट्रिंग स्थानीय बनाना करने की अनुमति है callMeToo()
?
एक (अत्यधिक असुविधाजनक) विकल्प होगा, इसलिए जैसे निर्माता में कुछ i18n विधि के लिए पूछना,:
public function __construct($i18n) {
$this->i18n = $i18n;
$this->message = $this->i18n($this->message);
}
public function callMeToo($user) {
return sprintf($this->i18n('Hi %s, nice to meet you!'), $user);
}
लेकिन मैं महंगा एक और अधिक सुरुचिपूर्ण समाधान के लिए उम्मीद है।
संपादित करें 1: सरल स्ट्रिंग प्रतिस्थापन के अलावा i18n का क्षेत्र एक विस्तृत है। आधार यह है कि मैं अपनी लाइब्रेरी के साथ किसी भी i18n समाधान को पैक नहीं करना चाहता हूं या उपयोगकर्ता को विशेष रूप से मेरे कोड को पूरा करने के लिए चुनने के लिए मजबूर नहीं करना चाहता हूं।
फिर, मैं अपने कोड को विभिन्न पहलुओं के लिए सर्वोत्तम और सबसे लचीला स्थानीयकरण की अनुमति देने के लिए कैसे बना सकता हूं: स्ट्रिंग अनुवाद, संख्या और मुद्रा स्वरूपण, तिथियां और समय, ...? मान लीजिए कि एक या दूसरा मेरी लाइब्रेरी से आउटपुट के रूप में दिखाई देता है। किस स्थिति या इंटरफेस उपभोक्ता डेवलपर प्लग को अपने स्थानीयकरण समाधान में प्लग कर सकते हैं?
धन्यवाद, दिलचस्प। असल में, सुझाए गए 'लोडस्ट्रिंग्स' मेरी ज़रूरतों के लिए एक अच्छा मैच प्रतीत होता है। क्या आप जंगली में किसी भी परियोजना के बारे में जानते हैं, वे इससे कैसे निपटते हैं? (ज़ेंड को छूट दी गई है, हालांकि उनके पास अपना खुद का i18n lib है।) – Boldewyn
@ बोल्डविन मैं इसे बंद करने वाली कुछ बंद स्रोत परियोजनाओं को जानता हूं, लेकिन मुझे ओपन सोर्स प्रोजेक्ट के बारे में कड़ी मेहनत करनी है। अधिकांश स्थानीयकरण नहीं किए जाते हैं और यदि वे हैं, तो वे गेटटेक्स्ट का उपयोग करते हैं ... – ckruse
हां, यह वास्तव में मेरी समस्या है, दुर्भाग्य से ... – Boldewyn