Merge branch 'master' into jgrpp
# Conflicts: # src/debug.cpp # src/lang/russian.txt # src/misc_gui.cpp # src/os/windows/crashlog_win.cpp # src/os/windows/font_win32.cpp # src/os/windows/win32.cpp # src/rail_cmd.cpp # src/window_gui.h
This commit is contained in:
@@ -10,6 +10,7 @@ notifications:
|
|||||||
only-by:
|
only-by:
|
||||||
- DorpsGek
|
- DorpsGek
|
||||||
commit-comment:
|
commit-comment:
|
||||||
|
discussion:
|
||||||
pull-request:
|
pull-request:
|
||||||
issue:
|
issue:
|
||||||
tag-created:
|
tag-created:
|
||||||
|
@@ -4,20 +4,22 @@
|
|||||||
#
|
#
|
||||||
macro(compile_flags)
|
macro(compile_flags)
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
# Switch to MT (static) instead of MD (dynamic) binary
|
if(VCPKG_TARGET_TRIPLET MATCHES "-static" AND NOT VCPKG_TARGET_TRIPLET MATCHES "-md")
|
||||||
|
# Switch to MT (static) instead of MD (dynamic) binary
|
||||||
|
|
||||||
# For MSVC two generators are available
|
# For MSVC two generators are available
|
||||||
# - a command line generator (Ninja) using CMAKE_BUILD_TYPE to specify the
|
# - a command line generator (Ninja) using CMAKE_BUILD_TYPE to specify the
|
||||||
# configuration of the build tree
|
# configuration of the build tree
|
||||||
# - an IDE generator (Visual Studio) using CMAKE_CONFIGURATION_TYPES to
|
# - an IDE generator (Visual Studio) using CMAKE_CONFIGURATION_TYPES to
|
||||||
# specify all configurations that will be available in the generated solution
|
# specify all configurations that will be available in the generated solution
|
||||||
list(APPEND MSVC_CONFIGS "${CMAKE_BUILD_TYPE}" "${CMAKE_CONFIGURATION_TYPES}")
|
list(APPEND MSVC_CONFIGS "${CMAKE_BUILD_TYPE}" "${CMAKE_CONFIGURATION_TYPES}")
|
||||||
|
|
||||||
# Set usage of static runtime for all configurations
|
# Set usage of static runtime for all configurations
|
||||||
foreach(MSVC_CONFIG ${MSVC_CONFIGS})
|
foreach(MSVC_CONFIG ${MSVC_CONFIGS})
|
||||||
string(TOUPPER "CMAKE_CXX_FLAGS_${MSVC_CONFIG}" MSVC_FLAGS)
|
string(TOUPPER "CMAKE_CXX_FLAGS_${MSVC_CONFIG}" MSVC_FLAGS)
|
||||||
string(REPLACE "/MD" "/MT" ${MSVC_FLAGS} "${${MSVC_FLAGS}}")
|
string(REPLACE "/MD" "/MT" ${MSVC_FLAGS} "${${MSVC_FLAGS}}")
|
||||||
endforeach()
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
# "If /Zc:rvalueCast is specified, the compiler follows section 5.4 of the
|
# "If /Zc:rvalueCast is specified, the compiler follows section 5.4 of the
|
||||||
# C++11 standard". We need C++11 for the way we use threads.
|
# C++11 standard". We need C++11 for the way we use threads.
|
||||||
|
@@ -183,8 +183,8 @@ static void debug_print(const char *dbg, const char *buf)
|
|||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
if (strcmp(dbg, "desync") != 0) {
|
if (strcmp(dbg, "desync") != 0) {
|
||||||
wchar_t system_buf[512];
|
wchar_t system_buf[512];
|
||||||
convert_to_fs(buffer, system_buf, lengthof(system_buf), true);
|
convert_to_fs(buffer, system_buf, lengthof(system_buf));
|
||||||
_fputts(system_buf, stderr);
|
fputws(system_buf, stderr);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
fputs(buffer, stderr);
|
fputs(buffer, stderr);
|
||||||
|
@@ -479,7 +479,7 @@ static bool DisasterTick_Aircraft(DisasterVehicle *v, uint16 image_override, boo
|
|||||||
DestructIndustry(i);
|
DestructIndustry(i);
|
||||||
|
|
||||||
SetDParam(0, i->town->index);
|
SetDParam(0, i->town->index);
|
||||||
AddTileNewsItem(news_message, NT_ACCIDENT, v->dest_tile);
|
AddIndustryNewsItem(news_message, NT_ACCIDENT, i->index);
|
||||||
if (_settings_client.sound.disaster) SndPlayTileFx(SND_12_EXPLOSION, i->location.tile);
|
if (_settings_client.sound.disaster) SndPlayTileFx(SND_12_EXPLOSION, i->location.tile);
|
||||||
}
|
}
|
||||||
} else if (v->current_order.GetDestination() == 0) {
|
} else if (v->current_order.GetDestination() == 0) {
|
||||||
|
@@ -279,7 +279,7 @@ bool FioCheckFileExists(const std::string &filename, Subdirectory subdir)
|
|||||||
*/
|
*/
|
||||||
bool FileExists(const std::string &filename)
|
bool FileExists(const std::string &filename)
|
||||||
{
|
{
|
||||||
return access(OTTD2FS(filename.c_str()), 0) == 0;
|
return access(OTTD2FS(filename).c_str(), 0) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -358,7 +358,7 @@ static FILE *FioFOpenFileSp(const std::string &filename, const char *mode, Searc
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
if (mode[0] == 'r' && GetFileAttributes(OTTD2FS(buf.c_str())) == INVALID_FILE_ATTRIBUTES) return nullptr;
|
if (mode[0] == 'r' && GetFileAttributes(OTTD2FS(buf).c_str()) == INVALID_FILE_ATTRIBUTES) return nullptr;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
f = fopen(buf.c_str(), mode);
|
f = fopen(buf.c_str(), mode);
|
||||||
@@ -512,11 +512,11 @@ void FioCreateDirectory(const std::string &name)
|
|||||||
/* Ignore directory creation errors; they'll surface later on, and most
|
/* Ignore directory creation errors; they'll surface later on, and most
|
||||||
* of the time they are 'directory already exists' errors anyhow. */
|
* of the time they are 'directory already exists' errors anyhow. */
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
CreateDirectory(OTTD2FS(name.c_str()), nullptr);
|
CreateDirectory(OTTD2FS(name).c_str(), nullptr);
|
||||||
#elif defined(OS2) && !defined(__INNOTEK_LIBC__)
|
#elif defined(OS2) && !defined(__INNOTEK_LIBC__)
|
||||||
mkdir(OTTD2FS(name.c_str()));
|
mkdir(OTTD2FS(name).c_str());
|
||||||
#else
|
#else
|
||||||
mkdir(OTTD2FS(name.c_str()), 0755);
|
mkdir(OTTD2FS(name).c_str(), 0755);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1321,7 +1321,7 @@ static uint ScanPath(FileScanner *fs, const char *extension, const char *path, s
|
|||||||
if (path == nullptr || (dir = ttd_opendir(path)) == nullptr) return 0;
|
if (path == nullptr || (dir = ttd_opendir(path)) == nullptr) return 0;
|
||||||
|
|
||||||
while ((dirent = readdir(dir)) != nullptr) {
|
while ((dirent = readdir(dir)) != nullptr) {
|
||||||
const char *d_name = FS2OTTD(dirent->d_name);
|
std::string d_name = FS2OTTD(dirent->d_name);
|
||||||
|
|
||||||
if (!FiosIsValidFile(path, dirent, &sb)) continue;
|
if (!FiosIsValidFile(path, dirent, &sb)) continue;
|
||||||
|
|
||||||
@@ -1331,7 +1331,7 @@ static uint ScanPath(FileScanner *fs, const char *extension, const char *path, s
|
|||||||
if (S_ISDIR(sb.st_mode)) {
|
if (S_ISDIR(sb.st_mode)) {
|
||||||
/* Directory */
|
/* Directory */
|
||||||
if (!recursive) continue;
|
if (!recursive) continue;
|
||||||
if (strcmp(d_name, ".") == 0 || strcmp(d_name, "..") == 0) continue;
|
if (d_name == "." || d_name == "..") continue;
|
||||||
AppendPathSeparator(filename);
|
AppendPathSeparator(filename);
|
||||||
num += ScanPath(fs, extension, filename.c_str(), basepath_length, recursive);
|
num += ScanPath(fs, extension, filename.c_str(), basepath_length, recursive);
|
||||||
} else if (S_ISREG(sb.st_mode)) {
|
} else if (S_ISREG(sb.st_mode)) {
|
||||||
|
@@ -132,7 +132,7 @@ int closedir(DIR *d);
|
|||||||
*/
|
*/
|
||||||
static inline DIR *ttd_opendir(const char *path)
|
static inline DIR *ttd_opendir(const char *path)
|
||||||
{
|
{
|
||||||
return opendir(OTTD2FS(path));
|
return opendir(OTTD2FS(path).c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -309,7 +309,7 @@ bool FiosFileScanner::AddFile(const std::string &filename, size_t basepath_lengt
|
|||||||
FiosItem *fios = file_list.Append();
|
FiosItem *fios = file_list.Append();
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
// Retrieve the file modified date using GetFileTime rather than stat to work around an obscure MSVC bug that affects Windows XP
|
// Retrieve the file modified date using GetFileTime rather than stat to work around an obscure MSVC bug that affects Windows XP
|
||||||
HANDLE fh = CreateFile(OTTD2FS(filename.c_str()), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr);
|
HANDLE fh = CreateFile(OTTD2FS(filename).c_str(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, 0, nullptr);
|
||||||
|
|
||||||
if (fh != INVALID_HANDLE_VALUE) {
|
if (fh != INVALID_HANDLE_VALUE) {
|
||||||
FILETIME ft;
|
FILETIME ft;
|
||||||
@@ -384,7 +384,7 @@ static void FiosGetFileList(SaveLoadOperation fop, fios_getlist_callback_proc *c
|
|||||||
/* Show subdirectories */
|
/* Show subdirectories */
|
||||||
if ((dir = ttd_opendir(_fios_path->c_str())) != nullptr) {
|
if ((dir = ttd_opendir(_fios_path->c_str())) != nullptr) {
|
||||||
while ((dirent = readdir(dir)) != nullptr) {
|
while ((dirent = readdir(dir)) != nullptr) {
|
||||||
strecpy(d_name, FS2OTTD(dirent->d_name), lastof(d_name));
|
strecpy(d_name, FS2OTTD(dirent->d_name).c_str(), lastof(d_name));
|
||||||
|
|
||||||
/* found file must be directory, but not '.' or '..' */
|
/* found file must be directory, but not '.' or '..' */
|
||||||
if (FiosIsValidFile(_fios_path->c_str(), dirent, &sb) && S_ISDIR(sb.st_mode) &&
|
if (FiosIsValidFile(_fios_path->c_str(), dirent, &sb) && S_ISDIR(sb.st_mode) &&
|
||||||
|
@@ -53,7 +53,7 @@ bool IniFile::SaveToDisk(const std::string &filename)
|
|||||||
std::string file_new{ filename };
|
std::string file_new{ filename };
|
||||||
file_new.append(".new");
|
file_new.append(".new");
|
||||||
|
|
||||||
std::ofstream os(OTTD2FS(file_new.c_str()));
|
std::ofstream os(OTTD2FS(file_new).c_str());
|
||||||
if (os.fail()) return false;
|
if (os.fail()) return false;
|
||||||
|
|
||||||
for (const IniGroup *group = this->group; group != nullptr; group = group->next) {
|
for (const IniGroup *group = this->group; group != nullptr; group = group->next) {
|
||||||
@@ -94,8 +94,8 @@ bool IniFile::SaveToDisk(const std::string &filename)
|
|||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
/* Allocate space for one more \0 character. */
|
/* Allocate space for one more \0 character. */
|
||||||
wchar_t tfilename[MAX_PATH + 1], tfile_new[MAX_PATH + 1];
|
wchar_t tfilename[MAX_PATH + 1], tfile_new[MAX_PATH + 1];
|
||||||
wcsncpy(tfilename, OTTD2FS(filename.c_str()), MAX_PATH);
|
wcsncpy(tfilename, OTTD2FS(filename).c_str(), MAX_PATH);
|
||||||
wcsncpy(tfile_new, OTTD2FS(file_new.c_str()), MAX_PATH);
|
wcsncpy(tfile_new, OTTD2FS(file_new).c_str(), MAX_PATH);
|
||||||
/* SHFileOperation wants a double '\0' terminated string. */
|
/* SHFileOperation wants a double '\0' terminated string. */
|
||||||
tfilename[MAX_PATH - 1] = '\0';
|
tfilename[MAX_PATH - 1] = '\0';
|
||||||
tfile_new[MAX_PATH - 1] = '\0';
|
tfile_new[MAX_PATH - 1] = '\0';
|
||||||
|
@@ -1140,6 +1140,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Configur
|
|||||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtro:
|
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtro:
|
||||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Maximizar tudo
|
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Maximizar tudo
|
||||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Minimizar tudo
|
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Minimizar tudo
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Redefinir todos os parâmetros
|
||||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(não há explicação disponível)
|
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(não há explicação disponível)
|
||||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valor padrão: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valor padrão: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Tipo de config.: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_TYPE :{LTBLUE}Tipo de config.: {ORANGE}{STRING}
|
||||||
@@ -1148,6 +1149,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Config. do jogo
|
|||||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Config. do jogo (guardado no savegame; afeta apenas jogo atual)
|
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Config. do jogo (guardado no savegame; afeta apenas jogo atual)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Config. da companhia (guardado no savegame; afeta apenas novos jogos)
|
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Config. da companhia (guardado no savegame; afeta apenas novos jogos)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Config. da companhia (guardado no savegame; afeta apenas a comp. atual)
|
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Config. da companhia (guardado no savegame; afeta apenas a comp. atual)
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Cuidado!
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Essa ação irá restaurar todas as configurações para os valores padrão.{}Tem certeza que deseja continuar?
|
||||||
|
|
||||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categoria:
|
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categoria:
|
||||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipo:
|
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipo:
|
||||||
@@ -2533,7 +2536,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Construi
|
|||||||
STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Posicione a bóia, que pode ser usada como ponto de rota. Shift altera construção/preço estimado
|
STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Posicione a bóia, que pode ser usada como ponto de rota. Shift altera construção/preço estimado
|
||||||
STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Construir aqueduto. Shift altera construção/preço estimado
|
STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Construir aqueduto. Shift altera construção/preço estimado
|
||||||
STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Define área com água.{}Faz um canal, a menos se CTRL for pressionado ao nível do mar, neste caso inundará ao redor
|
STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Define área com água.{}Faz um canal, a menos se CTRL for pressionado ao nível do mar, neste caso inundará ao redor
|
||||||
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Criar rios
|
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Criar rios. Ctrl seleciona a área na diagonal
|
||||||
|
|
||||||
# Ship depot construction window
|
# Ship depot construction window
|
||||||
STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Orientação do Depósito Naval
|
STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Orientação do Depósito Naval
|
||||||
|
@@ -1140,6 +1140,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Configur
|
|||||||
STR_CONFIG_SETTING_FILTER_TITLE :{G=Femenin}{BLACK}Cadena de filtrat:
|
STR_CONFIG_SETTING_FILTER_TITLE :{G=Femenin}{BLACK}Cadena de filtrat:
|
||||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Desplega-ho tot
|
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Desplega-ho tot
|
||||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Plega-ho tot
|
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Plega-ho tot
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Restableix tots els valors
|
||||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(cap explicació disponible)
|
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(cap explicació disponible)
|
||||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valor per defecte: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valor per defecte: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Tipus de paràmetre: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_TYPE :{LTBLUE}Tipus de paràmetre: {ORANGE}{STRING}
|
||||||
@@ -1148,6 +1149,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Paràmetre de l
|
|||||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Paràmetre de la partida (emmagatzemat a la partida actual; només afecta la partida actual)
|
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Paràmetre de la partida (emmagatzemat a la partida actual; només afecta la partida actual)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Paràmetre de la companyia (emmagatzemat a les partides; només afectarà les partides noves)
|
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Paràmetre de la companyia (emmagatzemat a les partides; només afectarà les partides noves)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Paràmetre de la companyia (emmagatzemat a la partida actual; només afecta la companyia actual)
|
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Paràmetre de la companyia (emmagatzemat a la partida actual; només afecta la companyia actual)
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Avís!
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Aquesta acció restablirà la configuració de la partida als seus valors per defecte.{}Esteu segur que voleu fer-ho?
|
||||||
|
|
||||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categoria:
|
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categoria:
|
||||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipus:
|
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipus:
|
||||||
|
@@ -1139,6 +1139,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Settings
|
|||||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filter string:
|
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filter string:
|
||||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Expand all
|
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Expand all
|
||||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Collapse all
|
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Collapse all
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Reset all values
|
||||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(no explanation available)
|
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(no explanation available)
|
||||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Default value: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Default value: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Setting type: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_TYPE :{LTBLUE}Setting type: {ORANGE}{STRING}
|
||||||
@@ -1147,6 +1148,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Game setting (s
|
|||||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Game setting (stored in save; affects only current game)
|
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Game setting (stored in save; affects only current game)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Company setting (stored in saves; affects only new games)
|
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Company setting (stored in saves; affects only new games)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Company setting (stored in save; affects only current company)
|
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Company setting (stored in save; affects only current company)
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Caution!
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}This action will reset all game settings to their default values.{}Are you sure you want to proceed?
|
||||||
|
|
||||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Category:
|
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Category:
|
||||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Type:
|
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Type:
|
||||||
|
@@ -1139,6 +1139,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Asetukse
|
|||||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Suodatinteksti:
|
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Suodatinteksti:
|
||||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Avaa kaikki
|
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Avaa kaikki
|
||||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Sulje kaikki
|
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Sulje kaikki
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Palauta oletukset
|
||||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(selitystä ei saatavilla)
|
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(selitystä ei saatavilla)
|
||||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Oletusarvo: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Oletusarvo: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Asetuksen tyyppi: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_TYPE :{LTBLUE}Asetuksen tyyppi: {ORANGE}{STRING}
|
||||||
@@ -1147,6 +1148,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Pelin asetus (t
|
|||||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Pelin asetus (tallennetaan tallenteeseen; vaikuttaa vain nykyiseen peliin)
|
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Pelin asetus (tallennetaan tallenteeseen; vaikuttaa vain nykyiseen peliin)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Yhtiön asetus (tallennetaan tallenteisiin; vaikuttaa vain uusiin peleihin)
|
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Yhtiön asetus (tallennetaan tallenteisiin; vaikuttaa vain uusiin peleihin)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Yhtiön asetus (tallennetaan tallennukseen; vaikuttaa vain nykyiseen yhtiöön)
|
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Yhtiön asetus (tallennetaan tallennukseen; vaikuttaa vain nykyiseen yhtiöön)
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Varoitus!
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Tämä toiminto palauttaa pelin kaikki asetukset oletusarvoihinsa.{}Haluatko varmasti jatkaa?
|
||||||
|
|
||||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Kategoria:
|
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Kategoria:
|
||||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tyyppi:
|
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tyyppi:
|
||||||
|
@@ -1140,6 +1140,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Paramèt
|
|||||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtre{NBSP}:
|
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtre{NBSP}:
|
||||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Tout développer
|
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Tout développer
|
||||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Tout réduire
|
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Tout réduire
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Réinitialiser tous les réglages
|
||||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(pas d'explication disponible)
|
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(pas d'explication disponible)
|
||||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valeur par défaut{NBSP}: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valeur par défaut{NBSP}: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Type de paramètre{NBSP}: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_TYPE :{LTBLUE}Type de paramètre{NBSP}: {ORANGE}{STRING}
|
||||||
@@ -1148,6 +1149,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Paramètre de j
|
|||||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Paramètre de jeu (enregistré dans la sauvegarde{NBSP}; affecte uniquement la partie actuelle)
|
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Paramètre de jeu (enregistré dans la sauvegarde{NBSP}; affecte uniquement la partie actuelle)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Paramètre de compagnie (enregistré dans les sauvegardes{NBSP}; affecte uniquement les nouvelles parties)
|
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Paramètre de compagnie (enregistré dans les sauvegardes{NBSP}; affecte uniquement les nouvelles parties)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Paramètre de compagnie (enregistré dans la sauvegarde{NBSP}; affecte uniquement la compagnie actuelle)
|
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Paramètre de compagnie (enregistré dans la sauvegarde{NBSP}; affecte uniquement la compagnie actuelle)
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Attention{NBSP}!
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Par cette action, toues les réglages seront réinitialisés aux valeurs par défaut.{}Êtes-vous sûr de vouloir continuer{NBSP}?
|
||||||
|
|
||||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Catégorie{NBSP}:
|
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Catégorie{NBSP}:
|
||||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Type{NBSP}:
|
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Type{NBSP}:
|
||||||
@@ -2533,7 +2536,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Construi
|
|||||||
STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Placer une bouée pouvant servir de guide aux navires.{}Shift pour afficher seulement le coût estimé.
|
STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Placer une bouée pouvant servir de guide aux navires.{}Shift pour afficher seulement le coût estimé.
|
||||||
STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Construire un aqueduc.{}Shift pour afficher seulement le coût estimé.
|
STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Construire un aqueduc.{}Shift pour afficher seulement le coût estimé.
|
||||||
STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Définir une zone d'eau.{}Construire un canal, sauf si Ctrl est enfoncé au niveau de la mer{NBSP}: dans ce cas, le voisinage sera inondé.
|
STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Définir une zone d'eau.{}Construire un canal, sauf si Ctrl est enfoncé au niveau de la mer{NBSP}: dans ce cas, le voisinage sera inondé.
|
||||||
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Placer des rivières
|
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Placer des rivières. Presser Ctrl pour sélectionner en diagonale
|
||||||
|
|
||||||
# Ship depot construction window
|
# Ship depot construction window
|
||||||
STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Orientation du dépôt
|
STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Orientation du dépôt
|
||||||
|
@@ -1151,6 +1151,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Einstell
|
|||||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Suchtext:
|
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Suchtext:
|
||||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Alles ausklappen
|
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Alles ausklappen
|
||||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Alles einklappen
|
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Alles einklappen
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Alle Werte zurücksetzen
|
||||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(keine Erklärung verfügbar)
|
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(keine Erklärung verfügbar)
|
||||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Standardwert: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Standardwert: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Art der Einstellung: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_TYPE :{LTBLUE}Art der Einstellung: {ORANGE}{STRING}
|
||||||
@@ -1159,6 +1160,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Karten-Einstell
|
|||||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Karten-Einstellung (im Spielstand gespeichert; beeinflusst nur aktuelles Spiel)
|
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Karten-Einstellung (im Spielstand gespeichert; beeinflusst nur aktuelles Spiel)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Firmen-Einstellung (in Spielständen gespeichert; beeinflusst nur neue Spiele)
|
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Firmen-Einstellung (in Spielständen gespeichert; beeinflusst nur neue Spiele)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Firmen-Einstellung (im Spielstand gespeichert; beeinflusst nur aktuelle Firma)
|
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Firmen-Einstellung (im Spielstand gespeichert; beeinflusst nur aktuelle Firma)
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Achtung!
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Diese Aktion setzt alle Spieleinstellungen auf ihre Standardwerte zurück.{}Sind Sie sicher, dass Sie fortfahren möchten?
|
||||||
|
|
||||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Kategorie:
|
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Kategorie:
|
||||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Art:
|
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Art:
|
||||||
|
@@ -966,7 +966,7 @@ STR_GAME_OPTIONS_CURRENCY_MYR :말레이시아
|
|||||||
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :좌측통행
|
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :좌측통행
|
||||||
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :우측통행
|
STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :우측통행
|
||||||
|
|
||||||
STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}도시 이름
|
STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}도시 이름:
|
||||||
STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}도시 이름 스타일을 선택하세요
|
STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}도시 이름 스타일을 선택하세요
|
||||||
|
|
||||||
############ start of townname region
|
############ start of townname region
|
||||||
@@ -1154,6 +1154,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}설정
|
|||||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}검색할 문자열:
|
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}검색할 문자열:
|
||||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}모두 펼치기
|
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}모두 펼치기
|
||||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}모두 접기
|
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}모두 접기
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL :{BLACK}모든 설정 초기화
|
||||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(설명이 존재하지 않습니다)
|
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(설명이 존재하지 않습니다)
|
||||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}기본값: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}기본값: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}설정 종류: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_TYPE :{LTBLUE}설정 종류: {ORANGE}{STRING}
|
||||||
@@ -1162,6 +1163,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :게임 설정 (
|
|||||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :게임 설정 (게임 저장 파일에 저장됨; 현재 게임에만 적용됨)
|
STR_CONFIG_SETTING_TYPE_GAME_INGAME :게임 설정 (게임 저장 파일에 저장됨; 현재 게임에만 적용됨)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :회사 설정 (게임 저장 파일에 저장됨; 새 게임에만 적용됨)
|
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :회사 설정 (게임 저장 파일에 저장됨; 새 게임에만 적용됨)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :회사 설정 (게임 저장 파일에 저장됨; 현재 회사에만 적용됨)
|
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :회사 설정 (게임 저장 파일에 저장됨; 현재 회사에만 적용됨)
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}경고!
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}게임의 모든 설정을 기본값으로 되돌립니다.{}정말 모든 설정을 초기화하시겠습니까?
|
||||||
|
|
||||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}분류:
|
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}분류:
|
||||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}종류:
|
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}종류:
|
||||||
@@ -3851,7 +3854,7 @@ STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING}{G 1
|
|||||||
STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING}{G 1 "은" "는"} 반드시 {STRING} 뒤에 불러와야 합니다
|
STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING}{G 1 "은" "는"} 반드시 {STRING} 뒤에 불러와야 합니다
|
||||||
STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING}{G 1 "은" "는"} OpenTTD {STRING} 버전이나 그 이상이 필요합니다
|
STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING}{G 1 "은" "는"} OpenTTD {STRING} 버전이나 그 이상이 필요합니다
|
||||||
STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF 파일이 번역을 위해 만들어졌습니다
|
STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF 파일이 번역을 위해 만들어졌습니다
|
||||||
STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :NewGRF이 너무 많습니다
|
STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :NewGRF가 너무 많습니다
|
||||||
STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :{2:STRING}{G 2 "을" "를"} 포함한 정적 NewGRF {1:STRING}{G 1 "을" "를"} 불러오는 것은 비동기화를 일으킬 수 있습니다
|
STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :{2:STRING}{G 2 "을" "를"} 포함한 정적 NewGRF {1:STRING}{G 1 "을" "를"} 불러오는 것은 비동기화를 일으킬 수 있습니다
|
||||||
STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :예기치 않은 스프라이트 (스프라이트 {3:NUM})
|
STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :예기치 않은 스프라이트 (스프라이트 {3:NUM})
|
||||||
STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :알려지지 않은 액션 0 속성 {4:HEX} (스프라이트 {3:NUM})
|
STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :알려지지 않은 액션 0 속성 {4:HEX} (스프라이트 {3:NUM})
|
||||||
@@ -3887,7 +3890,7 @@ STR_NEWGRF_LIST_COMPATIBLE :{YELLOW}호환
|
|||||||
STR_NEWGRF_LIST_MISSING :{RED}파일 없음
|
STR_NEWGRF_LIST_MISSING :{RED}파일 없음
|
||||||
|
|
||||||
# NewGRF 'it's broken' warnings
|
# NewGRF 'it's broken' warnings
|
||||||
STR_NEWGRF_BROKEN :{WHITE}'{0:STRING}' NewGRF이 적용되는 과정에서 비동기화나 충돌이 일어날 수 있습니다
|
STR_NEWGRF_BROKEN :{WHITE}'{0:STRING}' NewGRF가 적용되는 과정에서 비동기화나 충돌이 일어날 수 있습니다
|
||||||
STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}차고지 안에 있지 않은 '{1:ENGINE}'에 대한 동력 차량 상태가 바뀌었습니다
|
STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}차고지 안에 있지 않은 '{1:ENGINE}'에 대한 동력 차량 상태가 바뀌었습니다
|
||||||
STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}'{1:ENGINE}'{G 1 "이" "가"} 차고지 안에 있지 않으면 차량 길이가 바뀝니다
|
STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}'{1:ENGINE}'{G 1 "이" "가"} 차고지 안에 있지 않으면 차량 길이가 바뀝니다
|
||||||
STR_NEWGRF_BROKEN_CAPACITY :{WHITE}차량이 기지 안에 있지 않거나 개조가 불가능한 상태에서 '{1:ENGINE}'의 수송량이 변경되었습니다
|
STR_NEWGRF_BROKEN_CAPACITY :{WHITE}차량이 기지 안에 있지 않거나 개조가 불가능한 상태에서 '{1:ENGINE}'의 수송량이 변경되었습니다
|
||||||
|
@@ -1141,6 +1141,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Innstill
|
|||||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtrer streng:
|
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtrer streng:
|
||||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Vis alle
|
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Vis alle
|
||||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Skjul alle
|
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Skjul alle
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Tilbakestill alle verdier
|
||||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(ingen forklaring tilgjengelig)
|
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(ingen forklaring tilgjengelig)
|
||||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Standard verdi: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Standard verdi: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Instillings type: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_TYPE :{LTBLUE}Instillings type: {ORANGE}{STRING}
|
||||||
@@ -1149,6 +1150,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Selskapet innst
|
|||||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Selskapet innstilling (lagret i lagringsfilen, påvirker bare gjeldende spill)
|
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Selskapet innstilling (lagret i lagringsfilen, påvirker bare gjeldende spill)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Selskapet innstilling (lagret i lagringsfilen, påvirker bare nye spill)
|
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Selskapet innstilling (lagret i lagringsfilen, påvirker bare nye spill)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Selskapet innstilling (lagret i lagringsfilen, påvirker bare gjeldende selskap)
|
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Selskapet innstilling (lagret i lagringsfilen, påvirker bare gjeldende selskap)
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Advarsel!
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Denne handlingen vil tilbakestille alle spillinnstillingene til standard verdier.{}Er du sikker på at du vil fortsette?
|
||||||
|
|
||||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Kategori:
|
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Kategori:
|
||||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Type:
|
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Type:
|
||||||
|
@@ -1140,6 +1140,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Definiç
|
|||||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtrar frase:
|
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtrar frase:
|
||||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Expandir todas
|
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Expandir todas
|
||||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Colapsar todas
|
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Colapsar todas
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Repor todos os valores
|
||||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(sem explicação disponível)
|
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(sem explicação disponível)
|
||||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valor por omissão: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valor por omissão: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Tipo de configuração: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_TYPE :{LTBLUE}Tipo de configuração: {ORANGE}{STRING}
|
||||||
@@ -1148,6 +1149,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Configuração
|
|||||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Configuração de jogo (guardado; afeta apenas o jogo atual)
|
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Configuração de jogo (guardado; afeta apenas o jogo atual)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Configurações de empresa (guardado; afeta apenas novos jogos)
|
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Configurações de empresa (guardado; afeta apenas novos jogos)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Configurações de empresa (guardado; afeta apenas a empresa atual)
|
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Configurações de empresa (guardado; afeta apenas a empresa atual)
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Cuidado!
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Esta ação vai repor todas as configurações do jogo para os seus valores padrão.{}Tem a certeza que deseja continuar?
|
||||||
|
|
||||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categoria:
|
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categoria:
|
||||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipo:
|
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipo:
|
||||||
@@ -1905,11 +1908,11 @@ STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Seleccio
|
|||||||
STR_LIVERY_PANEL_TOOLTIP :{BLACK}Seleccione o esquema de cores a alterar, ou esquemas múltiplos utilizando a tecla Ctrl com o botão esquerdo do rato. Marque a caixa para comutar a utilização do esquema de cores
|
STR_LIVERY_PANEL_TOOLTIP :{BLACK}Seleccione o esquema de cores a alterar, ou esquemas múltiplos utilizando a tecla Ctrl com o botão esquerdo do rato. Marque a caixa para comutar a utilização do esquema de cores
|
||||||
|
|
||||||
STR_LIVERY_DEFAULT :Estampagem Padrão
|
STR_LIVERY_DEFAULT :Estampagem Padrão
|
||||||
STR_LIVERY_STEAM :Motor a Vapor
|
STR_LIVERY_STEAM :Locomotivas a Vapor
|
||||||
STR_LIVERY_DIESEL :Motor Diesel
|
STR_LIVERY_DIESEL :Locomotivas Diesel
|
||||||
STR_LIVERY_ELECTRIC :Motor Eléctrico
|
STR_LIVERY_ELECTRIC :Locomotivas Eléctricas
|
||||||
STR_LIVERY_MONORAIL :Motor Monocarril
|
STR_LIVERY_MONORAIL :Motoras Monocarril
|
||||||
STR_LIVERY_MAGLEV :Motor Maglev (Levitação Magnética)
|
STR_LIVERY_MAGLEV :Motoras Maglev (Levitação Magnética)
|
||||||
STR_LIVERY_DMU :DMU
|
STR_LIVERY_DMU :DMU
|
||||||
STR_LIVERY_EMU :EMU
|
STR_LIVERY_EMU :EMU
|
||||||
STR_LIVERY_PASSENGER_WAGON_STEAM :Carruagem de Passageiros (Vapor)
|
STR_LIVERY_PASSENGER_WAGON_STEAM :Carruagem de Passageiros (Vapor)
|
||||||
@@ -1918,8 +1921,8 @@ STR_LIVERY_PASSENGER_WAGON_ELECTRIC :Carruagem de Pa
|
|||||||
STR_LIVERY_PASSENGER_WAGON_MONORAIL :Carruagem de Passageiros (Monocarril)
|
STR_LIVERY_PASSENGER_WAGON_MONORAIL :Carruagem de Passageiros (Monocarril)
|
||||||
STR_LIVERY_PASSENGER_WAGON_MAGLEV :Carruagem de Passageiros (Maglev)
|
STR_LIVERY_PASSENGER_WAGON_MAGLEV :Carruagem de Passageiros (Maglev)
|
||||||
STR_LIVERY_FREIGHT_WAGON :Vagão de Carga
|
STR_LIVERY_FREIGHT_WAGON :Vagão de Carga
|
||||||
STR_LIVERY_BUS :Autocarro
|
STR_LIVERY_BUS :Autocarros
|
||||||
STR_LIVERY_TRUCK :Veículo de Mercadorias
|
STR_LIVERY_TRUCK :Camiões
|
||||||
STR_LIVERY_PASSENGER_SHIP :Navio de passageiros
|
STR_LIVERY_PASSENGER_SHIP :Navio de passageiros
|
||||||
STR_LIVERY_FREIGHT_SHIP :Navio cargueiro
|
STR_LIVERY_FREIGHT_SHIP :Navio cargueiro
|
||||||
STR_LIVERY_HELICOPTER :Helicóptero
|
STR_LIVERY_HELICOPTER :Helicóptero
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
##name Romanian
|
##name Romanian
|
||||||
##ownname Românӑ
|
##ownname Românӑ
|
||||||
##isocode ro_RO
|
##isocode ro_RO
|
||||||
##plural 0
|
##plural 14
|
||||||
##textdir ltr
|
##textdir ltr
|
||||||
##digitsep .
|
##digitsep .
|
||||||
##digitsepcur .
|
##digitsepcur .
|
||||||
@@ -93,37 +93,25 @@ STR_CARGO_SINGULAR_FIZZY_DRINK :Suc acidulat
|
|||||||
|
|
||||||
# Quantity of cargo
|
# Quantity of cargo
|
||||||
STR_QUANTITY_NOTHING :
|
STR_QUANTITY_NOTHING :
|
||||||
STR_QUANTITY_PASSENGERS :{COMMA} călător{P "" i}
|
|
||||||
STR_QUANTITY_COAL :{WEIGHT_LONG} de cărbune
|
STR_QUANTITY_COAL :{WEIGHT_LONG} de cărbune
|
||||||
STR_QUANTITY_MAIL :{COMMA} sac{P "" i} cu colete poștale
|
|
||||||
STR_QUANTITY_OIL :{VOLUME_LONG} de petrol
|
STR_QUANTITY_OIL :{VOLUME_LONG} de petrol
|
||||||
STR_QUANTITY_LIVESTOCK :{COMMA} animal{P "" e}
|
|
||||||
STR_QUANTITY_GOODS :{COMMA} pachet{P "" e} de bunuri
|
|
||||||
STR_QUANTITY_GRAIN :{WEIGHT_LONG} de cereale
|
STR_QUANTITY_GRAIN :{WEIGHT_LONG} de cereale
|
||||||
STR_QUANTITY_WOOD :{WEIGHT_LONG} de lemne
|
STR_QUANTITY_WOOD :{WEIGHT_LONG} de lemne
|
||||||
STR_QUANTITY_IRON_ORE :{WEIGHT_LONG} de minereu de fier
|
STR_QUANTITY_IRON_ORE :{WEIGHT_LONG} de minereu de fier
|
||||||
STR_QUANTITY_STEEL :{WEIGHT_LONG} de oțel
|
STR_QUANTITY_STEEL :{WEIGHT_LONG} de oțel
|
||||||
STR_QUANTITY_VALUABLES :{COMMA} cuti{P e i} de valori
|
|
||||||
STR_QUANTITY_COPPER_ORE :{WEIGHT_LONG} de minereu de cupru
|
STR_QUANTITY_COPPER_ORE :{WEIGHT_LONG} de minereu de cupru
|
||||||
STR_QUANTITY_MAIZE :{WEIGHT_LONG} de porumb
|
STR_QUANTITY_MAIZE :{WEIGHT_LONG} de porumb
|
||||||
STR_QUANTITY_FRUIT :{WEIGHT_LONG} de fructe
|
STR_QUANTITY_FRUIT :{WEIGHT_LONG} de fructe
|
||||||
STR_QUANTITY_DIAMONDS :{COMMA} sac{P "" i} cu diamante
|
|
||||||
STR_QUANTITY_FOOD :{WEIGHT_LONG} de alimente
|
STR_QUANTITY_FOOD :{WEIGHT_LONG} de alimente
|
||||||
STR_QUANTITY_PAPER :{WEIGHT_LONG} de hârtie
|
STR_QUANTITY_PAPER :{WEIGHT_LONG} de hârtie
|
||||||
STR_QUANTITY_GOLD :{COMMA} sac{P "" i} cu aur
|
|
||||||
STR_QUANTITY_WATER :{VOLUME_LONG} de apă
|
STR_QUANTITY_WATER :{VOLUME_LONG} de apă
|
||||||
STR_QUANTITY_WHEAT :{WEIGHT_LONG} de grâu
|
STR_QUANTITY_WHEAT :{WEIGHT_LONG} de grâu
|
||||||
STR_QUANTITY_RUBBER :{VOLUME_LONG} de cauciuc
|
STR_QUANTITY_RUBBER :{VOLUME_LONG} de cauciuc
|
||||||
STR_QUANTITY_SUGAR :{WEIGHT_LONG} de zahăr
|
STR_QUANTITY_SUGAR :{WEIGHT_LONG} de zahăr
|
||||||
STR_QUANTITY_TOYS :{COMMA} sac{P "" i} cu jucării
|
|
||||||
STR_QUANTITY_SWEETS :{COMMA} sac{P "" i} cu bomboane
|
|
||||||
STR_QUANTITY_COLA :{VOLUME_LONG} de cola
|
STR_QUANTITY_COLA :{VOLUME_LONG} de cola
|
||||||
STR_QUANTITY_CANDYFLOSS :{WEIGHT_LONG} de vată de zahăr
|
STR_QUANTITY_CANDYFLOSS :{WEIGHT_LONG} de vată de zahăr
|
||||||
STR_QUANTITY_BUBBLES :{COMMA} balonaș{P "" e}
|
|
||||||
STR_QUANTITY_TOFFEE :{WEIGHT_LONG} de caramel
|
STR_QUANTITY_TOFFEE :{WEIGHT_LONG} de caramel
|
||||||
STR_QUANTITY_BATTERIES :{COMMA} bateri{P e i}
|
|
||||||
STR_QUANTITY_PLASTIC :{VOLUME_LONG} de plastic
|
STR_QUANTITY_PLASTIC :{VOLUME_LONG} de plastic
|
||||||
STR_QUANTITY_FIZZY_DRINKS :{COMMA} bido{P n ane} cu suc
|
|
||||||
STR_QUANTITY_N_A :N/A
|
STR_QUANTITY_N_A :N/A
|
||||||
|
|
||||||
# Two letter abbreviation of cargo name
|
# Two letter abbreviation of cargo name
|
||||||
@@ -163,12 +151,9 @@ STR_ABBREV_NONE :{TINY_FONT}NU
|
|||||||
STR_ABBREV_ALL :{TINY_FONT}TOT
|
STR_ABBREV_ALL :{TINY_FONT}TOT
|
||||||
|
|
||||||
# 'Mode' of transport for cargoes
|
# 'Mode' of transport for cargoes
|
||||||
STR_PASSENGERS :{COMMA} călător{P "" i}
|
|
||||||
STR_BAGS :{COMMA}{NBSP}sac{P "" i}
|
|
||||||
STR_TONS :{COMMA} tone
|
STR_TONS :{COMMA} tone
|
||||||
STR_LITERS :{COMMA} litri
|
STR_LITERS :{COMMA} litri
|
||||||
STR_ITEMS :{COMMA} bucăți
|
STR_ITEMS :{COMMA} bucăți
|
||||||
STR_CRATES :{COMMA} pachet{P "" e}
|
|
||||||
|
|
||||||
# Colours, do not shuffle
|
# Colours, do not shuffle
|
||||||
STR_COLOUR_DARK_BLUE :Albastru închis
|
STR_COLOUR_DARK_BLUE :Albastru închis
|
||||||
@@ -203,16 +188,12 @@ STR_UNITS_WEIGHT_SHORT_IMPERIAL :{COMMA}t
|
|||||||
STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}t
|
STR_UNITS_WEIGHT_SHORT_METRIC :{COMMA}t
|
||||||
STR_UNITS_WEIGHT_SHORT_SI :{COMMA}kg
|
STR_UNITS_WEIGHT_SHORT_SI :{COMMA}kg
|
||||||
|
|
||||||
STR_UNITS_WEIGHT_LONG_IMPERIAL :{COMMA} ton{P ă e}
|
|
||||||
STR_UNITS_WEIGHT_LONG_METRIC :{COMMA} ton{P ă e}
|
|
||||||
STR_UNITS_WEIGHT_LONG_SI :{COMMA} kg
|
STR_UNITS_WEIGHT_LONG_SI :{COMMA} kg
|
||||||
|
|
||||||
STR_UNITS_VOLUME_SHORT_IMPERIAL :{COMMA}gal
|
STR_UNITS_VOLUME_SHORT_IMPERIAL :{COMMA}gal
|
||||||
STR_UNITS_VOLUME_SHORT_METRIC :{COMMA}l
|
STR_UNITS_VOLUME_SHORT_METRIC :{COMMA}l
|
||||||
STR_UNITS_VOLUME_SHORT_SI :{COMMA}m³
|
STR_UNITS_VOLUME_SHORT_SI :{COMMA}m³
|
||||||
|
|
||||||
STR_UNITS_VOLUME_LONG_IMPERIAL :{COMMA} galo{P n ane}
|
|
||||||
STR_UNITS_VOLUME_LONG_METRIC :{COMMA} litr{P u i}
|
|
||||||
STR_UNITS_VOLUME_LONG_SI :{COMMA} m³
|
STR_UNITS_VOLUME_LONG_SI :{COMMA} m³
|
||||||
|
|
||||||
STR_UNITS_FORCE_IMPERIAL :{COMMA} lbf
|
STR_UNITS_FORCE_IMPERIAL :{COMMA} lbf
|
||||||
@@ -1010,7 +991,6 @@ STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Alegeți
|
|||||||
|
|
||||||
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Set grafic de bază
|
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Set grafic de bază
|
||||||
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selectează setul grafic de bază utilizat în joc
|
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selectează setul grafic de bază utilizat în joc
|
||||||
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} fişier{P "" "e"} lipsă/corupt{P "" e}
|
|
||||||
STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Informaţii adiţionale despre setul grafic de bază
|
STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Informaţii adiţionale despre setul grafic de bază
|
||||||
|
|
||||||
STR_GAME_OPTIONS_BASE_SFX :{BLACK}Set sunete de bază
|
STR_GAME_OPTIONS_BASE_SFX :{BLACK}Set sunete de bază
|
||||||
@@ -1019,7 +999,6 @@ STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Informa
|
|||||||
|
|
||||||
STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Setul de muzică de bază
|
STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Setul de muzică de bază
|
||||||
STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selectaţi setul de muzică de bază
|
STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selectaţi setul de muzică de bază
|
||||||
STR_GAME_OPTIONS_BASE_MUSIC_STATUS :{RED}{NUM} fişier{P "" e} corupt{P "" e}
|
|
||||||
STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Informaţii adiţionale despre setul de muzică de bază
|
STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Informaţii adiţionale despre setul de muzică de bază
|
||||||
|
|
||||||
STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Nu s-a putut obține lista de rezoluții suportate
|
STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Nu s-a putut obține lista de rezoluții suportate
|
||||||
@@ -1192,7 +1171,6 @@ STR_CONFIG_SETTING_EXTRADYNAMITE :Permite demolar
|
|||||||
STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Facilitează eliminarea de clădiri şi infrastructură deţinute de oraş
|
STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Facilitează eliminarea de clădiri şi infrastructură deţinute de oraş
|
||||||
STR_CONFIG_SETTING_TRAIN_LENGTH :Lungimea maximă a trenurilor: {STRING}
|
STR_CONFIG_SETTING_TRAIN_LENGTH :Lungimea maximă a trenurilor: {STRING}
|
||||||
STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Configurează lungimea maximă a trenurilor
|
STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Configurează lungimea maximă a trenurilor
|
||||||
STR_CONFIG_SETTING_TILE_LENGTH :{COMMA} pătrăţel{P 0 "" e}
|
|
||||||
STR_CONFIG_SETTING_SMOKE_AMOUNT :Cantitatea de fum/ scântei ale vehiculului: {STRING}
|
STR_CONFIG_SETTING_SMOKE_AMOUNT :Cantitatea de fum/ scântei ale vehiculului: {STRING}
|
||||||
STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Configurează cât de mult fum sau cât de multe scântei sunt emise de vehicule
|
STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Configurează cât de mult fum sau cât de multe scântei sunt emise de vehicule
|
||||||
STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Modelul de acceleraţie al trenurilor: {STRING}
|
STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Modelul de acceleraţie al trenurilor: {STRING}
|
||||||
@@ -1293,16 +1271,12 @@ STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Înnoire automa
|
|||||||
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :După activare, orice vehicul care este învechit va fi reînnoit automat când condițiile de înlocuire automată sunt îndeplinite
|
STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :După activare, orice vehicul care este învechit va fi reînnoit automat când condițiile de înlocuire automată sunt îndeplinite
|
||||||
STR_CONFIG_SETTING_AUTORENEW_MONTHS :Autoreînnoire când vehiculul {STRING} vârsta maximă
|
STR_CONFIG_SETTING_AUTORENEW_MONTHS :Autoreînnoire când vehiculul {STRING} vârsta maximă
|
||||||
STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Vârsta aproximativă când un vehicul ar trebui autoreînnoit
|
STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Vârsta aproximativă când un vehicul ar trebui autoreînnoit
|
||||||
STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :mai are {COMMA} lun{P 0 ă i} până la
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :a depășit cu {COMMA} lun{P 0 ă i}
|
|
||||||
STR_CONFIG_SETTING_AUTORENEW_MONEY :Fonduri minime pentru înnoire automată: {STRING}
|
STR_CONFIG_SETTING_AUTORENEW_MONEY :Fonduri minime pentru înnoire automată: {STRING}
|
||||||
STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Suma minimă care trebuie să rămână disponibilă atunci când se face autoreînnoirea
|
STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Suma minimă care trebuie să rămână disponibilă atunci când se face autoreînnoirea
|
||||||
STR_CONFIG_SETTING_ERRMSG_DURATION :Durata de afișare a mesajelor de eroare: {STRING}
|
STR_CONFIG_SETTING_ERRMSG_DURATION :Durata de afișare a mesajelor de eroare: {STRING}
|
||||||
STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Durata afișării mesajelor de eroare în fereastra roșie. Unele mesaje de eroare (cele critice) nu sunt închise automat după trecerea acestei perioade, și trebuie închise manual.
|
STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Durata afișării mesajelor de eroare în fereastra roșie. Unele mesaje de eroare (cele critice) nu sunt închise automat după trecerea acestei perioade, și trebuie închise manual.
|
||||||
STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} secund{P 0 ă e}
|
|
||||||
STR_CONFIG_SETTING_HOVER_DELAY :Afișează texte informative: {STRING}
|
STR_CONFIG_SETTING_HOVER_DELAY :Afișează texte informative: {STRING}
|
||||||
STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Durata dinaintea afișării sfaturilor când se ține mausul pe un element al interfeței. Alternativ, afișarea sfaturilor poate fi setată pentru clic-dreapta
|
STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Durata dinaintea afișării sfaturilor când se ține mausul pe un element al interfeței. Alternativ, afișarea sfaturilor poate fi setată pentru clic-dreapta
|
||||||
STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Plutește {COMMA} milisecund{P 0 ă e}
|
|
||||||
STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Click dreapta
|
STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Click dreapta
|
||||||
STR_CONFIG_SETTING_POPULATION_IN_LABEL :Afişează populaţia unui oras lângă nume: {STRING}
|
STR_CONFIG_SETTING_POPULATION_IN_LABEL :Afişează populaţia unui oras lângă nume: {STRING}
|
||||||
STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Afișează populația orașelor în numele afișate pe hartă
|
STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Afișează populația orașelor în numele afișate pe hartă
|
||||||
@@ -1495,7 +1469,6 @@ STR_CONFIG_SETTING_SERVINT_ISPERCENT :Intervaluri de
|
|||||||
STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Alege dacă întreținerea vehiculelor este activată de trecerea unei anumite perioade de timp, sau scăzând un anumit procent din gradul de rezistență al vehiculului
|
STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Alege dacă întreținerea vehiculelor este activată de trecerea unei anumite perioade de timp, sau scăzând un anumit procent din gradul de rezistență al vehiculului
|
||||||
STR_CONFIG_SETTING_SERVINT_TRAINS :Intervalul de întreținere implicit al trenurilor: {STRING}
|
STR_CONFIG_SETTING_SERVINT_TRAINS :Intervalul de întreținere implicit al trenurilor: {STRING}
|
||||||
STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Alege perioada de întreținere implicită pentru noi vehicule feroviare, dacă nu există un interval de întreținere stabilit pentru vehicul
|
STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Alege perioada de întreținere implicită pentru noi vehicule feroviare, dacă nu există un interval de întreținere stabilit pentru vehicul
|
||||||
STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA} zi{P 0 "" le}/%
|
|
||||||
STR_CONFIG_SETTING_SERVINT_DISABLED :Dezactivat
|
STR_CONFIG_SETTING_SERVINT_DISABLED :Dezactivat
|
||||||
STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Intervalul de întreținere implicit al vehiculelor rutiere: {STRING}
|
STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Intervalul de întreținere implicit al vehiculelor rutiere: {STRING}
|
||||||
STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Alege perioada de întreținere implicită pentru noi vehicule rutiere, dacă nu există un interval de întreținere stabilit pentru vehicul
|
STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Alege perioada de întreținere implicită pentru noi vehicule rutiere, dacă nu există un interval de întreținere stabilit pentru vehicul
|
||||||
@@ -1560,7 +1533,6 @@ STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Procentul din p
|
|||||||
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Procentul din câştig care este oferit legăturilor intermediare pentru alimentare, oferind mai mult control asupra încasărilor
|
STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Procentul din câştig care este oferit legăturilor intermediare pentru alimentare, oferind mai mult control asupra încasărilor
|
||||||
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Când se trage cu mouse-ul, plasează semnale la fiecare: {STRING}
|
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Când se trage cu mouse-ul, plasează semnale la fiecare: {STRING}
|
||||||
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Configurează distanţa la care se vor construi semnale pe şină până la următorul obstacol (semnal, intersecţie), dacâ se trage cu mouse-ul
|
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Configurează distanţa la care se vor construi semnale pe şină până la următorul obstacol (semnal, intersecţie), dacâ se trage cu mouse-ul
|
||||||
STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} pătrăţel{P 0 "" e}
|
|
||||||
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :La plasarea mai multor semale, păstrează distanţa fixă între acestea: {STRING}
|
STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :La plasarea mai multor semale, păstrează distanţa fixă între acestea: {STRING}
|
||||||
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Construieşte automat semafoare înainte de: {STRING}
|
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Construieşte automat semafoare înainte de: {STRING}
|
||||||
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Alege anul din care se vor folosi semnale electrice pe calea feroviară. Înainte de acest an, se vor folosi semnale non-electrice care au aceeasi funcționalitate dar arată diferit
|
STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Alege anul din care se vor folosi semnale electrice pe calea feroviară. Înainte de acest an, se vor folosi semnale non-electrice care au aceeasi funcționalitate dar arată diferit
|
||||||
@@ -1610,7 +1582,6 @@ STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Poziţia orizon
|
|||||||
STR_CONFIG_SETTING_STATUSBAR_POS :Poziţia barei de stare: {STRING}
|
STR_CONFIG_SETTING_STATUSBAR_POS :Poziţia barei de stare: {STRING}
|
||||||
STR_CONFIG_SETTING_STATUSBAR_POS_HELPTEXT :Poziţia orizontală a barei principale în partea de jos a ecranului
|
STR_CONFIG_SETTING_STATUSBAR_POS_HELPTEXT :Poziţia orizontală a barei principale în partea de jos a ecranului
|
||||||
STR_CONFIG_SETTING_SNAP_RADIUS :Raza "magnetică" a ferestrelor: {STRING}
|
STR_CONFIG_SETTING_SNAP_RADIUS :Raza "magnetică" a ferestrelor: {STRING}
|
||||||
STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} pixel{P 0 "" i}
|
|
||||||
STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :Dezactivat
|
STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :Dezactivat
|
||||||
STR_CONFIG_SETTING_SOFT_LIMIT :Numărul maxim de ferestre nefixate: {STRING}
|
STR_CONFIG_SETTING_SOFT_LIMIT :Numărul maxim de ferestre nefixate: {STRING}
|
||||||
STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA}
|
STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA}
|
||||||
@@ -1639,9 +1610,7 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :deloc
|
|||||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicator iniţial dimensiune oraş: {STRING}
|
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicator iniţial dimensiune oraş: {STRING}
|
||||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Dimensiunea medie a oraşelor mari relativ la oraşele normale, la începutul jocului
|
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Dimensiunea medie a oraşelor mari relativ la oraşele normale, la începutul jocului
|
||||||
|
|
||||||
STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Actualizează graficul de distribuţie la fiecare {STRING} zi{P 0:2 "" le}
|
|
||||||
STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Interval de timp între recalculările graficului de conexiuni. Fiecare recalculare calculează planurile unei componente ale graficului. Asta înseamnă că o valoare X pentru această setare nu va duce la actualizarea întregului grafic la fiecare X zile, ci doar o componentă va fi actualizată. Cu cât e mai mică valoarea, cu atât mai timp CPU va fi necesar pentru calcule. Cu cât e mai mare valoarea, cu atât va dura mai mult până va începe distribuția mărfii pe rute noi.
|
STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Interval de timp între recalculările graficului de conexiuni. Fiecare recalculare calculează planurile unei componente ale graficului. Asta înseamnă că o valoare X pentru această setare nu va duce la actualizarea întregului grafic la fiecare X zile, ci doar o componentă va fi actualizată. Cu cât e mai mică valoarea, cu atât mai timp CPU va fi necesar pentru calcule. Cu cât e mai mare valoarea, cu atât va dura mai mult până va începe distribuția mărfii pe rute noi.
|
||||||
STR_CONFIG_SETTING_LINKGRAPH_TIME :Acordă {STRING} zi{P 0:2 "" le} pentru recalcularea graficului de distribuţie
|
|
||||||
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual
|
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual
|
||||||
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asimetric
|
STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asimetric
|
||||||
STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :simetric
|
STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :simetric
|
||||||
@@ -1793,8 +1762,6 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Verific
|
|||||||
STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Afişează setările pentru Inteligența Artificială şi pentru Scripturi Joc
|
STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Afişează setările pentru Inteligența Artificială şi pentru Scripturi Joc
|
||||||
STR_INTRO_TOOLTIP_QUIT :{BLACK}Ieşi din 'OpenTTD'
|
STR_INTRO_TOOLTIP_QUIT :{BLACK}Ieşi din 'OpenTTD'
|
||||||
|
|
||||||
STR_INTRO_BASESET :{BLACK}Setul grafic actual are lipsă {NUM} sprite{P "" s}. Verificați actualizările pentru setul de bază.
|
|
||||||
STR_INTRO_TRANSLATION :{BLACK}Acestei traduceri îi lipse{P 0 "şte" "sc"} {NUM} text{P "" e}. Te rugăm să ajuti la îmbunătățirea OpenTTD înrolându-te ca traducător. Citește fișierul readme.txt pentru detalii.
|
|
||||||
|
|
||||||
# Quit window
|
# Quit window
|
||||||
STR_QUIT_CAPTION :{WHITE}Ieşire din joc
|
STR_QUIT_CAPTION :{WHITE}Ieşire din joc
|
||||||
@@ -1983,13 +1950,10 @@ STR_NETWORK_START_SERVER_ADVERTISED_LABEL :{BLACK}Publicat
|
|||||||
STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Alege între un joc publicat (prin Internet) și unul privat (reț) game
|
STR_NETWORK_START_SERVER_ADVERTISED_TOOLTIP :{BLACK}Alege între un joc publicat (prin Internet) și unul privat (reț) game
|
||||||
STR_NETWORK_START_SERVER_UNADVERTISED :Nu
|
STR_NETWORK_START_SERVER_UNADVERTISED :Nu
|
||||||
STR_NETWORK_START_SERVER_ADVERTISED :Da
|
STR_NETWORK_START_SERVER_ADVERTISED :Da
|
||||||
STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} clien{P t ţi}
|
|
||||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Număr maxim de clienţi:
|
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Număr maxim de clienţi:
|
||||||
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Alege un număr maxim de clienţi. Nu trebuie ocupate toate locurile.
|
STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Alege un număr maxim de clienţi. Nu trebuie ocupate toate locurile.
|
||||||
STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} compan{P ie ii}
|
|
||||||
STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Companii maxim:
|
STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Companii maxim:
|
||||||
STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Limitează serverul la un anumit număr de companii
|
STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Limitează serverul la un anumit număr de companii
|
||||||
STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} spectator{P "" i}
|
|
||||||
STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Spectatori maxim:
|
STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Spectatori maxim:
|
||||||
STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Limitează serverul la un anumit număr de spectatori
|
STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Limitează serverul la un anumit număr de spectatori
|
||||||
STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Limba vorbită:
|
STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Limba vorbită:
|
||||||
@@ -2076,7 +2040,6 @@ STR_NETWORK_CONNECTING_6 :{BLACK}(6/6) Î
|
|||||||
STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Preluare informaţii joc...
|
STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Preluare informaţii joc...
|
||||||
STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Preluare informaţii companie...
|
STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Preluare informaţii companie...
|
||||||
############ End of leave-in-this-order
|
############ End of leave-in-this-order
|
||||||
STR_NETWORK_CONNECTING_WAITING :{BLACK}{NUM} clien{P t ţi} înaintea noastră
|
|
||||||
STR_NETWORK_CONNECTING_DOWNLOADING_1 :{BLACK}{BYTES} descărcat până acum
|
STR_NETWORK_CONNECTING_DOWNLOADING_1 :{BLACK}{BYTES} descărcat până acum
|
||||||
STR_NETWORK_CONNECTING_DOWNLOADING_2 :{BLACK}{BYTES} / {BYTES} descărcaţi până acum
|
STR_NETWORK_CONNECTING_DOWNLOADING_2 :{BLACK}{BYTES} / {BYTES} descărcaţi până acum
|
||||||
|
|
||||||
@@ -3019,7 +2982,6 @@ STR_INVALID_VEHICLE :<vehicul invali
|
|||||||
# NewGRF scanning window
|
# NewGRF scanning window
|
||||||
STR_NEWGRF_SCAN_CAPTION :{WHITE}Scanez resursele NewGRF
|
STR_NEWGRF_SCAN_CAPTION :{WHITE}Scanez resursele NewGRF
|
||||||
STR_NEWGRF_SCAN_MESSAGE :{BLACK}Se scanează resursele NewGRF. În funcție de numărul acestora, această operație poate dura un timp...
|
STR_NEWGRF_SCAN_MESSAGE :{BLACK}Se scanează resursele NewGRF. În funcție de numărul acestora, această operație poate dura un timp...
|
||||||
STR_NEWGRF_SCAN_STATUS :{BLACK}{NUM} resurs{P 0 "ă" "e"} NewGRF scanat{P "ă" "e"} din aproximativ {NUM} resurs{P "ă" "e"} NewGRF disponibil{P "ă" "e"}
|
|
||||||
STR_NEWGRF_SCAN_ARCHIVES :Scanez pentru arhive
|
STR_NEWGRF_SCAN_ARCHIVES :Scanez pentru arhive
|
||||||
|
|
||||||
# Sign list window
|
# Sign list window
|
||||||
@@ -3053,8 +3015,6 @@ STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING
|
|||||||
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} livrate
|
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} livrate
|
||||||
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (mai sunt necesare)
|
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (mai sunt necesare)
|
||||||
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (livrate)
|
STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (livrate)
|
||||||
STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Orașul crește la fiecare {ORANGE}{COMMA}{BLACK} zi{P "" le}
|
|
||||||
STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Orașul crește la fiecare {ORANGE}{COMMA}{BLACK} zi{P "" le} (cu fonduri)
|
|
||||||
STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Orașul {RED}nu{BLACK} crește
|
STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Orașul {RED}nu{BLACK} crește
|
||||||
STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Limita zgomotului în oraş: {ORANGE}{COMMA}{BLACK} maxim: {ORANGE}{COMMA}
|
STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Limita zgomotului în oraş: {ORANGE}{COMMA}{BLACK} maxim: {ORANGE}{COMMA}
|
||||||
STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Centrează imaginea pe locaţia oraşului. Ctrl+Click deshide o fereastra cu locaţia oraşului
|
STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Centrează imaginea pe locaţia oraşului. Ctrl+Click deshide o fereastra cu locaţia oraşului
|
||||||
@@ -3159,7 +3119,6 @@ STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Referinţ
|
|||||||
# Station list window
|
# Station list window
|
||||||
STR_STATION_LIST_TOOLTIP :{BLACK}Numele staţiilor - clic pe un nume pentru a centra imaginea pe staţia respectivă. Ctrl+Click deshide o fereastra cu locaţia staţiei
|
STR_STATION_LIST_TOOLTIP :{BLACK}Numele staţiilor - clic pe un nume pentru a centra imaginea pe staţia respectivă. Ctrl+Click deshide o fereastra cu locaţia staţiei
|
||||||
STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Ţine apăsat Ctrl pentru a alege mai multe obiecte
|
STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Ţine apăsat Ctrl pentru a alege mai multe obiecte
|
||||||
STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} Staţi{P e i}
|
|
||||||
STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES}
|
STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES}
|
||||||
STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT}
|
STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT}
|
||||||
STR_STATION_LIST_NONE :{YELLOW}- Nici una -
|
STR_STATION_LIST_NONE :{YELLOW}- Nici una -
|
||||||
@@ -3277,10 +3236,6 @@ STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDE
|
|||||||
STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Anul înfiinţării: {WHITE}{NUM}
|
STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Anul înfiinţării: {WHITE}{NUM}
|
||||||
STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Schemă culori:
|
STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Schemă culori:
|
||||||
STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Vehicule:
|
STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Vehicule:
|
||||||
STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} tren{P "" uri}
|
|
||||||
STR_COMPANY_VIEW_ROAD_VEHICLES :{WHITE}{COMMA} autovehicul{P "" e}
|
|
||||||
STR_COMPANY_VIEW_AIRCRAFT :{WHITE}{COMMA} aeronav{P ă e}
|
|
||||||
STR_COMPANY_VIEW_SHIPS :{WHITE}{COMMA} nav{P ã e}
|
|
||||||
STR_COMPANY_VIEW_VEHICLES_NONE :{WHITE}Niciunul
|
STR_COMPANY_VIEW_VEHICLES_NONE :{WHITE}Niciunul
|
||||||
STR_COMPANY_VIEW_COMPANY_VALUE :{GOLD}Valoarea companiei: {WHITE}{CURRENCY_LONG}
|
STR_COMPANY_VIEW_COMPANY_VALUE :{GOLD}Valoarea companiei: {WHITE}{CURRENCY_LONG}
|
||||||
STR_COMPANY_VIEW_SHARES_OWNED_BY :{WHITE}({COMMA}% deţinute de {COMPANY})
|
STR_COMPANY_VIEW_SHARES_OWNED_BY :{WHITE}({COMMA}% deţinute de {COMPANY})
|
||||||
@@ -3289,7 +3244,6 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL :{WHITE}{COMMA}
|
|||||||
STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD :{WHITE}{COMMA} pătrățele cu drumuri
|
STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD :{WHITE}{COMMA} pătrățele cu drumuri
|
||||||
STR_COMPANY_VIEW_INFRASTRUCTURE_WATER :{WHITE}{COMMA} pătrățele de apă
|
STR_COMPANY_VIEW_INFRASTRUCTURE_WATER :{WHITE}{COMMA} pătrățele de apă
|
||||||
STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} pătrățele stații
|
STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} pătrățele stații
|
||||||
STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} aeroport{P "" uri}
|
|
||||||
STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Niciuna
|
STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Niciuna
|
||||||
|
|
||||||
STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Constr. sediu
|
STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Constr. sediu
|
||||||
@@ -3364,9 +3318,6 @@ STR_CONFIG_GAME_PRODUCTION :{WHITE}Schimba
|
|||||||
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Modifică nivelul producţiei (procent, până la 800%)
|
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Modifică nivelul producţiei (procent, până la 800%)
|
||||||
|
|
||||||
# Vehicle lists
|
# Vehicle lists
|
||||||
STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} Tren{P "" uri}
|
|
||||||
STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} - {COMMA} Autovehicule{P "" s}
|
|
||||||
STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} Nav{P ă e}
|
|
||||||
STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} Aeronave
|
STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} Aeronave
|
||||||
|
|
||||||
STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Trenuri - click pe un trn pentru detalii
|
STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Trenuri - click pe un trn pentru detalii
|
||||||
@@ -3395,7 +3346,6 @@ STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Trimite la hang
|
|||||||
STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Click pt oprirea tuturor vehiculelor din listă
|
STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Click pt oprirea tuturor vehiculelor din listă
|
||||||
STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Apasa pentru pornirea tuturor vehiclulelor din lista
|
STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Apasa pentru pornirea tuturor vehiclulelor din lista
|
||||||
|
|
||||||
STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}Comenzi sincronizate pentru {COMMA} vehicul{P "" e}
|
|
||||||
|
|
||||||
# Group window
|
# Group window
|
||||||
STR_GROUP_ALL_TRAINS :Toate trenurile
|
STR_GROUP_ALL_TRAINS :Toate trenurile
|
||||||
@@ -3525,7 +3475,6 @@ STR_DEPOT_RENAME_DEPOT_CAPTION :Redenumire depo
|
|||||||
|
|
||||||
STR_DEPOT_NO_ENGINE :{BLACK}-
|
STR_DEPOT_NO_ENGINE :{BLACK}-
|
||||||
STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING}
|
STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING}
|
||||||
STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} vehicul{P "" e}{STRING}
|
|
||||||
STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT})
|
STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT})
|
||||||
|
|
||||||
STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Trenuri - trage vehiculele cu click stânga pentru a adauga/elimina din tren, click dreapta pe vehicul pentru informaţii. Tasta Ctrl aplică funcţiile pentru întreaga garnitură
|
STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Trenuri - trage vehiculele cu click stânga pentru a adauga/elimina din tren, click dreapta pe vehicul pentru informaţii. Tasta Ctrl aplică funcţiile pentru întreaga garnitură
|
||||||
@@ -3728,8 +3677,6 @@ STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Denumeş
|
|||||||
|
|
||||||
STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Vechime: {LTBLUE}{STRING}{BLACK} Mentenanţă: {LTBLUE}{CURRENCY_LONG}/an
|
STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Vechime: {LTBLUE}{STRING}{BLACK} Mentenanţă: {LTBLUE}{CURRENCY_LONG}/an
|
||||||
# The next two need to stay in this order
|
# The next two need to stay in this order
|
||||||
STR_VEHICLE_INFO_AGE :{COMMA} an{P "" i} ({COMMA})
|
|
||||||
STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} an{P "" i} ({COMMA})
|
|
||||||
|
|
||||||
STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Viteză max.: {LTBLUE}{VELOCITY}
|
STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Viteză max.: {LTBLUE}{VELOCITY}
|
||||||
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Greutate: {LTBLUE}{WEIGHT_SHORT} {BLACK}Putere: {LTBLUE}{POWER}{BLACK} Viteză max.: {LTBLUE}{VELOCITY}
|
STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Greutate: {LTBLUE}{WEIGHT_SHORT} {BLACK}Putere: {LTBLUE}{POWER}{BLACK} Viteză max.: {LTBLUE}{VELOCITY}
|
||||||
@@ -3983,8 +3930,6 @@ STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Călătoriți (
|
|||||||
STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(călătorie pentru {STRING}, neprogramată)
|
STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(călătorie pentru {STRING}, neprogramată)
|
||||||
STR_TIMETABLE_STAY_FOR :şi opreşte pentru {STRING}
|
STR_TIMETABLE_STAY_FOR :şi opreşte pentru {STRING}
|
||||||
STR_TIMETABLE_AND_TRAVEL_FOR :şi călătoreşte pentru {STRING}
|
STR_TIMETABLE_AND_TRAVEL_FOR :şi călătoreşte pentru {STRING}
|
||||||
STR_TIMETABLE_DAYS :{COMMA} zi{P "" le}
|
|
||||||
STR_TIMETABLE_TICKS :{COMMA} tic{P "" uri}
|
|
||||||
|
|
||||||
STR_TIMETABLE_TOTAL_TIME :{BLACK}Acest orar va lua {STRING} pentru finalizare
|
STR_TIMETABLE_TOTAL_TIME :{BLACK}Acest orar va lua {STRING} pentru finalizare
|
||||||
STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Acest orar va lua cel putin {STRING} pentru finalizare (nu in intregime programat)
|
STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Acest orar va lua cel putin {STRING} pentru finalizare (nu in intregime programat)
|
||||||
|
@@ -1265,7 +1265,7 @@ STR_DISASTER_NONE :нет
|
|||||||
STR_DISASTER_REDUCED :сниженная
|
STR_DISASTER_REDUCED :сниженная
|
||||||
STR_DISASTER_NORMAL :обычная
|
STR_DISASTER_NORMAL :обычная
|
||||||
|
|
||||||
STR_SUBSIDY_X1_5 :x1.5
|
STR_SUBSIDY_X1_5 :x1,5
|
||||||
STR_SUBSIDY_X2 :x2
|
STR_SUBSIDY_X2 :x2
|
||||||
STR_SUBSIDY_X3 :x3
|
STR_SUBSIDY_X3 :x3
|
||||||
STR_SUBSIDY_X4 :x4
|
STR_SUBSIDY_X4 :x4
|
||||||
@@ -1275,6 +1275,8 @@ STR_TERRAIN_TYPE_FLAT :Равнинн
|
|||||||
STR_TERRAIN_TYPE_HILLY :Холмистый
|
STR_TERRAIN_TYPE_HILLY :Холмистый
|
||||||
STR_TERRAIN_TYPE_MOUNTAINOUS :Преимущественно горный
|
STR_TERRAIN_TYPE_MOUNTAINOUS :Преимущественно горный
|
||||||
STR_TERRAIN_TYPE_ALPINIST :Исключительно горный
|
STR_TERRAIN_TYPE_ALPINIST :Исключительно горный
|
||||||
|
STR_TERRAIN_TYPE_CUSTOM :Установить высоту вручную
|
||||||
|
STR_TERRAIN_TYPE_CUSTOM_VALUE :Установленная высота ({NUM})
|
||||||
|
|
||||||
STR_CITY_APPROVAL_PERMISSIVE :дозволяющее
|
STR_CITY_APPROVAL_PERMISSIVE :дозволяющее
|
||||||
STR_CITY_APPROVAL_TOLERANT :терпимое
|
STR_CITY_APPROVAL_TOLERANT :терпимое
|
||||||
@@ -1287,6 +1289,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Расш
|
|||||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Фильтр:
|
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Фильтр:
|
||||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Развернуть всё
|
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Развернуть всё
|
||||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Свернуть всё
|
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Свернуть всё
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Сбросить все значения
|
||||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(нет описания)
|
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(нет описания)
|
||||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Значение по умолчанию: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Значение по умолчанию: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Тип настроек: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_TYPE :{LTBLUE}Тип настроек: {ORANGE}{STRING}
|
||||||
@@ -1295,6 +1298,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Настрой
|
|||||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Настройки игры (содержатся в файлах сохранений; действительны только для текущей игры)
|
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Настройки игры (содержатся в файлах сохранений; действительны только для текущей игры)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Настройки компании (содержатся в файлах сохранений; действительны только для новых игр)
|
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Настройки компании (содержатся в файлах сохранений; действительны только для новых игр)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Настройки компании (содержатся в файлах сохранений; действительны только для текущей игры)
|
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Настройки компании (содержатся в файлах сохранений; действительны только для текущей игры)
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Внимание!
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Вы уверены, что хотите сбросить все настройки игры к значениям по умолчанию?
|
||||||
|
|
||||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Категория:
|
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Категория:
|
||||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Тип:
|
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Тип:
|
||||||
@@ -1358,6 +1363,10 @@ STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Включен
|
|||||||
STR_CONFIG_SETTING_CITY_APPROVAL :Отношение городского совета к реструктуризации окрестностей: {STRING}
|
STR_CONFIG_SETTING_CITY_APPROVAL :Отношение городского совета к реструктуризации окрестностей: {STRING}
|
||||||
STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Выберите уровень влияния шума и загрязнения окружающей среды компаниями на их рейтинг в городах и возможность дальнейшего строительства около городов
|
STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Выберите уровень влияния шума и загрязнения окружающей среды компаниями на их рейтинг в городах и возможность дальнейшего строительства около городов
|
||||||
|
|
||||||
|
STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Максимальная высота объектов на карте: {STRING}
|
||||||
|
STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Установить максимальное значение высоты гор на карте. «(Автовыбор)» подберёт приемлемое значение после создания ландшафта.
|
||||||
|
STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM}
|
||||||
|
STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(автовыбор)
|
||||||
STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Невозможно изменить максимальную высоту. На карте есть горы выше этого значения.
|
STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Невозможно изменить максимальную высоту. На карте есть горы выше этого значения.
|
||||||
STR_CONFIG_SETTING_AUTOSLOPE :Разрешить изм. ландшафта под зданиями, дорогами и т. д. (автоспуски): {STRING}
|
STR_CONFIG_SETTING_AUTOSLOPE :Разрешить изм. ландшафта под зданиями, дорогами и т. д. (автоспуски): {STRING}
|
||||||
STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Разрешить изменение ландшафта под домами и дорогами, не требуя их сноса
|
STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Разрешить изменение ландшафта под домами и дорогами, не требуя их сноса
|
||||||
@@ -1502,8 +1511,13 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Выберит
|
|||||||
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Макс. расстояние от края карты до предприятий нефтяной индустрии: {STRING}
|
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Макс. расстояние от края карты до предприятий нефтяной индустрии: {STRING}
|
||||||
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Эта настройка ограничивает расстояние от края карты до нефтяных платформ и нефтеперерабатывающих заводов. Таким образом, на краях карты, оканчивающихся водой, они будут строиться у берега. На картах размером более 256 это значение будет соответственно увеличено.
|
STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Эта настройка ограничивает расстояние от края карты до нефтяных платформ и нефтеперерабатывающих заводов. Таким образом, на краях карты, оканчивающихся водой, они будут строиться у берега. На картах размером более 256 это значение будет соответственно увеличено.
|
||||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Высота снеговой линии: {STRING}
|
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Высота снеговой линии: {STRING}
|
||||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Укажите, на какой высоте в субарктическом климате устанавливается снеговой покров. Наличие снега влияет на расстановку предприятий и на условия роста городов.
|
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Это значение определяет, на какой высоте в субарктическом климате устанавливается снеговой покров. Наличие снега влияет на расстановку предприятий и на условия роста городов.{}Значение может быть установлено только в редакторе сценариев; иначе оно рассчитывается в зависимости от значения «снежного покрытия».
|
||||||
|
STR_CONFIG_SETTING_SNOW_COVERAGE :Снежное покрытие: {STRING}
|
||||||
|
STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Это значение определяет примерную относительную площадь суши, покрытой снегом в субарктическом климате.Наличие снега влияет на расстановку предприятий и на условия роста городов.{}Используется только при создании карты. Земля чуть выше уровня моря никогда не покрывается снегом.
|
||||||
|
STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}%
|
||||||
|
STR_CONFIG_SETTING_DESERT_COVERAGE :Песчаное покрытие: {STRING}
|
||||||
STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Укажите приблизительное количество пустыни на тропическом ландшафте. Пустыня также влияет на промышленное производство. Используется только во время создания карты
|
STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Укажите приблизительное количество пустыни на тропическом ландшафте. Пустыня также влияет на промышленное производство. Используется только во время создания карты
|
||||||
|
STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}%
|
||||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Грубость ландшафта: {STRING}
|
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Грубость ландшафта: {STRING}
|
||||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Только для TerraGenesis){}Выберите количество гор и холмов на карте. На гладком ландшафте холмов немного и они более пологие. На грубом - много гор, и ландшафт может показаться слишком однообразным.
|
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Только для TerraGenesis){}Выберите количество гор и холмов на карте. На гладком ландшафте холмов немного и они более пологие. На грубом - много гор, и ландшафт может показаться слишком однообразным.
|
||||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Очень гладкий
|
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Очень гладкий
|
||||||
@@ -2695,7 +2709,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Стро
|
|||||||
STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Буи помогают в навигации на больших расстояниях; используйте их как маршрутные точки. При нажатом Shift - оценка стоимости строительства.
|
STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Буи помогают в навигации на больших расстояниях; используйте их как маршрутные точки. При нажатом Shift - оценка стоимости строительства.
|
||||||
STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Строительство акведуков. При нажатом Shift - оценка стоимости строительства.
|
STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Строительство акведуков. При нажатом Shift - оценка стоимости строительства.
|
||||||
STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Создать канал.{}При зажатом Ctrl клетка на уровне моря наполняется водой.
|
STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Создать канал.{}При зажатом Ctrl клетка на уровне моря наполняется водой.
|
||||||
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Разместить реки.
|
STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Создание рек на карте. При нажатом Ctrl они создаются по диагонали.
|
||||||
|
|
||||||
# Ship depot construction window
|
# Ship depot construction window
|
||||||
STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Направление дока
|
STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Направление дока
|
||||||
@@ -3073,6 +3087,17 @@ STR_MAPGEN_BY :{BLACK}×
|
|||||||
STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Количество городов:
|
STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Количество городов:
|
||||||
STR_MAPGEN_DATE :{BLACK}Дата:
|
STR_MAPGEN_DATE :{BLACK}Дата:
|
||||||
STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Кол-во предпр.:
|
STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Кол-во предпр.:
|
||||||
|
STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Высочайшая вершина:
|
||||||
|
STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Увеличить максимальную высоту гор на карте на 1
|
||||||
|
STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Уменьшить максимальную высоту гор на карте на 1
|
||||||
|
STR_MAPGEN_SNOW_COVERAGE :{BLACK}Снежное покрытие:
|
||||||
|
STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Увеличить площадь снежного покрытия на 10%
|
||||||
|
STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Уменьшить площадь снежного покрытия на 10%
|
||||||
|
STR_MAPGEN_SNOW_COVERAGE_TEXT :{BLACK}{NUM}%
|
||||||
|
STR_MAPGEN_DESERT_COVERAGE :{BLACK}Песчаное покрытие:
|
||||||
|
STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}Увеличить площадь песчаного покрытия на 10%
|
||||||
|
STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Уменьшить площадь песчаного покрытия на 10%
|
||||||
|
STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}%
|
||||||
STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Снеговая линия:
|
STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Снеговая линия:
|
||||||
STR_MAPGEN_SNOW_LINE_UP :{BLACK}Поднять снеговую линию
|
STR_MAPGEN_SNOW_LINE_UP :{BLACK}Поднять снеговую линию
|
||||||
STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Опустить снеговую линию
|
STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Опустить снеговую линию
|
||||||
@@ -3101,7 +3126,10 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Назв
|
|||||||
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Размер:
|
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Размер:
|
||||||
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} × {NUM}
|
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} × {NUM}
|
||||||
|
|
||||||
|
STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Максимальная высота
|
||||||
STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Cамая высокая вершина
|
STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Cамая высокая вершина
|
||||||
|
STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Снежное покрытие (в %)
|
||||||
|
STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Песчаное покрытие (в %)
|
||||||
STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Изменить высоту снеговой линии
|
STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Изменить высоту снеговой линии
|
||||||
STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Изменить год начала игры
|
STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Изменить год начала игры
|
||||||
|
|
||||||
@@ -4544,6 +4572,7 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Теку
|
|||||||
STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Огромный снимок экрана
|
STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Огромный снимок экрана
|
||||||
STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}Снимок экрана будет иметь размер {COMMA}{NBSP}х{NBSP}{COMMA}{NBSP}пиксел{P ь я ей}. Его создание займёт некоторое время. Продолжить?
|
STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}Снимок экрана будет иметь размер {COMMA}{NBSP}х{NBSP}{COMMA}{NBSP}пиксел{P ь я ей}. Его создание займёт некоторое время. Продолжить?
|
||||||
|
|
||||||
|
STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Карта высот успешно сохранена под именем «{STRING}». Максимальная высота - {NUM}.
|
||||||
STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Снимок экрана сохранён под именем «{STRING}»
|
STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Снимок экрана сохранён под именем «{STRING}»
|
||||||
STR_ERROR_SCREENSHOT_FAILED :{WHITE}Не удалось сделать снимок экрана
|
STR_ERROR_SCREENSHOT_FAILED :{WHITE}Не удалось сделать снимок экрана
|
||||||
|
|
||||||
|
@@ -119,7 +119,7 @@ STR_QUANTITY_SUGAR :{WEIGHT_LONG} d
|
|||||||
STR_QUANTITY_TOYS :{COMMA}{NBSP}juguete{P "" s}
|
STR_QUANTITY_TOYS :{COMMA}{NBSP}juguete{P "" s}
|
||||||
STR_QUANTITY_SWEETS :{COMMA}{NBSP}bolsa{P "" s} de caramelos
|
STR_QUANTITY_SWEETS :{COMMA}{NBSP}bolsa{P "" s} de caramelos
|
||||||
STR_QUANTITY_COLA :{VOLUME_LONG} de cola
|
STR_QUANTITY_COLA :{VOLUME_LONG} de cola
|
||||||
STR_QUANTITY_CANDYFLOSS :{WEIGHT_LONG} de algodón dulce
|
STR_QUANTITY_CANDYFLOSS :{WEIGHT_LONG} de algodón de azúcar
|
||||||
STR_QUANTITY_BUBBLES :{COMMA} burbuja{P "" s}
|
STR_QUANTITY_BUBBLES :{COMMA} burbuja{P "" s}
|
||||||
STR_QUANTITY_TOFFEE :{WEIGHT_LONG} de tofe{P "" s}
|
STR_QUANTITY_TOFFEE :{WEIGHT_LONG} de tofe{P "" s}
|
||||||
STR_QUANTITY_BATTERIES :{COMMA} pila{P "" s}
|
STR_QUANTITY_BATTERIES :{COMMA} pila{P "" s}
|
||||||
@@ -1140,6 +1140,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Configur
|
|||||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Patrón de filtrado:
|
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Patrón de filtrado:
|
||||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Expandir todos
|
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Expandir todos
|
||||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Colapsar todos
|
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Colapsar todos
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Restablecer valores
|
||||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(no hay explicación disponible)
|
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(no hay explicación disponible)
|
||||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valor por defecto: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valor por defecto: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Tipo de opción: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_TYPE :{LTBLUE}Tipo de opción: {ORANGE}{STRING}
|
||||||
@@ -1148,6 +1149,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Opción de part
|
|||||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Opción de partida (almacenada en la partida guardada, afecta solamente a la partida actual)
|
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Opción de partida (almacenada en la partida guardada, afecta solamente a la partida actual)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Opción de empresa (se almacena en las partidas guardadas, afecta solamente a las nuevas partidas)
|
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Opción de empresa (se almacena en las partidas guardadas, afecta solamente a las nuevas partidas)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Opción de empresa (almacenada en la partida guardada, afecta solamente a la empresa actual)
|
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Opción de empresa (almacenada en la partida guardada, afecta solamente a la empresa actual)
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}¡Advertencia!
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Esta acción restablecerá todos los ajustes del juego a sus valores por defecto.{}¿Deseas proceder?
|
||||||
|
|
||||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categoría:
|
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categoría:
|
||||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipo:
|
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipo:
|
||||||
|
@@ -1140,6 +1140,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Configur
|
|||||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtrar texto:
|
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtrar texto:
|
||||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Desplegar todo
|
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Desplegar todo
|
||||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Plegar todo
|
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Plegar todo
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Restablecer todos los ajustes
|
||||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(sin explicación disponible)
|
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(sin explicación disponible)
|
||||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valor por defecto: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valor por defecto: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Tipo de opción: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_TYPE :{LTBLUE}Tipo de opción: {ORANGE}{STRING}
|
||||||
@@ -1148,6 +1149,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Opción de part
|
|||||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Opción de partida (almacenada en la partida guardada, afecta solamente la partida actual)
|
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Opción de partida (almacenada en la partida guardada, afecta solamente la partida actual)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Opción de empresa (se almacena en las partidas guardadas, afecta solamente las partidas nuevas)
|
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Opción de empresa (se almacena en las partidas guardadas, afecta solamente las partidas nuevas)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Opción de empresa (almacenada en la partida guardada, afecta solamente la empresa actual)
|
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Opción de empresa (almacenada en la partida guardada, afecta solamente la empresa actual)
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}¡Advertencia!
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Esta acción restablecerá todos los ajustes del juego a sus valores originales.{}¿Deseas proceder?
|
||||||
|
|
||||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categoría:
|
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categoría:
|
||||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipo:
|
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipo:
|
||||||
|
@@ -1139,6 +1139,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Inställ
|
|||||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Sökfilter:
|
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Sökfilter:
|
||||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Utöka alla
|
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Utöka alla
|
||||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Stäng alla
|
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Stäng alla
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Återställ alla värden
|
||||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(ingen förklaring tillgänglig)
|
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(ingen förklaring tillgänglig)
|
||||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Standardvärde: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Standardvärde: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Typ av inställning: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_TYPE :{LTBLUE}Typ av inställning: {ORANGE}{STRING}
|
||||||
@@ -1147,6 +1148,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Spelinställnin
|
|||||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Spelinställning (sparad i spel-fil och påverkar enbart nuvarande spel)
|
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Spelinställning (sparad i spel-fil och påverkar enbart nuvarande spel)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Företagsinställning (sparad i spel-fil och påverkar enbart nya spel)
|
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Företagsinställning (sparad i spel-fil och påverkar enbart nya spel)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Företagsinställning (sparad i spel-fil och påverkar enbart nuvarande företag)
|
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Företagsinställning (sparad i spel-fil och påverkar enbart nuvarande företag)
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Varning!
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Detta kommer att återställa alla spelinställningar till deras standardvärden.{}Är du säker på att du vill fortsätta?
|
||||||
|
|
||||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Kategori:
|
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Kategori:
|
||||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Typ:
|
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Typ:
|
||||||
|
@@ -1139,6 +1139,7 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Thiết
|
|||||||
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Lọc chuỗi:
|
STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Lọc chuỗi:
|
||||||
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Mở xuống tất cả
|
STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Mở xuống tất cả
|
||||||
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Đóng lại tất cả
|
STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Đóng lại tất cả
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL :{BLACK}Thiết lập lại tất cả
|
||||||
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(hiện không có giải thích nào)
|
STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(hiện không có giải thích nào)
|
||||||
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Giá trị mặc định: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Giá trị mặc định: {ORANGE}{STRING}
|
||||||
STR_CONFIG_SETTING_TYPE :{LTBLUE}Kiểu thiết lập: {ORANGE}{STRING}
|
STR_CONFIG_SETTING_TYPE :{LTBLUE}Kiểu thiết lập: {ORANGE}{STRING}
|
||||||
@@ -1147,6 +1148,8 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Thiết lập t
|
|||||||
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Thiết lập trò chơi (chứa trong save; chỉ tác động tới ván chơi hiện tại)
|
STR_CONFIG_SETTING_TYPE_GAME_INGAME :Thiết lập trò chơi (chứa trong save; chỉ tác động tới ván chơi hiện tại)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Thiết lập công ty (chứa trong save; chỉ tác động tới các ván chơi mới)
|
STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Thiết lập công ty (chứa trong save; chỉ tác động tới các ván chơi mới)
|
||||||
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Thiết lập công ty (chứa trong save; chỉ tác động tới công ty hiện tại)
|
STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Thiết lập công ty (chứa trong save; chỉ tác động tới công ty hiện tại)
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Chú Ý!
|
||||||
|
STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Hành động này sẽ thiết lập lại tất cả các thông số về ban đầu.{}Bạn có muốn tiến hành?
|
||||||
|
|
||||||
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Phân loại:
|
STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Phân loại:
|
||||||
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Kiểu:
|
STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Kiểu:
|
||||||
|
@@ -539,7 +539,7 @@ struct AboutWindow : public Window {
|
|||||||
int line_height; ///< The height of a single line
|
int line_height; ///< The height of a single line
|
||||||
static const int num_visible_lines = 19; ///< The number of lines visible simultaneously
|
static const int num_visible_lines = 19; ///< The number of lines visible simultaneously
|
||||||
|
|
||||||
static const uint TIMER_INTERVAL = 150; ///< Scrolling interval in ms
|
static const uint TIMER_INTERVAL = 2100; ///< Scrolling interval, scaled by line text line height. This value chosen to maintain parity: 2100 / FONT_HEIGHT_NORMAL = 150ms
|
||||||
GUITimer timer;
|
GUITimer timer;
|
||||||
|
|
||||||
AboutWindow() : Window(&_about_desc)
|
AboutWindow() : Window(&_about_desc)
|
||||||
@@ -547,7 +547,6 @@ struct AboutWindow : public Window {
|
|||||||
this->InitNested(WN_GAME_OPTIONS_ABOUT);
|
this->InitNested(WN_GAME_OPTIONS_ABOUT);
|
||||||
|
|
||||||
this->text_position = this->GetWidget<NWidgetBase>(WID_A_SCROLLING_TEXT)->pos_y + this->GetWidget<NWidgetBase>(WID_A_SCROLLING_TEXT)->current_y;
|
this->text_position = this->GetWidget<NWidgetBase>(WID_A_SCROLLING_TEXT)->pos_y + this->GetWidget<NWidgetBase>(WID_A_SCROLLING_TEXT)->current_y;
|
||||||
this->timer.SetInterval(TIMER_INTERVAL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetStringParameters(int widget) const override
|
void SetStringParameters(int widget) const override
|
||||||
@@ -572,6 +571,10 @@ struct AboutWindow : public Window {
|
|||||||
d.width = std::max(d.width, GetStringBoundingBox(_credits[i]).width);
|
d.width = std::max(d.width, GetStringBoundingBox(_credits[i]).width);
|
||||||
}
|
}
|
||||||
*size = maxdim(*size, d);
|
*size = maxdim(*size, d);
|
||||||
|
|
||||||
|
/* Set scroll interval based on required speed. To keep scrolling smooth,
|
||||||
|
* the interval is adjusted rather than the distance moved. */
|
||||||
|
this->timer.SetInterval(TIMER_INTERVAL / FONT_HEIGHT_NORMAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrawWidget(const Rect &r, int widget) const override
|
void DrawWidget(const Rect &r, int widget) const override
|
||||||
@@ -845,7 +848,7 @@ struct TooltipsWindow : public Window
|
|||||||
|
|
||||||
case TCC_EXIT_VIEWPORT: {
|
case TCC_EXIT_VIEWPORT: {
|
||||||
Window *w = FindWindowFromPt(_cursor.pos.x, _cursor.pos.y);
|
Window *w = FindWindowFromPt(_cursor.pos.x, _cursor.pos.y);
|
||||||
if (w == nullptr || IsPtInWindowViewport(w, _cursor.pos.x, _cursor.pos.y) == nullptr) this->delete_next_mouse_loop = true;
|
if (w == nullptr || IsPtInWindowViewport(w, _cursor.pos.x, _cursor.pos.y) == nullptr) delete this;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -134,8 +134,8 @@ void MusicDriver_Cocoa::PlaySong(const MusicSongInfo &song)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *os_file = OTTD2FS(filename.c_str());
|
std::string os_file = OTTD2FS(filename);
|
||||||
CFAutoRelease<CFURLRef> url(CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, (const UInt8*)os_file, strlen(os_file), false));
|
CFAutoRelease<CFURLRef> url(CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, (const UInt8*)os_file.c_str(), os_file.length(), false));
|
||||||
|
|
||||||
if (MusicSequenceFileLoad(_sequence, url.get(), kMusicSequenceFile_AnyType, 0) != noErr) {
|
if (MusicSequenceFileLoad(_sequence, url.get(), kMusicSequenceFile_AnyType, 0) != noErr) {
|
||||||
DEBUG(driver, 0, "cocoa_m: Failed to load MIDI file");
|
DEBUG(driver, 0, "cocoa_m: Failed to load MIDI file");
|
||||||
|
@@ -433,7 +433,7 @@ bool DLSFile::ReadDLSWaveList(FILE *f, DWORD list_length)
|
|||||||
|
|
||||||
bool DLSFile::LoadFile(const wchar_t *file)
|
bool DLSFile::LoadFile(const wchar_t *file)
|
||||||
{
|
{
|
||||||
DEBUG(driver, 2, "DMusic: Try to load DLS file %s", FS2OTTD(file));
|
DEBUG(driver, 2, "DMusic: Try to load DLS file %s", FS2OTTD(file).c_str());
|
||||||
|
|
||||||
FILE *f = _wfopen(file, L"rb");
|
FILE *f = _wfopen(file, L"rb");
|
||||||
if (f == nullptr) return false;
|
if (f == nullptr) return false;
|
||||||
@@ -884,7 +884,7 @@ static const char *LoadDefaultDLSFile(const char *user_dls)
|
|||||||
if (!dls_file.LoadFile(path)) return "Can't load GM DLS collection";
|
if (!dls_file.LoadFile(path)) return "Can't load GM DLS collection";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!dls_file.LoadFile(OTTD2FS(user_dls))) return "Can't load GM DLS collection";
|
if (!dls_file.LoadFile(OTTD2FS(user_dls).c_str())) return "Can't load GM DLS collection";
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get download port and allocate download IDs. */
|
/* Get download port and allocate download IDs. */
|
||||||
|
@@ -29,7 +29,15 @@ static FMusicDriver_FluidSynth iFMusicDriver_FluidSynth;
|
|||||||
|
|
||||||
/** List of sound fonts to try by default. */
|
/** List of sound fonts to try by default. */
|
||||||
static const char *default_sf[] = {
|
static const char *default_sf[] = {
|
||||||
/* Debian/Ubuntu/OpenSUSE preferred */
|
/* FluidSynth preferred */
|
||||||
|
/* See: https://www.fluidsynth.org/api/settings_synth.html#settings_synth_default-soundfont */
|
||||||
|
"/usr/share/soundfonts/default.sf2",
|
||||||
|
|
||||||
|
/* Debian/Ubuntu preferred */
|
||||||
|
/* See: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=929185 */
|
||||||
|
"/usr/share/sounds/sf3/default-GM.sf3",
|
||||||
|
|
||||||
|
/* OpenSUSE preferred */
|
||||||
"/usr/share/sounds/sf2/FluidR3_GM.sf2",
|
"/usr/share/sounds/sf2/FluidR3_GM.sf2",
|
||||||
|
|
||||||
/* RedHat/Fedora/Arch preferred */
|
/* RedHat/Fedora/Arch preferred */
|
||||||
@@ -77,12 +85,22 @@ const char *MusicDriver_FluidSynth::Start(const StringList ¶m)
|
|||||||
/* Load a SoundFont and reset presets (so that new instruments
|
/* Load a SoundFont and reset presets (so that new instruments
|
||||||
* get used from the SoundFont) */
|
* get used from the SoundFont) */
|
||||||
if (!sfont_name) {
|
if (!sfont_name) {
|
||||||
int i;
|
|
||||||
sfont_id = FLUID_FAILED;
|
sfont_id = FLUID_FAILED;
|
||||||
for (i = 0; default_sf[i]; i++) {
|
|
||||||
if (!fluid_is_soundfont(default_sf[i])) continue;
|
/* Try loading the default soundfont registered with FluidSynth. */
|
||||||
sfont_id = fluid_synth_sfload(_midi.synth, default_sf[i], 1);
|
char *default_soundfont;
|
||||||
if (sfont_id != FLUID_FAILED) break;
|
fluid_settings_dupstr(_midi.settings, "synth.default-soundfont", &default_soundfont);
|
||||||
|
if (fluid_is_soundfont(default_soundfont)) {
|
||||||
|
sfont_id = fluid_synth_sfload(_midi.synth, default_soundfont, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If no default soundfont found, try our own list. */
|
||||||
|
if (sfont_id == FLUID_FAILED) {
|
||||||
|
for (int i = 0; default_sf[i]; i++) {
|
||||||
|
if (!fluid_is_soundfont(default_sf[i])) continue;
|
||||||
|
sfont_id = fluid_synth_sfload(_midi.synth, default_sf[i], 1);
|
||||||
|
if (sfont_id != FLUID_FAILED) break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (sfont_id == FLUID_FAILED) return "Could not open any sound font";
|
if (sfont_id == FLUID_FAILED) return "Could not open any sound font";
|
||||||
} else {
|
} else {
|
||||||
|
@@ -26,6 +26,7 @@
|
|||||||
#include "settings_gui.h"
|
#include "settings_gui.h"
|
||||||
#include "widgets/dropdown_func.h"
|
#include "widgets/dropdown_func.h"
|
||||||
#include "widgets/dropdown_type.h"
|
#include "widgets/dropdown_type.h"
|
||||||
|
#include "widgets/slider_func.h"
|
||||||
|
|
||||||
#include "widgets/music_widget.h"
|
#include "widgets/music_widget.h"
|
||||||
|
|
||||||
@@ -643,8 +644,6 @@ static void ShowMusicTrackSelection()
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct MusicWindow : public Window {
|
struct MusicWindow : public Window {
|
||||||
static const int slider_width = 3;
|
|
||||||
|
|
||||||
MusicWindow(WindowDesc *desc, WindowNumber number) : Window(desc)
|
MusicWindow(WindowDesc *desc, WindowNumber number) : Window(desc)
|
||||||
{
|
{
|
||||||
this->InitNested(number);
|
this->InitNested(number);
|
||||||
@@ -740,27 +739,13 @@ struct MusicWindow : public Window {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case WID_M_MUSIC_VOL: case WID_M_EFFECT_VOL: {
|
case WID_M_MUSIC_VOL:
|
||||||
/* Draw a wedge indicating low to high volume level. */
|
DrawVolumeSliderWidget(r, _settings_client.music.music_vol);
|
||||||
const int ha = (r.bottom - r.top) / 5;
|
break;
|
||||||
int wx1 = r.left, wx2 = r.right;
|
|
||||||
if (_current_text_dir == TD_RTL) std::swap(wx1, wx2);
|
case WID_M_EFFECT_VOL:
|
||||||
const uint shadow = _colour_gradient[COLOUR_GREY][3];
|
DrawVolumeSliderWidget(r, _settings_client.music.effect_vol);
|
||||||
const uint fill = _colour_gradient[COLOUR_GREY][6];
|
|
||||||
const uint light = _colour_gradient[COLOUR_GREY][7];
|
|
||||||
const std::vector<Point> wedge{ Point{wx1, r.bottom - ha}, Point{wx2, r.top + ha}, Point{wx2, r.bottom - ha} };
|
|
||||||
GfxFillPolygon(wedge, fill);
|
|
||||||
GfxDrawLine(wedge[0].x, wedge[0].y, wedge[2].x, wedge[2].y, light);
|
|
||||||
GfxDrawLine(wedge[1].x, wedge[1].y, wedge[2].x, wedge[2].y, _current_text_dir == TD_RTL ? shadow : light);
|
|
||||||
GfxDrawLine(wedge[0].x, wedge[0].y, wedge[1].x, wedge[1].y, shadow);
|
|
||||||
/* Draw a slider handle indicating current volume level. */
|
|
||||||
const int sw = ScaleGUITrad(slider_width);
|
|
||||||
byte volume = (widget == WID_M_MUSIC_VOL) ? _settings_client.music.music_vol : _settings_client.music.effect_vol;
|
|
||||||
if (_current_text_dir == TD_RTL) volume = 127 - volume;
|
|
||||||
const int x = r.left + (volume * (r.right - r.left - sw) / 127);
|
|
||||||
DrawFrameRect(x, r.top, x + sw, r.bottom, COLOUR_GREY, FR_NONE);
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -801,19 +786,11 @@ struct MusicWindow : public Window {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case WID_M_MUSIC_VOL: case WID_M_EFFECT_VOL: { // volume sliders
|
case WID_M_MUSIC_VOL: case WID_M_EFFECT_VOL: { // volume sliders
|
||||||
int x = pt.x - this->GetWidget<NWidgetBase>(widget)->pos_x;
|
byte &vol = (widget == WID_M_MUSIC_VOL) ? _settings_client.music.music_vol : _settings_client.music.effect_vol;
|
||||||
|
if (ClickVolumeSliderWidget(this->GetWidget<NWidgetBase>(widget)->GetCurrentRect(), pt, vol)) {
|
||||||
byte *vol = (widget == WID_M_MUSIC_VOL) ? &_settings_client.music.music_vol : &_settings_client.music.effect_vol;
|
if (widget == WID_M_MUSIC_VOL) MusicDriver::GetInstance()->SetVolume(vol);
|
||||||
|
|
||||||
byte new_vol = Clamp(x * 127 / (int)this->GetWidget<NWidgetBase>(widget)->current_x, 0, 127);
|
|
||||||
if (_current_text_dir == TD_RTL) new_vol = 127 - new_vol;
|
|
||||||
/* Clamp to make sure min and max are properly settable */
|
|
||||||
if (new_vol > 124) new_vol = 127;
|
|
||||||
if (new_vol < 3) new_vol = 0;
|
|
||||||
if (new_vol != *vol) {
|
|
||||||
*vol = new_vol;
|
|
||||||
if (widget == WID_M_MUSIC_VOL) MusicDriver::GetInstance()->SetVolume(new_vol);
|
|
||||||
this->SetDirty();
|
this->SetDirty();
|
||||||
|
SetWindowClassesDirty(WC_GAME_OPTIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (click_count > 0) this->mouse_capture_widget = widget;
|
if (click_count > 0) this->mouse_capture_widget = widget;
|
||||||
|
@@ -244,7 +244,7 @@ SOCKET NetworkAddress::Resolve(int family, int socktype, int flags, SocketList *
|
|||||||
if (e != 0) {
|
if (e != 0) {
|
||||||
if (func != ResolveLoopProc) {
|
if (func != ResolveLoopProc) {
|
||||||
DEBUG(net, 0, "getaddrinfo for hostname \"%s\", port %s, address family %s and socket type %s failed: %s",
|
DEBUG(net, 0, "getaddrinfo for hostname \"%s\", port %s, address family %s and socket type %s failed: %s",
|
||||||
this->hostname, port_name, AddressFamilyAsString(family), SocketTypeAsString(socktype), FS2OTTD(gai_strerror(e)));
|
this->hostname, port_name, AddressFamilyAsString(family), SocketTypeAsString(socktype), FS2OTTD(gai_strerror(e)).c_str());
|
||||||
}
|
}
|
||||||
return INVALID_SOCKET;
|
return INVALID_SOCKET;
|
||||||
}
|
}
|
||||||
|
@@ -1264,7 +1264,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback {
|
|||||||
|
|
||||||
this->BuildAvailables();
|
this->BuildAvailables();
|
||||||
|
|
||||||
this->SetWidgetDisabledState(WID_NS_APPLY_CHANGES, !this->editable || !this->modified);
|
this->SetWidgetDisabledState(WID_NS_APPLY_CHANGES, !((this->editable && this->modified) || _settings_client.gui.newgrf_developer_tools));
|
||||||
this->SetWidgetsDisabledState(!this->editable,
|
this->SetWidgetsDisabledState(!this->editable,
|
||||||
WID_NS_PRESET_LIST,
|
WID_NS_PRESET_LIST,
|
||||||
WID_NS_TOGGLE_PALETTE,
|
WID_NS_TOGGLE_PALETTE,
|
||||||
|
@@ -203,9 +203,6 @@ bool GetClipboardContents(char *buffer, const char *last)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char *FS2OTTD(const char *name) {return name;}
|
|
||||||
const char *OTTD2FS(const char *name) {return name;}
|
|
||||||
|
|
||||||
void OSOpenBrowser(const char *url)
|
void OSOpenBrowser(const char *url)
|
||||||
{
|
{
|
||||||
// stub only
|
// stub only
|
||||||
|
@@ -146,9 +146,8 @@ static const char *GetLocalCode()
|
|||||||
* Convert between locales, which from and which to is set in the calling
|
* Convert between locales, which from and which to is set in the calling
|
||||||
* functions OTTD2FS() and FS2OTTD().
|
* functions OTTD2FS() and FS2OTTD().
|
||||||
*/
|
*/
|
||||||
static const char *convert_tofrom_fs(iconv_t convd, const char *name)
|
static const char *convert_tofrom_fs(iconv_t convd, const char *name, char *outbuf, size_t outlen)
|
||||||
{
|
{
|
||||||
static char buf[1024];
|
|
||||||
/* There are different implementations of iconv. The older ones,
|
/* There are different implementations of iconv. The older ones,
|
||||||
* e.g. SUSv2, pass a const pointer, whereas the newer ones, e.g.
|
* e.g. SUSv2, pass a const pointer, whereas the newer ones, e.g.
|
||||||
* IEEE 1003.1 (2004), pass a non-const pointer. */
|
* IEEE 1003.1 (2004), pass a non-const pointer. */
|
||||||
@@ -158,9 +157,8 @@ static const char *convert_tofrom_fs(iconv_t convd, const char *name)
|
|||||||
const char *inbuf = name;
|
const char *inbuf = name;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
char *outbuf = buf;
|
|
||||||
size_t outlen = sizeof(buf) - 1;
|
|
||||||
size_t inlen = strlen(name);
|
size_t inlen = strlen(name);
|
||||||
|
char *buf = outbuf;
|
||||||
|
|
||||||
strecpy(outbuf, name, outbuf + outlen);
|
strecpy(outbuf, name, outbuf + outlen);
|
||||||
|
|
||||||
@@ -179,9 +177,10 @@ static const char *convert_tofrom_fs(iconv_t convd, const char *name)
|
|||||||
* @param name pointer to a valid string that will be converted
|
* @param name pointer to a valid string that will be converted
|
||||||
* @return pointer to a new stringbuffer that contains the converted string
|
* @return pointer to a new stringbuffer that contains the converted string
|
||||||
*/
|
*/
|
||||||
const char *OTTD2FS(const char *name)
|
std::string OTTD2FS(const std::string &name)
|
||||||
{
|
{
|
||||||
static iconv_t convd = (iconv_t)(-1);
|
static iconv_t convd = (iconv_t)(-1);
|
||||||
|
char buf[1024] = {};
|
||||||
|
|
||||||
if (convd == (iconv_t)(-1)) {
|
if (convd == (iconv_t)(-1)) {
|
||||||
const char *env = GetLocalCode();
|
const char *env = GetLocalCode();
|
||||||
@@ -192,17 +191,18 @@ const char *OTTD2FS(const char *name)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return convert_tofrom_fs(convd, name);
|
return convert_tofrom_fs(convd, name.c_str(), buf, lengthof(buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert to OpenTTD's encoding from that of the local environment
|
* Convert to OpenTTD's encoding from that of the local environment
|
||||||
* @param name pointer to a valid string that will be converted
|
* @param name valid string that will be converted
|
||||||
* @return pointer to a new stringbuffer that contains the converted string
|
* @return pointer to a new stringbuffer that contains the converted string
|
||||||
*/
|
*/
|
||||||
const char *FS2OTTD(const char *name)
|
std::string FS2OTTD(const std::string &name)
|
||||||
{
|
{
|
||||||
static iconv_t convd = (iconv_t)(-1);
|
static iconv_t convd = (iconv_t)(-1);
|
||||||
|
char buf[1024] = {};
|
||||||
|
|
||||||
if (convd == (iconv_t)(-1)) {
|
if (convd == (iconv_t)(-1)) {
|
||||||
const char *env = GetLocalCode();
|
const char *env = GetLocalCode();
|
||||||
@@ -213,12 +213,9 @@ const char *FS2OTTD(const char *name)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return convert_tofrom_fs(convd, name);
|
return convert_tofrom_fs(convd, name.c_str(), buf, lengthof(buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
const char *FS2OTTD(const char *name) {return name;}
|
|
||||||
const char *OTTD2FS(const char *name) {return name;}
|
|
||||||
#endif /* WITH_ICONV */
|
#endif /* WITH_ICONV */
|
||||||
|
|
||||||
void ShowInfo(const char *str)
|
void ShowInfo(const char *str)
|
||||||
|
@@ -231,7 +231,7 @@ static char *PrintModuleInfo(char *output, const char *last, HMODULE mod)
|
|||||||
GetModuleFileName(mod, buffer, MAX_PATH);
|
GetModuleFileName(mod, buffer, MAX_PATH);
|
||||||
GetFileInfo(&dfi, buffer);
|
GetFileInfo(&dfi, buffer);
|
||||||
output += seprintf(output, last, " %-20s handle: %p size: %d crc: %.8X date: %d-%.2d-%.2d %.2d:%.2d:%.2d\n",
|
output += seprintf(output, last, " %-20s handle: %p size: %d crc: %.8X date: %d-%.2d-%.2d %.2d:%.2d:%.2d\n",
|
||||||
FS2OTTD(buffer),
|
FS2OTTD(buffer).c_str(),
|
||||||
mod,
|
mod,
|
||||||
dfi.size,
|
dfi.size,
|
||||||
dfi.crc32,
|
dfi.crc32,
|
||||||
@@ -579,7 +579,7 @@ char *CrashLogWindows::AppendDecodedStacktrace(char *buffer, const char *last) c
|
|||||||
MiniDumpWriteDump_t funcMiniDumpWriteDump = (MiniDumpWriteDump_t)GetProcAddress(dbghelp, "MiniDumpWriteDump");
|
MiniDumpWriteDump_t funcMiniDumpWriteDump = (MiniDumpWriteDump_t)GetProcAddress(dbghelp, "MiniDumpWriteDump");
|
||||||
if (funcMiniDumpWriteDump != nullptr) {
|
if (funcMiniDumpWriteDump != nullptr) {
|
||||||
seprintf(filename, filename_last, "%scrash.dmp", _personal_dir.c_str());
|
seprintf(filename, filename_last, "%scrash.dmp", _personal_dir.c_str());
|
||||||
HANDLE file = CreateFile(OTTD2FS(filename), GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, 0, 0);
|
HANDLE file = CreateFile(OTTD2FS(filename).c_str(), GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, 0, 0);
|
||||||
HANDLE proc = GetCurrentProcess();
|
HANDLE proc = GetCurrentProcess();
|
||||||
DWORD procid = GetCurrentProcessId();
|
DWORD procid = GetCurrentProcessId();
|
||||||
MINIDUMP_EXCEPTION_INFORMATION mdei;
|
MINIDUMP_EXCEPTION_INFORMATION mdei;
|
||||||
@@ -810,7 +810,8 @@ static INT_PTR CALLBACK CrashDialogFunc(HWND wnd, UINT msg, WPARAM wParam, LPARA
|
|||||||
switch (msg) {
|
switch (msg) {
|
||||||
case WM_INITDIALOG: {
|
case WM_INITDIALOG: {
|
||||||
/* We need to put the crash-log in a separate buffer because the default
|
/* We need to put the crash-log in a separate buffer because the default
|
||||||
* buffer in OTTD2FS is not large enough (512 chars) */
|
* buffer in MB_TO_WIDE is not large enough (512 chars) */
|
||||||
|
wchar_t filenamebuf[MAX_PATH * 2];
|
||||||
wchar_t crash_msgW[lengthof(CrashLogWindows::current->crashlog)];
|
wchar_t crash_msgW[lengthof(CrashLogWindows::current->crashlog)];
|
||||||
/* Convert unix -> dos newlines because the edit box only supports that properly :( */
|
/* Convert unix -> dos newlines because the edit box only supports that properly :( */
|
||||||
const char *unix_nl = CrashLogWindows::current->crashlog;
|
const char *unix_nl = CrashLogWindows::current->crashlog;
|
||||||
@@ -825,19 +826,23 @@ static INT_PTR CALLBACK CrashDialogFunc(HWND wnd, UINT msg, WPARAM wParam, LPARA
|
|||||||
|
|
||||||
/* Add path to crash.log and crash.dmp (if any) to the crash window text */
|
/* Add path to crash.log and crash.dmp (if any) to the crash window text */
|
||||||
size_t len = wcslen(_crash_desc) + 2;
|
size_t len = wcslen(_crash_desc) + 2;
|
||||||
len += wcslen(OTTD2FS(CrashLogWindows::current->crashlog_filename)) + 2;
|
len += wcslen(convert_to_fs(CrashLogWindows::current->crashlog_filename, filenamebuf, lengthof(filenamebuf))) + 2;
|
||||||
len += wcslen(OTTD2FS(CrashLogWindows::current->crashdump_filename)) + 2;
|
len += wcslen(convert_to_fs(CrashLogWindows::current->crashdump_filename, filenamebuf, lengthof(filenamebuf))) + 2;
|
||||||
len += wcslen(OTTD2FS(CrashLogWindows::current->screenshot_filename)) + 1;
|
len += wcslen(convert_to_fs(CrashLogWindows::current->screenshot_filename, filenamebuf, lengthof(filenamebuf))) + 1;
|
||||||
|
|
||||||
wchar_t *text = AllocaM(wchar_t, len);
|
wchar_t *text = AllocaM(wchar_t, len);
|
||||||
_snwprintf(text, len, _crash_desc, OTTD2FS(CrashLogWindows::current->crashlog_filename));
|
int printed = _snwprintf(text, len, _crash_desc, convert_to_fs(CrashLogWindows::current->crashlog_filename, filenamebuf, lengthof(filenamebuf)));
|
||||||
if (_settings_client.gui.developer > 0 && OTTD2FS(CrashLogWindows::current->crashdump_filename)[0] != L'\0') {
|
if (printed < 0 || (size_t)printed > len) {
|
||||||
wcscat(text, L"\n");
|
MessageBox(wnd, L"Catastrophic failure trying to display crash message. Could not perform text formatting.", L"OpenTTD", MB_ICONERROR);
|
||||||
wcscat(text, OTTD2FS(CrashLogWindows::current->crashdump_filename));
|
return FALSE;
|
||||||
}
|
}
|
||||||
if (OTTD2FS(CrashLogWindows::current->screenshot_filename)[0] != L'\0') {
|
if (_settings_client.gui.developer > 0 && convert_to_fs(CrashLogWindows::current->crashdump_filename, filenamebuf, lengthof(filenamebuf))[0] != L'\0') {
|
||||||
wcscat(text, L"\n");
|
wcscat(text, L"\n");
|
||||||
wcscat(text, OTTD2FS(CrashLogWindows::current->screenshot_filename));
|
wcscat(text, filenamebuf);
|
||||||
|
}
|
||||||
|
if (convert_to_fs(CrashLogWindows::current->screenshot_filename, filenamebuf, lengthof(filenamebuf))[0] != L'\0') {
|
||||||
|
wcscat(text, L"\n");
|
||||||
|
wcscat(text, filenamebuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
SetDlgItemText(wnd, 10, text);
|
SetDlgItemText(wnd, 10, text);
|
||||||
@@ -853,11 +858,13 @@ static INT_PTR CALLBACK CrashDialogFunc(HWND wnd, UINT msg, WPARAM wParam, LPARA
|
|||||||
case 13: // Emergency save
|
case 13: // Emergency save
|
||||||
_savegame_DBGL_data = CrashLogWindows::current->crashlog;
|
_savegame_DBGL_data = CrashLogWindows::current->crashlog;
|
||||||
_save_DBGC_data = true;
|
_save_DBGC_data = true;
|
||||||
|
wchar_t filenamebuf[MAX_PATH * 2];
|
||||||
char filename[MAX_PATH];
|
char filename[MAX_PATH];
|
||||||
if (CrashLogWindows::current->WriteSavegame(filename, lastof(filename), CrashLogWindows::current->name_buffer)) {
|
if (CrashLogWindows::current->WriteSavegame(filename, lastof(filename), CrashLogWindows::current->name_buffer)) {
|
||||||
size_t len = wcslen(_save_succeeded) + wcslen(OTTD2FS(filename)) + 1;
|
convert_to_fs(filename, filenamebuf, lengthof(filenamebuf));
|
||||||
|
size_t len = lengthof(_save_succeeded) + wcslen(filenamebuf) + 1;
|
||||||
wchar_t *text = AllocaM(wchar_t, len);
|
wchar_t *text = AllocaM(wchar_t, len);
|
||||||
_snwprintf(text, len, _save_succeeded, OTTD2FS(filename));
|
_snwprintf(text, len, _save_succeeded, filenamebuf);
|
||||||
MessageBox(wnd, text, L"Save successful", MB_ICONINFORMATION);
|
MessageBox(wnd, text, L"Save successful", MB_ICONINFORMATION);
|
||||||
} else {
|
} else {
|
||||||
MessageBox(wnd, L"Save failed", L"Save failed", MB_ICONINFORMATION);
|
MessageBox(wnd, L"Save failed", L"Save failed", MB_ICONINFORMATION);
|
||||||
@@ -866,7 +873,7 @@ static INT_PTR CALLBACK CrashDialogFunc(HWND wnd, UINT msg, WPARAM wParam, LPARA
|
|||||||
_save_DBGC_data = false;
|
_save_DBGC_data = false;
|
||||||
break;
|
break;
|
||||||
case 15: // Expand window to show crash-message
|
case 15: // Expand window to show crash-message
|
||||||
_expanded ^= 1;
|
_expanded = !_expanded;
|
||||||
SetWndSize(wnd, _expanded);
|
SetWndSize(wnd, _expanded);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -83,7 +83,7 @@ FT_Error GetFontByFaceName(const char *font_name, FT_Face *face)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Convert font name to file system encoding. */
|
/* Convert font name to file system encoding. */
|
||||||
wchar_t *font_namep = wcsdup(OTTD2FS(font_name));
|
wchar_t *font_namep = wcsdup(OTTD2FS(font_name).c_str());
|
||||||
|
|
||||||
for (index = 0;; index++) {
|
for (index = 0;; index++) {
|
||||||
wchar_t *s;
|
wchar_t *s;
|
||||||
@@ -377,6 +377,7 @@ Win32FontCache::Win32FontCache(FontSize fs, const LOGFONT &logfont, int pixels)
|
|||||||
{
|
{
|
||||||
this->dc = CreateCompatibleDC(nullptr);
|
this->dc = CreateCompatibleDC(nullptr);
|
||||||
this->SetFontSize(fs, pixels);
|
this->SetFontSize(fs, pixels);
|
||||||
|
this->fontname = FS2OTTD(this->logfont.lfFaceName);
|
||||||
}
|
}
|
||||||
|
|
||||||
Win32FontCache::~Win32FontCache()
|
Win32FontCache::~Win32FontCache()
|
||||||
@@ -440,7 +441,7 @@ void Win32FontCache::SetFontSize(FontSize fs, int pixels)
|
|||||||
|
|
||||||
font_height_cache[this->fs] = this->GetHeight();
|
font_height_cache[this->fs] = this->GetHeight();
|
||||||
|
|
||||||
DEBUG(freetype, 2, "Loaded font '%s' with size %d", FS2OTTD((LPTSTR)((BYTE *)otm + (ptrdiff_t)otm->otmpFullName)), pixels);
|
DEBUG(freetype, 2, "Loaded font '%s' with size %d", FS2OTTD((LPWSTR)((BYTE *)otm + (ptrdiff_t)otm->otmpFullName)).c_str(), pixels);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -499,7 +500,7 @@ void Win32FontCache::ClearFontCache()
|
|||||||
* For anti-aliased rendering, GDI uses the strange value range of 0 to 64,
|
* For anti-aliased rendering, GDI uses the strange value range of 0 to 64,
|
||||||
* inclusively. To map this to 0 to 255, we shift left by two and then
|
* inclusively. To map this to 0 to 255, we shift left by two and then
|
||||||
* subtract one. */
|
* subtract one. */
|
||||||
uint pitch = Align(aa ? gm.gmBlackBoxX : std::max(gm.gmBlackBoxX / 8u, 1u), 4);
|
uint pitch = Align(aa ? gm.gmBlackBoxX : std::max((gm.gmBlackBoxX + 7u) / 8u, 1u), 4);
|
||||||
|
|
||||||
/* Draw shadow for medium size. */
|
/* Draw shadow for medium size. */
|
||||||
if (this->fs == FS_NORMAL && !aa) {
|
if (this->fs == FS_NORMAL && !aa) {
|
||||||
@@ -543,10 +544,10 @@ void Win32FontCache::ClearFontCache()
|
|||||||
/* Convert characters outside of the BMP into surrogate pairs. */
|
/* Convert characters outside of the BMP into surrogate pairs. */
|
||||||
WCHAR chars[2];
|
WCHAR chars[2];
|
||||||
if (key >= 0x010000U) {
|
if (key >= 0x010000U) {
|
||||||
chars[0] = (WCHAR)(((key - 0x010000U) >> 10) + 0xD800);
|
chars[0] = (wchar_t)(((key - 0x010000U) >> 10) + 0xD800);
|
||||||
chars[1] = (WCHAR)(((key - 0x010000U) & 0x3FF) + 0xDC00);
|
chars[1] = (wchar_t)(((key - 0x010000U) & 0x3FF) + 0xDC00);
|
||||||
} else {
|
} else {
|
||||||
chars[0] = (WCHAR)(key & 0xFFFF);
|
chars[0] = (wchar_t)(key & 0xFFFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
WORD glyphs[2] = { 0, 0 };
|
WORD glyphs[2] = { 0, 0 };
|
||||||
@@ -607,12 +608,12 @@ void LoadWin32Font(FontSize fs)
|
|||||||
|
|
||||||
/* See if this is an absolute path. */
|
/* See if this is an absolute path. */
|
||||||
if (FileExists(settings->font)) {
|
if (FileExists(settings->font)) {
|
||||||
convert_to_fs(settings->font, fontPath, lengthof(fontPath), false);
|
convert_to_fs(settings->font, fontPath, lengthof(fontPath));
|
||||||
} else {
|
} else {
|
||||||
/* Scan the search-paths to see if it can be found. */
|
/* Scan the search-paths to see if it can be found. */
|
||||||
std::string full_font = FioFindFullPath(BASE_DIR, settings->font);
|
std::string full_font = FioFindFullPath(BASE_DIR, settings->font);
|
||||||
if (!full_font.empty()) {
|
if (!full_font.empty()) {
|
||||||
convert_to_fs(full_font.c_str(), fontPath, lengthof(fontPath), false);
|
convert_to_fs(full_font.c_str(), fontPath, lengthof(fontPath));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -650,7 +651,7 @@ void LoadWin32Font(FontSize fs)
|
|||||||
|
|
||||||
if (logfont.lfFaceName[0] == 0) {
|
if (logfont.lfFaceName[0] == 0) {
|
||||||
logfont.lfWeight = strcasestr(settings->font, " bold") != nullptr ? FW_BOLD : FW_NORMAL; // Poor man's way to allow selecting bold fonts.
|
logfont.lfWeight = strcasestr(settings->font, " bold") != nullptr ? FW_BOLD : FW_NORMAL; // Poor man's way to allow selecting bold fonts.
|
||||||
convert_to_fs(settings->font, logfont.lfFaceName, lengthof(logfont.lfFaceName), false);
|
convert_to_fs(settings->font, logfont.lfFaceName, lengthof(logfont.lfFaceName));
|
||||||
}
|
}
|
||||||
|
|
||||||
HFONT font = CreateFontIndirect(&logfont);
|
HFONT font = CreateFontIndirect(&logfont);
|
||||||
|
@@ -21,6 +21,7 @@ private:
|
|||||||
HDC dc = nullptr; ///< Cached GDI device context.
|
HDC dc = nullptr; ///< Cached GDI device context.
|
||||||
HGDIOBJ old_font; ///< Old font selected into the GDI context.
|
HGDIOBJ old_font; ///< Old font selected into the GDI context.
|
||||||
SIZE glyph_size; ///< Maximum size of regular glyphs.
|
SIZE glyph_size; ///< Maximum size of regular glyphs.
|
||||||
|
std::string fontname; ///< Cached copy of this->logfont.lfFaceName
|
||||||
|
|
||||||
void SetFontSize(FontSize fs, int pixels);
|
void SetFontSize(FontSize fs, int pixels);
|
||||||
|
|
||||||
@@ -33,7 +34,7 @@ public:
|
|||||||
~Win32FontCache();
|
~Win32FontCache();
|
||||||
void ClearFontCache() override;
|
void ClearFontCache() override;
|
||||||
GlyphID MapCharToGlyph(WChar key) override;
|
GlyphID MapCharToGlyph(WChar key) override;
|
||||||
const char *GetFontName() override { return FS2OTTD(this->logfont.lfFaceName); }
|
const char *GetFontName() override { return this->fontname.c_str(); }
|
||||||
const void *GetOSHandle() override { return &this->logfont; }
|
const void *GetOSHandle() override { return &this->logfont; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -63,7 +63,7 @@ bool LoadLibraryList(Function proc[], const char *dll)
|
|||||||
{
|
{
|
||||||
while (*dll != '\0') {
|
while (*dll != '\0') {
|
||||||
HMODULE lib;
|
HMODULE lib;
|
||||||
lib = LoadLibrary(OTTD2FS(dll));
|
lib = LoadLibrary(OTTD2FS(dll).c_str());
|
||||||
|
|
||||||
if (lib == nullptr) return false;
|
if (lib == nullptr) return false;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
@@ -83,12 +83,12 @@ bool LoadLibraryList(Function proc[], const char *dll)
|
|||||||
void ShowOSErrorBox(const char *buf, bool system)
|
void ShowOSErrorBox(const char *buf, bool system)
|
||||||
{
|
{
|
||||||
MyShowCursor(true);
|
MyShowCursor(true);
|
||||||
MessageBox(GetActiveWindow(), OTTD2FS(buf), L"Error!", MB_ICONSTOP | MB_TASKMODAL);
|
MessageBox(GetActiveWindow(), OTTD2FS(buf).c_str(), L"Error!", MB_ICONSTOP | MB_TASKMODAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OSOpenBrowser(const char *url)
|
void OSOpenBrowser(const char *url)
|
||||||
{
|
{
|
||||||
ShellExecute(GetActiveWindow(), L"open", OTTD2FS(url), nullptr, nullptr, SW_SHOWNORMAL);
|
ShellExecute(GetActiveWindow(), L"open", OTTD2FS(url).c_str(), nullptr, nullptr, SW_SHOWNORMAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Code below for windows version of opendir/readdir/closedir copied and
|
/* Code below for windows version of opendir/readdir/closedir copied and
|
||||||
@@ -147,14 +147,14 @@ DIR *opendir(const wchar_t *path)
|
|||||||
if ((fa != INVALID_FILE_ATTRIBUTES) && (fa & FILE_ATTRIBUTE_DIRECTORY)) {
|
if ((fa != INVALID_FILE_ATTRIBUTES) && (fa & FILE_ATTRIBUTE_DIRECTORY)) {
|
||||||
d = dir_calloc();
|
d = dir_calloc();
|
||||||
if (d != nullptr) {
|
if (d != nullptr) {
|
||||||
wchar_t search_path[MAX_PATH];
|
std::wstring search_path = path;
|
||||||
bool slash = path[wcslen(path) - 1] == '\\';
|
bool slash = path[wcslen(path) - 1] == '\\';
|
||||||
|
|
||||||
/* build search path for FindFirstFile, try not to append additional slashes
|
/* build search path for FindFirstFile, try not to append additional slashes
|
||||||
* as it throws Win9x off its groove for root directories */
|
* as it throws Win9x off its groove for root directories */
|
||||||
_snwprintf(search_path, lengthof(search_path), L"%s%s*", path, slash ? L"" : L"\\");
|
if (!slash) search_path += L"\\";
|
||||||
*lastof(search_path) = '\0';
|
search_path += L"*";
|
||||||
d->hFind = FindFirstFile(search_path, &d->fd);
|
d->hFind = FindFirstFile(search_path.c_str(), &d->fd);
|
||||||
|
|
||||||
if (d->hFind != INVALID_HANDLE_VALUE ||
|
if (d->hFind != INVALID_HANDLE_VALUE ||
|
||||||
GetLastError() == ERROR_NO_MORE_FILES) { // the directory is empty
|
GetLastError() == ERROR_NO_MORE_FILES) { // the directory is empty
|
||||||
@@ -252,7 +252,7 @@ bool FiosGetDiskFreeSpace(const char *path, uint64 *tot)
|
|||||||
UINT sem = SetErrorMode(SEM_FAILCRITICALERRORS); // disable 'no-disk' message box
|
UINT sem = SetErrorMode(SEM_FAILCRITICALERRORS); // disable 'no-disk' message box
|
||||||
|
|
||||||
ULARGE_INTEGER bytes_free;
|
ULARGE_INTEGER bytes_free;
|
||||||
bool retval = GetDiskFreeSpaceEx(OTTD2FS(path), &bytes_free, nullptr, nullptr);
|
bool retval = GetDiskFreeSpaceEx(OTTD2FS(path).c_str(), &bytes_free, nullptr, nullptr);
|
||||||
if (retval) *tot = bytes_free.QuadPart;
|
if (retval) *tot = bytes_free.QuadPart;
|
||||||
|
|
||||||
SetErrorMode(sem); // reset previous setting
|
SetErrorMode(sem); // reset previous setting
|
||||||
@@ -422,7 +422,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
|
|||||||
/* Convert the command line to UTF-8. We need a dedicated buffer
|
/* Convert the command line to UTF-8. We need a dedicated buffer
|
||||||
* for this because argv[] points into this buffer and this needs to
|
* for this because argv[] points into this buffer and this needs to
|
||||||
* be available between subsequent calls to FS2OTTD(). */
|
* be available between subsequent calls to FS2OTTD(). */
|
||||||
char *cmdline = stredup(FS2OTTD(GetCommandLine()));
|
char *cmdline = stredup(FS2OTTD(GetCommandLine()).c_str());
|
||||||
|
|
||||||
#if defined(_DEBUG)
|
#if defined(_DEBUG)
|
||||||
CreateConsole();
|
CreateConsole();
|
||||||
@@ -560,34 +560,40 @@ bool GetClipboardContents(char *buffer, const char *last)
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert to OpenTTD's encoding from wide characters.
|
* Convert to OpenTTD's encoding from a wide string.
|
||||||
* OpenTTD internal encoding is UTF8.
|
* OpenTTD internal encoding is UTF8.
|
||||||
* The returned value's contents can only be guaranteed until the next call to
|
* @param name valid string that will be converted (local, or wide)
|
||||||
* this function. So if the value is needed for anything else, use convert_from_fs
|
* @return converted string; if failed string is of zero-length
|
||||||
* @param name pointer to a valid string that will be converted (local, or wide)
|
|
||||||
* @return pointer to the converted string; if failed string is of zero-length
|
|
||||||
* @see the current code-page comes from video\win32_v.cpp, event-notification
|
* @see the current code-page comes from video\win32_v.cpp, event-notification
|
||||||
* WM_INPUTLANGCHANGE
|
* WM_INPUTLANGCHANGE
|
||||||
*/
|
*/
|
||||||
const char *FS2OTTD(const wchar_t *name)
|
std::string FS2OTTD(const std::wstring &name)
|
||||||
{
|
{
|
||||||
static char utf8_buf[512];
|
int name_len = (name.length() >= INT_MAX) ? INT_MAX : (int)name.length();
|
||||||
return convert_from_fs(name, utf8_buf, lengthof(utf8_buf));
|
int len = WideCharToMultiByte(CP_UTF8, 0, name.c_str(), name_len, nullptr, 0, nullptr, nullptr);
|
||||||
|
if (len <= 0) return std::string();
|
||||||
|
char *utf8_buf = AllocaM(char, len + 1);
|
||||||
|
utf8_buf[len] = '\0';
|
||||||
|
WideCharToMultiByte(CP_UTF8, 0, name.c_str(), name_len, utf8_buf, len, nullptr, nullptr);
|
||||||
|
return std::string(utf8_buf, static_cast<size_t>(len));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert from OpenTTD's encoding to wide characters.
|
* Convert from OpenTTD's encoding to a wide string.
|
||||||
* OpenTTD internal encoding is UTF8.
|
* OpenTTD internal encoding is UTF8.
|
||||||
* The returned value's contents can only be guaranteed until the next call to
|
* @param name valid string that will be converted (UTF8)
|
||||||
* this function. So if the value is needed for anything else, use convert_from_fs
|
|
||||||
* @param name pointer to a valid string that will be converted (UTF8)
|
|
||||||
* @param console_cp convert to the console encoding instead of the normal system encoding.
|
* @param console_cp convert to the console encoding instead of the normal system encoding.
|
||||||
* @return pointer to the converted string; if failed string is of zero-length
|
* @return converted string; if failed string is of zero-length
|
||||||
*/
|
*/
|
||||||
const wchar_t *OTTD2FS(const char *name, bool console_cp)
|
std::wstring OTTD2FS(const std::string &name)
|
||||||
{
|
{
|
||||||
static TCHAR system_buf[512];
|
int name_len = (name.length() >= INT_MAX) ? INT_MAX : (int)name.length();
|
||||||
return convert_to_fs(name, system_buf, lengthof(system_buf), console_cp);
|
int len = MultiByteToWideChar(CP_UTF8, 0, name.c_str(), name_len, nullptr, 0);
|
||||||
|
if (len <= 0) return std::wstring();
|
||||||
|
wchar_t *system_buf = AllocaM(wchar_t, len + 1);
|
||||||
|
system_buf[len] = L'\0';
|
||||||
|
MultiByteToWideChar(CP_UTF8, 0, name.c_str(), name_len, system_buf, len);
|
||||||
|
return std::wstring(system_buf, static_cast<size_t>(len));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -601,10 +607,8 @@ const wchar_t *OTTD2FS(const char *name, bool console_cp)
|
|||||||
*/
|
*/
|
||||||
char *convert_from_fs(const wchar_t *name, char *utf8_buf, size_t buflen)
|
char *convert_from_fs(const wchar_t *name, char *utf8_buf, size_t buflen)
|
||||||
{
|
{
|
||||||
const wchar_t *wide_buf = name;
|
|
||||||
|
|
||||||
/* Convert UTF-16 string to UTF-8. */
|
/* Convert UTF-16 string to UTF-8. */
|
||||||
int len = WideCharToMultiByte(CP_UTF8, 0, wide_buf, -1, utf8_buf, (int)buflen, nullptr, nullptr);
|
int len = WideCharToMultiByte(CP_UTF8, 0, name, -1, utf8_buf, (int)buflen, nullptr, nullptr);
|
||||||
if (len == 0) utf8_buf[0] = '\0';
|
if (len == 0) utf8_buf[0] = '\0';
|
||||||
|
|
||||||
return utf8_buf;
|
return utf8_buf;
|
||||||
@@ -621,7 +625,7 @@ char *convert_from_fs(const wchar_t *name, char *utf8_buf, size_t buflen)
|
|||||||
* @param console_cp convert to the console encoding instead of the normal system encoding.
|
* @param console_cp convert to the console encoding instead of the normal system encoding.
|
||||||
* @return pointer to system_buf. If conversion fails the string is of zero-length
|
* @return pointer to system_buf. If conversion fails the string is of zero-length
|
||||||
*/
|
*/
|
||||||
wchar_t *convert_to_fs(const char *name, wchar_t *system_buf, size_t buflen, bool console_cp)
|
wchar_t *convert_to_fs(const char *name, wchar_t *system_buf, size_t buflen)
|
||||||
{
|
{
|
||||||
int len = MultiByteToWideChar(CP_UTF8, 0, name, -1, system_buf, (int)buflen);
|
int len = MultiByteToWideChar(CP_UTF8, 0, name, -1, system_buf, (int)buflen);
|
||||||
if (len == 0) system_buf[0] = '\0';
|
if (len == 0) system_buf[0] = '\0';
|
||||||
@@ -632,9 +636,12 @@ wchar_t *convert_to_fs(const char *name, wchar_t *system_buf, size_t buflen, boo
|
|||||||
/** Determine the current user's locale. */
|
/** Determine the current user's locale. */
|
||||||
const char *GetCurrentLocale(const char *)
|
const char *GetCurrentLocale(const char *)
|
||||||
{
|
{
|
||||||
|
const LANGID userUiLang = GetUserDefaultUILanguage();
|
||||||
|
const LCID userUiLocale = MAKELCID(userUiLang, SORT_DEFAULT);
|
||||||
|
|
||||||
char lang[9], country[9];
|
char lang[9], country[9];
|
||||||
if (GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SISO639LANGNAME, lang, lengthof(lang)) == 0 ||
|
if (GetLocaleInfoA(userUiLocale, LOCALE_SISO639LANGNAME, lang, lengthof(lang)) == 0 ||
|
||||||
GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SISO3166CTRYNAME, country, lengthof(country)) == 0) {
|
GetLocaleInfoA(userUiLocale, LOCALE_SISO3166CTRYNAME, country, lengthof(country)) == 0) {
|
||||||
/* Unable to retrieve the locale. */
|
/* Unable to retrieve the locale. */
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
@@ -17,7 +17,7 @@ typedef void (*Function)(int);
|
|||||||
bool LoadLibraryList(Function proc[], const char *dll);
|
bool LoadLibraryList(Function proc[], const char *dll);
|
||||||
|
|
||||||
char *convert_from_fs(const wchar_t *name, char *utf8_buf, size_t buflen);
|
char *convert_from_fs(const wchar_t *name, char *utf8_buf, size_t buflen);
|
||||||
wchar_t *convert_to_fs(const char *name, wchar_t *utf16_buf, size_t buflen, bool console_cp = false);
|
wchar_t *convert_to_fs(const char *name, wchar_t *utf16_buf, size_t buflen);
|
||||||
|
|
||||||
#if defined(__MINGW32__) && !defined(__MINGW64__) && !(_WIN32_IE >= 0x0500)
|
#if defined(__MINGW32__) && !defined(__MINGW64__) && !(_WIN32_IE >= 0x0500)
|
||||||
#define SHGFP_TYPE_CURRENT 0
|
#define SHGFP_TYPE_CURRENT 0
|
||||||
|
@@ -1674,7 +1674,7 @@ CommandCost CmdBuildSingleSignal(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
|||||||
MarkTileDirtyByTile(tile, VMDF_NOT_MAP_MODE);
|
MarkTileDirtyByTile(tile, VMDF_NOT_MAP_MODE);
|
||||||
AddTrackToSignalBuffer(tile, track, _current_company);
|
AddTrackToSignalBuffer(tile, track, _current_company);
|
||||||
YapfNotifyTrackLayoutChange(tile, track);
|
YapfNotifyTrackLayoutChange(tile, track);
|
||||||
if (v != nullptr) {
|
if (v != nullptr && v->track != TRACK_BIT_DEPOT) {
|
||||||
ReReserveTrainPath(v);
|
ReReserveTrainPath(v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -21,6 +21,7 @@
|
|||||||
#include "string_func.h"
|
#include "string_func.h"
|
||||||
#include "widgets/dropdown_type.h"
|
#include "widgets/dropdown_type.h"
|
||||||
#include "widgets/dropdown_func.h"
|
#include "widgets/dropdown_func.h"
|
||||||
|
#include "widgets/slider_func.h"
|
||||||
#include "highscore.h"
|
#include "highscore.h"
|
||||||
#include "base_media_base.h"
|
#include "base_media_base.h"
|
||||||
#include "company_base.h"
|
#include "company_base.h"
|
||||||
@@ -36,6 +37,7 @@
|
|||||||
#include "fontcache.h"
|
#include "fontcache.h"
|
||||||
#include "zoom_func.h"
|
#include "zoom_func.h"
|
||||||
#include "video/video_driver.hpp"
|
#include "video/video_driver.hpp"
|
||||||
|
#include "music/music_driver.hpp"
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
@@ -338,6 +340,14 @@ struct GameOptionsWindow : Window {
|
|||||||
SetDParamStr(0, BaseMusic::GetUsedSet()->GetDescription(GetCurrentLanguageIsoCode()));
|
SetDParamStr(0, BaseMusic::GetUsedSet()->GetDescription(GetCurrentLanguageIsoCode()));
|
||||||
DrawStringMultiLine(r.left, r.right, r.top, UINT16_MAX, STR_BLACK_RAW_STRING);
|
DrawStringMultiLine(r.left, r.right, r.top, UINT16_MAX, STR_BLACK_RAW_STRING);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WID_GO_BASE_SFX_VOLUME:
|
||||||
|
DrawVolumeSliderWidget(r, _settings_client.music.effect_vol);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WID_GO_BASE_MUSIC_VOLUME:
|
||||||
|
DrawVolumeSliderWidget(r, _settings_client.music.music_vol);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -390,6 +400,16 @@ struct GameOptionsWindow : Window {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WID_GO_BASE_SFX_VOLUME:
|
||||||
|
case WID_GO_BASE_MUSIC_VOLUME:
|
||||||
|
size->width = ScaleGUITrad(67);
|
||||||
|
size->height = ScaleGUITrad(12);
|
||||||
|
resize->width = 0;
|
||||||
|
resize->height = 0;
|
||||||
|
fill->width = 0;
|
||||||
|
fill->height = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
int selected;
|
int selected;
|
||||||
DropDownList list = this->BuildDropDownList(widget, &selected);
|
DropDownList list = this->BuildDropDownList(widget, &selected);
|
||||||
@@ -444,6 +464,19 @@ struct GameOptionsWindow : Window {
|
|||||||
this->SetDirty();
|
this->SetDirty();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WID_GO_BASE_SFX_VOLUME:
|
||||||
|
case WID_GO_BASE_MUSIC_VOLUME: {
|
||||||
|
byte &vol = (widget == WID_GO_BASE_MUSIC_VOLUME) ? _settings_client.music.music_vol : _settings_client.music.effect_vol;
|
||||||
|
if (ClickVolumeSliderWidget(this->GetWidget<NWidgetBase>(widget)->GetCurrentRect(), pt, vol)) {
|
||||||
|
if (widget == WID_GO_BASE_MUSIC_VOLUME) MusicDriver::GetInstance()->SetVolume(vol);
|
||||||
|
this->SetDirty();
|
||||||
|
SetWindowClassesDirty(WC_MUSIC_WINDOW);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (click_count > 0) this->mouse_capture_widget = widget;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
int selected;
|
int selected;
|
||||||
DropDownList list = this->BuildDropDownList(widget, &selected);
|
DropDownList list = this->BuildDropDownList(widget, &selected);
|
||||||
@@ -651,9 +684,10 @@ static const NWidgetPart _nested_game_options_widgets[] = {
|
|||||||
EndContainer(),
|
EndContainer(),
|
||||||
|
|
||||||
NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_BASE_SFX, STR_NULL), SetPadding(0, 10, 0, 10),
|
NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_BASE_SFX, STR_NULL), SetPadding(0, 10, 0, 10),
|
||||||
NWidget(NWID_HORIZONTAL), SetPIP(0, 30, 0),
|
NWidget(NWID_HORIZONTAL), SetPIP(0, 30, 7),
|
||||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_SFX_DROPDOWN), SetMinimalSize(150, 12), SetDataTip(STR_BLACK_RAW_STRING, STR_GAME_OPTIONS_BASE_SFX_TOOLTIP),
|
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_SFX_DROPDOWN), SetMinimalSize(150, 12), SetDataTip(STR_BLACK_RAW_STRING, STR_GAME_OPTIONS_BASE_SFX_TOOLTIP),
|
||||||
NWidget(NWID_SPACER), SetFill(1, 0),
|
NWidget(NWID_SPACER), SetMinimalSize(150, 12), SetFill(1, 0),
|
||||||
|
NWidget(WWT_EMPTY, COLOUR_GREY, WID_GO_BASE_SFX_VOLUME), SetMinimalSize(67, 12), SetMinimalTextLines(1, 0), SetDataTip(0x0, STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_SFX_DESCRIPTION), SetMinimalSize(330, 0), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP), SetFill(1, 0), SetPadding(6, 0, 6, 0),
|
NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_SFX_DESCRIPTION), SetMinimalSize(330, 0), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP), SetFill(1, 0), SetPadding(6, 0, 6, 0),
|
||||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
|
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
|
||||||
@@ -664,9 +698,10 @@ static const NWidgetPart _nested_game_options_widgets[] = {
|
|||||||
EndContainer(),
|
EndContainer(),
|
||||||
|
|
||||||
NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_BASE_MUSIC, STR_NULL), SetPadding(0, 10, 0, 10),
|
NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_BASE_MUSIC, STR_NULL), SetPadding(0, 10, 0, 10),
|
||||||
NWidget(NWID_HORIZONTAL), SetPIP(0, 30, 0),
|
NWidget(NWID_HORIZONTAL), SetPIP(0, 30, 7),
|
||||||
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_MUSIC_DROPDOWN), SetMinimalSize(150, 12), SetDataTip(STR_BLACK_RAW_STRING, STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP),
|
NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_BASE_MUSIC_DROPDOWN), SetMinimalSize(150, 12), SetDataTip(STR_BLACK_RAW_STRING, STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP),
|
||||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_MUSIC_STATUS), SetMinimalSize(150, 12), SetDataTip(STR_EMPTY, STR_NULL), SetFill(1, 0),
|
NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_MUSIC_STATUS), SetMinimalSize(150, 12), SetDataTip(STR_EMPTY, STR_NULL), SetFill(1, 0),
|
||||||
|
NWidget(WWT_EMPTY, COLOUR_GREY, WID_GO_BASE_MUSIC_VOLUME), SetMinimalSize(67, 12), SetMinimalTextLines(1, 0), SetDataTip(0x0, STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_MUSIC_DESCRIPTION), SetMinimalSize(330, 0), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP), SetFill(1, 0), SetPadding(6, 0, 6, 0),
|
NWidget(WWT_TEXT, COLOUR_GREY, WID_GO_BASE_MUSIC_DESCRIPTION), SetMinimalSize(330, 0), SetDataTip(STR_EMPTY, STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP), SetFill(1, 0), SetPadding(6, 0, 6, 0),
|
||||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
|
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(7, 0, 7),
|
||||||
|
26
src/stdafx.h
26
src/stdafx.h
@@ -93,6 +93,7 @@
|
|||||||
#include <climits>
|
#include <climits>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#ifndef SIZE_MAX
|
#ifndef SIZE_MAX
|
||||||
# define SIZE_MAX ((size_t)-1)
|
# define SIZE_MAX ((size_t)-1)
|
||||||
@@ -248,25 +249,26 @@
|
|||||||
|
|
||||||
#endif /* defined(_MSC_VER) */
|
#endif /* defined(_MSC_VER) */
|
||||||
|
|
||||||
/* NOTE: the string returned by these functions is only valid until the next
|
|
||||||
* call to the same function and is not thread- or reentrancy-safe */
|
|
||||||
#if !defined(STRGEN) && !defined(SETTINGSGEN)
|
#if !defined(STRGEN) && !defined(SETTINGSGEN)
|
||||||
# if defined(_WIN32)
|
# if defined(_WIN32)
|
||||||
char *getcwd(char *buf, size_t size);
|
char *getcwd(char *buf, size_t size);
|
||||||
# include <tchar.h>
|
|
||||||
# include <io.h>
|
# include <io.h>
|
||||||
|
# include <tchar.h>
|
||||||
|
|
||||||
namespace std { using ::_wfopen; }
|
# define fopen(file, mode) _wfopen(OTTD2FS(file).c_str(), _T(mode))
|
||||||
# define fopen(file, mode) _wfopen(OTTD2FS(file), _T(mode))
|
# define unlink(file) _wunlink(OTTD2FS(file).c_str())
|
||||||
# define unlink(file) _wunlink(OTTD2FS(file))
|
|
||||||
|
|
||||||
const char *FS2OTTD(const wchar_t *name);
|
std::string FS2OTTD(const std::wstring &name);
|
||||||
const wchar_t *OTTD2FS(const char *name, bool console_cp = false);
|
std::wstring OTTD2FS(const std::string &name);
|
||||||
|
# elif defined(WITH_ICONV)
|
||||||
|
# define fopen(file, mode) fopen(OTTD2FS(file).c_str(), mode)
|
||||||
|
std::string FS2OTTD(const std::string &name);
|
||||||
|
std::string OTTD2FS(const std::string &name);
|
||||||
# else
|
# else
|
||||||
# define fopen(file, mode) fopen(OTTD2FS(file), mode)
|
// no override of fopen() since no transformation is required of the filename
|
||||||
const char *FS2OTTD(const char *name);
|
template <typename T> std::string FS2OTTD(T name) { return name; }
|
||||||
const char *OTTD2FS(const char *name);
|
template <typename T> std::string OTTD2FS(T name) { return name; }
|
||||||
# endif /* _WIN32 */
|
# endif /* _WIN32 or WITH_ICONV */
|
||||||
#endif /* STRGEN || SETTINGSGEN */
|
#endif /* STRGEN || SETTINGSGEN */
|
||||||
|
|
||||||
#if defined(_WIN32) || defined(__OS2__) && !defined(__INNOTEK_LIBC__)
|
#if defined(_WIN32) || defined(__OS2__) && !defined(__INNOTEK_LIBC__)
|
||||||
|
@@ -674,6 +674,12 @@ static int DeterminePluralForm(int64 count, int plural_form)
|
|||||||
* Scottish Gaelic */
|
* Scottish Gaelic */
|
||||||
case 13:
|
case 13:
|
||||||
return ((n == 1 || n == 11) ? 0 : (n == 2 || n == 12) ? 1 : ((n > 2 && n < 11) || (n > 12 && n < 20)) ? 2 : 3);
|
return ((n == 1 || n == 11) ? 0 : (n == 2 || n == 12) ? 1 : ((n > 2 && n < 11) || (n > 12 && n < 20)) ? 2 : 3);
|
||||||
|
|
||||||
|
/* Three forms: special cases for 1, 0 and numbers ending in 01 to 19.
|
||||||
|
* Used in:
|
||||||
|
* Romanian */
|
||||||
|
case 14:
|
||||||
|
return n == 1 ? 0 : (n == 0 || (n % 100 > 0 && n % 100 < 20)) ? 1 : 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2253,14 +2259,14 @@ static void GetLanguageList(const char *path)
|
|||||||
if (dir != nullptr) {
|
if (dir != nullptr) {
|
||||||
struct dirent *dirent;
|
struct dirent *dirent;
|
||||||
while ((dirent = readdir(dir)) != nullptr) {
|
while ((dirent = readdir(dir)) != nullptr) {
|
||||||
const char *d_name = FS2OTTD(dirent->d_name);
|
std::string d_name = FS2OTTD(dirent->d_name);
|
||||||
const char *extension = strrchr(d_name, '.');
|
const char *extension = strrchr(d_name.c_str(), '.');
|
||||||
|
|
||||||
/* Not a language file */
|
/* Not a language file */
|
||||||
if (extension == nullptr || strcmp(extension, ".lng") != 0) continue;
|
if (extension == nullptr || strcmp(extension, ".lng") != 0) continue;
|
||||||
|
|
||||||
LanguageMetadata lmd;
|
LanguageMetadata lmd;
|
||||||
seprintf(lmd.file, lastof(lmd.file), "%s%s", path, d_name);
|
seprintf(lmd.file, lastof(lmd.file), "%s%s", path, d_name.c_str());
|
||||||
|
|
||||||
/* Check whether the file is of the correct version */
|
/* Check whether the file is of the correct version */
|
||||||
if (!GetLanguageFileHeader(lmd.file, &lmd)) {
|
if (!GetLanguageFileHeader(lmd.file, &lmd)) {
|
||||||
|
@@ -5583,7 +5583,7 @@ cat = SC_BASIC
|
|||||||
var = music.music_vol
|
var = music.music_vol
|
||||||
type = SLE_UINT8
|
type = SLE_UINT8
|
||||||
flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
|
flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
|
||||||
def = 127
|
def = 50
|
||||||
min = 0
|
min = 0
|
||||||
max = 127
|
max = 127
|
||||||
interval = 1
|
interval = 1
|
||||||
@@ -5593,7 +5593,7 @@ cat = SC_BASIC
|
|||||||
var = music.effect_vol
|
var = music.effect_vol
|
||||||
type = SLE_UINT8
|
type = SLE_UINT8
|
||||||
flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
|
flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
|
||||||
def = 127
|
def = 100
|
||||||
min = 0
|
min = 0
|
||||||
max = 127
|
max = 127
|
||||||
interval = 1
|
interval = 1
|
||||||
|
@@ -190,6 +190,7 @@ static const PluralForm _plural_forms[] = {
|
|||||||
{ 2, "Two forms: cases for numbers ending with a consonant, and with a vowel.", "\"yeong,il,sam,yuk,chil,pal\" \"i,sa,o,gu\"" },
|
{ 2, "Two forms: cases for numbers ending with a consonant, and with a vowel.", "\"yeong,il,sam,yuk,chil,pal\" \"i,sa,o,gu\"" },
|
||||||
{ 4, "Four forms: special cases for 1, 0 and numbers ending in 02 to 10, and numbers ending in 11 to 19.", "\"1\" \"0,2..10,102..110,202..210,...\" \"11..19,111..119,211..219,...\" \"other\"" },
|
{ 4, "Four forms: special cases for 1, 0 and numbers ending in 02 to 10, and numbers ending in 11 to 19.", "\"1\" \"0,2..10,102..110,202..210,...\" \"11..19,111..119,211..219,...\" \"other\"" },
|
||||||
{ 4, "Four forms: special cases for 1 and 11, 2 and 12, 3..10 and 13..19.", "\"1,11\" \"2,12\" \"3..10,13..19\" \"other\"" },
|
{ 4, "Four forms: special cases for 1 and 11, 2 and 12, 3..10 and 13..19.", "\"1,11\" \"2,12\" \"3..10,13..19\" \"other\"" },
|
||||||
|
{ 3, "Three forms: special cases for 1, 0 and numbers ending in 01 to 19.", "\"1\" \"0,2..19,101..119,201..219,...\" \"other\"" },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Flags:
|
/* Flags:
|
||||||
|
@@ -1074,6 +1074,9 @@ void OpenGLBackend::DrawMouseCursor()
|
|||||||
|
|
||||||
void OpenGLBackend::PopulateCursorCache()
|
void OpenGLBackend::PopulateCursorCache()
|
||||||
{
|
{
|
||||||
|
static_assert(lengthof(_cursor.sprite_seq) == lengthof(this->cursor_sprite_seq));
|
||||||
|
static_assert(lengthof(_cursor.sprite_pos) == lengthof(this->cursor_sprite_pos));
|
||||||
|
|
||||||
if (this->clear_cursor_cache) {
|
if (this->clear_cursor_cache) {
|
||||||
/* We have a pending cursor cache clear to do first. */
|
/* We have a pending cursor cache clear to do first. */
|
||||||
this->clear_cursor_cache = false;
|
this->clear_cursor_cache = false;
|
||||||
|
@@ -215,7 +215,7 @@ bool VideoDriver_Win32Base::MakeWindow(bool full_screen, bool resize)
|
|||||||
char window_title[64];
|
char window_title[64];
|
||||||
seprintf(window_title, lastof(window_title), "OpenTTD %s", _openttd_revision);
|
seprintf(window_title, lastof(window_title), "OpenTTD %s", _openttd_revision);
|
||||||
|
|
||||||
this->main_wnd = CreateWindow(L"OTTD", OTTD2FS(window_title), style, x, y, w, h, 0, 0, GetModuleHandle(nullptr), this);
|
this->main_wnd = CreateWindow(L"OTTD", OTTD2FS(window_title).c_str(), style, x, y, w, h, 0, 0, GetModuleHandle(nullptr), this);
|
||||||
if (this->main_wnd == nullptr) usererror("CreateWindow failed");
|
if (this->main_wnd == nullptr) usererror("CreateWindow failed");
|
||||||
ShowWindow(this->main_wnd, showstyle);
|
ShowWindow(this->main_wnd, showstyle);
|
||||||
}
|
}
|
||||||
@@ -332,7 +332,7 @@ static LRESULT HandleIMEComposition(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
|||||||
/* Transmit text to windowing system. */
|
/* Transmit text to windowing system. */
|
||||||
if (len > 0) {
|
if (len > 0) {
|
||||||
HandleTextInput(nullptr, true); // Clear marked string.
|
HandleTextInput(nullptr, true); // Clear marked string.
|
||||||
HandleTextInput(FS2OTTD(str));
|
HandleTextInput(FS2OTTD(str).c_str());
|
||||||
}
|
}
|
||||||
SetCompositionPos(hwnd);
|
SetCompositionPos(hwnd);
|
||||||
|
|
||||||
@@ -553,14 +553,6 @@ LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||||||
uint scancode = GB(lParam, 16, 8);
|
uint scancode = GB(lParam, 16, 8);
|
||||||
keycode = scancode == 41 ? (uint)WKC_BACKQUOTE : MapWindowsKey(wParam);
|
keycode = scancode == 41 ? (uint)WKC_BACKQUOTE : MapWindowsKey(wParam);
|
||||||
|
|
||||||
/* Silently drop all messages handled by WM_CHAR. */
|
|
||||||
MSG msg;
|
|
||||||
if (PeekMessage(&msg, nullptr, 0, 0, PM_NOREMOVE)) {
|
|
||||||
if ((msg.message == WM_CHAR || msg.message == WM_DEADCHAR) && GB(lParam, 16, 8) == GB(msg.lParam, 16, 8)) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
uint charcode = MapVirtualKey(wParam, MAPVK_VK_TO_CHAR);
|
uint charcode = MapVirtualKey(wParam, MAPVK_VK_TO_CHAR);
|
||||||
|
|
||||||
/* No character translation? */
|
/* No character translation? */
|
||||||
@@ -569,21 +561,26 @@ LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Is the console key a dead key? If yes, ignore the first key down event. */
|
/* If an edit box is in focus, wait for the corresponding WM_CHAR message. */
|
||||||
if (HasBit(charcode, 31) && !console) {
|
if (!EditBoxInGlobalFocus()) {
|
||||||
if (scancode == 41) {
|
/* Is the console key a dead key? If yes, ignore the first key down event. */
|
||||||
console = true;
|
if (HasBit(charcode, 31) && !console) {
|
||||||
return 0;
|
if (scancode == 41) {
|
||||||
|
console = true;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
console = false;
|
||||||
|
|
||||||
|
/* IMEs and other input methods sometimes send a WM_CHAR without a WM_KEYDOWN,
|
||||||
|
* clear the keycode so a previous WM_KEYDOWN doesn't become 'stuck'. */
|
||||||
|
uint cur_keycode = keycode;
|
||||||
|
keycode = 0;
|
||||||
|
|
||||||
|
return HandleCharMsg(cur_keycode, LOWORD(charcode));
|
||||||
}
|
}
|
||||||
console = false;
|
|
||||||
|
|
||||||
/* IMEs and other input methods sometimes send a WM_CHAR without a WM_KEYDOWN,
|
return 0;
|
||||||
* clear the keycode so a previous WM_KEYDOWN doesn't become 'stuck'. */
|
|
||||||
uint cur_keycode = keycode;
|
|
||||||
keycode = 0;
|
|
||||||
|
|
||||||
return HandleCharMsg(cur_keycode, LOWORD(charcode));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case WM_SYSKEYDOWN: // user presses F10 or Alt, both activating the title-menu
|
case WM_SYSKEYDOWN: // user presses F10 or Alt, both activating the title-menu
|
||||||
|
@@ -4619,7 +4619,7 @@ void UpdateTileSelection()
|
|||||||
* @param params (optional) up to 5 pieces of additional information that may be added to a tooltip
|
* @param params (optional) up to 5 pieces of additional information that may be added to a tooltip
|
||||||
* @param close_cond Condition for closing this tooltip.
|
* @param close_cond Condition for closing this tooltip.
|
||||||
*/
|
*/
|
||||||
static inline void ShowMeasurementTooltips(StringID str, uint paramcount, const uint64 params[], TooltipCloseCondition close_cond = TCC_NONE)
|
static inline void ShowMeasurementTooltips(StringID str, uint paramcount, const uint64 params[], TooltipCloseCondition close_cond = TCC_EXIT_VIEWPORT)
|
||||||
{
|
{
|
||||||
if (!_settings_client.gui.measure_tooltip) return;
|
if (!_settings_client.gui.measure_tooltip) return;
|
||||||
GuiShowTooltips(_thd.GetCallbackWnd(), str, paramcount, params, close_cond);
|
GuiShowTooltips(_thd.GetCallbackWnd(), str, paramcount, params, close_cond);
|
||||||
|
@@ -170,6 +170,16 @@ public:
|
|||||||
virtual void FillDirtyWidgets(std::vector<NWidgetBase *> &dirty_widgets) = 0;
|
virtual void FillDirtyWidgets(std::vector<NWidgetBase *> &dirty_widgets) = 0;
|
||||||
virtual void SetDirty(Window *w);
|
virtual void SetDirty(Window *w);
|
||||||
|
|
||||||
|
Rect GetCurrentRect() const
|
||||||
|
{
|
||||||
|
Rect r;
|
||||||
|
r.left = this->pos_x;
|
||||||
|
r.top = this->pos_y;
|
||||||
|
r.right = this->pos_x + this->current_x;
|
||||||
|
r.bottom = this->pos_y + this->current_y;
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
WidgetType type; ///< Type of the widget / nested widget.
|
WidgetType type; ///< Type of the widget / nested widget.
|
||||||
WidgetBaseFlags base_flags; ///< Widget base flags
|
WidgetBaseFlags base_flags; ///< Widget base flags
|
||||||
uint fill_x; ///< Horizontal fill stepsize (from initial size, \c 0 means not resizable).
|
uint fill_x; ///< Horizontal fill stepsize (from initial size, \c 0 means not resizable).
|
||||||
|
@@ -46,6 +46,8 @@ add_files(
|
|||||||
screenshot_widget.h
|
screenshot_widget.h
|
||||||
settings_widget.h
|
settings_widget.h
|
||||||
sign_widget.h
|
sign_widget.h
|
||||||
|
slider.cpp
|
||||||
|
slider_func.h
|
||||||
smallmap_widget.h
|
smallmap_widget.h
|
||||||
station_widget.h
|
station_widget.h
|
||||||
statusbar_widget.h
|
statusbar_widget.h
|
||||||
|
@@ -25,9 +25,11 @@ enum GameOptionsWidgets {
|
|||||||
WID_GO_BASE_GRF_TEXTFILE, ///< Open base GRF readme, changelog (+1) or license (+2).
|
WID_GO_BASE_GRF_TEXTFILE, ///< Open base GRF readme, changelog (+1) or license (+2).
|
||||||
WID_GO_BASE_GRF_DESCRIPTION = WID_GO_BASE_GRF_TEXTFILE + TFT_END, ///< Description of selected base GRF.
|
WID_GO_BASE_GRF_DESCRIPTION = WID_GO_BASE_GRF_TEXTFILE + TFT_END, ///< Description of selected base GRF.
|
||||||
WID_GO_BASE_SFX_DROPDOWN, ///< Use to select a base SFX.
|
WID_GO_BASE_SFX_DROPDOWN, ///< Use to select a base SFX.
|
||||||
|
WID_GO_BASE_SFX_VOLUME, ///< Change sound effects volume.
|
||||||
WID_GO_BASE_SFX_TEXTFILE, ///< Open base SFX readme, changelog (+1) or license (+2).
|
WID_GO_BASE_SFX_TEXTFILE, ///< Open base SFX readme, changelog (+1) or license (+2).
|
||||||
WID_GO_BASE_SFX_DESCRIPTION = WID_GO_BASE_SFX_TEXTFILE + TFT_END, ///< Description of selected base SFX.
|
WID_GO_BASE_SFX_DESCRIPTION = WID_GO_BASE_SFX_TEXTFILE + TFT_END, ///< Description of selected base SFX.
|
||||||
WID_GO_BASE_MUSIC_DROPDOWN, ///< Use to select a base music set.
|
WID_GO_BASE_MUSIC_DROPDOWN, ///< Use to select a base music set.
|
||||||
|
WID_GO_BASE_MUSIC_VOLUME, ///< Change music volume.
|
||||||
WID_GO_BASE_MUSIC_STATUS, ///< Info about corrupted files etc.
|
WID_GO_BASE_MUSIC_STATUS, ///< Info about corrupted files etc.
|
||||||
WID_GO_BASE_MUSIC_TEXTFILE, ///< Open base music readme, changelog (+1) or license (+2).
|
WID_GO_BASE_MUSIC_TEXTFILE, ///< Open base music readme, changelog (+1) or license (+2).
|
||||||
WID_GO_BASE_MUSIC_DESCRIPTION = WID_GO_BASE_MUSIC_TEXTFILE + TFT_END, ///< Description of selected base music set.
|
WID_GO_BASE_MUSIC_DESCRIPTION = WID_GO_BASE_MUSIC_TEXTFILE + TFT_END, ///< Description of selected base music set.
|
||||||
|
70
src/widgets/slider.cpp
Normal file
70
src/widgets/slider.cpp
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of OpenTTD.
|
||||||
|
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||||
|
* OpenTTD 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.
|
||||||
|
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @file slider.cpp Implementation of the horizontal slider widget. */
|
||||||
|
|
||||||
|
#include "../stdafx.h"
|
||||||
|
#include "../window_gui.h"
|
||||||
|
#include "../window_func.h"
|
||||||
|
#include "../strings_func.h"
|
||||||
|
#include "../zoom_func.h"
|
||||||
|
#include "slider_func.h"
|
||||||
|
|
||||||
|
#include "../safeguards.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Draw a volume slider widget with know at given value
|
||||||
|
* @param r Rectangle to draw the widget in
|
||||||
|
* @param value Value to put the slider at
|
||||||
|
*/
|
||||||
|
void DrawVolumeSliderWidget(Rect r, byte value)
|
||||||
|
{
|
||||||
|
static const int slider_width = 3;
|
||||||
|
|
||||||
|
/* Draw a wedge indicating low to high volume level. */
|
||||||
|
const int ha = (r.bottom - r.top) / 5;
|
||||||
|
int wx1 = r.left, wx2 = r.right;
|
||||||
|
if (_current_text_dir == TD_RTL) std::swap(wx1, wx2);
|
||||||
|
const uint shadow = _colour_gradient[COLOUR_GREY][3];
|
||||||
|
const uint fill = _colour_gradient[COLOUR_GREY][6];
|
||||||
|
const uint light = _colour_gradient[COLOUR_GREY][7];
|
||||||
|
const std::vector<Point> wedge{ Point{wx1, r.bottom - ha}, Point{wx2, r.top + ha}, Point{wx2, r.bottom - ha} };
|
||||||
|
GfxFillPolygon(wedge, fill);
|
||||||
|
GfxDrawLine(wedge[0].x, wedge[0].y, wedge[2].x, wedge[2].y, light);
|
||||||
|
GfxDrawLine(wedge[1].x, wedge[1].y, wedge[2].x, wedge[2].y, _current_text_dir == TD_RTL ? shadow : light);
|
||||||
|
GfxDrawLine(wedge[0].x, wedge[0].y, wedge[1].x, wedge[1].y, shadow);
|
||||||
|
|
||||||
|
/* Draw a slider handle indicating current volume level. */
|
||||||
|
const int sw = ScaleGUITrad(slider_width);
|
||||||
|
if (_current_text_dir == TD_RTL) value = 127 - value;
|
||||||
|
const int x = r.left + (value * (r.right - r.left - sw) / 127);
|
||||||
|
DrawFrameRect(x, r.top, x + sw, r.bottom, COLOUR_GREY, FR_NONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle click on a volume slider widget to change the value
|
||||||
|
* @param r Rectangle of the widget
|
||||||
|
* @param pt Clicked point
|
||||||
|
* @param value[in,out] Volume value to modify
|
||||||
|
* @return True if the volume setting was modified
|
||||||
|
*/
|
||||||
|
bool ClickVolumeSliderWidget(Rect r, Point pt, byte &value)
|
||||||
|
{
|
||||||
|
byte new_vol = Clamp((pt.x - r.left) * 127 / (r.right - r.left), 0, 127);
|
||||||
|
if (_current_text_dir == TD_RTL) new_vol = 127 - new_vol;
|
||||||
|
|
||||||
|
/* Clamp to make sure min and max are properly settable */
|
||||||
|
if (new_vol > 124) new_vol = 127;
|
||||||
|
if (new_vol < 3) new_vol = 0;
|
||||||
|
if (new_vol != value) {
|
||||||
|
value = new_vol;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
21
src/widgets/slider_func.h
Normal file
21
src/widgets/slider_func.h
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of OpenTTD.
|
||||||
|
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
||||||
|
* OpenTTD 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.
|
||||||
|
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @file slider_type.h Types related to the horizontal slider widget. */
|
||||||
|
|
||||||
|
#ifndef WIDGETS_SLIDER_TYPE_H
|
||||||
|
#define WIDGETS_SLIDER_TYPE_H
|
||||||
|
|
||||||
|
#include "../window_type.h"
|
||||||
|
#include "../gfx_func.h"
|
||||||
|
|
||||||
|
|
||||||
|
void DrawVolumeSliderWidget(Rect r, byte value);
|
||||||
|
bool ClickVolumeSliderWidget(Rect r, Point pt, byte &value);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* WIDGETS_SLIDER_TYPE_H */
|
@@ -1185,8 +1185,7 @@ Window *FindWindowByClass(WindowClass cls)
|
|||||||
void DeleteWindowById(WindowClass cls, WindowNumber number, bool force)
|
void DeleteWindowById(WindowClass cls, WindowNumber number, bool force)
|
||||||
{
|
{
|
||||||
Window *w = FindWindowById(cls, number);
|
Window *w = FindWindowById(cls, number);
|
||||||
if (force || w == nullptr ||
|
if (w != nullptr && (force || (w->flags & WF_STICKY) == 0)) {
|
||||||
(w->flags & WF_STICKY) == 0) {
|
|
||||||
delete w;
|
delete w;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user