2009-11-17 17 views
14

समस्या:स्थानीयकृत लेख में लिंक एम्बेड करने के लिए कैसे

मैं एक ASP.Net MVC आवेदन अंतर्राष्ट्रीयकरण रहा हूँ, लेकिन वाक्य लिंक किए गए पाठ के साथ मुझे थामने दिया है। उदाहरण के रूप में निम्नलिखित लें:

  • अंग्रेजी: "जारी रखने के लिए कृपया login देखें।"
  • पोर्तुगीज: "Entre निरंतर पैरा के लिए अनुकूल है।"

ध्यान दें कि चूंकि "लॉगिन" हाइपरलिंक है, इसलिए मेरे पास अनुवादक होना चाहिए कि पाठ को स्थानीयकृत करते समय कौन सा शब्द या वाक्यांश हाइपरलिंक किया जाना चाहिए, उदा। एंट्रे।

मैं इस समस्या को प्राप्त करने वाला पहला व्यक्ति नहीं हो सकता, तो आपके द्वारा देखी गई या उपयोग की जाने वाली सर्वोत्तम रणनीति-समाधान क्या है?

क्या अनुवादक के लिए ऐसी चीजों को इंगित करने के लिए मानक है (और अनुवादित परिणामों का उपयोग करने का एक मानक तरीका) ... या क्या मैं अपनी सामग्री और प्रेजेंटेशन जानकारी को इतनी कसकर युग्मित करने की अपेक्षा करने में गलत पथ चला गया हूं (हालांकि मैं इस मामले में युग्मन को हटाने के किसी भी तरीके से नहीं सोच सकता)।

वर्तमान कार्यान्वयन:

<%= Html.Resource("LoginMessage")%> 

अपडेट:: कृपया Keith's answer देख

मैं वर्तमान और दृश्य के लिए स्थानीय संसाधन फ़ाइलों का उपयोग कर रहा an extension method on HtmlHelper स्थानीय डंक मिलता है।

मुझे यह सबसे उपयोगी पाया गया, लेकिन सिस्टम auto selected दूसरा एक।

उत्तर

5

क्या मैं वर्तमान में उपयोग कर रहा हूँ वह सेटअप पीछा कर रहा है:

मैं अपने प्राथमिक ग्रंथों से युक्त एक वैश्विक संसाधन फ़ाइल है, नामित Strings.resx (Strings.NL-nl.resx आदि)। इसके आगे मेरे पास मेरी वैश्विक फ़ाइल है जिसमें मेरे एक्शनलिंक्स के सभी स्थानीयकरण शामिल हैं। वह है: एक्शनलिंक .resx और स्थानीय।

स्ट्रिंग्स:

अब मैं क्या कर रहा है, मेरे Strings.resx में मैं की तरह कुछ है।resx

{0}

स्थानीय भाषा Strings.NL-nl.resx

{0} ओम verder ते gaan

अब चाल जारी रखने के लिए कृपया ऐसा कुछ करना है:

<%= Html.Encode(string.Format(Resources.Strings.ControllernameViewnameKey, 
Html.ActionLink(Resources.ActionLinks.login, "Account", "LogOn"))) 

आप अपने लिंक में एक से अधिक चर की जरूरत है आप

string.Format() 

keynaming को समझने के लिए जहां maintext (क्या पेज) प्रयोग किया जाता है अपने ही सम्मेलन है करने के लिए वस्तुओं की एक सरणी दे सकते हैं। चूंकि मेरे मुख्य टेक्स्ट बहुत विशिष्ट हैं। बेशक कुंजी स्वयं बनाया जा सकता है।

कैसे मैं यह कर आप अपने खुद के सवाल पर अपना जवाब पर एक नज़र हो सकता है पर

अधिक जानकारी के लिए: here


संपादित

बेशक आप स्थानीय फ़ाइलों का उपयोग कर सकते वैश्विक फाइलों के बजाय, लेकिन मुझे इसके दृढ़ता से टाइप किए गए संसाधनों को बहुत पसंद है :)। 2.

कहा कि मैं जोड़ने कि अलग/असंबंधित 2 शब्द पर विचार नहीं करते हैं में अलग -

+0

मुझे लगता है कि शेष वाक्य से एक्शन लिंक के अनुवाद को अलग करना खतरनाक हो सकता है। आपका सुझाव हमेशा काम करेगा यदि वाक्य को खंडों में विभाजित किया जा सकता है, स्वतंत्र रूप से अनुवाद किया जा सकता है और खराब शब्द विकल्पों और खराब शब्द क्रम के बिना एक साथ वापस पाई जा सकती है। लेकिन चूंकि वाक्य संरचनाएं एक भाषा से दूसरे तक भिन्न होती हैं और शब्द विकल्प संदर्भ संवेदनशील होते हैं, मुझे लगता है कि वाक्य का संपूर्ण अनुवाद होना चाहिए। क्या आप उस समस्या से गुजर चुके हैं? इनपुट के लिए धन्यवाद! मुझे आपके द्वारा किए गए बहुत से काम पसंद हैं और यह बेहद सहायक है। –

+0

... या शायद "निश्चित रूप से" सहायक। :-) –

+0

एचएम, जो आप कहते हैं वह समझ में आता है लेकिन मैंने अभी तक उस समस्या में भाग नहीं लिया है। शायद क्योंकि मेरे पास इतना अधिक टेक्स्ट नहीं है जो स्थैतिक है। यदि आपको इसके लिए कोई समाधान मिल जाए तो मुझे संदेश भेजना सुनिश्चित करें, मुझे एक सुनना अच्छा लगेगा, क्योंकि यह वास्तव में एक समस्या हो सकती है। – bastijn

1

मैं संसाधन को दो मानों में अलग करने का सुझाव दूंगा, जैसे
- 1: जारी रखने के लिए कृपया {0}।
- 2: के लिए लॉग इन

या Português
के लिए - 1: {0} पोर पक्ष पैरा continuar।
- 2: Entre

और फिर उन्हें लिंक और संदेश बनाने के लिए गठबंधन करें। {0} को लिंक/एक्शनलिंक/जो भी आपको चाहिए, के लिए प्रतिस्थापित किया गया है।

+0

पोस्टिंग के लिए धन्यवाद:

<%= Html.Localise("Controller/Action/KeyOfTextOnPage") %> 

लिंक के लिए हम एक विशेष सहायक है। बेस्टिजन के पोस्ट पर खराब शब्द पसंद या शब्द आदेश के जोखिमों के बारे में मेरी टिप्पणी देखें जो पूर्ण वाक्यों में नहीं किए गए हैं। मुझे लगता है कि यहां भी लागू होगा। –

+0

निश्चित रूप से। हमने मूल रूप से एक ही समाधान का सुझाव दिया है।मैं कहूंगा कि उदाहरण में, आप किसी और चीज के लिए 1-2 के लिए स्ट्रिंग का पुन: उपयोग नहीं कर सकते हैं। –

1

मैं अन्य जवाब के साथ सहमत होना होगा। चारों ओर एक साधारण सम्मेलन के लिए चिपके रहें: LoginMessage & LoginMessageLink, वाक्य के पूरे पाठ के अनुरूप & लिंक का पाठ।

यह तटस्थ & है यदि भाषा के लिए आवश्यक है तो अनुवादक को पूरी वाक्य लिंक हो सकती है।

यदि आपको खुद को एक ही पृष्ठ पर कई बार लिंक करने की आवश्यकता है, तो इसके बजाय इसके कुछ मार्कर हैं। पसंद:

English: "Please ##login## to continue." 
Português: "##Entre## por favor para continuar." 
1

मैं केवल कस्टम प्लेसहोल्डर्स की तलाश करता हूं जो उस लिंक को इंडेक्स करते हैं जो आप टेक्स्ट के चारों ओर रखना चाहते हैं। उदाहरण के लिए

"Please #123#login#123# to continue" 

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

11

मुझे लगता है कि यह 4 विकल्पों के लिए नीचे आता है:

  1. अपने स्थानीयकरण में एक लिंक रखो: "कृपया < एक href =" # "> लॉगिन </एक > जारी रखने के लिए"
  2. एकाधिक localisations - या तो:
    1. "कृपया {0} जारी रखने के लिए" और "के लिए लॉग इन", या
    2. "कृपया", "लॉगिन" और "जारी रखने के लिए"
    3. अपने localisations अंदर
  3. मार्कअप, उदाहरण के लिए:
    1. "कृपया {0} लॉगिन {1} जारी रखने के लिए"
    2. "{शुरू: -प्रवेश} लॉगिन {अंत लॉगिन} जारी रखने के लिए कृपया"
    3. "कृपया < a href =" {0} "> लॉगिन </एक > जारी रखने के लिए"
  4. बस इसे समर्थन नहीं करते - पूरे वाक्य एक लिंक बना

मुझे लगता है कि 1 से बचने का एक प्रमुख कारण है - आप स्थानीयकरण और एप्लिकेशन नेविगेशन को मिलाते हैं।

विकल्प 2 टेक्स्ट के प्रत्येक ब्लॉक के लिए एकाधिक संसाधनों के साथ समाप्त होता है, लेकिन जब तक आपके सभी स्थानीयकरण प्रबंधित करने के अच्छे तरीके होते हैं, तो यह कोई मुद्दा नहीं होना चाहिए। हालांकि यह तीसरे पक्ष के अनुवादकों के लिए दर्द हो सकता है - आपको संदर्भ को बताने के लिए आपको कुछ रास्ता चाहिए या आपको अलग-अलग शब्दों के कुछ अजीब अनुवाद मिलते हैं।

विकल्प 3 मेरा पसंदीदा समाधान है। आप अभी भी अपने अनुवादकों के लिए समस्याएं बनाते हैं - अधिकांश टेक्स्ट में आपके टोकन/एचटीएमएल/मार्कअप को नहीं समझ पाएंगे। हमारा पहले से ही कुछ HTML है, इसलिए 3.3 ने हमारे लिए काम किया है।

विकल्प 4 पर विचार करने लायक हो सकता है - क्या आप अतिरिक्त काम और रखरखाव के लायक बनाने के लिए एम्बेडेड लिंक रखने में पर्याप्त लाभ प्राप्त करते हैं? यह आपके आवेदन के लिए विशिष्ट एक महत्वपूर्ण प्रश्न है: यदि पूरी वाक्य लिंक है (केवल सक्रिय क्रिया के बजाय - जो सबसे अच्छा अभ्यास लिंक है) क्या आप वास्तव में अतिरिक्त प्रयास के विकल्प 2 या 3 बनाने के लिए पर्याप्त खो देते हैं?

मुझे लगता है कि ऐसा इसलिए हो सकता है कि अधिकांश परियोजनाओं के लिए ऐसा करने के अधिक मानकीकृत तरीके नहीं हैं (शायद 10 में से 9 गुना) विकल्प 4 पर्याप्त है, इसलिए यह केवल कुछ विशेष मामलों के लिए एक समस्या के रूप में समाप्त होता है । हमारे पास स्थानीयकृत टेक्स्ट के लगभग 11,000 टुकड़े के साथ एक जटिल अनुप्रयोग है और 4 विशाल समय के लिए जाना जाता है, और इसमें केवल 4 या 5 स्थान हैं जहां हमें 3.3

हमारे तकनीकी कार्यान्वयन आपके जैसा ही है :

<%= Html.LocaliseLink("Controller/Action/KeyOfTextOnPage", "~/link.aspx") %> 
<%= Html.LocaliseAction("Controller/Action/KeyOfTextOnPage", "action", "controller") %> 
+1

उत्कृष्ट प्रतिक्रिया! हमारे अनुवादक एचटीएमएल टैग के आसपास काम कर सकते हैं और हमने ज्यादातर मामलों में 3.3 का उपयोग करने का फैसला किया है। यह अच्छी तरह से काम कर रहा है। –

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