मैं (सभी अन्य लोगों की तरह) NSLocalizedStringअपने ऐप को स्थानीय बनाने के लिए उपयोग कर रहा हूं ।
दुर्भाग्य से, कई "कमियां" हैं (जरूरी नहीं कि NSLocalizedString का दोष ही हो), सहित
- Xcode में तार के लिए कोई स्वतः पूर्णता नहीं। यह न केवल त्रुटि-प्रवण, बल्कि थकाऊ भी काम करता है।
- आप एक स्ट्रिंग को फिर से परिभाषित कर सकते हैं क्योंकि आप पहले से मौजूद एक समतुल्य स्ट्रिंग को नहीं जानते थे (यानी "कृपया पासवर्ड दर्ज करें" बनाम "पासवर्ड दर्ज करें")
- स्वतः पूर्णता-मुद्दे के समान, आपको "याद रखने" की आवश्यकता है / टिप्पणी स्ट्रिंग को कॉपी करें, या फिर
genstringएक स्ट्रिंग के लिए कई टिप्पणियों के साथ समाप्त हो जाएगा - यदि आप
genstringपहले से ही कुछ तारों को स्थानीयकृत करने के बाद उपयोग करना चाहते हैं, तो आपको अपने पुराने स्थानीयकरणों को न खोने के लिए सावधान रहना होगा। - वही तार आपके पूरे प्रोजेक्ट को चौपट कर देते हैं। उदाहरण के लिए, आपने
NSLocalizedString(@"Abort", @"Cancel action")हर जगह उपयोग किया , और फिर कोड की समीक्षा ने आपकोNSLocalizedString(@"Cancel", @"Cancel action")कोड को अधिक सुसंगत बनाने के लिए स्ट्रिंग का नाम बदलने के लिए कहा ।
मैं क्या करता हूं (और SO पर कुछ खोजों के बाद मुझे लगा कि बहुत से लोग ऐसा करते हैं) एक अलग strings.hफ़ाइल है जहाँ मैं #defineसभी स्थानीयकरण-कोड रखता हूँ । उदाहरण के लिए
// In strings.h
#define NSLS_COMMON_CANCEL NSLocalizedString(@"Cancel", nil)
// Somewhere else
NSLog(@"%@", NSLS_COMMON_CANCEL);
यह अनिवार्य रूप से कोड-पूर्णता प्रदान करता है, चर नामों को बदलने के लिए एक एकल स्थान (ताकि अब जेनस्ट्रिंग की कोई आवश्यकता नहीं है), और ऑटो-रिफ्लेक्टर के लिए एक अनूठा कीवर्ड। हालांकि, यह उन #defineबयानों की एक पूरी गुच्छा के साथ समाप्त होने की लागत पर आता है जो स्वाभाविक रूप से संरचित नहीं होते हैं (जैसे कि लोकेस्ट्रिंग.कोमोन.कैंसेल या ऐसा कुछ)।
इसलिए, जब यह कुछ हद तक ठीक है, तो मैं सोच रहा था कि आप लोग इसे अपनी परियोजनाओं में कैसे करेंगे। क्या NSLocalizedString के उपयोग को आसान बनाने के लिए अन्य तरीके हैं? क्या शायद कोई ऐसा ढांचा भी है जो इसे घेरता है?