2015-07-03 5 views
8

मेरे पास बहु भाषा वेब एप्लिकेशन है। मैं संसाधन नियंत्रण का उपयोग कर सभी नियंत्रण यानी लेबल, ड्रॉप डाउन, टेक्स्ट और संदेश में परिवर्तित कर रहा हूं।एक बहु भाषा वेब अनुप्रयोग में कॉन्फ़िगर करने योग्य वस्तुओं को कैसे परिवर्तित और स्टोर करने के लिए?

समस्या:

उदाहरण के लिए, पंजीकरण पृष्ठ Prefix- श्री, श्रीमती, मिस आदि यह उपसर्ग डेटा एक मेज से आता है और जाता है विन्यास यानी हम के लिए एक विन्यास वेब पेज कर रहे हैं के लिए ड्रॉप डाउन है वही।

कई अन्य कॉन्फ़िगर करने योग्य चीजें और संबंधित पृष्ठ हैं।

मेरा प्रश्न यह है कि इस डेटा को अन्य भाषा में कैसे परिवर्तित करें और इसे कैसे सहेजना है क्योंकि इसे संसाधन फ़ाइल के साथ नहीं किया जा सकता है।

कोई भी व्यावहारिक विचार रखने वाले मुझे मार्गदर्शन कर सकता है।

+0

क्या यह एमवीसी एप्लीकेशन –

+0

यह एक एएसपी वेब एप्लिकेशन है। – Veer

+0

यह आंशिक रूप से इस बात पर निर्भर करता है कि आप किस भाषा के लिए अनुवाद बनाना चाहते हैं। जैसे ही भाषा एलटीआर से आरटीएफ में बदल जाती है, एक मानक लेआउट (सभी भाषाओं के लिए) हमेशा अंतिम उपयोगकर्ता को समझ में नहीं आता है। इसके अलावा कुछ भाषाएं सीधे अनुवाद नहीं करती हैं (या समझ में आती हैं)। – Will

उत्तर

0

जिस तरह से मैं वर्तमान में अनुप्रयोगों में बहु भाषा समर्थन लागू कर रहा हूं, निम्न विधि के माध्यम से है।

  • भाषा नामक एक अमूर्त कक्षा बनाएं जो सभी भाषाओं से प्राप्त होती है।
  • अनुवाद की आवश्यकता वाले प्रत्येक पाठ स्ट्रिंग के लिए सार स्ट्रिंग गुण जोड़ें।
  • आधार भाषा वर्ग से प्राप्त प्रत्येक भाषा केवल स्ट्रिंग के स्थानीय संस्करण को वापस कर देती है।
  • वर्तमान में चुनी गई भाषा कक्षा को स्टोर करने के लिए वैश्विक संपत्ति बनाएं।
  • स्ट्रिंग मान प्राप्त करें जिन्हें स्थानीय रूप से सेट करने की बजाय वैश्विक संपत्ति से अनुवाद करने की आवश्यकता है।

हालांकि अनुवादित तार जोड़ना कठिन है, मुझे यह विधि मिलती है कि यूआई कोड को यथासंभव सरल रखने के दौरान सभी आवश्यक भागों का अनुवाद किया जाता है।

बेस क्लास का उपयोग किसी भी विधि या गुणों का पुनः उपयोग करने की अनुमति देता है जो सभी भाषाओं में उपयोग किया जा सकता है।

बुनियादी रूपरेखा देने और देने के लिए संरचना इस तरह जाएगी।

// बेस भाषा कक्षा

public abstract class Language 
{ 
    // Field to identify the language by. 
    public string Code {get; private set;} 

    // Contructor that takes language code as parameter 
    public Language(string code) 
    { 
     Code = code; 
    } 

    // Add the strings you want translating. 
    // Making them abstract means classes that inherit from 
    // this class must provide their own implementation of these strings. 
    public abstract string Hello {get;} 
    public abstract string Goodbye {get;} 
} 

// उदाहरण अंग्रेजी भाषा वर्ग

public class en_gb : Language 
{ 
    // Constructor simply provides base class with the language code. 
    public en_gb() : base ("en_gb"){} 

    // By inheriting from Language these properties must be overridden. 
    // Visual Studio will add these properties for you, so you simply need to add the return value. 
    public override string Hello {get {return "Hello";} } 
    public override string Goodbye {get {return "Goodbye";} } 
} 

// उदाहरण स्पेनिश भाषा वर्ग

public class es_sp : Language 
{ 
    // Constructor simply provides base class with the language code. 
    public es_sp() : base ("es_sp"){} 

    // By inheriting from Language these properties must be overridden. 
    // Visual Studio will add these properties for you, so you simply need to add the return value. 
    public override string Hello {get {return "Hola";} } 
    public override string Goodbye {get {return "Adiós";} } 
} 

आप तो बस एक वैश्विक संपत्ति कहीं ।

public Language CurrrentLanguage {get; set;} 

सभी तत्वों को अनुवाद करने की आवश्यकता है तो CurrrentLanguage संपत्ति संदर्भ वांछित स्ट्रिंग वापस जाने के लिए कर सकते हैं।

XAML उदाहरण:

<TextBlock Text="{Binding Source={StaticResource GlobalValues}, Path=CurrrentLanguage.Hello}" /> 

कोड उदाहरण:

Textbox1.Text = GlobalValues.CurrentLanguage.Hello; 
+0

आप अनुवादित तारों को कहां संग्रहीत कर रहे हैं? – Veer

0

संसाधन प्रदाता का विस्तार होने की संभावना दृष्टिकोण आप पर विचार करना चाहेंगे है।

समीक्षा निम्नलिखित:

https://msdn.microsoft.com/en-us/library/aa905797.aspx (। इस लेख के संदर्भ ASP.Net WebForms है, "एक डाटाबेस रिसोर्स प्रदाता बिल्डिंग" खंड पर एक नज़र डालें)

http://weblogs.asp.net/thangchung/extending-resource-provider-for-soring-resources-in-the-database (इस ब्लॉग पोस्ट वास्तव में उपर्युक्त एमएसडीएन आलेख में शामिल है, लेकिन वेबफॉर्म के बजाय एएसपी.NET एमवीसी पर लागू होता है।)

मुझे यकीन नहीं है कि आप किस प्रकार का एएसपी.Net एप्लिकेशन बना रहे हैं, इसलिए मैंने सोचा कि यह मूल्यवान होगा वेबफॉर्म और एमवीसी दोनों के लिए संदर्भ शामिल करें।

इन दो संदर्भों में क्या उल्लेख किया गया है, आपको अपना स्वयं का समाधान लागू करने के लिए एक अच्छा आधार देना चाहिए। फिर, अपनी lanuage भेद करने के लिए

<Controls> 
<Control> 
<DropDown> 
<English>Cities</English> 
<Urdu>شھر</Urdu> 
<Arabic>البد</Arabic> 
</DropDown> 
</Control> 
</Controls> 
0

विन्यास चीजें हैं जो संसाधनों में उपयोगकर्ताओं द्वारा गतिशील रूप से दर्ज किया गया है को बचाने आप IResourceWriter इस तरह उपयोग कर सकते हैं करने के लिए संसाधन फ़ाइलों का उपयोग करना व्यावहारिक नहीं है, क्योंकि उपयोगकर्ता जो कुछ भी चाहते हैं उसे कॉन्फ़िगर कर सकते हैं।

तो, अगर मैं सही ढंग से समझ गया, तो मुझे लगता है कि एकमात्र व्यावहारिक समाधान प्रत्येक मूल्य उपयोगकर्ताओं के लिए एक तालिका में अनुवाद कर रहा है।

चूंकि उपयोगकर्ता किसी भी भाषा में मूल्य दर्ज कर सकते हैं, यह मुश्किल हो सकता है।

मैं अंग्रेजी की एक डिफ़ॉल्ट आवश्यक भाषा चुनता हूं, अंग्रेजी कहता हूं, इसलिए जब भी उपयोगकर्ता मूल्यों (शीर्षक या आपके नमूने में उपसर्ग) का प्रबंधन करते हैं, तो उन्हें उन्हें जोड़े में प्रबंधित करना होगा, यानी उनकी भाषा और अंग्रेजी।

तो, यदि लोकेल फ्रेंच है, जब वे शीर्षक की अनुक्रमणिका की जांच करते हैं, तो वे दो कॉलम देखते हैं, एक फ्रेंच के लिए और एक अंग्रेजी के लिए।

यदि पहली बार फ्रेंच उपयोगकर्ता दृश्य में प्रवेश करता है, तो कोई फ्रेंच मान नहीं है, इसलिए उपयोगकर्ता को अंग्रेजी मूल्यों के लिए फ्रेंच अनुवाद जोड़ने के लिए तैयार किया गया है।

यदि उपयोगकर्ता एक नया [फ्रेंच] मान जोड़ता है, तो उसे अंग्रेजी अनुवाद भी दर्ज करना होगा।

यह एक हल्का बोझिल दिखता है और यह बहुत व्यावहारिक नहीं हो सकता है, लेकिन यह एक विकल्प है!

बेस्ट,

पीडी: अरे, समाधान साझा करें जब आप इसे करने के लिए मिल!

1

कोशिश XML स्वरूप यदि यह उपयोगकर्ता विन्यास है:

1

IResourceWriter writer = new ResourceWriter("Resource.resx"); 
// Adds resources to the resource writer. 
writer.AddResource("String 1", "First String"); 
writer.AddResource("String 2", "Second String"); 
// Writes the resources to the file or stream, and closes it. 
writer.Close(); 
1

माइक्रोसॉफ्ट .NET सिस्टम में CultureInfo कक्षा का उपयोग कर संस्कृति विशिष्ट जानकारी के साथ काम करने के लिए समर्थन प्रदान करता है। ग्लोबलाइजेशन नेमस्पेस।संस्कृति की जानकारी पृष्ठ स्तर पर और साथ ही आवेदन स्तर पर भी सेट की जा सकती है।

<%@ Page language="C#" Culture="fr-FR"%> 

आवेदन स्तर पर संस्कृति की जानकारी सेट करने के लिए, web.config फ़ाइल के वैश्वीकरण अनुभाग में निम्न का उपयोग करें।

<configuration> 
<system.web> 
    <globalization 
    culture="en-GB" 
    /> 
</system.web> 
</configuration> 

इस कोशिश,

http://aspalliance.com/articleViewer.aspx?aId=957&pId=-1 
0

उदाहरण के लिए, पंजीकरण पृष्ठ Prefix- श्री, श्रीमती, मिस आदि यह उपसर्ग डेटा एक मेज से आता है के लिए ड्रॉप डाउन है और विन्यास यानी है हम के लिए एक कॉन्फ़िगरेशन वेब पेज है।

चूंकि ड्रॉप डाउन के मान डेटाबेस में हैं, मुझे लगता है कि अनुवाद डेटाबेस में भी होना चाहिए।

आसान तरीका तरीका है अपने titles तालिका में प्रत्येक भाषा के लिए कोई फ़ील्ड को है: अगर आप अधिक भाषा है या

-------------------------- 
| Id | TitleEn | TitleFr | 
-------------------------- 
| 1 | Mr  | M  | 
| 2 | Mrs | Mme  | 
| 3 | Miss | Mlle | 
-------------------------- 

हालांकि यह अच्छी तरह से स्केल नहीं करेगा आप भविष्य में भाषाओं जोड़ना चाहते हैं ।

तरह से मैं क्या करना होगा तो वह ऐसा localized_string तालिका जोड़ने के लिए होगा: अपने शीर्षकों तालिका में और किसी भी अन्य तालिकाओं जहां जरूरत है

-------------------------- 
| Id | Language | String | 
-------------------------- 
| 7 | FR  | M  | 
| 8 | FR  | Mme | 
| 9 | FR  | Mlle | 
| 7 | EN  | Mr  | 
| 8 | EN  | Mrs | 
| 9 | EN  | Miss | 
-------------------------- 

एक localized_string आप स्ट्रिंग की पहचान की दुकान:

---------------------------- 
| Id | localized_string_id | 
---------------------------- 
| 1 | 7     | 
| 2 | 8     | 
| 3 | 9     | 
---------------------------- 

इस तरह आप किसी भी भाषा में स्थानीयकृत स्ट्रिंग से पूछ सकते हैं और आप अपनी डेटाबेस स्कीमा को संशोधित किए बिना जितनी चाहें उतनी भाषा जोड़ सकते हैं।

संबंधित मुद्दे