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\").",
};