Recent

Author Topic: Como traduzir os botões de um MessageDLG?  (Read 14160 times)

Onjahyr-BR

  • Full Member
  • ***
  • Posts: 121
Como traduzir os botões de um MessageDLG?
« on: September 06, 2006, 11:02:44 pm »
Eu tentei usar esta função:

Code: [Select]

function MessageDlgDef(const Msg: string; AType: TMsgDlgType;
                       AButtons: TMsgDlgButtons; DefButton : TModalResult;
                       HelpCtx: Longint): Word;
var
  i: integer;
begin
  with CreateMessageDialog(Msg,AType,AButtons) do
  try
    HelpContext := HelpCtx;
   
    for i := 0 to ComponentCount -1 do
       if (Components[i] is TButton) then
         with TButton(Components[i]) do
           case ModalResult of
             mrYes    : Caption := 'Sim';
             mrNo     : Caption := 'Não';
             mrCancel : Caption := 'Cancela';
             mrAbort  : Caption := 'Aborta';
             mrIgnore : Caption := 'Ignora';
           end;

    for i := 0 to ComponentCount -1 do
       if (Components[i] is TButton) and
          (TButton(Components[i] is TButton) and
          (TButton(Components[i]).ModalResult = DefButton) then
         ActiveControl := Components[i];

    Result := ShowModal;
   
  finally
    Free;
  end;
end;


Mas não dá certo não porque o Lazarus não existe: CreateMessageDialog, então, como faço para traduzir os danados dos botões?

Blz.

felipemdc

  • Administrator
  • Hero Member
  • *
  • Posts: 3541
RE: Como traduzir os botões de um MessageDLG?
« Reply #1 on: September 07, 2006, 02:43:08 am »
[Question translated to English]:

How can I translate the Message Dialog to portuguese?

On Delphi he uses CreateMessageDialog, but this function doesn't exist on Lazarus.

Onjahyr-BR

  • Full Member
  • ***
  • Posts: 121
RE: Como traduzir os botões de um MessageDLG?
« Reply #2 on: September 07, 2006, 02:48:28 am »
Eu sei disso, eu postei para ver se há alguma alternativa, algum local no .pas ou algum código que eu possa fazer para colocar o texto em português... Existe?

felipemdc

  • Administrator
  • Hero Member
  • *
  • Posts: 3541
RE: Como traduzir os botões de um MessageDLG?
« Reply #3 on: September 07, 2006, 03:44:14 am »
Justamente eu não sei a resposta, então traduzi a sua mensagem para que outros possam responde-la.

Onjahyr-BR

  • Full Member
  • ***
  • Posts: 121
RE: Como traduzir os botões de um MessageDLG?
« Reply #4 on: September 07, 2006, 06:42:53 am »
Poxa vida, que mancada :lol:

Eu não li traduzindo, passei a vista e pensei que você tinha tirado esse texto de algum outro tópico, só vi a parte que diz que CreateMessageDialog não existe no Lazarus, hahahaha, é a pressa de programador novo numa linguagem, no Delphi a gente faz tão rápido que nem espera por nada!!!
========================================================================

[Question translated to English]:


How can I translate the Message Dialog to portuguese?

On Delphi he uses CreateMessageDialog, but this function doesn't exist on Lazarus.

Onjahyr-BR

  • Full Member
  • ***
  • Posts: 121
RE: Como traduzir os botões de um MessageDLG?
« Reply #5 on: September 07, 2006, 07:10:05 pm »
Descobri, descobri, oba, oba!! :lol:
Eu me lembrei que fiz isso no Delphi e fui atrás...
------------------------------------------------------------
Passo-a-passo
Trata-se de um arquivo chamado: lclstrconsts.pas ele está no diretório: LCL do Lazarus. Copie ele para um local seguro, pois se editar errado pode recuperar com segurança.

Observações:
Depois de copiar, abra ele (e salve em outro local, pois, ao compilar será criado mais três arquivos que devem ser levados para outro diretório diferente. Também não renomeie a unit, pois na hora de compilar ele vai dar um erro porque o nome da unit também fica dentro dela e diferencia do que você renomeou).

Traduzindo:
Traduza o arquivo para o português e poste aqui no fórum (eu só traduzi os botões porquê meu inglês é horrível) para todos se beneficiarem.

Compilando:
Vá para o terminal e entre na pasta onde se encontra o arquivo lclstrconsts.pas que você copiou (não o backup!), e dê o comando: ppc386 lclstrconsts.pas

Copiando:
Copie os arquivos criados: lclstrconsts.ppu, lclstrconsts.o e o lclstrconsts.rst para o diretório: lcl/units/i386-linux do Lazarus, substitua os arquivos existentes (se quiser criar uma cópia dos originais antes, tudo bem, mas não precisa não, pois o original tá guardado e qualquer coisa compila ele e joga dentro desse diretório).

Finalizando:
Se for abrir o Lazarus e for compilar os projetos não funcionará, vai dar erro de interface. Ainda falta fazer uma coisa. Você pode fazer via terminal, mas eu optei em fazer dentro do Lazarus mesmo. Selecione o menu Ferramentas (tools) e clique no item de menu Buid Lazarus.
Após compilar o próprio Lazarus, abra todos os seus projetos e dê Buid neles, depois ele estará no idioma português-BR

------------------------------------------------------------------------

Observação Final
Agora eu pediria para algum tradutor de plantão para traduzir este texto para o idioma inglês para que o pessoal de outras nacionalidades saibam como traduzir para seus idiomas, isso vai ajudar e muito ao pessoal que programa. (não esquecer de incluir na tradução esta observação final, pois alguém que leia em inglês possa traduzir para chinês, francês, etc..). O bom seria traduzir o texto e já deixar aqui, pois só bastaria aos programadores copiar e colar num arquivo. Já que não temos seção de arquivos, aqui mesmo neste tópico todos encontrariam seus textos no seus idiomas.

Blz.

r000

  • New Member
  • *
  • Posts: 17
Como traduzir os botões de um MessageDLG?
« Reply #6 on: February 07, 2008, 11:55:30 pm »
Step-by-step
This is a file called: lclstrconsts.pas he is in the directory: LCL of Lazarus. Copy it to a safe place, because if edit wrong can recover safely.

Remarks:
After copying, open it (and save elsewhere, because, compiling three more files will be created to be taken to another directory different. Nor rename the unit, because the time to compile it will give an error because the name the unit is also within it and the difference that you renamed).

Translate file to the language taht you wish and post here in the forum (I only translate the buttons why my English is terrible) to benefit everyone.

Compiling:
Go to the terminal and from the folder where the file lclstrconsts.pas you copied (not the backup!), And give the command: ppc386 lclstrconsts.pas

Copying:
Copy the files created: lclstrconsts.ppu, lclstrconsts.oeo lclstrconsts.rst to the directory: lcl/units/i386-linux of Lazarus, replace existing files (if you want to create a copy of the original before, so good, but need not not because the original tá stored in anything he compiles and play within that directory).

Finally:
If open Lazarus and compile for the projects will not work, will give error of interface. There is still doing something. You can do via terminal, but I chose to do within the same Lazarus. Select the Tools menu (tools), and click the menu item Build Lazarus.
After compiling their own Lazarus, open all their projects and give Build them, then it will be in  your language

I have translated to spanish part of the file only and I proved it in lazarus for windows (32 bits) and in lazarus x86_64 in kubuntu.

 
Code: [Select]


{  $Id: lclstrconsts.pas 13274 2007-12-11 11:15:35Z vincents $  }
{
 /***************************************************************************
                            lclstrconsts.pas
                            ----------------
     This unit contains all resource strings of the LCL (not interfaces)


 ***************************************************************************/

 *****************************************************************************
 *                                                                           *
 *  This file is part of the Lazarus Component Library (LCL)                 *
 *                                                                           *
 *  See the file COPYING.modifiedLGPL, included in this distribution,        *
 *  for details about the copyright.                                         *
 *                                                                           *
 *  This program is distributed in the hope that it will be useful,          *
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of           *
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                     *
 *                                                                           *
 *****************************************************************************
}
unit LCLStrConsts;

{$mode objfpc}{$H+}

interface

ResourceString
  // common Delphi strings
  SNoMDIForm = 'No MDI form present.';

  // message/input dialog buttons
  rsMbYes          = '&Sí';
  rsMbNo           = '&No';
  rsMbOK           = '&Aceptar';
  rsMbCancel       = 'Cancelar';
  rsMbAbort        = 'Abortar';
  rsMbRetry        = '&Intentar de nuevo';
  rsMbIgnore       = '&Ignorar';
  rsMbAll          = '&Todo';
  rsMbNoToAll      = 'No a todo';
  rsMbYesToAll     = 'Sí a &todo';
  rsMbHelp         = '&Ayuda';
  rsMbClose        = '&Cerrar';

  rsMtWarning      = 'Advertencia';
  rsMtError        = 'Error';
  rsMtInformation  = 'Información';
  rsMtConfirmation = 'Confirmación';
  rsMtCustom       = 'Personalizar';

  // file dialog
  rsfdOpenFile           = 'Abrir un archivo existente';
  rsfdOverwriteFile      = '¿ Sobreescrbibir el archivo ?';
  rsfdFileAlreadyExists  = 'El archivo "%s" ya existe. ¿ sobreescribir ?';
  rsfdPathMustExist      = 'La ruta ha de existir';
  rsfdPathNoExist        = 'La ruta "%s" no existe.';
  rsfdFileMustExist      = 'El archivo ha de existir';
  rsfdDirectoryMustExist = 'El directorio ha de existir';
  rsfdFileNotExist       = 'El archivo "%s" no existe.';
  rsfdDirectoryNotExist  = 'El directorio "%s" no existe.';
  rsFind = 'Find';
  rsfdFileReadOnlyTitle  = 'El archivo es sólo para lectura';
  rsfdFileReadOnly       = 'El archivo "%s" es sólo para lectura.';
  rsfdFileSaveAs         = 'Guardar archivo como';
  rsAllFiles = 'Todos los archivos (%s)|%s|%s';
  rsfdSelectDirectory    = 'Seleccione directorio';
  rsDirectory            = '&Directorio';

  // Select color dialog
  rsSelectcolorTitle    = 'Seleccione color';
   
  // Select font dialog
  rsSelectFontTitle     = 'Seleccione tipografía';
  rsFindMore = 'Encontrar más';
  rsReplace = 'Remplazar';
  rsReplaceAll = 'Remplazar todo';
 
  // DBGrid
  rsDeleteRecord = '¿Borrar el registro?';
 
  // gtk interface
  rsWarningUnremovedPaintMessages = ' WARNING: There are %s unremoved LM_'
    +'PAINT/LM_GtkPAINT message links left.';
  rsWarningUnreleasedDCsDump = ' WARNING: There are %d unreleased DCs, a '
    +'detailed dump follows:';
  rsWarningUnreleasedGDIObjectsDump = ' WARNING: There are %d unreleased '
    +'GDIObjects, a detailed dump follows:';
  rsWarningUnreleasedMessagesInQueue = ' WARNING: There are %d messages left '
    +'in the queue! I''ll free them';
  rsWarningUnreleasedTimerInfos = ' WARNING: There are %d TimerInfo '
    +'structures left, I''ll free them';
  rsFileInformation = 'File information';
  rsgtkFilter = 'Filter:';
  rsgtkHistory = 'History:';
  rsDefaultFileInfoValue = 'permissions user group size date time';
  rsBlank = 'Blank';
  rsUnableToLoadDefaultFont = 'Unable to load default font';
  rsFileInfoFileNotFound = '(file not found: "%s")';
  rsgtkOptionNoTransient = '--lcl-no-transient    Do not set transient order for'
    +' modal forms';
  rsgtkOptionModule = '--gtk-module module   Load the specified module at '
    +'startup.';
  rsgOptionFatalWarnings = '--g-fatal-warnings    Warnings and errors '
    +'generated by Gtk+/GDK will halt the application.';
  rsgtkOptionDebug = '--gtk-debug flags     Turn on specific Gtk+ trace/'
    +'debug messages.';
  rsgtkOptionNoDebug = '--gtk-no-debug flags  Turn off specific Gtk+ trace/'
    +'debug messages.';
  rsgdkOptionDebug = '--gdk-debug flags     Turn on specific GDK trace/debug '
    +'messages.';
  rsgdkOptionNoDebug = '--gdk-no-debug flags  Turn off specific GDK trace/'
    +'debug messages.';
  rsgtkOptionDisplay = '--display h:s:d       Connect to the specified X '
    +'server, where "h" is the hostname, "s" is the server number (usually 0), '
    +'and "d" is the display number (typically omitted). If --display is not '
    +'specified, the DISPLAY environment variable is used.';
  rsgtkOptionSync = '--sync                Call XSynchronize (display, True) '
    +'after the Xserver connection has been established. This makes debugging '
    +'X protocol errors easier, because X request buffering will be disabled '
    +'and X errors will be received immediatey after the protocol request that '
    +'generated the error has been processed by the X server.';
  rsgtkOptionNoXshm = '--no-xshm             Disable use of the X Shared '
    +'Memory Extension.';
  rsgtkOptionName = '--name programe       Set program name to "progname". '
    +'If not specified, program name will be set to ParamStr(0).';
  rsgtkOptionClass = '--class classname     Following Xt conventions, the '
    +'class of a program is the program name with the initial character '
    +'capitalized. For example, the classname for gimp is "Gimp". If --class '
    +'is specified, the class of the program will be set to "classname".';
     
  // win32 interface
  rsWin32Warning = 'Advertencia:';
  rsWin32Error = 'Error:';
 
  // StringHashList, LResource, Menus, ExtCtrls, ImgList, Spin
  // StdCtrls, Calendar, CustomTimer, Forms, Grids, LCLProc, Controls, ComCtrls,
  // ExtDlgs, EditBtn, Masks
  sInvalidActionRegistration = 'Invalid action registration';
  sInvalidActionUnregistration = 'Invalid action unregistration';
  sInvalidActionEnumeration = 'Invalid action enumeration';
  sInvalidActionCreation = 'Invalid action creation';
  sMenuNotFound   = 'Sub-menu is not in menu';
  sMenuIndexError = 'Menu index out of range';
  sMenuItemIsNil  = 'MenuItem is nil';
  sNoTimers = 'No timers available';
  sInvalidIndex = 'Invalid ImageList Index';
  sInvalidImageSize = 'Invalid image size';
  sDuplicateMenus = 'Duplicate menus';
  sCannotFocus = 'Cannot focus a disabled or invisible window';
  sInvalidCharSet = 'The char set in mask "%s" is not valid!';

  rsListMustBeEmpty = 'List must be empty';
  rsInvalidPropertyValue = 'Invalid property value';
  rsPropertyDoesNotExist = 'Property %s does not exist';
  rsInvalidStreamFormat = 'Invalid stream format';
  rsErrorReadingProperty = 'Error reading %s%s%s: %s';
  rsInvalidFormObjectStream = 'invalid Form object stream';
  rsScrollBarOutOfRange = 'ScrollBar property out of range';
  rsInvalidDate = 'Invalid Date : %s';
  rsInvalidDateRangeHint = 'Invalid Date: %s. Must be between %s and %s';
  rsErrorOccurredInAtAddressFrame = 'Error occurred in %s at %sAddress %s%s'
    +' Frame %s';
  rsException = 'Exception';
  rsFormStreamingError = 'Form streaming "%s" error: %s';
  rsFixedColsTooBig = 'FixedCols can''t be >= ColCount';
  rsFixedRowsTooBig = 'FixedRows can''t be >= RowCount';
  rsGridFileDoesNotExists = 'Grid file doesn''t exists';
  rsNotAValidGridFile = 'Not a valid grid file';
  rsIndexOutOfRange = 'Index Out of range Cell[Col=%d Row=%d]';
  rsGridIndexOutOfRange = 'Grid index out of range.';
  rsERRORInLCL = 'ERROR in LCL: ';
  rsCreatingGdbCatchableError = 'Creating gdb catchable error:';
  rsAControlCanNotHaveItselfAsParent = 'A control can''t have itself as parent';
  lisLCLResourceSNotFound = 'Resource %s not found';
  rsErrorCreatingDeviceContext = 'Error creating device context for %s.%s';
  rsIndexOutOfBounds = '%s Index %d out of bounds 0 .. %d';
  rsUnknownPictureExtension = 'Unknown picture extension';
  rsBitmaps = 'Bitmaps';
  rsPixmap = 'Pixmap';
  rsPortableNetworkGraphic = 'Portable Network Graphic';
  rsPortableBitmap = 'Portable BitMap';
  rsPortableGrayMap = 'Portable GrayMap';
  rsPortablePixmap = 'Portable PixMap';
  rsIcon = 'Icon';
  rsJpeg = 'Joint Picture Expert Group';
  rsUnsupportedClipboardFormat = 'Unsupported clipboard format: %s';
  rsGroupIndexCannotBeLessThanPrevious = 'GroupIndex cannot be less than a '
    +'previous menu item''s GroupIndex';
  rsIsAlreadyAssociatedWith = '%s is already associated with %s';
  rsCanvasDoesNotAllowDrawing = 'Canvas does not allow drawing';
  rsUnsupportedBitmapFormat = 'Unsupported bitmap format.';
  rsErrorWhileSavingBitmap = 'Error while saving bitmap.';
  rsNoWidgetSet = 'No widgetset object. '
    +'Please check if the unit "interfaces" was added to the programs uses clause.';
  rsPressOkToIgnoreAndRiskDataCorruptionPressCancelToK = '%s%sPress Ok to '
    +'ignore and risk data corruption.%sPress Cancel to kill the program.';
  rsCanNotFocus = 'Can not focus';
  rsListIndexExceedsBounds = 'List index exceeds bounds (%d)';
  rsResourceNotFound = 'Resource %s not found';
  rsCalculator = 'Calculator';
  rsError      = 'Error';
  rsPickDate   = 'Select a date';
  rsSize = '  size ';
  rsModified = '  modified ';

  // I'm not sure if in all languages the Dialog texts for a button
  // have the same meaning as a key
  // So every VK gets its own constant
  ifsVK_UNKNOWN    = 'Desconocido';
  ifsVK_LBUTTON    = 'Botón izquierdo del ratón';
  ifsVK_RBUTTON    = 'Botón derecho del ratón';
  ifsVK_CANCEL     = 'Cancel'; //= dlgCancel
  ifsVK_MBUTTON    = 'Botón central del ratón';
  ifsVK_BACK       = 'Retroceso';
  ifsVK_TAB        = 'Tabulador';
  ifsVK_CLEAR      = 'Borrar';
  ifsVK_RETURN     = 'Intro';
  ifsVK_SHIFT      = 'Tecla modificadora';
  ifsVK_CONTROL    = 'Control';
  ifsVK_MENU       = 'Menú';
  ifsVK_PAUSE      = 'Pausa';
  ifsVK_CAPITAL    = 'Mayúsculas';
  ifsVK_KANA       = 'Kana';
  ifsVK_JUNJA      = 'Junja';
  ifsVK_FINAL      = 'Final';
  ifsVK_HANJA      = 'Hanja';
  ifsVK_ESCAPE     = 'Escape';
  ifsVK_CONVERT    = 'Convertir';
  ifsVK_NONCONVERT = 'No convertir';
  ifsVK_ACCEPT     = 'Aceptar';
  ifsVK_MODECHANGE = 'Modo Cambio';
  ifsVK_SPACE      = 'Espacio';
  ifsVK_PRIOR      = 'Anterior';
  ifsVK_NEXT       = 'Siguiente';
  ifsVK_END        = 'Fin';
  ifsVK_HOME       = 'Inicio';
  ifsVK_LEFT       = 'Izquierda';
  ifsVK_UP         = 'Arriba';
  ifsVK_RIGHT      = 'Derecha';
  ifsVK_DOWN       = 'Abajo'; //= dlgdownword
  ifsVK_SELECT     = 'Seleccionar'; //= lismenuselect
  ifsVK_PRINT      = 'Imprimir';
  ifsVK_EXECUTE    = 'Ejecutar';
  ifsVK_SNAPSHOT   = 'Snapshot';
  ifsVK_INSERT     = 'Insertar';
  ifsVK_DELETE     = 'Borrar'; //= dlgeddelete
  ifsVK_HELP       = 'Ayuda';
  ifsCtrl          = 'Ctrl';
  ifsAlt           = 'Alt';
  rsWholeWordsOnly = 'Sólo palabras completas';
  rsCaseSensitive = 'Sensible al caso';
  rsText = 'Texto';
  rsDirection = 'Dirección';
  rsForward = 'Avanzar pág';
  rsBackward = 'Retroceder pág';
  ifsVK_LWIN       = 'tecla ventana izquierda';
  ifsVK_RWIN       = 'tecla ventana derecha';
  ifsVK_APPS       = 'tecla aplicación';
  ifsVK_NUMPAD     = 'Númpad %d';
  ifsVK_NUMLOCK    = 'Númlock';
  ifsVK_SCROLL     = 'Bloq desp';

  // docking
  rsDocking = 'Docking';

  // help
  rsHelpHelpNodeHasNoHelpDatabase = 'Help node %s%s%s has no Help Database';
  rsHelpThereIsNoViewerForHelpType = 'There is no viewer for help type %s%s%s';
  rsHelpHelpDatabaseDidNotFoundAViewerForAHelpPageOfType = 'Help Database %s%'
    +'s%s did not found a viewer for a help page of type %s';
  rsHelpAlreadyRegistered = '%s: Already registered';
  rsHelpNotRegistered = '%s: Not registered';
  rsHelpHelpDatabaseNotFound = 'Help Database %s%s%s not found';
  rsHelpHelpKeywordNotFoundInDatabase = 'Help keyword %s%s%s not found in '
    +'Database %s%s%s.';
  rsHelpHelpKeywordNotFound = 'Help keyword %s%s%s not found.';
  rsHelpHelpContextNotFoundInDatabase = 'Help context %s not found in '
    +'Database %s%s%s.';
  rsHelpHelpContextNotFound = 'Help context %s not found.';
  rsHelpNoHelpFoundForSource = 'No help found for line %d, column %d of %s.';
  rsHelpNoHelpNodesAvailable = 'No help nodes available';
  rsHelpError = 'Help Error';
  rsHelpDatabaseNotFound = 'Help Database not found';
  rsHelpContextNotFound = 'Help Context not found';
  rsHelpViewerNotFound = 'Help Viewer not found';
  rsHelpNotFound = 'Help not found';
  rsHelpViewerError = 'Help Viewer Error';
  rsHelpSelectorError = 'Help Selector Error';
  rsUnknownErrorPleaseReportThisBug = 'Unknown Error, please report this bug';

  hhsHelpTheHelpDatabaseWasUnableToFindFile = 'The help database %s%s%s was '
    +'unable to find file %s%s%s.';
  hhsHelpTheMacroSInBrowserParamsWillBeReplacedByTheURL = 'The macro %s in '
    +'BrowserParams will be replaced by the URL.';
  hhsHelpNoHTMLBrowserFoundPleaseDefineOneInHelpConfigureHe = 'No HTML '
    +'Browser found.%sPlease define one in Help -> Configure Help -> Viewers';
  hhsHelpNoHTMLBrowserFound = 'Unable to find a HTML browser.';
  hhsHelpBrowserNotFound = 'Browser %s%s%s not found.';
  hhsHelpBrowserNotExecutable = 'Browser %s%s%s not executable.';
  hhsHelpErrorWhileExecuting = 'Error while executing %s%s%s:%s%s';

implementation

end.



Thanks to Ñuño Martínez for help me.

Bart

  • Hero Member
  • *****
  • Posts: 4217
    • Bart en Mariska's Webstek
Como traduzir os botões de um MessageDLG?
« Reply #7 on: February 08, 2008, 11:25:55 am »
Alternatively use the translations unit and the appriate .po file?

Bart

jesusr

  • Sr. Member
  • ****
  • Posts: 470
Como traduzir os botões de um MessageDLG?
« Reply #8 on: February 09, 2008, 10:16:23 am »
Quote from: "Bart"
Alternatively use the translations unit and the appriate .po file?

Bart


That would be the easiest path, as the resources are already translated (though maybe incomplete I don't know), something like this should work:

1. Include gettext and translations units in one of the uses clause of your unit.
2. At some point (for example in initialization section) translate the resource strings.
3. At some point (for example in form's create) update your gui with new translation.

In unit lazreport/samples/editor/maincalleditor there is a sample that does just this

 

TinyPortal © 2005-2018