2011-09-21 19 views
24
पर चीनी की तरह दिखने वाले वर्णों

प्रस्तावना: एपीआई 17 (Android 4.2), वहाँ एक विधि TextView.setTextLocale() कि स्पष्ट रूप से TextViews और व्युत्पन्न वर्ग के लिए इस समस्या का हल है, क्योंकि। एक जापानी लोकेल (Locale.JAPAN) असाइन करें, और यूनिहान वर्ण जापानी देखेंगे।जापानी एंड्रॉयड


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

समस्या this article में अच्छी तरह से समझाया गया है। यह आलेख समस्या के एक पूर्ण चित्रण के रूप में भी कार्य करता है - जब एंड्रॉइड (2.2 तक) पर देखा जाता है, तो "भाषा-निर्भर पात्रों के उदाहरण" के पात्र सभी समान दिखते हैं, और चीनी।

lang="ja" विशेषता का उपयोग मदद नहीं करता है। पूरे सिस्टम लोकेल को जापानी में स्विच करना या तो मदद नहीं करता है।

मैं जापान में बेचे जाने वाले एंड्रॉइड फोन के बारे में सोच रहा हूं।直, 今, 化 जैसे पात्रों को चीनी शैली भी देखें? मैं नहीं मान रहा हूँ।

तो प्रश्न हैं: क्या वहां एंड्रॉइड की आधिकारिक स्थानीय छवियां हैं? क्या मैं एमुलेटर पर दौड़ने के लिए एक प्राप्त कर सकता हूं? क्या DroidSansFallback फ़ॉन्ट अभी भी उन पर एकमात्र सीजेके-सक्षम फ़ॉन्ट है? और यदि यह है, तो यह वैनिला यूएसए एंड्रॉइड जैसा ही है?

मैं एक तरह से उम्मीद कर रहा है कि जापानी ग्लिफ़ फ़ॉन्ट (यूनिकोड निजी क्षेत्र या कुछ और) में गहरी कहीं छिपे हुए हैं। यदि ऐसा है, तो मैं उन्हें लाभ उठा सकता हूं ...

संपादित करें: DroidSansJapanese.ttf स्थित है, इसे एमुलेटर पर/सिस्टम/फोंट में कॉपी करके इंस्टॉल किया गया है, फिर से शुरू किया गया। इसने यूनियन लेख के रूप में कोई फर्क नहीं पड़ता। यहां तक ​​कि जापानी पाठ इनपुट का संकेत क्षेत्र (जिसे बेहतर पता होना चाहिए) चीनी के रूप में प्रदर्शित होता है।

मैं DroidSansJapanese.ttf के टाइपफेस नाम को कैसे जानूं? मुझे लगता है कि यह अभी भी Droid Sans है, जैसा कि अंतर्निहित DroidSansFallback फ़ॉन्ट में है। लेकिन अगर वे एक ही टाइपफेस रखते हैं, तो किस नियम को प्राथमिकता लेनी चाहिए? एक सोचता है - सिस्टम लोकेल, लेकिन स्पष्ट रूप से नहीं। एंड्रॉइड में फ़ॉन्ट्स सिर्फ कॉपी करके स्थापित हैं, है ना?

+1

एफवाईआई उन पात्रों को आपकी पोस्ट में चीनी शैली दिखती है। :) –

+0

आपके द्वारा पोस्ट किए गए चरित्र चीनी शब्द हैं ... कुछ जापानी शब्द में कुछ चीनी शब्द भी होंगे – xDragonZ

+0

मैं जापान में हूं और मुझे इसके साथ कोई समस्या नहीं है। हम (कंपनी) में आकाशगंगा के अमेरिकी (?) संस्करण हैं और जापानी पात्रों को प्रदर्शित करने में कोई समस्या नहीं है। < "; Charset = UTF-8 text/html" मेटा http-समतुल्य = "सामग्री प्रकार" सामग्री => : एक बात है कि मुझे WebViews पर समस्याओं लाना होगा UTF-8 मेटा टैग की स्थापना नहीं कर रहा है क्या आप उस पृष्ठ का लिंक या नमूना पोस्ट कर सकते हैं जिसमें आपको समस्याएं आ रही हैं? आपको किस डिवाइस में समस्या है? यदि आप अधिक विस्तृत जानकारी देते हैं तो मैं जवाब देने का प्रयास कर सकता हूं। यहां आप बस इतना कह रहे हैं कि एंड्रॉइड जापानी प्रदर्शित नहीं कर सकता है जो मुझे नहीं लगता कि यह सच है। – DallaRosa

उत्तर

4

पूर्ण जापानी समर्थन के साथ फ़ॉन्ट हैं। मैंने कुछ लोगों को DroidSansJapanese.tff और TakaoPGothic के बारे में बात सुनी है।

4

कुछ हद तक घबराहट समाधान मिला।

DroidSansJapanese.ttf फ़ॉन्ट मौजूद है और उदाहरण के लिए, here के लिए, डाउनलोड के लिए उपलब्ध है। मैंने इसे डाउनलोड किया, इसे 1 एमबी संपीड़ित परिसंपत्ति सीमा से बचने के लिए DroidSansJapanese.mp3 में बदल दिया, और इसे assets/web के तहत रखा गया।

@font-face 
{ 
font-family: "DroidJP"; 
src:url('DroidSansJapanese.mp3') 
} 

तो मैं हर प्रासंगिक सीएसएस शैली की font-family करने के लिए 'DroidJP' कहा: मैं उसके बाद निम्न सीएसएस बयान की शुरुआत की। जिस तरह से मैं अपना एचटीएमएल लोड करता हूं, assets/web फ़ोल्डर पहले ही लिंक की गई सामग्री लोड करने के लिए आधार के रूप में नामित है।

सावधानीपूर्वक परीक्षा के बाद, मुझे ऐप में कई जगहें मिलीं जहां जापानी TextView एस में था।उन लोगों के लिए, मैं इस तरह टाइपफेस लोड कर दिया है:

Typeface s_JFont = 
    Typeface.createFromAsset(Ctxt.getAssets(), "web/DroidSansJapanese.mp3"); 

और हर प्रासंगिक TextView पर setTypeface() कहा जाता है। अब लाभ के लिए!

इसने मेरे एपीके को लगभग 1 एमबी तक बढ़ाया। एक वैकल्पिक तरीका था, जहां मैं संपीड़ित रूप में संपत्तियों में फ़ॉन्ट स्टोर करता था - जो मुझे लगभग 500 केबी एपीके आकार बचाएगा, लेकिन फिर मुझे इसे पहले चलाने पर फोन मेमोरी में विस्तार करना होगा, चिंता करें डेटा फ़ोल्डर पथ के बारे में, और एंड्रॉइड 1.5 के साथ संगतता खोना।

कुछ क्रेडिट देय है: here और here। एंड्रॉइड 2.1 पर काम नहीं करता है (वेब ​​व्यू, टेक्स्ट व्यूज़ नहीं) - यह known bug है।

अब सवाल यह है कि मैं उन डिवाइसों की पहचान कैसे करूं जहां डिफ़ॉल्ट फ़ॉन्ट में पहले से ही जापानी आकार शामिल हैं?

संपादित करें: एमपी 3 हैक। मैंने पहले खंडित समाधान लागू किया है, लेकिन फिर संपत्तियों में फ़ॉन्ट के साथ जाने का फैसला किया। - छोटे APK आकार - और निम्नलिखित कमियां chunked दृष्टिकोण एक उल्टा है:

  • अधिक फोन स्मृति की खपत - आप डेटा निर्देशिका में परिसंपत्तियों में दोनों संकुचित फ़ॉन्ट और असंपीड़ित भंडारण
  • एंड्रॉयड 1.5 के साथ असंगत है खत्म TextView तरफ - विधि Typeface.createFromFile() एपीआई स्तर में पेश किया गया था 4
  • पेचीदा एचटीएमएल पीढ़ी - @ फॉन्ट-फेस घोषणा के साथ सीएसएस, parametrised किए जाने के बाद से डेटा पथ एक चर
  • है की जरूरत है पहली बार एप्लिकेशन धीमा स्टार्टअप - आप समय
  • के संयोजन के साथ समय बिताते हैं

एक संपीड़ित संपत्ति के रूप में फ़ॉन्ट को संग्रहीत करना एक विकल्प नहीं है - तो फ़ॉन्ट वेबव्यू में दिखाई नहीं देता है, और आप स्पष्ट रूप से लॉगकैट में "डेटा UNCOMPRESS_DATA_MAX से अधिक" के बारे में संदेश देख सकते हैं।

+0

मुझे .mp3 हैक समझ में नहीं आता है। सैद्धांतिक रूप से, एंड्रॉइड एसेट पैकेजिंग टूल एमपी 3 फाइलों को संपीड़ित नहीं करता है (या बहुत अच्छा नहीं करता)। यदि आप 'package.cpp' एंड्रॉइड स्रोत फ़ाइल खोलते हैं, जो कर्नेल के '\ tools \ aapt' पैकेज में स्थित है, तो बस फ़ाइल के शीर्ष पर आप' kNoCompressExt [] 'नामक एक चार सरणी पा सकते हैं जहां एमपी 3 सूचीबद्ध है। –

+0

यदि आप 1 एमबी से अधिक संपीड़ित संपत्ति संग्रहीत करते हैं, तो इसे AssetManager.open() के माध्यम से खोलने का प्रयास करने से एक त्रुटि फेंक जाएगी। वर्कअराउंड सूचीबद्ध [यहां] (http://stackoverflow.com/questions/2860157/load-files-bigger-than-1m-from-assets-folder/3093966)। –

+0

बिल्कुल, उस पोस्ट पर उत्तर # 2 पढ़ें। यदि आप इसे एमपी 3 में बदलते हैं, तो आप एएपीटी को इसे संपीड़ित नहीं करने के लिए कह रहे हैं क्योंकि यह पहले ही संपीड़ित है। –

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