diff --git a/AltDrag.ini b/AltDrag.ini index 9a7204a..c614581 100644 Binary files a/AltDrag.ini and b/AltDrag.ini differ diff --git a/altdrag.c b/altdrag.c index a13d493..0b20d1c 100644 --- a/altdrag.c +++ b/altdrag.c @@ -172,25 +172,9 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, char *szCmdLine, in } } - // Load Translation.ini if it exists - wchar_t translation_ini[300]; - GetModuleFileName(NULL, translation_ini, ARRAY_SIZE(inipath)); - PathRemoveFileSpec(translation_ini); - wcscat(translation_ini, L"\\Translation.ini"); - FILE *f = _wfopen(translation_ini, L"rb"); - if (f != NULL) { - fclose(f); - LoadTranslation(translation_ini); - } - // Language - GetPrivateProfileString(L"General", L"Language", L"en-US", txt, ARRAY_SIZE(txt), inipath); - for (i=0; i < ARRAY_SIZE(languages); i++) { - if (!wcsicmp(txt,languages[i]->code)) { - l10n = languages[i]; - break; - } - } + memset(&l10n_ini, 0, sizeof(l10n_ini)); + UpdateLanguage(); // Create window WNDCLASSEX wnd = { sizeof(WNDCLASSEX), 0, WindowProc, 0, 0, hInst, NULL, NULL, (HBRUSH)(COLOR_WINDOW+1), NULL, APP_NAME, NULL }; @@ -254,7 +238,7 @@ int HookSystem() { HOOKPROC procaddr; if (!keyhook) { // Get address to keyboard hook (beware name mangling) - procaddr = (HOOKPROC)GetProcAddress(hinstDLL, "LowLevelKeyboardProc@12"); + procaddr = (HOOKPROC) GetProcAddress(hinstDLL, "LowLevelKeyboardProc@12"); if (procaddr == NULL) { Error(L"GetProcAddress('LowLevelKeyboardProc@12')", L"This probably means that the file hooks.dll is from an old version or corrupt. You can try reinstalling "APP_NAME".", GetLastError()); return 1; @@ -272,7 +256,7 @@ int HookSystem() { GetPrivateProfileString(L"Advanced", L"HookWindows", L"0", txt, ARRAY_SIZE(txt), inipath); if (!msghook && _wtoi(txt)) { // Get address to message hook (beware name mangling) - procaddr = (HOOKPROC)GetProcAddress(hinstDLL, "CallWndProc@12"); + procaddr = (HOOKPROC) GetProcAddress(hinstDLL, "CallWndProc@12"); if (procaddr == NULL) { Error(L"GetProcAddress('CallWndProc@12')", L"This probably means that the file hooks.dll is from an old version or corrupt. You can try reinstalling "APP_NAME".", GetLastError()); return 1; @@ -404,21 +388,16 @@ LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { } } else if (msg == WM_UPDATESETTINGS) { - wchar_t txt[10]; - // Language - GetPrivateProfileString(L"General", L"Language", L"en-US", txt, ARRAY_SIZE(txt), inipath); - int i; - for (i=0; i < ARRAY_SIZE(languages); i++) { - if (!wcsicmp(txt,languages[i]->code)) { - l10n = languages[i]; - break; - } - } + UpdateLanguage(); // Reload hooks if (ENABLED()) { UnhookSystem(); HookSystem(); } + // Reload config language + if (!wParam && IsWindow(g_cfgwnd)) { + SendMessage(g_cfgwnd, WM_UPDATESETTINGS, 0, 0); + } } else if (msg == WM_ADDTRAY) { hide = 0; diff --git a/config/config.c b/config/config.c index df5c74d..5ed391d 100644 --- a/config/config.c +++ b/config/config.c @@ -80,7 +80,7 @@ void CloseConfig() { } void UpdateSettings() { - PostMessage(g_hwnd, WM_UPDATESETTINGS, 0, 0); + PostMessage(g_hwnd, WM_UPDATESETTINGS, 1, 0); } void UpdateStrings() { @@ -133,7 +133,14 @@ void UpdateStrings() { LRESULT CALLBACK PropSheetWinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData) { LRESULT ret = DefSubclassProc(hwnd, msg, wParam, lParam); if (msg == WM_NCHITTEST && (ret == HTBOTTOM || ret == HTBOTTOMLEFT || ret == HTBOTTOMRIGHT || ret == HTLEFT || ret == HTTOPLEFT || ret == HTTOPRIGHT || ret == HTRIGHT || ret == HTTOP)) { - ret = HTBORDER; + ret = HTCAPTION; + } + else if (msg == WM_UPDATESETTINGS) { + UpdateStrings(); + HWND page = PropSheet_GetCurrentPageHwnd(g_cfgwnd); + SendMessage(page, WM_INITDIALOG, 0, 0); + NMHDR pnmh = { g_cfgwnd, 0, PSN_SETACTIVE }; + SendMessage(page, WM_NOTIFY, 0, (LPARAM) &pnmh); } return ret; } @@ -145,7 +152,7 @@ BOOL CALLBACK PropSheetProc(HWND hwnd, UINT msg, LPARAM lParam) { } else if (msg == PSCB_INITIALIZED) { g_cfgwnd = hwnd; - SetWindowSubclass(hwnd, PropSheetWinProc, 0, 0); + SetWindowSubclass(g_cfgwnd, PropSheetWinProc, 0, 0); UpdateStrings(); // OK button replaces Cancel button @@ -179,11 +186,21 @@ INT_PTR CALLBACK GeneralPageDialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARA GetPrivateProfileString(L"General", L"MDI", L"0", txt, ARRAY_SIZE(txt), inipath); Button_SetCheck(GetDlgItem(hwnd,IDC_MDI), _wtoi(txt)?BST_CHECKED:BST_UNCHECKED); - int i; - for (i=0; i < ARRAY_SIZE(languages); i++) { - ComboBox_AddString(GetDlgItem(hwnd,IDC_LANGUAGE), languages[i]->lang); - if (l10n == languages[i]) { - ComboBox_SetCurSel(GetDlgItem(hwnd,IDC_LANGUAGE), i); + HWND control = GetDlgItem(hwnd, IDC_LANGUAGE); + ComboBox_ResetContent(control); + if (l10n == &l10n_ini) { + ComboBox_AddString(control, l10n->lang); + ComboBox_SetCurSel(control, 0); + ComboBox_Enable(control, FALSE); + } + else { + ComboBox_Enable(control, TRUE); + int i; + for (i=0; i < ARRAY_SIZE(languages); i++) { + ComboBox_AddString(control, languages[i]->lang); + if (l10n == languages[i]) { + ComboBox_SetCurSel(control, i); + } } } @@ -271,7 +288,7 @@ INT_PTR CALLBACK GeneralPageDialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARA UpdateSettings(); } else if (msg == WM_NOTIFY) { - LPNMHDR pnmh = (LPNMHDR)lParam; + LPNMHDR pnmh = (LPNMHDR) lParam; if (pnmh->code == PSN_SETACTIVE) { updatestrings = 1; @@ -302,19 +319,21 @@ INT_PTR CALLBACK GeneralPageDialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARA SetDlgItemText(hwnd, IDC_AUTOSAVE, l10n->general.autosave); // AutoSnap - ComboBox_ResetContent(GetDlgItem(hwnd,IDC_AUTOSNAP)); - ComboBox_AddString(GetDlgItem(hwnd,IDC_AUTOSNAP), l10n->general.autosnap0); - ComboBox_AddString(GetDlgItem(hwnd,IDC_AUTOSNAP), l10n->general.autosnap1); - ComboBox_AddString(GetDlgItem(hwnd,IDC_AUTOSNAP), l10n->general.autosnap2); - ComboBox_AddString(GetDlgItem(hwnd,IDC_AUTOSNAP), l10n->general.autosnap3); + HWND control = GetDlgItem(hwnd, IDC_AUTOSNAP); + ComboBox_ResetContent(control); + ComboBox_AddString(control, l10n->general.autosnap0); + ComboBox_AddString(control, l10n->general.autosnap1); + ComboBox_AddString(control, l10n->general.autosnap2); + ComboBox_AddString(control, l10n->general.autosnap3); wchar_t txt[10]; GetPrivateProfileString(L"General", L"AutoSnap", L"0", txt, ARRAY_SIZE(txt), inipath); - ComboBox_SetCurSel(GetDlgItem(hwnd,IDC_AUTOSNAP), _wtoi(txt)); + ComboBox_SetCurSel(control, _wtoi(txt)); // Language - ComboBox_DeleteString(GetDlgItem(hwnd,IDC_LANGUAGE), ARRAY_SIZE(languages)); + control = GetDlgItem(hwnd, IDC_LANGUAGE); + ComboBox_DeleteString(control, ARRAY_SIZE(languages)); if (l10n == &en_US) { - ComboBox_AddString(GetDlgItem(hwnd,IDC_LANGUAGE), L"How can I help translate?"); + ComboBox_AddString(control, L"How can I help translate?"); } } return FALSE; @@ -462,32 +481,35 @@ INT_PTR CALLBACK InputPageDialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM LPNMHDR pnmh = (LPNMHDR)lParam; if (pnmh->code == PSN_SETACTIVE) { wchar_t txt[50]; - int i, j; + int i, j, sel; // Mouse actions for (i=0; i < ARRAY_SIZE(mouse_buttons); i++) { HWND control = GetDlgItem(hwnd, mouse_buttons[i].control); ComboBox_ResetContent(control); GetPrivateProfileString(L"Input", mouse_buttons[i].option, L"Nothing", txt, ARRAY_SIZE(txt), inipath); + sel = ARRAY_SIZE(mouse_actions)-1; for (j=0; j < ARRAY_SIZE(mouse_actions); j++) { ComboBox_AddString(control, mouse_actions[j].l10n); - if (!wcscmp(txt,mouse_actions[j].action) || j == ARRAY_SIZE(mouse_actions)-1) { - ComboBox_SetCurSel(control, j); - break; + if (!wcscmp(txt,mouse_actions[j].action)) { + sel = j; } } + ComboBox_SetCurSel(control, sel); } // Scroll HWND control = GetDlgItem(hwnd, IDC_SCROLL); ComboBox_ResetContent(control); GetPrivateProfileString(L"Input", L"Scroll", L"Nothing", txt, ARRAY_SIZE(txt), inipath); + sel = ARRAY_SIZE(scroll_actions)-1; for (j=0; j < ARRAY_SIZE(scroll_actions); j++) { ComboBox_AddString(control, scroll_actions[j].l10n); - if (!wcscmp(txt,scroll_actions[j].action) || j == ARRAY_SIZE(scroll_actions)-1) { - ComboBox_SetCurSel(control, j); + if (!wcscmp(txt,scroll_actions[j].action)) { + sel = j; } } + ComboBox_SetCurSel(control, sel); // Update text SetDlgItemText(hwnd, IDC_MOUSE_BOX, l10n->input.mouse.box); diff --git a/include/localization.c b/include/localization.c index d2451b7..e730f34 100644 --- a/include/localization.c +++ b/include/localization.c @@ -38,12 +38,6 @@ void LoadTranslation(wchar_t *ini) { wchar_t txt[3000]; int i; for (i=0; i < ARRAY_SIZE(l10n_mapping); i++) { - // Replace English - if (l10n_mapping[i].str == &l10n_ini.code) { - languages[0] = &l10n_ini; - l10n_ini.code = en_US.code; - continue; - } // Get pointer to default English string to be used if ini entry doesn't exist wchar_t *def = *(wchar_t**) ((void*)&en_US + ((void*)l10n_mapping[i].str - (void*)&l10n_ini)); GetPrivateProfileString(L"Translation", l10n_mapping[i].name, def, txt, ARRAY_SIZE(txt), ini); @@ -51,7 +45,31 @@ void LoadTranslation(wchar_t *ini) { wcscat(txt, L" "); wcscat(txt, TEXT(APP_VERSION)); } - *l10n_mapping[i].str = malloc((wcslen(txt)+1)*sizeof(wchar_t)); + *l10n_mapping[i].str = realloc(*l10n_mapping[i].str, (wcslen_resolved(txt)+1)*sizeof(wchar_t)); wcscpy_resolve(*l10n_mapping[i].str, txt); } } + +void UpdateLanguage() { + wchar_t path[MAX_PATH]; + GetModuleFileName(NULL, path, ARRAY_SIZE(path)); + PathRemoveFileSpec(path); + wcscat(path, L"\\Translation.ini"); + FILE *f = _wfopen(path, L"rb"); + if (f != NULL) { + fclose(f); + LoadTranslation(path); + l10n = &l10n_ini; + return; + } + + wchar_t txt[10]; + GetPrivateProfileString(L"General", L"Language", L"en-US", txt, ARRAY_SIZE(txt), inipath); + int i; + for (i=0; i < ARRAY_SIZE(languages); i++) { + if (!wcsicmp(txt,languages[i]->code)) { + l10n = languages[i]; + break; + } + } +} diff --git a/localization/pt-BR/Translation.ini b/localization/pt-BR/Translation.ini index df3f202..182653c 100644 Binary files a/localization/pt-BR/Translation.ini and b/localization/pt-BR/Translation.ini differ diff --git a/localization/pt-BR/installer.nsh b/localization/pt-BR/installer.nsh index ea2e97b..545d8d2 100644 --- a/localization/pt-BR/installer.nsh +++ b/localization/pt-BR/installer.nsh @@ -19,13 +19,13 @@ LangString L10N_UPDATE_DIALOG 0 "Uma nova versão está disponível.$\nCance LangString L10N_ALTSHIFT_TITLE 0 "Atalho de teclado" LangString L10N_ALTSHIFT_SUBTITLE 0 "O atalho Alt + Shift entra em conflito com ${APP_NAME}." -LangString L10N_ALTSHIFT_HEADER 0 "O instalador detectou que o atalho do Windows para alternar o layout do teclado é Alt + Shift.$\n$\nAo utilizar ${APP_NAME}, você pode pressionar Shift enquanto arrasta uma janela para alinhá-la com outras janelas. Isso significa que é provável que você pressione Alt + Shift, a mesma combinação que alterna o layout do teclado. Ainda que o ${APP_NAME} tente bloquear estas mudanças acidentais, ele poderá não conseguir se você pressionar Shift antes de começar a arrastar uma janela.$\n$\nVocê pode desativar ou mudar o atalho que alterna o layout do teclado pressionado o botão abaxio. Clique em Próximo para continuar." +LangString L10N_ALTSHIFT_HEADER 0 "O instalador detectou que o atalho do Windows para alternar o layout do teclado é Alt + Shift.$\n$\nAo utilizar o ${APP_NAME}, você pode pressionar Shift enquanto arrasta uma janela para alinhá-la com outras janelas. Isso significa que é provável que você pressione Alt + Shift, a mesma combinação que alterna o layout do teclado. Ainda que o ${APP_NAME} tente bloquear estas mudanças acidentais, ele poderá não conseguir se você pressionar Shift antes de começar a arrastar uma janela.$\n$\nVocê pode desativar ou mudar o atalho que alterna o layout do teclado pressionando o botão abaixo. Clique em Próximo para continuar." LangString L10N_ALTSHIFT_BUTTON 0 "&Alterar teclados..." -LangString L10N_HOOKTIMEOUT_TITLE 0 "Registry tweak" -LangString L10N_HOOKTIMEOUT_SUBTITLE 0 "Optional tweak to keep ${APP_NAME} from stopping unexpectedly." -LangString L10N_HOOKTIMEOUT_HEADER 0 "In Windows 7, Microsoft implemented a feature that stops keyboard and mouse hooks if they take too long to respond. Unfortunately, this check can erroneously misbehave, especially if you hibernate, sleep, or lock the computer a lot.$\n$\nIf this happens, you will find that ${APP_NAME} stop functioning without warning, and you have to manually disable and enable ${APP_NAME} to make it work again.$\n$\nThere is a registry tweak to make Windows wait longer before stopping hooks, which you can enable or disable by using the buttons below. Please note that this registry tweak is completely optional." -LangString L10N_HOOKTIMEOUT_APPLYBUTTON 0 "&Enable registry tweak" -LangString L10N_HOOKTIMEOUT_REVERTBUTTON 0 "&Disable registry tweak" -LangString L10N_HOOKTIMEOUT_ALREADYAPPLIED 0 "The registry tweak has already been applied." -LangString L10N_HOOKTIMEOUT_FOOTER 0 "The change will take effect on your next login." +LangString L10N_HOOKTIMEOUT_TITLE 0 "Ajuste do resgitro" +LangString L10N_HOOKTIMEOUT_SUBTITLE 0 "Ajuste opcional para evitar que o ${APP_NAME} pare de funcionar inesperadamente." +LangString L10N_HOOKTIMEOUT_HEADER 0 "No Windows 7, a Microsoft acrescentou uma ferramenta para interromper injeções (hooks) do teclado e mouse se eles demorassem a responder. Infelizmente, esta verificação pode equivocadamente se comportar mal, especialmente se você hiberna, suspende ou troca de usuário frequentemente.$\n$\nSe isto acontecer, o ${APP_NAME} poderá parar de funcionar sem qualquer aviso, e você deverá desativá-lo e reativá-lo manualmente para que ele volte a funcionar.$\n$\nHá um ajuste no Registro do Windows para fazer com que o sistema aguarde mais tempo antes de interromper injeções (hooks). Você pode ativá-lo usando os botões abaixo. Note que este ajuste é completamente opcional." +LangString L10N_HOOKTIMEOUT_APPLYBUTTON 0 "&Ativar ajuste no registro" +LangString L10N_HOOKTIMEOUT_REVERTBUTTON 0 "&Desativar ajuste no registro" +LangString L10N_HOOKTIMEOUT_ALREADYAPPLIED 0 "O ajuste no registro já foi aplicado." +LangString L10N_HOOKTIMEOUT_FOOTER 0 "A mudança será aplicada no seu próximo logon." diff --git a/localization/pt-BR/strings.h b/localization/pt-BR/strings.h index 8b11cb2..104e85f 100644 --- a/localization/pt-BR/strings.h +++ b/localization/pt-BR/strings.h @@ -24,11 +24,11 @@ struct strings pt_BR = { /* update */ L"Atualização disponível!", /* config */ L"Configuração", /* about */ L"Sobre", - /* exit */ L"Fechar", + /* exit */ L"Sair", }, { /* update */ /* update_balloon */ L"Nova versão disponível!", - /* update_dialog */ L"Uma nova versão está disponível. Ir à página de download?", + /* update_dialog */ L"Uma nova versão está disponível. Deseja ir à página de download?", /* update_nonew */ L"Não há atualizações disponíveis.", }, @@ -46,7 +46,7 @@ struct strings pt_BR = { /* autofocus */ L"A&tivar janelas ao arrastar. Você também pode\npressionar Ctrl para ativar janelas.", /* aero */ L"&Imitar o Aero Snap", /* inactivescroll */ L"&Rolar janelas inativas", - /* mdi */ L"&MDI support", + /* mdi */ L"Suporte a &MDI, interface de múltiplos documentos", /* autosnap */ L"Alinhar automaticamente a:", /* autosnap0 */ L"Desativado", /* autosnap1 */ L"Bordas da tela", @@ -56,13 +56,13 @@ struct strings pt_BR = { /* autostart_box */ L"Início automático", /* autostart */ L"&Iniciar o "APP_NAME" quando fizer logon", /* autostart_hide */ L"&Ocultar ícone da área de notificação", - /* autostart_elevate*/ L"&Elevate to administrator privileges", - /* elevate_tip*/ L"Note that a UAC prompt will appear every time you log in, unless you disable UAC completely.", - /* elevate */ L"E&levate", - /* elevated */ L"Elevated", - /* elevate_tip */ L"This will create a new instance of "APP_NAME" which is running with administrator privileges. This allows "APP_NAME" to manage other programs which are running with administrator privileges.\n\nYou will have to approve a UAC prompt from Windows to allow "APP_NAME" to run with administrator privileges.", - /* elevation_aborted*/ L"Elevation aborted.", - /* autosave */ L"Nota: as configurações são salvas e aplicadas instantaneamente!", + /* autostart_elevate*/ L"&Elevar a privilégios de administrador", + /* elevate_tip*/ L"Note que a janela do Controle de Conta de Usuário aparecerá sempre que você fizer logon, a não ser que o Controle de Conta de Usuário esteja desativado completamente.", + /* elevate */ L"E&levar", + /* elevated */ L"Elevado", + /* elevate_tip */ L"Isto criará uma nova instância do "APP_NAME" que possuirá privilégios de administrador, permitindo que o "APP_NAME" manipule outros programas que possuam privilégios de administrador.\n\nVocê deverá permitir o "APP_NAME" na janela de confirmação do Controle de Conta de Usuário do Windows, para que o "APP_NAME" seja executado com privilégios de administrador.", + /* elevation_aborted*/ L"Elevação cancelada.", + /* autosave */ L"Nota: as configurações são salvas e aplicadas instantaneamente.", }, { /* input tab */ { /* mouse */ @@ -72,21 +72,21 @@ struct strings pt_BR = { /* rmb */ L"Botão direito:", /* mb4 */ L"Botão 4:", /* mb5 */ L"Botão 5:", - /* scroll */ L"Scroll:", - /* lowerwithmmb */ L"&Lower windows by middle clicking on title bars", + /* scroll */ L"Roda do mouse:", + /* lowerwithmmb */ L"&Enviar janela para trás ao clicar na barra de título", }, { /* actions */ - /* move */ L"Move", - /* resize */ L"Resize", - /* close */ L"Close", - /* minimize */ L"Minimize", - /* lower */ L"Lower", - /* alwaysontop */ L"AlwaysOnTop", - /* center */ L"Center", - /* nothing */ L"Nothing", + /* move */ L"Mover", + /* resize */ L"Redimensionar", + /* close */ L"Fechar", + /* minimize */ L"Minimizar", + /* lower */ L"Enviar para trás", + /* alwaysontop */ L"Sempre visível", + /* center */ L"Centralizar", + /* nothing */ L"Nada", /* alttab */ L"Alt+Tab", /* volume */ L"Volume", - /* transparency */ L"Transparency", + /* transparency */ L"Transparência", }, { /* hotkeys */ /* box */ L"Teclas de atalho", @@ -96,7 +96,7 @@ struct strings pt_BR = { /* rightwinkey */ L"W&indows direito", /* leftctrl */ L"&Ctrl esquerdo", /* rightctrl */ L"C&trl direito", - /* more */ L"Adicione mais teclas editando o arquivo .ini!\nUtilize a tecla Shift para alinhar as janelas umas às outras.", + /* more */ L"Adicione mais teclas editando o arquivo ini.\nUtilize a tecla Shift para alinhar as janelas umas às outras.", }, }, { /* blacklist tab */ @@ -104,29 +104,29 @@ struct strings pt_BR = { /* processblacklist */ L"Processos a ignorar:", /* blacklist */ L"Janelas a ignorar:", /* snaplist */ L"Janelas a alinhar:", - /* explanation */ L"Leia a wiki (em inglês) na nossa página para uma explicação detalhada de como a lista negra funciona!", + /* explanation */ L"Leia a wiki (em inglês) na nossa página para uma explicação detalhada de como a lista negra funciona.", /* findwindow_box */ L"Identificar janela", /* _explanation */ L"Utilize esta ferramenta para identificar a classe de uma janela, a fim de adicionar a uma das listas acima.", }, { /* advanced tab */ /* box */ L"Configurações avançadas", - /* hookwindows */ L"A&tivar alinhamento quando mover normalmente uma janela. Funciona em conjunção com o alinhamento automático.", - /* hookwindows_warn */ L"Note que isto não é totalmente seguro, pois se conecta a outros processos e coisas do tipo. Pode ser arriscado usar com jogos que tenham proteção anti-cheat.", - /* checkonstartup */ L"Checar se há novas at&ualizações automaticamente", - /* beta */ L"Checar versões &beta", - /* checknow */ L"&Checar agora", - /* ini */ L"As configurações do "APP_NAME" são salvas no arquivo "APP_NAME".ini. Certas configurações só podem ser modificadas através da modificação manual desse arquivo.", + /* hookwindows */ L"A&tivar alinhamento quando mover normalmente uma janela. Funciona em conjunto com o alinhamento automático.", + /* hookwindows_warn */ L"Note que isto não é totalmente seguro, pois faz injeções (hooks) em outros processos. Pode ser arriscado utilizar com jogos que tenham proteção anti-cheat.", + /* checkonstartup */ L"Verificar se há novas at&ualizações automaticamente", + /* beta */ L"Verificar versões &beta", + /* checknow */ L"&Verificar agora", + /* ini */ L"As configurações do "APP_NAME" são salvas no arquivo "APP_NAME".ini. Certas configurações só podem ser alteradas através da modificação manual desse arquivo.", /* openini */ L"Abrir arquivo &ini", }, { /* about tab */ /* box */ L"Sobre o "APP_NAME, /* version */ L"Versão "APP_VERSION, /* author */ L"Criado por Stefan Sundin", - /* license */ APP_NAME L" é um software grátis e de código aberto!\nDivulgue-o aos seus amigos!", + /* license */ APP_NAME L" é um software grátis e de código aberto.\nDivulgue-o aos seus amigos!", /* donate */ L"&Doar", - /*translation_credit*/ L"Translation credit", + /*translation_credit*/ L"Créditos das traduções", }, /* === misc === */ - /* unhook_error */ L"There was an error disabling "APP_NAME". This was most likely caused by Windows having already disabled "APP_NAME"'s hooks.\n\nIf this is the first time this has happened, you can safely ignore it and continue using "APP_NAME".\n\nIf this is happening repeatedly, you can read on the website wiki how to prevent this from happening again (look for '"APP_NAME" mysteriously stops working' on the About page).", + /* unhook_error */ L"Houve um erro ao desabilitar o "APP_NAME". Isto foi provavelmente causado pelo Windows ter alterados as injeções (hooks) do "APP_NAME".\n\nSe é a primeira vez que isto acontece, você pode ignorar esta mensagem com segurança e continuar a usar o "APP_NAME".\n\nSe isto acontece repetidamente, você pode ler em nossa wiki (em inglês) como evitar a repetição deste erro (procure por \""APP_NAME" mysteriously stops working\" na página \"About\").", };