powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / 2 GunSmoker по поводу ITM
25 сообщений из 112, страница 4 из 5
2 GunSmoker по поводу ITM
    #37636359
Чтец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X11Вот изменённый docx файл.
Со страницы 12 сделал доп. описание (так или нет), оформил код цветом.
Пароль на скачивание sql.ru
http://rghost.ru/private/36070719/1c815b22458fb63ca97d66473fbe42a9 Все?, это последняя редакция? Статья завершена? Полна? Хорошая, годная?
...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #37636372
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, я её ещё немного правил, а также Квейд помог исправить некоторые ошибки и неточности. Последняя версия была отправлена GunSmoker`у.
...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #37636414
Чтец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так выложи тут
...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #37636449
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://rghost.ru/private/36173765/54f62cac950f23f2f248bdf01fa9d8a8
документ от 26/01/2012
пароль на скачивание: sql.ru
ссылка доступна в течение 30-ти дней
...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #37636450
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Будут вопрос и замечания, пишите :)
...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #37636471
Чтец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А почему не в doc ? У меня нет ридера. Выложи и в доке плиз.
...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #37636487
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 99% случаев именно в PDF и выкладывают в интернете.

http://rghost.ru/private/36174470/eac8a03fdace046d0017ae815388dbf1
пароль на скачивание: sql.ru
ссылка доступна в течение 30-ти дней
...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #37636549
Чтец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пароль не подходит
...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #37636617
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
2 GunSmoker по поводу ITM
    #38268784
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Походу автор radialix`а забросил проект :(
сайты не пашут, на письма не отвечает
...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #38269259
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КвейдX11Там можно как-то сделать и динамическое переключение, используя библиотеки ресурсов, но я пока не понял как, а в справке очень слабо описано.
Если кто подскажет - буду рад.Смотри ...\Samples\Delphi\VCL\RichEdit\reinit.pas, там готовый код для runtime-переключения языков приложения.
столкнулся с такой проблемой, что если в системе украинский формат активирован (Панель управления/Язык и региональные стандарты/Закладка Форматы/В списке Формат выбран Украинский), то программа в любом случае будет загружаться с украиской локализацией, даже если в функцию передать 1049 (код русского языка).

В функции LoadNewResourceModule я закомментировал строку:
Код: pascal
1.
//        NewInst := LoadLibraryEx(FileName, 0, LOAD_LIBRARY_AS_DATAFILE);


и вместо неё добавил новую:
Код: pascal
1.
        NewInst := LoadLibraryEx(PAnsichar(ParamStr(0)), 0, LOAD_LIBRARY_AS_DATAFILE);



Получается, что у меня 2 файла всего: один exe-файл и второй UKR-файл. Оригинальные ресурсы (русский язык) живёт в exe.
Поєтому и грузим данные из
Код: pascal
1.
LoadLibraryEx(PAnsichar(ParamStr(0)), ....



я так понял, что функция ищет файл с расширением RU или RUS, я перенаправил её в exe.
...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #38270523
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Квейдпропущено...
Смотри ...\Samples\Delphi\VCL\RichEdit\reinit.pas, там готовый код для runtime-переключения языков приложения.
столкнулся с такой проблемой, что если в системе украинский формат активирован (Панель управления/Язык и региональные стандарты/Закладка Форматы/В списке Формат выбран Украинский), то программа в любом случае будет загружаться с украиской локализацией, даже если в функцию передать 1049 (код русского языка).

В функции LoadNewResourceModule я закомментировал строку:
Код: pascal
1.
//        NewInst := LoadLibraryEx(FileName, 0, LOAD_LIBRARY_AS_DATAFILE);


и вместо неё добавил новую:
Код: pascal
1.
        NewInst := LoadLibraryEx(PAnsichar(ParamStr(0)), 0, LOAD_LIBRARY_AS_DATAFILE);



Получается, что у меня 2 файла всего: один exe-файл и второй UKR-файл. Оригинальные ресурсы (русский язык) живёт в exe.
Поєтому и грузим данные из
Код: pascal
1.
LoadLibraryEx(PAnsichar(ParamStr(0)), ....



я так понял, что функция ищет файл с расширением RU или RUS, я перенаправил её в exe.

У меня такой проблемы нет. Моя программа начитывает свою локаль из реестра, куда ее предварительно засовывает инсталлятор программы (а в инсталляторе, собственно, пользователь выбирает язык интерфейса программы).
...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #38645327
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XE5 up2
Попробовал добавить язык.
Простейший проект, 1 форма + label
Перевел текст на форме, собрал.
Запускаю exe-ник - Resource TForm1 not found
посмотрел языковую длл-ку - и действительно, нет в ней dfm-ки.

ЧЯДНТ?
...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #38645660
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747XE5 up2
Попробовал добавить язык.
Простейший проект, 1 форма + label
Перевел текст на форме, собрал.
Запускаю exe-ник - Resource TForm1 not found
посмотрел языковую длл-ку - и действительно, нет в ней dfm-ки.

ЧЯДНТ?Покажи свой .dproj
...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #38645943
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд,

dpr:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
program Translated;

uses
  Vcl.Forms,
  Unit2 in 'Unit2.pas' {Form2},
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.



dproj:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <ProjectGuid>{941B484B-437B-4E62-9354-236EF1FA3029}</ProjectGuid>
        <ProjectVersion>15.3</ProjectVersion>
        <FrameworkType>VCL</FrameworkType>
        <MainSource>Translated.dpr</MainSource>
        <Base>True</Base>
        <Config Condition="'$(Config)'==''">Debug</Config>
        <Platform Condition="'$(Platform)'==''">Win32</Platform>
        <TargetedPlatforms>3</TargetedPlatforms>
        <AppType>Application</AppType>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
        <Base>true</Base>
    </PropertyGroup>
    <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
        <Base_Win32>true</Base_Win32>
        <CfgParent>Base</CfgParent>
        <Base>true</Base>
    </PropertyGroup>
    <PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
        <Base_Win64>true</Base_Win64>
        <CfgParent>Base</CfgParent>
        <Base>true</Base>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
        <Cfg_1>true</Cfg_1>
        <CfgParent>Base</CfgParent>
        <Base>true</Base>
    </PropertyGroup>
    <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
        <Cfg_1_Win32>true</Cfg_1_Win32>
        <CfgParent>Cfg_1</CfgParent>
        <Cfg_1>true</Cfg_1>
        <Base>true</Base>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
        <Cfg_2>true</Cfg_2>
        <CfgParent>Base</CfgParent>
        <Base>true</Base>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Base)'!=''">
        <VerInfo_Locale>1049</VerInfo_Locale>
        <Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
        <Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
        <VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
        <DCC_OutputDRCFile>true</DCC_OutputDRCFile>
        <DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace>
        <DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
        <DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput>
        <DCC_E>false</DCC_E>
        <DCC_N>false</DCC_N>
        <DCC_S>false</DCC_S>
        <DCC_F>false</DCC_F>
        <DCC_K>false</DCC_K>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Base_Win32)'!=''">
        <DCC_UnitSearchPath>D:\Sources_XE\Common\AdvToolBarsXE4\;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
        <DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
        <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
        <VerInfo_Locale>1033</VerInfo_Locale>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Base_Win64)'!=''">
        <DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)</DCC_Namespace>
        <VerInfo_Locale>1033</VerInfo_Locale>
        <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Cfg_1)'!=''">
        <DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
        <DCC_DebugDCUs>true</DCC_DebugDCUs>
        <DCC_Optimize>false</DCC_Optimize>
        <DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
        <DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
        <DCC_RemoteDebug>true</DCC_RemoteDebug>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
        <DCC_ExeOutput>Bin</DCC_ExeOutput>
        <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
        <VerInfo_Locale>1033</VerInfo_Locale>
        <DCC_RemoteDebug>false</DCC_RemoteDebug>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Cfg_2)'!=''">
        <DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
        <DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
        <DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
        <DCC_DebugInformation>0</DCC_DebugInformation>
    </PropertyGroup>
    <ItemGroup>
        <DelphiCompile Include="$(MainSource)">
            <MainSource>MainSource</MainSource>
        </DelphiCompile>
        <DCCReference Include="Unit2.pas">
            <Form>Form2</Form>
            <FormType>dfm</FormType>
        </DCCReference>
        <DCCReference Include="Unit1.pas">
            <Form>Form1</Form>
            <FormType>dfm</FormType>
        </DCCReference>
        <BuildConfiguration Include="Release">
            <Key>Cfg_2</Key>
            <CfgParent>Base</CfgParent>
        </BuildConfiguration>
        <BuildConfiguration Include="Base">
            <Key>Base</Key>
        </BuildConfiguration>
        <BuildConfiguration Include="Debug">
            <Key>Cfg_1</Key>
            <CfgParent>Base</CfgParent>
        </BuildConfiguration>
    </ItemGroup>
    <ProjectExtensions>
        <Borland.Personality>Delphi.Personality.12</Borland.Personality>
        <Borland.ProjectType/>
        <BorlandProject>
            <Delphi.Personality>
                <VersionInfo>
                    <VersionInfo Name="IncludeVerInfo">False</VersionInfo>
                    <VersionInfo Name="AutoIncBuild">False</VersionInfo>
                    <VersionInfo Name="MajorVer">1</VersionInfo>
                    <VersionInfo Name="MinorVer">0</VersionInfo>
                    <VersionInfo Name="Release">0</VersionInfo>
                    <VersionInfo Name="Build">0</VersionInfo>
                    <VersionInfo Name="Debug">False</VersionInfo>
                    <VersionInfo Name="PreRelease">False</VersionInfo>
                    <VersionInfo Name="Special">False</VersionInfo>
                    <VersionInfo Name="Private">False</VersionInfo>
                    <VersionInfo Name="DLL">False</VersionInfo>
                    <VersionInfo Name="Locale">1049</VersionInfo>
                    <VersionInfo Name="CodePage">1251</VersionInfo>
                </VersionInfo>
                <VersionInfoKeys>
                    <VersionInfoKeys Name="CompanyName"/>
                    <VersionInfoKeys Name="FileDescription"/>
                    <VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
                    <VersionInfoKeys Name="InternalName"/>
                    <VersionInfoKeys Name="LegalCopyright"/>
                    <VersionInfoKeys Name="LegalTrademarks"/>
                    <VersionInfoKeys Name="OriginalFilename"/>
                    <VersionInfoKeys Name="ProductName"/>
                    <VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
                    <VersionInfoKeys Name="Comments"/>
                    <VersionInfoKeys Name="CFBundleName"/>
                    <VersionInfoKeys Name="CFBundleDisplayName"/>
                    <VersionInfoKeys Name="UIDeviceFamily"/>
                    <VersionInfoKeys Name="CFBundleIdentifier"/>
                    <VersionInfoKeys Name="CFBundleVersion"/>
                    <VersionInfoKeys Name="CFBundlePackageType"/>
                    <VersionInfoKeys Name="CFBundleSignature"/>
                    <VersionInfoKeys Name="CFBundleAllowMixedLocalizations"/>
                    <VersionInfoKeys Name="UISupportedInterfaceOrientations"/>
                    <VersionInfoKeys Name="CFBundleExecutable"/>
                    <VersionInfoKeys Name="CFBundleResourceSpecification"/>
                    <VersionInfoKeys Name="LSRequiresIPhoneOS"/>
                    <VersionInfoKeys Name="CFBundleInfoDictionaryVersion"/>
                    <VersionInfoKeys Name="CFBundleDevelopmentRegion"/>
                    <VersionInfoKeys Name="package"/>
                    <VersionInfoKeys Name="label"/>
                    <VersionInfoKeys Name="versionCode"/>
                    <VersionInfoKeys Name="versionName"/>
                    <VersionInfoKeys Name="persistent"/>
                    <VersionInfoKeys Name="restoreAnyVersion"/>
                    <VersionInfoKeys Name="installLocation"/>
                    <VersionInfoKeys Name="largeHeap"/>
                    <VersionInfoKeys Name="theme"/>
                </VersionInfoKeys>
                <Source>
                    <Source Name="MainSource">Translated.dpr</Source>
                </Source>
                <Language>
                    <Language Name="ProjectLang">$00000409</Language>
                    <Language Name="ActiveLang">ENU</Language>
                </Language>
                <Resource_DLL_Projects>
                    <Resource_DLL_Projects Name="Item0">Албанский (Албания)*$0000041C*SQI*SQI</Resource_DLL_Projects>
                    <Resource_DLL_Projects Name="Item1">Английский (США)*$00000409*ENU*ENU</Resource_DLL_Projects>
                </Resource_DLL_Projects>
                <RDP_Source_Files>
                    <RDP_Source_Files Name="Item0">Win32\Debug\Translated.drc</RDP_Source_Files>
                    <RDP_Source_Files Name="Item1">Unit2.dfm</RDP_Source_Files>
                    <RDP_Source_Files Name="Item2">Unit1.dfm</RDP_Source_Files>
                    <RDP_Source_Files Name="Item3">Bin\Translated.drc</RDP_Source_Files>
                </RDP_Source_Files>
            </Delphi.Personality>
            <Deployment/>
            <Platforms>
                <Platform value="Win32">True</Platform>
                <Platform value="Win64">True</Platform>
            </Platforms>
        </BorlandProject>
        <ProjectFileVersion>12</ProjectFileVersion>
    </ProjectExtensions>
    <Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
    <Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
</Project>

<!-- EurekaLog First Line
[Exception Log]
EurekaLog Version=7007
Activate=0
DeleteMapAfterCompile=1
Encrypt Password=""
EurekaLog Last Line -->

...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #38646458
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема была в объявлении ресурса в проектах длл:
было так (не работало, падало):
{$R 'Unit1.dfm' Form1:TForm}
сделал так (работает, изменяет свойства):
{$R 'Unit1.dfm'}
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
2 GunSmoker по поводу ITM
    #40053015
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд
Смотри ...\Samples\Delphi\VCL\RichEdit\reinit.pas, там готовый код для runtime-переключения языков приложения.


А теперь у меня возник вопрос.
А как сделать так, чтобы это всё работало без раздельных библиотек, т.е. когда все в одном exe-файле?

На сайте Lingobit Localizer не нашел.
...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #40053017
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
А как сделать так, чтобы это всё работало без раздельных библиотек, т.е. когда все в одном exe-файле?
Имхо, глупость. Наоборот каждый перевод должен лежать в отдельном хранилище, чтобы его было удобно обновлять и добавлять новые языки
...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #40053021
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
X11
А как сделать так, чтобы это всё работало без раздельных библиотек, т.е. когда все в одном exe-файле?
Имхо, глупость. Наоборот каждый перевод должен лежать в отдельном хранилище, чтобы его было удобно обновлять и добавлять новые языки
Кроме того, эти отдельные хранилища можно использовать из других бинарников.
...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #40053024
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема у меня в том, что когда интерфейс винды украинский, то resourcestring все пустые.
Рядом с exe файл .UKR есть.
Т.е. интерфейс программы частично не выводит некоторые строки, которые касаются Resourcestring.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
unit uConstMsg;

interface

Resourcestring
  constFrom                            = 'с';
  constTo                              = 'по';
  constMin                             = 'min';
  constMax                             = 'max';
  constToday                           = 'Сегодня';
  constPrice                           = 'Цена';



я ведь вижу, что все Resourcestring в Лингобит имеют перевод

когда переключаю интерфейс винды на русский, то проблема уходит (надо проверить английский)

можно я неправильно локаль включаю/выбираю?

вот мой:
модуль uReinit
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
unit uReinitLocale;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms;

procedure ReinitializeForms;
function  LoadNewResourceModule(Locale: LCID): Longint;
procedure GetLocaleFromIni;

var
 iLang: cardinal;


implementation

uses uShares, IniFiles;

type
  TAsInheritedReader = class(TReader)
  public
    procedure ReadPrefix(var Flags: TFilerFlags; var AChildPos: Integer); override;
  end;

procedure TAsInheritedReader.ReadPrefix(var Flags: TFilerFlags; var AChildPos: Integer);
begin
  inherited ReadPrefix(Flags, AChildPos);
  Include(Flags, ffInherited);
end;

function SetResourceHInstance(NewInstance: Longint): Longint;
var
  CurModule: PLibModule;
begin
  CurModule := LibModuleList;
  Result := 0;
  while CurModule <> nil do
  begin
    if CurModule.Instance = HInstance then
    begin
      if CurModule.ResInstance <> CurModule.Instance then
        FreeLibrary(CurModule.ResInstance);
      CurModule.ResInstance := NewInstance;
      Result := NewInstance;
      Exit;
    end;
    CurModule := CurModule.Next;
  end;
end;

function LoadNewResourceModule(Locale: LCID): Longint;
var
  FileName: array [0..260] of char;
  P: PChar;
  LocaleName: array[0..4] of Char;
  NewInst: Longint;
begin
  GetModuleFileName(HInstance, FileName, SizeOf(FileName));
  GetLocaleInfo(Locale, LOCALE_SABBREVLANGNAME, LocaleName, SizeOf(LocaleName));
  P := PChar(@FileName) + lstrlen(FileName);
  while (P^ <> '.') and (P <> @FileName) do Dec(P);
  NewInst := 0;
  Result := 0;
  if P <> @FileName then
  begin
    Inc(P);
    if LocaleName[0] <> #0 then
    begin
      // Then look for a potential language/country translation
      lstrcpy(P, LocaleName);
      NewInst := LoadLibraryEx(FileName, 0, LOAD_LIBRARY_AS_DATAFILE);
      if NewInst = 0 then
      begin
        // Finally look for a language only translation
        LocaleName[2] := #0;
        lstrcpy(P, LocaleName);
        NewInst := LoadLibraryEx(Pchar(ParamStr(0)), 0, LOAD_LIBRARY_AS_DATAFILE);
//        NewInst := LoadLibraryEx(FileName, 0, LOAD_LIBRARY_AS_DATAFILE);
      end;
    end;
  end;
  if NewInst <> 0 then
    Result := SetResourceHInstance(NewInst)
end;

function InternalReloadComponentRes(const ResName: string; HInst: THandle; var Instance: TComponent): Boolean;
var
  HRsrc: THandle;
  ResStream: TResourceStream;
  AsInheritedReader: TAsInheritedReader;
begin                   { avoid possible EResNotFound exception }
  if HInst = 0 then HInst := HInstance;
  HRsrc := FindResource(HInst, PChar(ResName), RT_RCDATA);
  Result := HRsrc <> 0;
  if not Result then Exit;
  ResStream := TResourceStream.Create(HInst, ResName, RT_RCDATA);
  try
    AsInheritedReader := TAsInheritedReader.Create(ResStream, 4096);
    try
      Instance := AsInheritedReader.ReadRootComponent(Instance);
    finally
      AsInheritedReader.Free;
    end;
  finally
    ResStream.Free;
  end;
  Result := True;
end;

function ReloadInheritedComponent(Instance: TComponent; RootAncestor: TClass): Boolean;

  function InitComponent(ClassType: TClass): Boolean;
  begin
    Result := False;
    if (ClassType = TComponent) or (ClassType = RootAncestor) then Exit;
    Result := InitComponent(ClassType.ClassParent);
    Result := InternalReloadComponentRes(ClassType.ClassName, FindResourceHInstance(
      FindClassHInstance(ClassType)), Instance) or Result;
  end;

begin
  Result := InitComponent(Instance.ClassType);
end;

procedure ReinitializeForms;
var
  Count: Integer;
  I: Integer;
  Form: TForm;
begin
  Count := Screen.FormCount;
  for I := 0 to Count - 1 do
  begin
    Form := Screen.Forms[I];
    ReloadInheritedComponent(Form, TForm);
  end;
end;


procedure GetLocaleFromIni;
begin
//  iLang := GetThreadLocale;
// 1049 или 1058

  if FileExists(sUserDocPath + kvx_ini) then
  begin
    with TMemIniFile.Create(sUserDocPath + kvx_ini) do
    begin
      iLang := ReadInteger('LANG', 'Locale', GetThreadLocale);//если пользователь ещё не указал, то берём локаль винды
      free;
    end//with
  end
  else
  begin
    iLang := GetThreadLocale;//если пользователь ещё не указал, то берём локаль винды
  end;
end;



initialization
  GetLocaleFromIni; // получаем код языка из ini и присваиваем переменной iLang
  LoadNewResourceModule(iLang);
  ReinitializeForms;
end.

...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #40053027
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На английском интерфейсе винды тоже нет проблем.
Попадают ли в файл ukr переводы ресурсных строк?
Я сделал поиск с помощью FAR переведенной строки и FAR показал, что искомая строка была найдена в ukr файле.
...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #40053051
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

Посмотри редактором ресурсов, в какой LangID падают строки
...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #40053052
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А заодно посмотри, что в настройках проекта
...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #40053053
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
А заодно посмотри, что в настройках проекта


оказалось, что в разных конфигах по разному: по английский, то российский

а что должно быть? как правильно?

Если в Лингобите установлено, что основной - русский, то и на странице версий тоже должен быть русский?
...
Рейтинг: 0 / 0
2 GunSmoker по поводу ITM
    #40053054
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Посмотри редактором ресурсов, в какой LangID падают строки


так правильно?
...
Рейтинг: 0 / 0
25 сообщений из 112, страница 4 из 5
Форумы / Delphi [игнор отключен] [закрыт для гостей] / 2 GunSmoker по поводу ITM
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]