Autor Téma: Lokalizace resourcestring na iOS + Android  (Přečteno 2787 krát)

Offline chaloup

  • Mladík
  • **
  • Příspěvků: 85
  • Karma: 9
    • Verze Delphi: Delphi 10.2
Lokalizace resourcestring na iOS + Android
« kdy: 19-09-2013, 11:41:52 »
Zdar,
jak na lokalizaci resourcestring (např. to co je v FMX.Consts.pas)? Vím že v XE4+ existuje TLang, ale tím se resourcestring lokalizovat nedá, nebo to nějak jde?
Já narazil zatím na řešení kdy se unity s resourcestring-y co chci lokalizovat nakopírují k projektu, přeloží se to do požadovaného jazyka, ale tím udělám pouze jednu jazykovou mutaci.
Na Windows+VCL je v Project->Languages možnost vyrobit resource-dll, pro iOS/Android je tahle volba šedá... fungují nějaké 3rd party nástroje na tohle pro iOS/Android, řešíte to někdo?

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1853
  • Karma: 87
    • Verze Delphi: D2007, XE3, DX10
Re:Lokalizace resourcestring na iOS + Android
« Odpověď #1 kdy: 19-09-2013, 11:56:33 »
fungují nějaké 3rd party nástroje na tohle pro iOS/Android
Tyhle platformy stoji mimo oblast memo zajmu, ale rekl bych, ze GNU Get Text  dxgettext.po.dk by mel fungovat vsude.

Offline chaloup

  • Mladík
  • **
  • Příspěvků: 85
  • Karma: 9
    • Verze Delphi: Delphi 10.2
Re:Lokalizace resourcestring na iOS + Android
« Odpověď #2 kdy: 23-09-2013, 21:47:12 »
problém je v tom, jak oni s tím v FMX pracují, např. v FMX.Platform.Win.pas je na řádku 2554 tato konstrukce:
Kód: [Vybrat]
MsgCaptions: array[TMsgDlgType] of String = (SMsgDlgWarning, SMsgDlgError, SMsgDlgInformation, SMsgDlgConfirm, '');tím se naplní pole stringů, který potom použijí při zobrazení dialogu:
Kód: [Vybrat]
Result := MessageBox(Handle, PChar(Msg), PChar(MsgCaptions[DlgType]), MsgIcons[DlgType] or Flags);místo toho by mělo být něco jako:
Kód: [Vybrat]
  Result := MessageBox(Handle, PChar(Msg), PChar(Translate(MsgCaptions[DlgType])), MsgIcons[DlgType] or Flags);

potom se dá normálka použít komponenta TLang
podle mě by se měly všechny použití resourcestring v FMX obalit voláním Translate aby se to dalo snadno lokalizovat...

Offline chaloup

  • Mladík
  • **
  • Příspěvků: 85
  • Karma: 9
    • Verze Delphi: Delphi 10.2
Re:Lokalizace resourcestring na iOS + Android
« Odpověď #3 kdy: 01-10-2013, 15:13:53 »
Takže jsem z toho udělal ticket http://qc.embarcadero.com/wc/qcmain.aspx?d=119409
Hlasujte  ;)

Offline Fala

  • Plnoletý
  • ***
  • Příspěvků: 168
  • Karma: 2
    • Verze Delphi: XE2
    • Software pro poskytování technické podpory
Re:Lokalizace resourcestring na iOS + Android
« Odpověď #4 kdy: 01-10-2013, 17:12:54 »
problém lokalizace jsem vyřešil vlastním slovníkem, kde hledám dle konstanty přeložený text. Formuláře vytvářím za běhu, ale jsou již přeložené, takže se již nic nedohledává. Je to plně pod mou kontrolou a můžu třeba udělat jiný překlad pro mobil nebo pro Desktopové aplikace s větším rozlišením.
Jednoduché, efektivní a stejný modul používám od D5 a nepředpokládám, že v novějších verzích bych něco měnil.

Offline chaloup

  • Mladík
  • **
  • Příspěvků: 85
  • Karma: 9
    • Verze Delphi: Delphi 10.2
Re:Lokalizace resourcestring na iOS + Android
« Odpověď #5 kdy: 06-10-2013, 13:46:40 »
lokalizovat formuláře není problém, tady jde o hlášky systému, které se používají např.:
FMX.Consts.pas:
Kód: [Vybrat]
  { Dialog Strings }
  SMsgDlgWarning = 'Warning';
  SMsgDlgError = 'Error';
  SMsgDlgInformation = 'Information';
  SMsgDlgConfirm = 'Confirm';
  SMsgDlgYes = 'Yes';
  SMsgDlgNo = 'No';
  SMsgDlgOK = 'OK';
  SMsgDlgCancel = 'Cancel';
  SMsgDlgHelp = 'Help';
  SMsgDlgHelpNone = 'No help available';
  SMsgDlgHelpHelp = 'Help';
  SMsgDlgAbort = 'Abort';
  SMsgDlgRetry = 'Retry';
  SMsgDlgIgnore = 'Ignore';
  SMsgDlgAll = 'All';
  SMsgDlgNoToAll = 'No to All';
  SMsgDlgYesToAll = 'Yes to &All';
  SMsgDlgClose = 'Close';

  SUsername = '&Username';
  SPassword = '&Password';
  SDomain = '&Domain';
  SLogin = 'Login';
Kód: [Vybrat]
  { Pickers }
  SPickerCancel = 'Cancel';
  SPickerDone   = 'Done';

  { Pickers }
  SEditorDone   = 'Done';

  { Notifications }
  SNotificationCancel = 'Cancel';

  { Media Library }
  STakePhotoFromCamera = 'Take Photo';
  STakePhotoFromLibarary = 'Photo Library';
  SOpenStandartServices = 'Open to';
na Windows se dají resourcestringy měnit za běhu, na Androidu a iOS jsem teda nezjistil jak...
takže jediná možnost je překopírovat 1/2 fmx k projektu, všude to opravit - tohle dělat po každým update nebo nový verzi...

jinak 1 hlas k ticketu to je teda bída, to jsem jedinej komu to vadí?  :o

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Křestní jméno zpěváka Gotta: