Delphi Can

Orjinalini görmek için tıklayınız: [ÇÖZÜLDÜ] Delphi EXE Resource TR Dil Sorunsalı
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Merhabalar.

Bugün sürüm güncellemesi nedeniyle proje EXE dosyamın RESOURCE ( File Information ) kısımlarına eğileyim istedim. 

Türkçe ve İngilizce dillerde içerik ile etiketlendirmek istedim. Daha önce sadece İngilizce harf kullanıyordum ve dil olarak daima EN (US) olarak kullanıyordum. Şimdi TR'yi eklerken çözemediğim bir sorun ile karşılaştım.

Kod:
1 VERSIONINFO
 FILEVERSION 1,0,0,1
 PRODUCTVERSION 1,0
 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
 FILEFLAGS (VS_FF_SPECIALBUILD|VS_FF_PRERELEASE)
 FILEOS VOS__WINDOWS32
 FILETYPE VFT_APP
BEGIN
   BLOCK "StringFileInfo"
   BEGIN
   BLOCK "041F04E6" // Lang=Turkish ( Turkish     , 0x041F, decimal 1055), CharSet=Turkish      (0x04E6, decimal 1254).
   BEGIN
       VALUE "CompanyName", "Yazılım\0"
       VALUE "FileDescription", "TR Karakter Test ğüşiöçı ĞÜŞİÖÇI\0"
       VALUE "FileVersion", "1.0.0.1\0"
       VALUE "ProductVersion", "1.0\0"
       VALUE "InternalName", "2018/07/11\0"
       VALUE "LegalCopyright", "© 2017 Muharrem ARMAN. All Rights Reserved\0"
       VALUE "LegalTrademarks", "Muharrem ARMAN<muharrem.arman@trt.net.tr>\0"
       VALUE "OriginalFilename", "ProdKay_KoordModulu\0"
       VALUE "ProductName", "TR Karakter Test ğüşiöçı ĞÜŞİÖÇI\0"
       VALUE "SpecialBuild", "ARMAN\0"
   END
   END
   BLOCK "VarFileInfo"
   BEGIN
       VALUE "Translation", 0x041F, 1254 // Turkish
   END
END

dm8ds5fxds7jlxtimqp3.jpg

Delphi ile giriş yaparsam Türkçe dediğim halde İngilizce kalıyor ancak işini doğru yapıyor.

novhupkuifvi8c0q6sjk.jpg




mttnzzasxe4v3tarhjya.jpg


RESOURCE Hacker Delphi ile doğru oluşturulmuş EXE'nin ile VersionInfo kısmının çıktısını aldım. 
Bu çıktısını aldığımı kendi RC dosyamdan aynı şekilde uygulamaya çalıştım...

Kod:
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL


1 VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,0
FILEOS 0x4
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
    BLOCK "040904E4"
    {
        VALUE "CompanyName", "Yazılım"
        VALUE "FileDescription", "TR Karakter Test ğ\xFCşi\xF6\xE7ı Ğ\xDCŞİ\xD6\xC7I"
        VALUE "FileVersion", "1.0.0.1"
        VALUE "InternalName", "2018/07/11"
        VALUE "LegalCopyright", "\xA9 2017 Muharrem ARMAN. All Rights Reserved"
        VALUE "LegalTrademarks", "Muharrem ARMAN<muharrem.arman@trt.net.tr>"
        VALUE "OriginalFilename", "ProdKay_KoordModulu"
        VALUE "ProgramID", "com.embarcadero.Resource_TR_Test"
        VALUE "ProductName", "TR Karakter Test ğ\xFCşi\xF6\xE7ı Ğ\xDCŞİ\xD6\xC7I"
        VALUE "ProductVersion", "1.0"
        VALUE "Comments", "ARMAN"
    }
}

BLOCK "VarFileInfo"
{
    VALUE "Translation", 0x0409 0x04E4  
}
}


Sonuç hüsran

urv4tryrxrdh1oo9eg91.jpg

Soru uzun oldu idare ediniz  Smile


Size üzerinde çalışılabilecek bir proje örneği de hazırlayıp bu başlığa ekliyorum.

procedure TForm1.FormCreate(Sender: TObject);
 function GetExeInfo(Dosya: string; Bilgi: Integer): string;
 const
   InfoNum = 10;
   InfoStr: array[1..InfoNum] of string =
   (   'CompanyName'      // 1
     , 'FileDescription'  // 2
     , 'FileVersion'      // 3
     , 'InternalName'     // 4
     , 'LegalCopyright'   // 5
     , 'LegalTradeMarks'  // 6
     , 'OriginalFilename' // 7
     , 'ProductName'      // 8
     , 'ProductVersion'   // 9
     , 'Comments');       // 10
 type
   PLandCodepage = ^TLandCodepage;
   TLandCodepage = record
     wLanguage,
     wCodePage: word;
   end;
 var
   dummy,
   len: cardinal;
   buf, pntr: pointer;
   lang: string;
 begin
   len := GetFileVersionInfoSize(PChar(Dosya), dummy);
   if len = 0
     then RaiseLastOSError;
   GetMem(buf, len);
   try
     if not GetFileVersionInfo(PChar(Dosya), 0, len, buf)
       then RaiseLastOSError;
     if not VerQueryValue(buf, '\VarFileInfo\Translation\', pntr, len)
       then RaiseLastOSError;
     lang := Format('%.4x%.4x', [PLandCodepage(pntr)^.wLanguage, PLandCodepage(pntr)^.wCodePage]);
     if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\'+ InfoStr[Bilgi] ), pntr, len){ and (@len <> nil)}
       then result := PChar(pntr);
       else ; //showmessagefmt('! res: %s', [ PChar(pntr) ]);
   finally
     FreeMem(buf);
   end;
 end;
begin
 Memo1.Lines.Add( GetExeInfo(Application.ExeName, 2) );
end;
Bunu dener misin?

Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Deneme için teşekkürler 

UTF8 halini denemiştim, sizinkini de denedim. Sonuç olumsuz.

Soldaki bendeki, sağdaki sizin gönderdiğiniz UTF8 Encoded 

yxw5hgfu9tj11xqouyox.jpg

SONUÇ aşağıdaki gibi oldu.
tpbgkufgu4te8gdknsga.jpg
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol Resource Editorler var. Belki böyle bir araç ile çözüme ulaşılabilir.
Yukardaki program ile yeni bir dosya oluşturup denedim ama sonuç olumsuz oldu. Belki ben birşeyleri yanlış yapmış olabilirim.
En tepeye,

LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT

satırını ekleyip deneyebilir misiniz ?
Şu şekilde düzgün görünüyor hocam (sadece büyük harfleri değiştirdim).
VALUE "FileDescription", "TR Karakter Test ğüşiöçı ",0x011E,0x00DC,0x015E,0x0130,0x00D6,0x00C7,"I\0"
@Tuğrul HELVACI üstadım değişiklik olmadı ama @esistem üstadımın söylediği yöntem işi çözdü.

Aklıma bile gelmedi string ifade dışından virgül ile hex kodlarını vermek.
Çözülmüş hali aşağıdaki şekilde.

Kod:
             VALUE "FileDescription", "TR Karakter Test  ğüşiöçıĞÜŞİÖÇI : ", 0x011F ,0x00FC, 0x015F, "i", 0x00F6, 0x00E7, 0x0131, 0x011E, 0x00DC, 0x015E, 0x0130, 0x00D6, 0x00C7, "I\0"

Kod:
1 VERSIONINFO
FILEVERSION 1, 0, 0, 1
PRODUCTVERSION 1, 0, 0, 0
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP
BEGIN
   BLOCK "StringFileInfo"
   BEGIN
           BLOCK "041F04E6" // Lang=Turkish ( Turkish     , 0x041F, decimal 1055), CharSet=Turkish      (0x04E6, decimal 1254).
           BEGIN
             VALUE "CompanyName", "Yazılım\000"
             VALUE "FileDescription", "TR Karakter Test  ğüşiöçıĞÜŞİÖÇI : ", 0x011F ,0x00FC, 0x015F, "i", 0x00F6, 0x00E7, 0x0131, 0x011E, 0x00DC, 0x015E, 0x0130, 0x00D6, 0x00C7, "I\0"
             VALUE "FileVersion", "1.0.0.1\000"
             VALUE "InternalName", "2018/07/11\000"
             VALUE "LegalCopyright", "© 2017 Muharrem ARMAN. All Rights Reserved\000"
             VALUE "LegalTrademarks", "Muharrem ARMAN<muharrem.arman@trt.net.tr>\000"
             VALUE "OriginalFilename", "ProdKay_KoordModulu\000"
             VALUE "ProgramID", "com.embarcadero.Resource_TR_Test\000"
             VALUE "ProductName", "TR Karakter Test ğüşiöçı ĞÜŞİÖÇI\000"
             VALUE "ProductVersion", "1.0\000"
             VALUE "Comments", "ARMAN\000"
           END
   END
   BLOCK "VarFileInfo"
   BEGIN
       VALUE "Translation", 0x041F, 1254 // Turkish
   END
END

Sonuç :

Soldaki bozuk kısım çıplak tırnak içindeki kullanımı, sağdaki de @esistem üstadın belirttiği şekilde dışarıdan hex kodlarını vererek elde edilen sonuç. Idea

qahetrgrqln66mqsggof.jpg


c4yw5mirs7cropjasxk4.jpg



Cevap yazan, gören, merak eden herkese teşekkürler. Bir şey daha öğrenmenin hazzıyla başladım güne  Smile