2013-02-05 10 views
14

बस जिज्ञासा है, विंडोज़ पर फ़ॉन्ट नाम हमेशा अंग्रेजी चेहरे के नाम होते हैं, या वे उपयोगकर्ता द्वारा चुनी गई यूआई भाषा के आधार पर स्थानीयकरण योग्य होते हैं?क्या केवल विंडोज़ अंग्रेजी पर फ़ॉन्ट नाम हैं?

दूसरे शब्दों में, Times New Roman है जिसे विंडोज़ की चीनी स्थापना पर भी कहा जाता है?

+2

स्थानीय फ़ॉन्ट नामों में से कुछ उदाहरण यहां पाया जा सकता: http://www.trigeminal.com/samples/font_choices.html –

उत्तर

9

फ़ॉन्ट नाम स्थानीयकृत होते हैं यदि फ़ॉन्ट निर्माता एक विशिष्ट लोकेल के लिए मेटाडेटा प्रकाशित करना चुनता है, लेकिन सभी फ़ॉन्ट्स में सिस्टम-ज्ञात नाम होता है, आमतौर पर पोस्टस्क्रिप्ट नाम होता है, जो सुनिश्चित करता है कि उसी फ़ॉन्ट को संदर्भित किया जा सके और उचित के साथ पुनर्प्राप्त किया जा सके विश्वसनीयता की मात्रा।

ओपनटाइप और ट्रू टाइप फ़ॉन्ट्स के लिए, आप ओपनटाइप फ़ाइल के name रिकॉर्ड में स्थानीय नाम ढूंढ सकते हैं।

The Naming Table (OpenType Spec 1.6) @ Microsoft Typography
Font Names Table (TrueType Spec) @ Apple

पोस्टस्क्रिप्ट टाइप 1 फोंट के लिए, आप अपने FontName घोषणाओं द्वारा आवंटित नाम ढूँढ सकते हैं।

Adobe Type 1 Font Format @ Adobe (PDF)

अद्यतन:

मैं देखना पोस्टस्क्रिप्ट नाम एक फ़ॉन्ट का दृष्टांत लिए इस्तेमाल किया जा सकता है या नहीं, और दुर्भाग्य से यह काम नहीं करता जाँच की। हालांकि, स्थानीय नाम का उपयोग (जैसा कि मार्क रान्ससम के लिंक से उनकी टिप्पणी में पुनर्प्राप्त किया गया है) काम करता है। यह नमूना सी # में है।

using System.Drawing; 

namespace FontNameCheckApplication 
{ 
    class Program 
    { 
     [STAThread] 
     static void Main(string[] args) 
     { 
      Font TimesNewRomanByPSName = new Font("TimesNewRomanPSMT", 16f); 
      Console.WriteLine("TimesNewRomanPSMT = {0}", TimesNewRomanByPSName.Name); 

      Font TimesNewRomanByName = new Font("Times New Roman", 16f); 
      Console.WriteLine("Times New Roman = {0}", TimesNewRomanByName.Name); 

      Font ArialByPSName = new Font("ArialMT", 16f); 
      Console.WriteLine("ArialMT = {0}", ArialByPSName.Name); 

      Font ArialByName = new Font("Arial", 16f); 
      Console.WriteLine("Arial = {0}", ArialByName.Name); 

      Font GulimByEnglishName = new Font("Gulim", 16f); 
      Console.WriteLine("Gulim = {0}", GulimByEnglishName.Name); 

      Font GulimByKoreanName = new Font("굴림", 16f); 
      Console.WriteLine("굴림 = {0}", GulimByKoreanName.Name); 

      Console.ReadKey(); 
     } 
    } 
} 

फ़ॉन्ट प्रतिस्थापन के साथ दुर्भाग्य से हम butted गया है सिर, के रूप में "माइक्रोसॉफ्ट सैंस सेरिफ़" निश्चित रूप से Times New Roman है और न ही एरियल नहीं है। यह इंगित करता है कि पोस्टस्क्रिप्ट नाम का उपयोग उसी फ़ॉन्ट के संदर्भ में विश्वसनीय रूप से नहीं किया जा सकता है।

TimesNewRomanPSMT = Microsoft Sans Serif 
Times New Roman = Times New Roman 
ArialMT = Microsoft Sans Serif 
Arial = Arial 
Gulim = Gulim 
?? = Gulim 

अद्यतन # 2::

यहाँ Win32 के लिए एक नमूना है

यहाँ उत्पादन है।

ध्यान देने योग्य एक बात यह है कि CreateFontIndirect() प्रतिस्थापन के अधीन है। इस नमूने को चलाने के दौरान, पोस्टस्क्रिप्ट नामों के लिए भी मुझे खाली संभाल नहीं मिला। यह देखने के लिए कि क्या हम एक अनुपस्थित मैच प्राप्त कर सकते हैं, हमें उपलब्ध सिस्टम फ़ॉन्ट सूची को स्कैन करने के लिए EnumFontFamiliesEx() का उपयोग करना चाहिए। हमें सी # के समान परिणाम मिलते हैं, लेकिन प्रतिस्थापन के बिना। कुछ फोंट के लिए परिणाम ग्राफिक्स मोड सेटिंग के आधार पर हो सकते हैं (SetGraphicsMode()/GM_ADVANCED देखें)।

LOGFONT structure (Windows) @ MSDN
CreateFontIndirect function (Windows) @ MSDN
SetGraphicsMode function (Windows) @ MSDN
EnumFontFamiliesEx function (Windows) @ MSDN
EnumFontFamExProc callback function (Windows) @ MSDN

#include "stdafx.h" 
#include <Windows.h> 

void TestCreateFont(LPCTSTR lpczFontName, BYTE bCharSet) 
{ 
    LOGFONT lf; 
    lf.lfHeight = 0; 
    lf.lfWidth = 0; 
    lf.lfEscapement = 0; 
    lf.lfOrientation = 0; 
    lf.lfWeight = FW_DONTCARE; 
    lf.lfItalic = FALSE; 
    lf.lfUnderline = FALSE; 
    lf.lfStrikeOut = FALSE; 
    lf.lfCharSet = bCharSet; 
    lf.lfOutPrecision = OUT_OUTLINE_PRECIS; 
    lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; 
    lf.lfQuality = DEFAULT_QUALITY; 
    lf.lfPitchAndFamily = DEFAULT_PITCH; 
    // NOTE: LF_FACESIZE = 32, WinGdi.h 
    _tcsncpy_s(lf.lfFaceName, 32, lpczFontName, _tcsnlen(lpczFontName, 32)); 

    HFONT hf = ::CreateFontIndirect(&lf); 

    // NOTE: LF_FACESIZE = 32, WinGdi.h 
    _tprintf_s(_T("TestCreateFont:\r\n%.32s = %.32s, bCharSet=%d, HFONT=0x%8.8x\r\n\r\n"), lpczFontName, lf.lfFaceName, bCharSet, hf); 

    ::DeleteObject(hf); 
} 

int CALLBACK MyEnumFontFamExProc(const LOGFONT *lpelfe, const TEXTMETRIC *lpntme, DWORD FontType, LPARAM lParam) 
{ 
    _tprintf_s(_T(" Found: %.32s, bCharSet=%d\r\n"), lpelfe->lfFaceName, lpelfe->lfCharSet); 

    return 1; 
} 

void TestEnumFontFamiliesEx(LPCTSTR lpczFontName, BYTE bCharSet) 
{ 
    LOGFONT lf; 
    lf.lfHeight = 0; 
    lf.lfWidth = 0; 
    lf.lfEscapement = 0; 
    lf.lfOrientation = 0; 
    lf.lfWeight = FW_DONTCARE; 
    lf.lfItalic = FALSE; 
    lf.lfUnderline = FALSE; 
    lf.lfStrikeOut = FALSE; 
    lf.lfCharSet = bCharSet; 
    lf.lfOutPrecision = OUT_OUTLINE_PRECIS; 
    lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; 
    lf.lfQuality = DEFAULT_QUALITY; 
    lf.lfPitchAndFamily = DEFAULT_PITCH; // NOTE: DEFAULT_PITCH = 0, WinGdi.h 
    // NOTE: LF_FACESIZE = 32, WinGdi.h 
    _tcsncpy_s(lf.lfFaceName, 32, lpczFontName, _tcsnlen(lpczFontName, 32)); 

    _tprintf_s(_T("TestEnumFontFamiliesEx: %.32s, bCharSet=%d\r\n"), lpczFontName, bCharSet); 

    HDC hdcAll = GetDC(NULL); 

    ::EnumFontFamiliesEx(hdcAll, &lf, &MyEnumFontFamExProc, 0, 0); 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    TestCreateFont(_T("TimesNewRomanPSMT"), DEFAULT_CHARSET); 
    TestCreateFont(_T("Times New Roman"), DEFAULT_CHARSET); 

    TestCreateFont(_T("ArialMT"), DEFAULT_CHARSET); 
    TestCreateFont(_T("Arial"), DEFAULT_CHARSET); 

    TestCreateFont(_T("Gulim"), DEFAULT_CHARSET); 

    TestCreateFont(_T("굴림"), DEFAULT_CHARSET); 

    TestEnumFontFamiliesEx(_T("TimesNewRomanPSMT"), DEFAULT_CHARSET); 
    TestEnumFontFamiliesEx(_T("Times New Roman"), DEFAULT_CHARSET); 

    TestEnumFontFamiliesEx(_T("ArialMT"), DEFAULT_CHARSET); 
    TestEnumFontFamiliesEx(_T("Arial"), DEFAULT_CHARSET); 

    TestEnumFontFamiliesEx(_T("Gulim"), DEFAULT_CHARSET); 

    TestEnumFontFamiliesEx(_T("굴림"), DEFAULT_CHARSET); 

    return 0; 
} 

और यहाँ परिणाम हैं:

TestCreateFont: 
TimesNewRomanPSMT = TimesNewRomanPSMT, bCharSet=1, HFONT=0xda0a117c 

TestCreateFont: 
Times New Roman = Times New Roman, bCharSet=1, HFONT=0xdb0a117c 

TestCreateFont: 
ArialMT = ArialMT, bCharSet=1, HFONT=0xdc0a117c 

TestCreateFont: 
Arial = Arial, bCharSet=1, HFONT=0xdd0a117c 

TestCreateFont: 
Gulim = Gulim, bCharSet=1, HFONT=0xde0a117c 

TestCreateFont: 
?? = ??, bCharSet=1, HFONT=0xdf0a117c 

TestEnumFontFamiliesEx: TimesNewRomanPSMT, bCharSet=1 
TestEnumFontFamiliesEx: Times New Roman, bCharSet=1 
    Found: Times New Roman, bCharSet=0 
    Found: Times New Roman, bCharSet=177 
    Found: Times New Roman, bCharSet=178 
    Found: Times New Roman, bCharSet=161 
    Found: Times New Roman, bCharSet=162 
    Found: Times New Roman, bCharSet=186 
    Found: Times New Roman, bCharSet=238 
    Found: Times New Roman, bCharSet=204 
    Found: Times New Roman, bCharSet=163 
    Found: Times New Roman, bCharSet=0 
    Found: Times New Roman, bCharSet=177 
    Found: Times New Roman, bCharSet=161 
    Found: Times New Roman, bCharSet=162 
    Found: Times New Roman, bCharSet=186 
    Found: Times New Roman, bCharSet=238 
    Found: Times New Roman, bCharSet=204 
    Found: Times New Roman, bCharSet=163 
    Found: Times New Roman, bCharSet=0 
    Found: Times New Roman, bCharSet=177 
    Found: Times New Roman, bCharSet=178 
    Found: Times New Roman, bCharSet=161 
    Found: Times New Roman, bCharSet=162 
    Found: Times New Roman, bCharSet=186 
    Found: Times New Roman, bCharSet=238 
    Found: Times New Roman, bCharSet=204 
    Found: Times New Roman, bCharSet=163 
    Found: Times New Roman, bCharSet=0 
    Found: Times New Roman, bCharSet=177 
    Found: Times New Roman, bCharSet=161 
    Found: Times New Roman, bCharSet=162 
    Found: Times New Roman, bCharSet=186 
    Found: Times New Roman, bCharSet=238 
    Found: Times New Roman, bCharSet=204 
    Found: Times New Roman, bCharSet=163 
TestEnumFontFamiliesEx: ArialMT, bCharSet=1 
TestEnumFontFamiliesEx: Arial, bCharSet=1 
    Found: Arial, bCharSet=0 
    Found: Arial, bCharSet=177 
    Found: Arial, bCharSet=178 
    Found: Arial, bCharSet=161 
    Found: Arial, bCharSet=162 
    Found: Arial, bCharSet=186 
    Found: Arial, bCharSet=238 
    Found: Arial, bCharSet=204 
    Found: Arial, bCharSet=163 
    Found: Arial, bCharSet=0 
    Found: Arial, bCharSet=177 
    Found: Arial, bCharSet=161 
    Found: Arial, bCharSet=162 
    Found: Arial, bCharSet=186 
    Found: Arial, bCharSet=238 
    Found: Arial, bCharSet=204 
    Found: Arial, bCharSet=163 
    Found: Arial, bCharSet=0 
    Found: Arial, bCharSet=177 
    Found: Arial, bCharSet=178 
    Found: Arial, bCharSet=161 
    Found: Arial, bCharSet=162 
    Found: Arial, bCharSet=186 
    Found: Arial, bCharSet=238 
    Found: Arial, bCharSet=204 
    Found: Arial, bCharSet=163 
    Found: Arial, bCharSet=0 
    Found: Arial, bCharSet=177 
    Found: Arial, bCharSet=161 
    Found: Arial, bCharSet=162 
    Found: Arial, bCharSet=186 
    Found: Arial, bCharSet=238 
    Found: Arial, bCharSet=204 
    Found: Arial, bCharSet=163 
TestEnumFontFamiliesEx: Gulim, bCharSet=1 
    Found: Gulim, bCharSet=0 
    Found: Gulim, bCharSet=129 
    Found: Gulim, bCharSet=161 
    Found: Gulim, bCharSet=162 
    Found: Gulim, bCharSet=186 
    Found: Gulim, bCharSet=238 
    Found: Gulim, bCharSet=204 
TestEnumFontFamiliesEx: ??, bCharSet=1 
    Found: Gulim, bCharSet=0 
    Found: Gulim, bCharSet=129 
    Found: Gulim, bCharSet=161 
    Found: Gulim, bCharSet=162 
    Found: Gulim, bCharSet=186 
    Found: Gulim, bCharSet=238 
    Found: Gulim, bCharSet=204 

यहाँसे एक टुकड़ा है CharSet मानों के लिए।

#define ANSI_CHARSET   0 
#define DEFAULT_CHARSET   1 
#define SYMBOL_CHARSET   2 
#define SHIFTJIS_CHARSET  128 
#define HANGEUL_CHARSET   129 
#define HANGUL_CHARSET   129 
#define GB2312_CHARSET   134 
#define CHINESEBIG5_CHARSET  136 
#define OEM_CHARSET    255 

#define JOHAB_CHARSET   130 
#define HEBREW_CHARSET   177 
#define ARABIC_CHARSET   178 
#define GREEK_CHARSET   161 
#define TURKISH_CHARSET   162 
#define VIETNAMESE_CHARSET  163 
#define THAI_CHARSET   222 
#define EASTEUROPE_CHARSET  238 
#define RUSSIAN_CHARSET   204 

#define MAC_CHARSET    77 
#define BALTIC_CHARSET   186 
+0

सी ++ के लिए और 'CreateFontIndirect' विशेष रूप से के लिए कोई नमूना? – ahmd0

+0

बहुत सराहना की ... हालांकि आपको शायद 'एचडीसीएएल' रिलीज करना चाहिए, आपको स्मृति रिसाव को रोकने के लिए 'TestEnumFontFamiliesEx' में मिलता है। – ahmd0

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