2011-05-04 19 views
5

मुझे अपने ऐप के साथ एचटीएमएल फाइलों और छवियों वाली निर्देशिका वितरित करने की आवश्यकता है।स्थानीयकृत निर्देशिका के लिए पथ कैसे खोजें?

ऐप में विभिन्न भाषाओं के लिए समर्थन है। मैं प्रत्येक भाषा के लिए निर्देशिका बनाया है और उसके बाद वर्तमान स्थान के आधार पर सही एक चुनना:

NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0]; 
NSString *path = [[NSBundle mainBundle] pathForResource:@"index" 
               ofType:@"html" 
              inDirectory:[language stringByAppendingPathExtension:@"html"];]; 

if (![[NSFileManager defaultManager] fileExistsAtPath:path]) 
{ 
    // Fallback to english 
    path = [[NSBundle mainBundle] pathForResource:@"index" 
              ofType:@"html" 
             inDirectory:@"en.html"]; 
} 

कैसे कर सकता है मैं इस के बजाय ऊपर करने के लिए (जो थोड़ा गंदा है) होने के बेहतर तरीके से निपटने ?

मैं शायद किसी भी तरह इस के लिए xx.lproj निर्देशिका का उपयोग करने और प्रत्येक xx.lproj निर्देशिका में स्थानीय एचटीएमएल निर्देशिका डालने और NSBundle pathForResource का उपयोग सही फ़ाइल को खोजने के लिए सोच रहा हूँ। हालांकि इसे काम करने के लिए नहीं मिल सका।

उत्तर

0

आप इस का उपयोग कर सकते हैं:

NSString *filename = [NSString stringWithFormat:@"html_%@.html", NSLocalizedString(@"abbr", @"")]; 
+0

वास्तव में मैं जो खोज रहा हूं वह वास्तव में नहीं है। –

4

[NSBundle pathForResource:ofType:] साथ xx.lproj फ़ोल्डर का उपयोग सीधी-सपाट है।

आप अपने एक्सकोड की प्रोजेक्ट फ़ाइल में index.html जोड़ सकते हैं और फिर इसे "जानकारी प्राप्त करें" विंडो से स्थानीयकरण कर सकते हैं। "डी" जैसी दूसरी भाषा जोड़ें, और एक्सकोड index.html को नव निर्मित de.lproj में कॉपी करेगा। यदि आप उस फ़ाइल को हटाते हैं, तो ऐप अंग्रेजी संस्करण पर वापस आ जाएगा।

आप प्रवेश के साथ यह परीक्षण कर सकते हैं:

NSLog([[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]); 
+0

मुझे आश्चर्य है कि यह मतदान नहीं किया जा रहा है। यदि आप एनएसबंडल के पथ और यूआरएल विधियों का उपयोग करते हैं, तो आपके लोकेल और क्षेत्र फ़ोल्डर्स को समझने के लिए कड़ी मेहनत आपके लिए स्वचालित रूप से की जाएगी। – mahboudz

+0

क्योंकि यह एक्सकोड 6.3.2 में काम नहीं करता है। दुर्भाग्यवश, वह हमेशा शून्य लौटता है। –

3

मैं भी इस काम करने के लिए प्राप्त करने में असमर्थ हूँ:

NSLog([[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]); 

लेकिन इस करता है, मानक Xcode language.lproj संरचना का उपयोग (जैसे, en.lproj):

NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0]; 
    NSString *htmlPath = [[NSBundle mainBundle] pathForResource:@"index" 
        ofType:@"html" 
        inDirectory:[language stringByAppendingPathExtension:@"lproj"]]; 

अतिरिक्त भी हटा दिया गया; मार्टिन के मूल प्रश्न में ऊपर ...

3

अतिरिक्त युक्ति: सुनिश्चित करें कि आप अपने निर्मित उत्पाद में फ़ाइलों के अनलॉक संस्करणों को हटा दें, अन्यथा pathForResource स्थानीय फ़ाइलों के बजाय उन फ़ाइलों को पायेगा।

1

क्यों नहीं forLocalization रास्ता:

 htmlFile = [[NSBundle mainBundle] pathForResource:@"myContent" 
               ofType:@"html" 
              inDirectory:@"de.lproj" 
             forLocalization:@"de"]; 

यह Xcode 5.1.1 और iOS 7.1

के साथ यहाँ ठीक काम करता है @Martin Wickman का सामान्यीकरण (वापस आने के साथ) जोड़ें और सब कुछ बहुत अच्छा होना चाहिए ।

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