|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Средства локализации
Подскажите какое-нибудь хорошее средство локализации софтины. Главные требования — простота с работе, простота локализации.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#2
|
||||
|
||||
Я вот это юзал, довольно удобно и просто.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
||||
|
||||
Под fmx не захотело работать корректно.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#4
|
||||
|
||||
Кароче, мне лень графоманить статью о том, как можно переводить интерфейс firemonkey, поэтому вот как я сделал:
Код:
unit language; interface uses System.Types, System.Classes, System.SysUtils, System.Generics.Collections, System.JSON, FMX.Types, FMX.Styles; type TLang = class sealed private class var FLangs: TDictionary<string, string>; class var FCurrentLang: string; class constructor ClassCreate; class destructor ClassDestroy; class procedure SetCurrentLang(const Value: string); static; inline; public class procedure LoadLanguages; class function Languages: TArray<string>; inline; class property CurrentLang: string read FCurrentLang write SetCurrentLang; end; implementation { TLang } function TranslateEx(const AText: string): string; begin if not TLang.FLangs.TryGetValue(TLang.FCurrentLang + AText, Result) then Result := AText end; class constructor TLang.ClassCreate; begin TLang.FLangs := TDictionary<string, string>.Create; CustomTranslateProc := TranslateEx; end; class destructor TLang.ClassDestroy; begin CustomTranslateProc := nil; TLang.FLangs.Free; end; class function TLang.Languages: TArray<string>; begin Result := TLang.FLangs.Keys.ToArray; end; class procedure TLang.LoadLanguages; const html_ret: string = '<br>'; text_ret: string = #13#10; var rs: TResourceStream; ss: TStringStream; base: TJSONValue; it: TJSONValue; jdict: TJSONObject; i: Integer; begin rs := TResourceStream.Create(HInstance, 'langs', 'LOCAL'); try ss := TStringStream.Create; try ss.LoadFromStream(rs); base := TJSONObject.ParseJSONValue(ss.DataString); try for it in base.GetValue<TJSONArray>('langs') do begin jdict := base.GetValue<TJSONObject>(it.Value); for i := 0 to jdict.Count - 1 do with jdict.Pairs[i] do TLang.FLangs.Add(it.Value + JsonString.Value.Replace(html_ret, text_ret), JsonValue.Value.Replace(html_ret, text_ret)); end; finally base.Free; end; finally ss.Free; end; finally rs.Free; end; end; class procedure TLang.SetCurrentLang(const Value: string); begin FCurrentLang := Value; TStyleManager.UpdateScenes; end; end. В коде, где есть чето типа label1.text := 'привет', надо использовать ф-ю translate: Код:
label1.text := translate('привет, мир'); Привер JSON словаря: Код:
{ "langs":[ "EN" ], "EN":{ "привет":"Hello", "пока":"Byte, die" } } — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
ApxaHGe1 (07.09.2016)
|