मैं वर्तमान में एक बहुभाषी वेबसाइट विकसित कर रहा हूं। बहुभाषी भाग के लिए मैं अनुवादक/poedit का उपयोग करें। मैं सत्र में चयनित भाषा को स्टोर करता हूं। यह बढ़िया काम करता है।ज़ेंड फ्रेमवर्क 2 मॉडलों के लिए गुजरने वाले चर
Module.php: एक नियंत्रक में भाषा की स्थापना के लिए
public function onBootstrap(MvcEvent $e)
{
// ...
$session = new Container('base');
if ($session->language !== NULL) {
$e->getApplication()->getServiceManager()->get('translator')->setLocale($session->language);
}
}
कार्रवाई:
public function setLanguageAction()
{
$language = $this->params()->fromRoute('language');
if (isset($this->languages[$language])) {
$session = new Container('base');
if ($language == 'en') {
$session->language = NULL;
} else {
$session->language = $language;
}
}
return $this->redirect()->toRoute('home');
}
module.config.php डिफ़ॉल्ट स्थान में एन को तैयार है।
जैसा कि मैंने कहा कि सबकुछ ठीक काम करता है, एक चीज़ को छोड़कर।
मैं डीबी में कुछ भाषा निर्भर डेटा भी स्टोर करता हूं, इसलिए मेरे मॉडल में मुझे यह जानने की ज़रूरत है कि वर्तमान भाषा क्या है। मॉडल में अन्य उद्देश्यों के लिए वर्तमान भाषा की भी आवश्यकता है।
$session = new Container('base');
if ($session->language !== NULL) {
$this->language = $session->language;
} else {
$this->language = 'default';
}
मुझे लगता है कि यह सबसे अच्छा समाधान नहीं है:
तो मैं हर मॉडल के निर्माण समारोह में यह कोड शामिल। मेरे पास हमेशा इस कोड को शामिल करने के लिए बहुत अधिक मॉडल हैं।
मैं अगर वहाँ Module.php/getServiceConfig समारोह से उदाहरण के लिए अपने मॉडल के सभी के लिए स्वचालित रूप से एक $ भाषा चर पारित करने के लिए एक समाधान है जानना चाहूंगा:
public function getServiceConfig()
{
$session = new Container('base');
return array(
'factories' => array(
'Application\Model\SomeThing' => function($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$c = new SomeThing($dbAdapter);
$c->language = $session->language;
return $c;
}
)
);
}
बेशक यह काम नहीं कर रहा, लेकिन ऐसा कुछ ऐसा करने में सक्षम होना बहुत अच्छा होगा, या एक सामान्य समाधान, जहां फैक्टरी सरणी में प्रत्येक मॉडल की भाषा चर के लिए वर्तमान भाषा का मान असाइन करना आवश्यक नहीं है (उदाहरण के लिए एक सामान्य बूटस्ट्रैप मॉडल, जहां एक ही स्थान पर सभी मॉडलों के लिए यह असाइनमेंट किया जा सकता है)।
क्या मेरी समस्या का समाधान है?
आपकी मदद के लिए धन्यवाद!
एम