From 40ea4ddef1fe56dab9a1479302f0b2578b4b0ed5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20M=C3=BCller?= <34514239+appgurueu@users.noreply.github.com> Date: Sun, 19 Sep 2021 20:23:22 +0200 Subject: [PATCH 001/412] Fix HUD multiline text alignment (#10795) --- src/client/hud.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/client/hud.cpp b/src/client/hud.cpp index e92f5a73d..0620759da 100644 --- a/src/client/hud.cpp +++ b/src/client/hud.cpp @@ -20,6 +20,8 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "client/hud.h" +#include +#include #include #include "settings.h" #include "util/numeric.h" @@ -377,15 +379,19 @@ void Hud::drawLuaElements(const v3s16 &camera_offset) std::wstring text = unescape_translate(utf8_to_wide(e->text)); core::dimension2d textsize = textfont->getDimension(text.c_str()); - v2s32 offset((e->align.X - 1.0) * (textsize.Width / 2), - (e->align.Y - 1.0) * (textsize.Height / 2)); + v2s32 offset(0, (e->align.Y - 1.0) * (textsize.Height / 2)); core::rect size(0, 0, e->scale.X * m_scale_factor, - text_height * e->scale.Y * m_scale_factor); + text_height * e->scale.Y * m_scale_factor); v2s32 offs(e->offset.X * m_scale_factor, - e->offset.Y * m_scale_factor); - + e->offset.Y * m_scale_factor); + std::wstringstream wss(text); + std::wstring line; + while (std::getline(wss, line, L'\n')) { - textfont->draw(text.c_str(), size + pos + offset + offs, color); + core::dimension2d linesize = textfont->getDimension(line.c_str()); + v2s32 line_offset((e->align.X - 1.0) * (linesize.Width / 2), 0); + textfont->draw(line.c_str(), size + pos + offset + offs + line_offset, color); + offset.Y += linesize.Height; } break; } case HUD_ELEM_STATBAR: { From e79d6154fc26b2a9bac242f0ac01ec785b5c53b1 Mon Sep 17 00:00:00 2001 From: DS Date: Sun, 19 Sep 2021 20:23:35 +0200 Subject: [PATCH 002/412] Fix client-side performance of chat UI (#11612) --- src/chat.cpp | 13 ++++++++----- src/chat.h | 12 ++++++++++++ src/client/game.cpp | 20 +++++++++++++------- src/client/gameui.cpp | 18 ++++++++++++------ src/client/gameui.h | 2 ++ 5 files changed, 47 insertions(+), 18 deletions(-) diff --git a/src/chat.cpp b/src/chat.cpp index 162622abe..d8b577aab 100644 --- a/src/chat.cpp +++ b/src/chat.cpp @@ -50,6 +50,8 @@ ChatBuffer::ChatBuffer(u32 scrollback): void ChatBuffer::addLine(const std::wstring &name, const std::wstring &text) { + m_lines_modified = true; + ChatLine line(name, text); m_unformatted.push_back(line); @@ -72,6 +74,7 @@ void ChatBuffer::clear() m_unformatted.clear(); m_formatted.clear(); m_scroll = 0; + m_lines_modified = true; } u32 ChatBuffer::getLineCount() const @@ -99,14 +102,11 @@ void ChatBuffer::deleteOldest(u32 count) u32 del_unformatted = 0; u32 del_formatted = 0; - while (count > 0 && del_unformatted < m_unformatted.size()) - { + while (count > 0 && del_unformatted < m_unformatted.size()) { ++del_unformatted; // keep m_formatted in sync - if (del_formatted < m_formatted.size()) - { - + if (del_formatted < m_formatted.size()) { sanity_check(m_formatted[del_formatted].first); ++del_formatted; while (del_formatted < m_formatted.size() && @@ -120,6 +120,9 @@ void ChatBuffer::deleteOldest(u32 count) m_unformatted.erase(m_unformatted.begin(), m_unformatted.begin() + del_unformatted); m_formatted.erase(m_formatted.begin(), m_formatted.begin() + del_formatted); + if (del_unformatted > 0) + m_lines_modified = true; + if (at_bottom) m_scroll = getBottomScrollPos(); else diff --git a/src/chat.h b/src/chat.h index aabb0821e..696d805eb 100644 --- a/src/chat.h +++ b/src/chat.h @@ -113,6 +113,13 @@ public: // Scroll to top of buffer (oldest) void scrollTop(); + // Functions for keeping track of whether the lines were modified by any + // preceding operations + // If they were not changed, getLineCount() and getLine() output the same as + // before + bool getLinesModified() const { return m_lines_modified; } + void resetLinesModified() { m_lines_modified = false; } + // Format a chat line for the given number of columns. // Appends the formatted lines to the destination array and // returns the number of formatted lines. @@ -146,6 +153,11 @@ private: bool m_cache_clickable_chat_weblinks; // Color of clickable chat weblinks irr::video::SColor m_cache_chat_weblink_color; + + // Whether the lines were modified since last markLinesUnchanged() + // Is always set to true when m_unformatted is modified, because that's what + // determines the output of getLineCount() and getLine() + bool m_lines_modified = true; }; class ChatPrompt diff --git a/src/client/game.cpp b/src/client/game.cpp index a24ded844..6eb09adfa 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -804,7 +804,7 @@ private: CameraOrientation *cam); void handleClientEvent_CloudParams(ClientEvent *event, CameraOrientation *cam); - void updateChat(f32 dtime, const v2u32 &screensize); + void updateChat(f32 dtime); bool nodePlacement(const ItemDefinition &selected_def, const ItemStack &selected_item, const v3s16 &nodepos, const v3s16 &neighbourpos, const PointedThing &pointed, @@ -2922,7 +2922,7 @@ void Game::processClientEvents(CameraOrientation *cam) } } -void Game::updateChat(f32 dtime, const v2u32 &screensize) +void Game::updateChat(f32 dtime) { // Get new messages from error log buffer while (!m_chat_log_buf.empty()) @@ -2938,8 +2938,14 @@ void Game::updateChat(f32 dtime, const v2u32 &screensize) chat_backend->step(dtime); // Display all messages in a static text element - m_game_ui->setChatText(chat_backend->getRecentChat(), - chat_backend->getRecentBuffer().getLineCount()); + auto &buf = chat_backend->getRecentBuffer(); + if (buf.getLinesModified()) { + buf.resetLinesModified(); + m_game_ui->setChatText(chat_backend->getRecentChat(), buf.getLineCount()); + } + + // Make sure that the size is still correct + m_game_ui->updateChatSize(); } void Game::updateCamera(u32 busy_time, f32 dtime) @@ -3861,9 +3867,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, Get chat messages from client */ - v2u32 screensize = driver->getScreenSize(); - - updateChat(dtime, screensize); + updateChat(dtime); /* Inventory @@ -3957,6 +3961,8 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, /* Profiler graph */ + v2u32 screensize = driver->getScreenSize(); + if (m_game_ui->m_flags.show_profiler_graph) graph->draw(10, screensize.Y - 10, driver, g_fontengine->getFont()); diff --git a/src/client/gameui.cpp b/src/client/gameui.cpp index 9b77cf6ff..ecb8e0ec4 100644 --- a/src/client/gameui.cpp +++ b/src/client/gameui.cpp @@ -227,7 +227,13 @@ void GameUI::showTranslatedStatusText(const char *str) void GameUI::setChatText(const EnrichedString &chat_text, u32 recent_chat_count) { + setStaticText(m_guitext_chat, chat_text); + m_recent_chat_count = recent_chat_count; +} + +void GameUI::updateChatSize() +{ // Update gui element size and position s32 chat_y = 5; @@ -238,15 +244,15 @@ void GameUI::setChatText(const EnrichedString &chat_text, u32 recent_chat_count) const v2u32 &window_size = RenderingEngine::getWindowSize(); - core::rect chat_size(10, chat_y, - window_size.X - 20, 0); + core::rect chat_size(10, chat_y, window_size.X - 20, 0); chat_size.LowerRightCorner.Y = std::min((s32)window_size.Y, - m_guitext_chat->getTextHeight() + chat_y); + m_guitext_chat->getTextHeight() + chat_y); + + if (chat_size == m_current_chat_size) + return; + m_current_chat_size = chat_size; m_guitext_chat->setRelativePosition(chat_size); - setStaticText(m_guitext_chat, chat_text); - - m_recent_chat_count = recent_chat_count; } void GameUI::updateProfiler() diff --git a/src/client/gameui.h b/src/client/gameui.h index cb460b1c3..2eb2488e6 100644 --- a/src/client/gameui.h +++ b/src/client/gameui.h @@ -89,6 +89,7 @@ public: return m_flags.show_chat && m_recent_chat_count != 0 && m_profiler_current_page == 0; } void setChatText(const EnrichedString &chat_text, u32 recent_chat_count); + void updateChatSize(); void updateProfiler(); @@ -122,6 +123,7 @@ private: gui::IGUIStaticText *m_guitext_chat = nullptr; // Chat text u32 m_recent_chat_count = 0; + core::rect m_current_chat_size{0, 0, 0, 0}; gui::IGUIStaticText *m_guitext_profiler = nullptr; // Profiler text u8 m_profiler_current_page = 0; From 2628316842e9c3fc1c54c6d57505c7851fa83490 Mon Sep 17 00:00:00 2001 From: nia <29542929+alarixnia@users.noreply.github.com> Date: Sun, 19 Sep 2021 18:23:52 +0000 Subject: [PATCH 003/412] Fix src/util/string.cpp on NetBSD - iconv() prototype changed from traditional Unix defintion to POSIX definition in 9.99.x. - wchar_t is not a valid character set for iconv. Share code with Android for using UTF-32. --- src/util/string.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/util/string.cpp b/src/util/string.cpp index eec5ab4cd..8be5e320a 100644 --- a/src/util/string.cpp +++ b/src/util/string.cpp @@ -39,8 +39,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #endif -#if defined(_ICONV_H_) && (defined(__FreeBSD__) || defined(__NetBSD__) || \ - defined(__OpenBSD__) || defined(__DragonFly__)) +#ifdef __NetBSD__ + #include + #if __NetBSD_Version__ <= 999001500 + #define BSD_ICONV_USED + #endif +#elif defined(_ICONV_H_) && (defined(__FreeBSD__) || defined(__OpenBSD__) || \ + defined(__DragonFly__)) #define BSD_ICONV_USED #endif @@ -79,6 +84,14 @@ static bool convert(const char *to, const char *from, char *outbuf, #ifdef __ANDROID__ // On Android iconv disagrees how big a wchar_t is for whatever reason const char *DEFAULT_ENCODING = "UTF-32LE"; +#elif defined(__NetBSD__) + // NetBSD does not allow "WCHAR_T" as a charset input to iconv. + #include + #if BYTE_ORDER == BIG_ENDIAN + const char *DEFAULT_ENCODING = "UTF-32BE"; + #else + const char *DEFAULT_ENCODING = "UTF-32LE"; + #endif #else const char *DEFAULT_ENCODING = "WCHAR_T"; #endif @@ -94,7 +107,7 @@ std::wstring utf8_to_wide(const std::string &input) std::wstring out; out.resize(outbuf_size / sizeof(wchar_t)); -#ifdef __ANDROID__ +#if defined(__ANDROID__) || defined(__NetBSD__) SANITY_CHECK(sizeof(wchar_t) == 4); #endif From 9f85862b7c0d2fd6fe964699bbeabc824026e848 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Wed, 22 Sep 2021 18:35:40 +0200 Subject: [PATCH 004/412] Fix "Could not create ITexture, texture needs to have a non-empty name" warning --- src/client/tile.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/client/tile.cpp b/src/client/tile.cpp index a31e3aca1..091e546c6 100644 --- a/src/client/tile.cpp +++ b/src/client/tile.cpp @@ -762,6 +762,9 @@ void TextureSource::rebuildImagesAndTextures() // Recreate textures for (TextureInfo &ti : m_textureinfo_cache) { + if (ti.name.empty()) + continue; // Skip dummy entry + video::IImage *img = generateImage(ti.name); #if ENABLE_GLES img = Align2Npot2(img, driver); From 3dcf9e963e3d3c5d209cd3676c2f979a58c6c1ab Mon Sep 17 00:00:00 2001 From: TheBrokenRail <17478432+TheBrokenRail@users.noreply.github.com> Date: Sun, 26 Sep 2021 12:04:09 -0400 Subject: [PATCH 005/412] Touch UI support for desktop builds (#10729) --- README.md | 1 + builtin/settingtypes.txt | 3 +++ src/CMakeLists.txt | 6 ++++++ src/client/clientlauncher.cpp | 7 ++----- src/client/game.cpp | 21 ++++++++++++--------- src/client/renderingengine.cpp | 6 +++--- src/defaultsettings.cpp | 13 ++++++++----- src/gui/CMakeLists.txt | 6 ++++++ src/gui/guiConfirmRegistration.cpp | 10 +++++++--- src/gui/guiFormSpecMenu.cpp | 6 +++--- src/gui/guiPasswordChange.cpp | 8 ++++++-- src/gui/guiTable.cpp | 5 +++-- src/gui/modalMenu.cpp | 11 ++++++++--- src/gui/modalMenu.h | 4 ++-- src/gui/touchscreengui.cpp | 27 +++++++++++++++------------ src/gui/touchscreengui.h | 6 ++++-- 16 files changed, 89 insertions(+), 51 deletions(-) diff --git a/README.md b/README.md index fef3f4317..30cc7fb20 100644 --- a/README.md +++ b/README.md @@ -260,6 +260,7 @@ General options and their default values: RUN_IN_PLACE=FALSE - Create a portable install (worlds, settings etc. in current directory) USE_GPROF=FALSE - Enable profiling using GProf VERSION_EXTRA= - Text to append to version (e.g. VERSION_EXTRA=foobar -> Minetest 0.4.9-foobar) + ENABLE_TOUCH=FALSE - Enable Touchscreen support (requires support by IrrlichtMt) Library specific options: diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 43e70e052..f3b8313c7 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -949,6 +949,9 @@ screenshot_quality (Screenshot quality) int 0 0 100 # Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens. screen_dpi (DPI) int 72 1 +# Adjust the detected display density, used for scaling UI elements. +display_density_factor (Display Density Scaling Factor) float 1 + # Windows systems only: Start Minetest with the command line window in the background. # Contains the same information as the file debug.txt (default name). enable_console (Enable console window) bool false diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index dc2072d11..7ae5c15d4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -101,6 +101,12 @@ endif() option(ENABLE_GLES "Use OpenGL ES instead of OpenGL" FALSE) mark_as_advanced(ENABLE_GLES) + +option(ENABLE_TOUCH "Enable Touchscreen support" FALSE) +if(ENABLE_TOUCH) + add_definitions(-DHAVE_TOUCHSCREENGUI) +endif() + if(BUILD_CLIENT) # transitive dependency from Irrlicht (see longer explanation below) if(NOT WIN32) diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index 6ab610670..95be72ca0 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -38,9 +38,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #if USE_SOUND #include "sound_openal.h" #endif -#ifdef __ANDROID__ - #include "porting.h" -#endif /* mainmenumanager.h */ @@ -147,8 +144,8 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args) skin->setColor(gui::EGDC_3D_SHADOW, video::SColor(255, 0, 0, 0)); skin->setColor(gui::EGDC_HIGH_LIGHT, video::SColor(255, 70, 120, 50)); skin->setColor(gui::EGDC_HIGH_LIGHT_TEXT, video::SColor(255, 255, 255, 255)); -#ifdef __ANDROID__ - float density = porting::getDisplayDensity(); +#ifdef HAVE_TOUCHSCREENGUI + float density = RenderingEngine::getDisplayDensity(); skin->setSize(gui::EGDS_CHECK_BOX_WIDTH, (s32)(17.0f * density)); skin->setSize(gui::EGDS_SCROLLBAR_SIZE, (s32)(14.0f * density)); skin->setSize(gui::EGDS_WINDOW_BUTTON_WIDTH, (s32)(15.0f * density)); diff --git a/src/client/game.cpp b/src/client/game.cpp index 6eb09adfa..f7fd7abf9 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -566,7 +566,7 @@ public: } }; -#ifdef __ANDROID__ +#ifdef HAVE_TOUCHSCREENGUI #define SIZE_TAG "size[11,5.5]" #else #define SIZE_TAG "size[11,5.5,true]" // Fixed size on desktop @@ -901,8 +901,10 @@ private: bool m_does_lost_focus_pause_game = false; int m_reset_HW_buffer_counter = 0; -#ifdef __ANDROID__ +#ifdef HAVE_TOUCHSCREENGUI bool m_cache_hold_aux1; +#endif +#ifdef __ANDROID__ bool m_android_chat_open; #endif }; @@ -940,7 +942,7 @@ Game::Game() : readSettings(); -#ifdef __ANDROID__ +#ifdef HAVE_TOUCHSCREENGUI m_cache_hold_aux1 = false; // This is initialised properly later #endif @@ -1065,7 +1067,7 @@ void Game::run() set_light_table(g_settings->getFloat("display_gamma")); -#ifdef __ANDROID__ +#ifdef HAVE_TOUCHSCREENGUI m_cache_hold_aux1 = g_settings->getBool("fast_move") && client->checkPrivilege("fast"); #endif @@ -1845,6 +1847,7 @@ void Game::processUserInput(f32 dtime) else if (g_touchscreengui) { /* on touchscreengui step may generate own input events which ain't * what we want in case we just did clear them */ + g_touchscreengui->show(); g_touchscreengui->step(dtime); } #endif @@ -2157,7 +2160,7 @@ void Game::toggleFast() m_game_ui->showTranslatedStatusText("Fast mode disabled"); } -#ifdef __ANDROID__ +#ifdef HAVE_TOUCHSCREENGUI m_cache_hold_aux1 = fast_move && has_fast_privs; #endif } @@ -2495,10 +2498,10 @@ void Game::updatePlayerControl(const CameraOrientation &cam) control.movement_direction = 0.0f; } -#ifdef ANDROID - /* For Android, simulate holding down AUX1 (fast move) if the user has +#ifdef HAVE_TOUCHSCREENGUI + /* For touch, simulate holding down AUX1 (fast move) if the user has * the fast_move setting toggled on. If there is an aux1 key defined for - * Android then its meaning is inverted (i.e. holding aux1 means walk and + * touch then its meaning is inverted (i.e. holding aux1 means walk and * not fast) */ if (m_cache_hold_aux1) { @@ -4184,7 +4187,7 @@ void Game::showDeathFormspec() #define GET_KEY_NAME(KEY) gettext(getKeySetting(#KEY).name()) void Game::showPauseMenu() { -#ifdef __ANDROID__ +#ifdef HAVE_TOUCHSCREENGUI static const std::string control_text = strgettext("Default Controls:\n" "No menu visible:\n" "- single tap: button activate\n" diff --git a/src/client/renderingengine.cpp b/src/client/renderingengine.cpp index 0fdbc95dc..723865db4 100644 --- a/src/client/renderingengine.cpp +++ b/src/client/renderingengine.cpp @@ -598,7 +598,7 @@ static float calcDisplayDensity() float RenderingEngine::getDisplayDensity() { static float cached_display_density = calcDisplayDensity(); - return cached_display_density; + return cached_display_density * g_settings->getFloat("display_density_factor"); } #elif defined(_WIN32) @@ -626,14 +626,14 @@ float RenderingEngine::getDisplayDensity() display_density = calcDisplayDensity(get_video_driver()); cached = true; } - return display_density; + return display_density * g_settings->getFloat("display_density_factor"); } #else float RenderingEngine::getDisplayDensity() { - return g_settings->getFloat("screen_dpi") / 96.0; + return (g_settings->getFloat("screen_dpi") / 96.0) * g_settings->getFloat("display_density_factor"); } #endif diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 2cb345ba7..d705552d6 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -285,7 +285,7 @@ void set_default_settings() settings->setDefault("aux1_descends", "false"); settings->setDefault("doubletap_jump", "false"); settings->setDefault("always_fly_fast", "true"); -#ifdef __ANDROID__ +#ifdef HAVE_TOUCHSCREENGUI settings->setDefault("autojump", "true"); #else settings->setDefault("autojump", "false"); @@ -457,6 +457,7 @@ void set_default_settings() settings->setDefault("enable_console", "false"); settings->setDefault("screen_dpi", "72"); + settings->setDefault("display_density_factor", "1"); // Altered settings for macOS #if defined(__MACH__) && defined(__APPLE__) @@ -464,15 +465,17 @@ void set_default_settings() settings->setDefault("fps_max", "0"); #endif +#ifdef HAVE_TOUCHSCREENGUI + settings->setDefault("touchtarget", "true"); + settings->setDefault("touchscreen_threshold","20"); + settings->setDefault("fixed_virtual_joystick", "false"); + settings->setDefault("virtual_joystick_triggers_aux1", "false"); +#endif // Altered settings for Android #ifdef __ANDROID__ settings->setDefault("screen_w", "0"); settings->setDefault("screen_h", "0"); settings->setDefault("fullscreen", "true"); - settings->setDefault("touchtarget", "true"); - settings->setDefault("touchscreen_threshold","20"); - settings->setDefault("fixed_virtual_joystick", "false"); - settings->setDefault("virtual_joystick_triggers_aux1", "false"); settings->setDefault("smooth_lighting", "false"); settings->setDefault("max_simultaneous_block_sends_per_client", "10"); settings->setDefault("emergequeue_limit_diskonly", "16"); diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 5552cebea..513b13e8e 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -1,3 +1,8 @@ +set(extra_gui_SRCS "") +if(ENABLE_TOUCH) + set(extra_gui_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/touchscreengui.cpp) +endif() + set(gui_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/guiAnimatedImage.cpp ${CMAKE_CURRENT_SOURCE_DIR}/guiBackgroundImage.cpp @@ -25,5 +30,6 @@ set(gui_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/guiVolumeChange.cpp ${CMAKE_CURRENT_SOURCE_DIR}/modalMenu.cpp ${CMAKE_CURRENT_SOURCE_DIR}/profilergraph.cpp + ${extra_gui_SRCS} PARENT_SCOPE ) diff --git a/src/gui/guiConfirmRegistration.cpp b/src/gui/guiConfirmRegistration.cpp index 4ca9a64ed..b8887a4af 100644 --- a/src/gui/guiConfirmRegistration.cpp +++ b/src/gui/guiConfirmRegistration.cpp @@ -28,6 +28,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "guiEditBoxWithScrollbar.h" #include "porting.h" +#ifdef HAVE_TOUCHSCREENGUI + #include "client/renderingengine.h" +#endif + #include "gettext.h" // Continuing from guiPasswordChange.cpp @@ -45,7 +49,7 @@ GUIConfirmRegistration::GUIConfirmRegistration(gui::IGUIEnvironment *env, m_client(client), m_playername(playername), m_password(password), m_aborted(aborted), m_tsrc(tsrc) { -#ifdef __ANDROID__ +#ifdef HAVE_TOUCHSCREENGUI m_touchscreen_visible = false; #endif } @@ -73,8 +77,8 @@ void GUIConfirmRegistration::regenerateGui(v2u32 screensize) /* Calculate new sizes and positions */ -#ifdef __ANDROID__ - const float s = m_gui_scale * porting::getDisplayDensity() / 2; +#ifdef HAVE_TOUCHSCREENGUI + const float s = m_gui_scale * RenderingEngine::getDisplayDensity() / 2; #else const float s = m_gui_scale; #endif diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp index 797fd3ff6..938481fa2 100644 --- a/src/gui/guiFormSpecMenu.cpp +++ b/src/gui/guiFormSpecMenu.cpp @@ -308,7 +308,7 @@ void GUIFormSpecMenu::parseSize(parserData* data, const std::string &element) data->invsize.Y = MYMAX(0, stof(parts[1])); lockSize(false); -#ifndef __ANDROID__ +#ifndef HAVE_TOUCHSCREENGUI if (parts.size() == 3) { if (parts[2] == "true") { lockSize(true,v2u32(800,600)); @@ -3278,7 +3278,7 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize) ((15.0 / 13.0) * (0.85 + mydata.invsize.Y)); } -#ifdef __ANDROID__ +#ifdef HAVE_TOUCHSCREENGUI // In Android, the preferred imgsize should be larger to accommodate the // smaller screensize. double prefer_imgsize = padded_screensize.Y / 10 * gui_scaling; @@ -3741,7 +3741,7 @@ void GUIFormSpecMenu::showTooltip(const std::wstring &text, v2u32 screenSize = Environment->getVideoDriver()->getScreenSize(); int tooltip_offset_x = m_btn_height; int tooltip_offset_y = m_btn_height; -#ifdef __ANDROID__ +#ifdef HAVE_TOUCHSCREENGUI tooltip_offset_x *= 3; tooltip_offset_y = 0; if (m_pointer.X > (s32)screenSize.X / 2) diff --git a/src/gui/guiPasswordChange.cpp b/src/gui/guiPasswordChange.cpp index 74cd62f5b..c983260f6 100644 --- a/src/gui/guiPasswordChange.cpp +++ b/src/gui/guiPasswordChange.cpp @@ -25,6 +25,10 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include +#ifdef HAVE_TOUCHSCREENGUI + #include "client/renderingengine.h" +#endif + #include "porting.h" #include "gettext.h" @@ -79,8 +83,8 @@ void GUIPasswordChange::regenerateGui(v2u32 screensize) /* Calculate new sizes and positions */ -#ifdef __ANDROID__ - const float s = m_gui_scale * porting::getDisplayDensity() / 2; +#ifdef HAVE_TOUCHSCREENGUI + const float s = m_gui_scale * RenderingEngine::getDisplayDensity() / 2; #else const float s = m_gui_scale; #endif diff --git a/src/gui/guiTable.cpp b/src/gui/guiTable.cpp index cab2e19fd..79ae1aea3 100644 --- a/src/gui/guiTable.cpp +++ b/src/gui/guiTable.cpp @@ -77,9 +77,10 @@ GUITable::GUITable(gui::IGUIEnvironment *env, setTabStop(true); setTabOrder(-1); updateAbsolutePosition(); +#ifdef HAVE_TOUCHSCREENGUI + float density = 1; // dp scaling is applied by the skin +#else float density = RenderingEngine::getDisplayDensity(); -#ifdef __ANDROID__ - density = 1; // dp scaling is applied by the skin #endif core::rect relative_rect = m_scrollbar->getRelativePosition(); s32 width = (relative_rect.getWidth() / (2.0 / 3.0)) * density * diff --git a/src/gui/modalMenu.cpp b/src/gui/modalMenu.cpp index 1016de389..56a5d2cb9 100644 --- a/src/gui/modalMenu.cpp +++ b/src/gui/modalMenu.cpp @@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifdef HAVE_TOUCHSCREENGUI #include "touchscreengui.h" +#include "client/renderingengine.h" #endif // clang-format off @@ -40,8 +41,8 @@ GUIModalMenu::GUIModalMenu(gui::IGUIEnvironment* env, gui::IGUIElement* parent, m_remap_dbl_click(remap_dbl_click) { m_gui_scale = g_settings->getFloat("gui_scaling"); -#ifdef __ANDROID__ - float d = porting::getDisplayDensity(); +#ifdef HAVE_TOUCHSCREENGUI + float d = RenderingEngine::getDisplayDensity(); m_gui_scale *= 1.1 - 0.3 * d + 0.2 * d * d; #endif setVisible(true); @@ -183,7 +184,7 @@ static bool isChild(gui::IGUIElement *tocheck, gui::IGUIElement *parent) return false; } -#ifdef __ANDROID__ +#ifdef HAVE_TOUCHSCREENGUI bool GUIModalMenu::simulateMouseEvent( gui::IGUIElement *target, ETOUCH_INPUT_EVENT touch_event) @@ -217,6 +218,8 @@ bool GUIModalMenu::simulateMouseEvent( void GUIModalMenu::enter(gui::IGUIElement *hovered) { + if (!hovered) + return; sanity_check(!m_hovered); m_hovered.grab(hovered); SEvent gui_event{}; @@ -286,7 +289,9 @@ bool GUIModalMenu::preprocessEvent(const SEvent &event) return retval; } } +#endif +#ifdef HAVE_TOUCHSCREENGUI if (event.EventType == EET_TOUCH_INPUT_EVENT) { irr_ptr holder; holder.grab(this); // keep this alive until return (it might be dropped downstream [?]) diff --git a/src/gui/modalMenu.h b/src/gui/modalMenu.h index ed0da3205..06e78f06b 100644 --- a/src/gui/modalMenu.h +++ b/src/gui/modalMenu.h @@ -75,10 +75,10 @@ protected: v2u32 m_screensize_old; float m_gui_scale; #ifdef __ANDROID__ - v2s32 m_down_pos; std::string m_jni_field_name; #endif #ifdef HAVE_TOUCHSCREENGUI + v2s32 m_down_pos; bool m_touchscreen_visible = true; #endif @@ -102,7 +102,7 @@ private: // wants to launch other menus bool m_allow_focus_removal = false; -#ifdef __ANDROID__ +#ifdef HAVE_TOUCHSCREENGUI irr_ptr m_hovered; bool simulateMouseEvent(gui::IGUIElement *target, ETOUCH_INPUT_EVENT touch_event); diff --git a/src/gui/touchscreengui.cpp b/src/gui/touchscreengui.cpp index eb20b7e70..ebe1a6325 100644 --- a/src/gui/touchscreengui.cpp +++ b/src/gui/touchscreengui.cpp @@ -28,6 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/numeric.h" #include "porting.h" #include "client/guiscalingfilter.h" +#include "client/renderingengine.h" #include #include @@ -426,7 +427,7 @@ TouchScreenGUI::TouchScreenGUI(IrrlichtDevice *device, IEventReceiver *receiver) m_joystick_triggers_aux1 = g_settings->getBool("virtual_joystick_triggers_aux1"); m_screensize = m_device->getVideoDriver()->getScreenSize(); button_size = MYMIN(m_screensize.Y / 4.5f, - porting::getDisplayDensity() * + RenderingEngine::getDisplayDensity() * g_settings->getFloat("hud_scaling") * 65.0f); } @@ -668,9 +669,9 @@ void TouchScreenGUI::handleReleaseEvent(size_t evt_id) if (button != after_last_element_id) { // handle button events handleButtonEvent(button, evt_id, false); - } else if (evt_id == m_move_id) { + } else if (m_has_move_id && evt_id == m_move_id) { // handle the point used for moving view - m_move_id = -1; + m_has_move_id = false; // if this pointer issued a mouse event issue symmetric release here if (m_move_sent_as_mouse_event) { @@ -692,8 +693,8 @@ void TouchScreenGUI::handleReleaseEvent(size_t evt_id) } // handle joystick - else if (evt_id == m_joystick_id) { - m_joystick_id = -1; + else if (m_has_joystick_id && evt_id == m_joystick_id) { + m_has_joystick_id = false; // reset joystick for (unsigned int i = 0; i < 4; i++) @@ -776,7 +777,8 @@ void TouchScreenGUI::translateEvent(const SEvent &event) if ((m_fixed_joystick && dxj * dxj + dyj * dyj <= button_size * button_size * 1.5 * 1.5) || (!m_fixed_joystick && event.TouchInput.X < m_screensize.X / 3.0f)) { // If we don't already have a starting point for joystick make this the one. - if (m_joystick_id == -1) { + if (!m_has_joystick_id) { + m_has_joystick_id = true; m_joystick_id = event.TouchInput.ID; m_joystick_has_really_moved = false; @@ -796,7 +798,8 @@ void TouchScreenGUI::translateEvent(const SEvent &event) } } else { // If we don't already have a moving point make this the moving one. - if (m_move_id == -1) { + if (!m_has_move_id) { + m_has_move_id = true; m_move_id = event.TouchInput.ID; m_move_has_really_moved = false; m_move_downtime = porting::getTimeMs(); @@ -819,7 +822,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event) v2s32(event.TouchInput.X, event.TouchInput.Y)) return; - if (m_move_id != -1) { + if (m_has_move_id) { if ((event.TouchInput.ID == m_move_id) && (!m_move_sent_as_mouse_event)) { @@ -862,7 +865,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event) } } - if (m_joystick_id != -1 && event.TouchInput.ID == m_joystick_id) { + if (m_has_joystick_id && event.TouchInput.ID == m_joystick_id) { s32 X = event.TouchInput.X; s32 Y = event.TouchInput.Y; @@ -941,7 +944,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event) } } - if (m_move_id == -1 && m_joystick_id == -1) + if (!m_has_move_id && !m_has_joystick_id) handleChangedButton(event); } } @@ -1086,7 +1089,7 @@ void TouchScreenGUI::step(float dtime) button.repeatcounter += dtime; // in case we're moving around digging does not happen - if (m_move_id != -1) + if (m_has_move_id) m_move_has_really_moved = true; if (button.repeatcounter < button.repeatdelay) @@ -1114,7 +1117,7 @@ void TouchScreenGUI::step(float dtime) } // if a new placed pointer isn't moved for some time start digging - if ((m_move_id != -1) && + if (m_has_move_id && (!m_move_has_really_moved) && (!m_move_sent_as_mouse_event)) { diff --git a/src/gui/touchscreengui.h b/src/gui/touchscreengui.h index ad5abae87..6b36c0d59 100644 --- a/src/gui/touchscreengui.h +++ b/src/gui/touchscreengui.h @@ -228,13 +228,15 @@ private: */ line3d m_shootline; - int m_move_id = -1; + bool m_has_move_id = false; + size_t m_move_id; bool m_move_has_really_moved = false; u64 m_move_downtime = 0; bool m_move_sent_as_mouse_event = false; v2s32 m_move_downlocation = v2s32(-10000, -10000); - int m_joystick_id = -1; + bool m_has_joystick_id = false; + size_t m_joystick_id; bool m_joystick_has_really_moved = false; bool m_fixed_joystick = false; bool m_joystick_triggers_aux1 = false; From bc7d05581b55756f6e4af4b311c30e2f6077a044 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Sun, 26 Sep 2021 16:04:19 +0000 Subject: [PATCH 006/412] Fix several typos in settingtypes.txt (#11623) --- builtin/settingtypes.txt | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index f3b8313c7..9048d4d86 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -152,11 +152,11 @@ joystick_type (Joystick type) enum auto auto,generic,xbox # when holding down a joystick button combination. repeat_joystick_button_time (Joystick button repetition interval) float 0.17 0.001 -# The deadzone of the joystick -joystick_deadzone (Joystick deadzone) int 2048 +# The dead zone of the joystick +joystick_deadzone (Joystick dead zone) int 2048 # The sensitivity of the joystick axes for moving the -# ingame view frustum around. +# in-game view frustum around. joystick_frustum_sensitivity (Joystick frustum sensitivity) float 170 # Key for moving the player forward. @@ -451,9 +451,9 @@ keymap_decrease_viewing_range_min (View range decrease key) key - [**Basic] -# Whether nametag backgrounds should be shown by default. +# Whether name tag backgrounds should be shown by default. # Mods may still set a background. -show_nametag_backgrounds (Show nametag backgrounds by default) bool true +show_nametag_backgrounds (Show name tag backgrounds by default) bool true # Enable vertex buffer objects. # This should greatly improve graphics performance. @@ -489,7 +489,7 @@ enable_particles (Digging particles) bool true [**Filtering] -# Use mip mapping to scale textures. May slightly increase performance, +# Use mipmapping to scale textures. May slightly increase performance, # especially when using a high resolution texture pack. # Gamma correct downscaling is not supported. mip_map (Mipmapping) bool false @@ -609,7 +609,7 @@ shadow_map_texture_32bit (Shadow map texture in 32 bits) bool true # On true uses Poisson disk to make "soft shadows". Otherwise uses PCF filtering. shadow_poisson_filter (Poisson filtering) bool true -# Define shadow filtering quality +# Define shadow filtering quality. # This simulates the soft shadows effect by applying a PCF or Poisson disk # but also uses more resources. shadow_filters (Shadow filter quality) enum 1 0,1,2 @@ -626,10 +626,10 @@ shadow_update_frames (Map shadows update frames) int 8 1 16 # Set the soft shadow radius size. # Lower values mean sharper shadows, bigger values mean softer shadows. -# Minimum value: 1.0; maxiumum value: 10.0 +# Minimum value: 1.0; maximum value: 10.0 shadow_soft_radius (Soft shadow radius) float 1.0 1.0 10.0 -# Set the tilt of Sun/Moon orbit in degrees +# Set the tilt of Sun/Moon orbit in degrees. # Value of 0 means no tilt / vertical orbit. # Minimum value: 0.0; maximum value: 60.0 shadow_sky_body_orbit_tilt (Sky Body Orbit Tilt) float 0.0 0.0 60.0 @@ -789,7 +789,7 @@ desynchronize_mapblock_texture_animation (Desynchronize block animation) bool tr # Useful if there's something to be displayed right or left of hotbar. hud_hotbar_max_width (Maximum hotbar width) float 1.0 -# Modifies the size of the hudbar elements. +# Modifies the size of the HUD elements. hud_scaling (HUD scale factor) float 1.0 # Enables caching of facedir rotated meshes. @@ -976,7 +976,7 @@ mute_sound (Mute sound) bool false [Client] -# Clickable weblinks (middle-click or ctrl-left-click) enabled in chat console output. +# Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console output. clickable_chat_weblinks (Chat weblinks) bool false # Optional override for chat weblink color. @@ -1105,7 +1105,7 @@ max_packets_per_iteration (Max. packets per iteration) int 1024 # Compression level to use when sending mapblocks to the client. # -1 - use default compression level -# 0 - least compresson, fastest +# 0 - least compression, fastest # 9 - best compression, slowest map_compression_level_net (Map Compression Level for Network Transfer) int -1 -1 9 @@ -1291,7 +1291,7 @@ movement_gravity (Gravity) float 9.81 deprecated_lua_api_handling (Deprecated Lua API handling) enum log none,log,error # Number of extra blocks that can be loaded by /clearobjects at once. -# This is a trade-off between sqlite transaction overhead and +# This is a trade-off between SQLite transaction overhead and # memory consumption (4096=100MB, as a rule of thumb). max_clearobjects_extra_loaded_blocks (Max. clearobjects extra blocks) int 4096 @@ -1307,7 +1307,7 @@ sqlite_synchronous (Synchronous SQLite) enum 2 0,1,2 # Compression level to use when saving mapblocks to disk. # -1 - use default compression level -# 0 - least compresson, fastest +# 0 - least compression, fastest # 9 - best compression, slowest map_compression_level_disk (Map Compression Level for Disk Storage) int -1 -1 9 @@ -1414,8 +1414,8 @@ instrument.abm (Active Block Modifiers) bool true # Instrument the action function of Loading Block Modifiers on registration. instrument.lbm (Loading Block Modifiers) bool true -# Instrument chatcommands on registration. -instrument.chatcommand (Chatcommands) bool true +# Instrument chat commands on registration. +instrument.chatcommand (Chat commands) bool true # Instrument global callback functions on registration. # (anything you pass to a minetest.register_*() function) @@ -1509,7 +1509,7 @@ mapgen_limit (Map generation limit) int 31000 0 31000 # Global map generation attributes. # In Mapgen v6 the 'decorations' flag controls all decorations except trees -# and junglegrass, in all other mapgens this flag controls all decorations. +# and jungle grass, in all other mapgens this flag controls all decorations. mg_flags (Mapgen flags) flags caves,dungeons,light,decorations,biomes,ores caves,dungeons,light,decorations,biomes,ores,nocaves,nodungeons,nolight,nodecorations,nobiomes,noores [*Biome API temperature and humidity noise parameters] From 2dc73d239a42218fcf4de7b21f2898f0935b96b1 Mon Sep 17 00:00:00 2001 From: nia <29542929+alarixnia@users.noreply.github.com> Date: Sun, 26 Sep 2021 16:04:30 +0000 Subject: [PATCH 007/412] Use CMake's GNUInstallDirs for install directories on Unix (#11636) This makes the installation process honor system-specific directories (e.g. ${PREFIX}/man instead of ${PREFIX}/share/man on BSD). --- CMakeLists.txt | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1995f34b8..e542d3509 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -135,15 +135,16 @@ elseif(UNIX) # Linux, BSD etc set(ICONDIR "unix/icons") set(LOCALEDIR "locale") else() - set(SHAREDIR "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}") - set(BINDIR "${CMAKE_INSTALL_PREFIX}/bin") - set(DOCDIR "${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME}") - set(MANDIR "${CMAKE_INSTALL_PREFIX}/share/man") + include(GNUInstallDirs) + set(SHAREDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}") + set(BINDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}") + set(DOCDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DOCDIR}") + set(MANDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_MANDIR}") set(EXAMPLE_CONF_DIR ${DOCDIR}) - set(XDG_APPS_DIR "${CMAKE_INSTALL_PREFIX}/share/applications") - set(APPDATADIR "${CMAKE_INSTALL_PREFIX}/share/metainfo") - set(ICONDIR "${CMAKE_INSTALL_PREFIX}/share/icons") - set(LOCALEDIR "${CMAKE_INSTALL_PREFIX}/share/locale") + set(XDG_APPS_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/applications") + set(APPDATADIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/metainfo") + set(ICONDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/icons") + set(LOCALEDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LOCALEDIR}") endif() endif() From 918fbe3ec1667c65a320f1f6b432449f104d8e26 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Sun, 26 Sep 2021 16:04:39 +0000 Subject: [PATCH 008/412] Update builtin locale files (#11650) --- builtin/locale/__builtin.de.tr | 5 +++-- builtin/locale/__builtin.it.tr | 6 ++++-- builtin/locale/template.txt | 5 +++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/builtin/locale/__builtin.de.tr b/builtin/locale/__builtin.de.tr index aa40ffc8d..ee0b47a7e 100644 --- a/builtin/locale/__builtin.de.tr +++ b/builtin/locale/__builtin.de.tr @@ -193,7 +193,6 @@ Available commands:=Verfügbare Befehle: Command not available: @1=Befehl nicht verfügbar: @1 [all | privs | ]=[all | privs | ] Get help for commands or list privileges=Hilfe für Befehle erhalten oder Privilegien auflisten -Available privileges:=Verfügbare Privilegien: Command=Befehl Parameters=Parameter For more information, click on any entry in the list.=Für mehr Informationen klicken Sie auf einen beliebigen Eintrag in der Liste. @@ -203,6 +202,7 @@ Available commands: (see also: /help )=Verfügbare Befehle: (siehe auch: /h Close=Schließen Privilege=Privileg Description=Beschreibung +Available privileges:=Verfügbare Privilegien: print [] | dump [] | save [ []] | reset=print [] | dump [] | save [ []] Handle the profiler and profiling data=Den Profiler und Profilingdaten verwalten Statistics written to action log.=Statistiken zum Aktionsprotokoll geschrieben. @@ -230,7 +230,8 @@ Can use fly mode=Kann den Flugmodus benutzen Can use fast mode=Kann den Schnellmodus benutzen Can fly through solid nodes using noclip mode=Kann durch feste Blöcke mit dem Geistmodus fliegen Can use the rollback functionality=Kann die Rollback-Funktionalität benutzen -Allows enabling various debug options that may affect gameplay=Erlaubt die Aktivierung diverser Debugoptionen, die das Spielgeschehen beeinflussen könnten +Can view more debug info that might give a gameplay advantage=Kann zusätzliche Debuginformationen betrachten, welche einen spielerischen Vorteil geben könnten +Can enable wireframe=Kann Drahtmodell aktivieren Unknown Item=Unbekannter Gegenstand Air=Luft Ignore=Ignorieren diff --git a/builtin/locale/__builtin.it.tr b/builtin/locale/__builtin.it.tr index 449c2b85e..6e137db71 100644 --- a/builtin/locale/__builtin.it.tr +++ b/builtin/locale/__builtin.it.tr @@ -193,7 +193,6 @@ Available commands:=Comandi disponibili: Command not available: @1=Comando non disponibile: @1 [all | privs | ]=[all | privs | ] Get help for commands or list privileges=Richiama la finestra d'aiuto dei comandi o dei privilegi -Available privileges:=Privilegi disponibili: Command=Comando Parameters=Parametri For more information, click on any entry in the list.=Per più informazioni, clicca su una qualsiasi voce dell'elenco. @@ -203,6 +202,7 @@ Available commands: (see also: /help )=Comandi disponibili: (vedi anche /he Close=Chiudi Privilege=Privilegio Description=Descrizione +Available privileges:=Privilegi disponibili: print [] | dump [] | save [ []] | reset=print [] | dump [] | save [ []] | reset Handle the profiler and profiling data=Gestisce il profiler e i dati da esso elaborati Statistics written to action log.=Statistiche scritte nel log delle azioni. @@ -230,7 +230,8 @@ Can use fly mode=Si può usare la modalità volo Can use fast mode=Si può usare la modalità rapida Can fly through solid nodes using noclip mode=Si può volare attraverso i nodi solidi con la modalità incorporea Can use the rollback functionality=Si può usare la funzione di rollback -Allows enabling various debug options that may affect gameplay=Permette di abilitare varie opzioni di debug che potrebbero influenzare l'esperienza di gioco +Can view more debug info that might give a gameplay advantage= +Can enable wireframe= Unknown Item=Oggetto sconosciuto Air=Aria Ignore=Ignora @@ -244,6 +245,7 @@ Profile saved to @1= ##### not used anymore ##### +Allows enabling various debug options that may affect gameplay=Permette di abilitare varie opzioni di debug che potrebbero influenzare l'esperienza di gioco [ | -1] [reconnect] []=[ | -1] [reconnect] [] Shutdown server (-1 cancels a delayed shutdown)=Arresta il server (-1 annulla un arresto programmato) ( | all)= ( | all) diff --git a/builtin/locale/template.txt b/builtin/locale/template.txt index 7049dde36..7e40d0a2b 100644 --- a/builtin/locale/template.txt +++ b/builtin/locale/template.txt @@ -193,7 +193,6 @@ Available commands:= Command not available: @1= [all | privs | ]= Get help for commands or list privileges= -Available privileges:= Command= Parameters= For more information, click on any entry in the list.= @@ -203,6 +202,7 @@ Available commands: (see also: /help )= Close= Privilege= Description= +Available privileges:= print [] | dump [] | save [ []] | reset= Handle the profiler and profiling data= Statistics written to action log.= @@ -230,7 +230,8 @@ Can use fly mode= Can use fast mode= Can fly through solid nodes using noclip mode= Can use the rollback functionality= -Allows enabling various debug options that may affect gameplay= +Can view more debug info that might give a gameplay advantage= +Can enable wireframe= Unknown Item= Air= Ignore= From d51d0f3a5a60679436bf7d4e1980f3a82f229848 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Mon, 27 Sep 2021 17:45:44 +0200 Subject: [PATCH 009/412] Various code improvements * Camera: Fix division by 0 after view bobbing * Remove ignored constness * Connection: Improve window size range limits --- src/client/camera.cpp | 3 ++- src/client/client.h | 8 ++++---- src/client/gameui.h | 2 +- src/gui/guiFormSpecMenu.h | 2 +- src/inventory.cpp | 2 +- src/inventory.h | 2 +- src/network/connection.cpp | 32 ++++++++++---------------------- src/network/connection.h | 30 +++++++++++++++++------------- src/network/networkpacket.h | 2 +- src/remoteplayer.cpp | 2 +- src/remoteplayer.h | 2 +- 11 files changed, 40 insertions(+), 47 deletions(-) diff --git a/src/client/camera.cpp b/src/client/camera.cpp index 2629a6359..48e60c433 100644 --- a/src/client/camera.cpp +++ b/src/client/camera.cpp @@ -378,7 +378,8 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_r // Smoothen and invert the above fall_bobbing = sin(fall_bobbing * 0.5 * M_PI) * -1; // Amplify according to the intensity of the impact - fall_bobbing *= (1 - rangelim(50 / player->camera_impact, 0, 1)) * 5; + if (player->camera_impact > 0.0f) + fall_bobbing *= (1 - rangelim(50 / player->camera_impact, 0, 1)) * 5; fall_bobbing *= m_cache_fall_bobbing_amount; } diff --git a/src/client/client.h b/src/client/client.h index b0324ee90..b92b456f4 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -334,13 +334,13 @@ public: // disconnect client when CSM failed. const std::string &accessDeniedReason() const { return m_access_denied_reason; } - const bool itemdefReceived() const + bool itemdefReceived() const { return m_itemdef_received; } - const bool nodedefReceived() const + bool nodedefReceived() const { return m_nodedef_received; } - const bool mediaReceived() const + bool mediaReceived() const { return !m_media_downloader; } - const bool activeObjectsReceived() const + bool activeObjectsReceived() const { return m_activeobjects_received; } u16 getProtoVersion() diff --git a/src/client/gameui.h b/src/client/gameui.h index 2eb2488e6..3f31f1b57 100644 --- a/src/client/gameui.h +++ b/src/client/gameui.h @@ -84,7 +84,7 @@ public: void showTranslatedStatusText(const char *str); inline void clearStatusText() { m_statustext.clear(); } - const bool isChatVisible() + bool isChatVisible() { return m_flags.show_chat && m_recent_chat_count != 0 && m_profiler_current_page == 0; } diff --git a/src/gui/guiFormSpecMenu.h b/src/gui/guiFormSpecMenu.h index 926de66d5..eee84eff6 100644 --- a/src/gui/guiFormSpecMenu.h +++ b/src/gui/guiFormSpecMenu.h @@ -229,7 +229,7 @@ public: return m_selected_item; } - const u16 getSelectedAmount() const + u16 getSelectedAmount() const { return m_selected_amount; } diff --git a/src/inventory.cpp b/src/inventory.cpp index da6517e62..029fcbf4f 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -995,7 +995,7 @@ const InventoryList *Inventory::getList(const std::string &name) const return m_lists[i]; } -const s32 Inventory::getListIndex(const std::string &name) const +s32 Inventory::getListIndex(const std::string &name) const { for(u32 i=0; i m_lists; IItemDefManager *m_itemdef; diff --git a/src/network/connection.cpp b/src/network/connection.cpp index a4970954f..548b2e3a0 100644 --- a/src/network/connection.cpp +++ b/src/network/connection.cpp @@ -578,7 +578,7 @@ u16 Channel::getOutgoingSequenceNumber(bool& successful) // ugly cast but this one is required in order to tell compiler we // know about difference of two unsigned may be negative in general // but we already made sure it won't happen in this case - if (((u16)(next_outgoing_seqnum - lowest_unacked_seqnumber)) > window_size) { + if (((u16)(next_outgoing_seqnum - lowest_unacked_seqnumber)) > m_window_size) { successful = false; return 0; } @@ -588,7 +588,7 @@ u16 Channel::getOutgoingSequenceNumber(bool& successful) // know about difference of two unsigned may be negative in general // but we already made sure it won't happen in this case if ((next_outgoing_seqnum + (u16)(SEQNUM_MAX - lowest_unacked_seqnumber)) > - window_size) { + m_window_size) { successful = false; return 0; } @@ -666,7 +666,7 @@ void Channel::UpdateTimers(float dtime) //packet_too_late = current_packet_too_late; packets_successful = current_packet_successful; - if (current_bytes_transfered > (unsigned int) (window_size*512/2)) { + if (current_bytes_transfered > (unsigned int) (m_window_size*512/2)) { reasonable_amount_of_data_transmitted = true; } current_packet_loss = 0; @@ -681,37 +681,25 @@ void Channel::UpdateTimers(float dtime) if (packets_successful > 0) { successful_to_lost_ratio = packet_loss/packets_successful; } else if (packet_loss > 0) { - window_size = std::max( - (window_size - 10), - MIN_RELIABLE_WINDOW_SIZE); + setWindowSize(m_window_size - 10); done = true; } if (!done) { - if ((successful_to_lost_ratio < 0.01f) && - (window_size < MAX_RELIABLE_WINDOW_SIZE)) { + if (successful_to_lost_ratio < 0.01f) { /* don't even think about increasing if we didn't even * use major parts of our window */ if (reasonable_amount_of_data_transmitted) - window_size = std::min( - (window_size + 100), - MAX_RELIABLE_WINDOW_SIZE); - } else if ((successful_to_lost_ratio < 0.05f) && - (window_size < MAX_RELIABLE_WINDOW_SIZE)) { + setWindowSize(m_window_size + 100); + } else if (successful_to_lost_ratio < 0.05f) { /* don't even think about increasing if we didn't even * use major parts of our window */ if (reasonable_amount_of_data_transmitted) - window_size = std::min( - (window_size + 50), - MAX_RELIABLE_WINDOW_SIZE); + setWindowSize(m_window_size + 50); } else if (successful_to_lost_ratio > 0.15f) { - window_size = std::max( - (window_size - 100), - MIN_RELIABLE_WINDOW_SIZE); + setWindowSize(m_window_size - 100); } else if (successful_to_lost_ratio > 0.1f) { - window_size = std::max( - (window_size - 50), - MIN_RELIABLE_WINDOW_SIZE); + setWindowSize(m_window_size - 50); } } } diff --git a/src/network/connection.h b/src/network/connection.h index 49bb65c3e..ea74ffb1c 100644 --- a/src/network/connection.h +++ b/src/network/connection.h @@ -420,34 +420,38 @@ public: void UpdateTimers(float dtime); - const float getCurrentDownloadRateKB() + float getCurrentDownloadRateKB() { MutexAutoLock lock(m_internal_mutex); return cur_kbps; }; - const float getMaxDownloadRateKB() + float getMaxDownloadRateKB() { MutexAutoLock lock(m_internal_mutex); return max_kbps; }; - const float getCurrentLossRateKB() + float getCurrentLossRateKB() { MutexAutoLock lock(m_internal_mutex); return cur_kbps_lost; }; - const float getMaxLossRateKB() + float getMaxLossRateKB() { MutexAutoLock lock(m_internal_mutex); return max_kbps_lost; }; - const float getCurrentIncomingRateKB() + float getCurrentIncomingRateKB() { MutexAutoLock lock(m_internal_mutex); return cur_incoming_kbps; }; - const float getMaxIncomingRateKB() + float getMaxIncomingRateKB() { MutexAutoLock lock(m_internal_mutex); return max_incoming_kbps; }; - const float getAvgDownloadRateKB() + float getAvgDownloadRateKB() { MutexAutoLock lock(m_internal_mutex); return avg_kbps; }; - const float getAvgLossRateKB() + float getAvgLossRateKB() { MutexAutoLock lock(m_internal_mutex); return avg_kbps_lost; }; - const float getAvgIncomingRateKB() + float getAvgIncomingRateKB() { MutexAutoLock lock(m_internal_mutex); return avg_incoming_kbps; }; - const unsigned int getWindowSize() const { return window_size; }; + u16 getWindowSize() const { return m_window_size; }; + + void setWindowSize(long size) + { + m_window_size = (u16)rangelim(size, MIN_RELIABLE_WINDOW_SIZE, MAX_RELIABLE_WINDOW_SIZE); + } - void setWindowSize(unsigned int size) { window_size = size; }; private: std::mutex m_internal_mutex; - int window_size = MIN_RELIABLE_WINDOW_SIZE; + u16 m_window_size = MIN_RELIABLE_WINDOW_SIZE; u16 next_incoming_seqnum = SEQNUM_INITIAL; @@ -765,7 +769,7 @@ public: Address GetPeerAddress(session_t peer_id); float getPeerStat(session_t peer_id, rtt_stat_type type); float getLocalStat(rate_stat_type type); - const u32 GetProtocolID() const { return m_protocol_id; }; + u32 GetProtocolID() const { return m_protocol_id; }; const std::string getDesc(); void DisconnectPeer(session_t peer_id); diff --git a/src/network/networkpacket.h b/src/network/networkpacket.h index b1c44f055..b9c39f332 100644 --- a/src/network/networkpacket.h +++ b/src/network/networkpacket.h @@ -41,7 +41,7 @@ public: u32 getSize() const { return m_datasize; } session_t getPeerId() const { return m_peer_id; } u16 getCommand() { return m_command; } - const u32 getRemainingBytes() const { return m_datasize - m_read_offset; } + u32 getRemainingBytes() const { return m_datasize - m_read_offset; } const char *getRemainingString() { return getString(m_read_offset); } // Returns a c-string without copying. diff --git a/src/remoteplayer.cpp b/src/remoteplayer.cpp index 925ad001b..d537965a2 100644 --- a/src/remoteplayer.cpp +++ b/src/remoteplayer.cpp @@ -84,7 +84,7 @@ RemotePlayer::RemotePlayer(const char *name, IItemDefManager *idef): } -const RemotePlayerChatResult RemotePlayer::canSendChatMessage() +RemotePlayerChatResult RemotePlayer::canSendChatMessage() { // Rate limit messages u32 now = time(NULL); diff --git a/src/remoteplayer.h b/src/remoteplayer.h index 8d086fc5a..bd39b68ba 100644 --- a/src/remoteplayer.h +++ b/src/remoteplayer.h @@ -47,7 +47,7 @@ public: PlayerSAO *getPlayerSAO() { return m_sao; } void setPlayerSAO(PlayerSAO *sao) { m_sao = sao; } - const RemotePlayerChatResult canSendChatMessage(); + RemotePlayerChatResult canSendChatMessage(); void setHotbarItemcount(s32 hotbar_itemcount) { From f5040707fe7cf9f24274379598527d6298c5818c Mon Sep 17 00:00:00 2001 From: x2048 Date: Mon, 27 Sep 2021 17:46:08 +0200 Subject: [PATCH 010/412] Order drawlist by distance to the camera when rendering (#11651) --- src/client/clientmap.cpp | 101 ++++++++++++++++++++++++++++----------- src/client/clientmap.h | 30 +++++++++++- src/client/game.cpp | 4 +- 3 files changed, 105 insertions(+), 30 deletions(-) diff --git a/src/client/clientmap.cpp b/src/client/clientmap.cpp index 77f3b9fe8..7cde085c8 100644 --- a/src/client/clientmap.cpp +++ b/src/client/clientmap.cpp @@ -73,7 +73,8 @@ ClientMap::ClientMap( rendering_engine->get_scene_manager(), id), m_client(client), m_rendering_engine(rendering_engine), - m_control(control) + m_control(control), + m_drawlist(MapBlockComparer(v3s16(0,0,0))) { /* @@ -164,6 +165,8 @@ void ClientMap::updateDrawList() { ScopeProfiler sp(g_profiler, "CM::updateDrawList()", SPT_AVG); + m_needs_update_drawlist = false; + for (auto &i : m_drawlist) { MapBlock *block = i.second; block->refDrop(); @@ -178,6 +181,7 @@ void ClientMap::updateDrawList() const f32 camera_fov = m_camera_fov * 1.1f; v3s16 cam_pos_nodes = floatToInt(camera_position, BS); + v3s16 p_blocks_min; v3s16 p_blocks_max; getBlocksInViewRange(cam_pos_nodes, &p_blocks_min, &p_blocks_max); @@ -202,6 +206,8 @@ void ClientMap::updateDrawList() occlusion_culling_enabled = false; } + v3s16 camera_block = getContainerPos(cam_pos_nodes, MAP_BLOCKSIZE); + m_drawlist = std::map(MapBlockComparer(camera_block)); // Uncomment to debug occluded blocks in the wireframe mode // TODO: Include this as a flag for an extended debugging setting @@ -321,7 +327,20 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) Draw the selected MapBlocks */ - MeshBufListList drawbufs; + MeshBufListList grouped_buffers; + + struct DrawDescriptor { + v3s16 m_pos; + scene::IMeshBuffer *m_buffer; + bool m_reuse_material; + + DrawDescriptor(const v3s16 &pos, scene::IMeshBuffer *buffer, bool reuse_material) : + m_pos(pos), m_buffer(buffer), m_reuse_material(reuse_material) + {} + }; + + std::vector draw_order; + video::SMaterial previous_material; for (auto &i : m_drawlist) { v3s16 block_pos = i.first; @@ -386,53 +405,76 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) material.setFlag(video::EMF_WIREFRAME, m_control.show_wireframe); - drawbufs.add(buf, block_pos, layer); + if (is_transparent_pass) { + // Same comparison as in MeshBufListList + bool new_material = material.getTexture(0) != previous_material.getTexture(0) || + material != previous_material; + + draw_order.emplace_back(block_pos, buf, !new_material); + + if (new_material) + previous_material = material; + } + else { + grouped_buffers.add(buf, block_pos, layer); + } } } } } } + // Capture draw order for all solid meshes + for (auto &lists : grouped_buffers.lists) { + for (MeshBufList &list : lists) { + // iterate in reverse to draw closest blocks first + for (auto it = list.bufs.rbegin(); it != list.bufs.rend(); ++it) { + draw_order.emplace_back(it->first, it->second, it != list.bufs.rbegin()); + } + } + } + TimeTaker draw("Drawing mesh buffers"); core::matrix4 m; // Model matrix v3f offset = intToFloat(m_camera_offset, BS); + u32 material_swaps = 0; - // Render all layers in order - for (auto &lists : drawbufs.lists) { - for (MeshBufList &list : lists) { - // Check and abort if the machine is swapping a lot - if (draw.getTimerTime() > 2000) { - infostream << "ClientMap::renderMap(): Rendering took >2s, " << - "returning." << std::endl; - return; - } + // Render all mesh buffers in order + drawcall_count += draw_order.size(); + for (auto &descriptor : draw_order) { + scene::IMeshBuffer *buf = descriptor.m_buffer; + // Check and abort if the machine is swapping a lot + if (draw.getTimerTime() > 2000) { + infostream << "ClientMap::renderMap(): Rendering took >2s, " << + "returning." << std::endl; + return; + } + + if (!descriptor.m_reuse_material) { + auto &material = buf->getMaterial(); // pass the shadow map texture to the buffer texture ShadowRenderer *shadow = m_rendering_engine->get_shadow_renderer(); if (shadow && shadow->is_active()) { - auto &layer = list.m.TextureLayer[3]; + auto &layer = material.TextureLayer[3]; layer.Texture = shadow->get_texture(); layer.TextureWrapU = video::E_TEXTURE_CLAMP::ETC_CLAMP_TO_EDGE; layer.TextureWrapV = video::E_TEXTURE_CLAMP::ETC_CLAMP_TO_EDGE; layer.TrilinearFilter = true; } - - driver->setMaterial(list.m); - - drawcall_count += list.bufs.size(); - for (auto &pair : list.bufs) { - scene::IMeshBuffer *buf = pair.second; - - v3f block_wpos = intToFloat(pair.first * MAP_BLOCKSIZE, BS); - m.setTranslation(block_wpos - offset); - - driver->setTransform(video::ETS_WORLD, m); - driver->drawMeshBuffer(buf); - vertex_count += buf->getVertexCount(); - } + driver->setMaterial(material); + ++material_swaps; } + + v3f block_wpos = intToFloat(descriptor.m_pos * MAP_BLOCKSIZE, BS); + m.setTranslation(block_wpos - offset); + + driver->setTransform(video::ETS_WORLD, m); + driver->drawMeshBuffer(buf); + vertex_count += buf->getVertexCount(); } + g_profiler->avg(prefix + "draw meshes [ms]", draw.stop(true)); // Log only on solid pass because values are the same @@ -440,8 +482,13 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) g_profiler->avg("renderMap(): animated meshes [#]", mesh_animate_count); } + if (pass == scene::ESNRP_TRANSPARENT) { + g_profiler->avg("renderMap(): transparent buffers [#]", draw_order.size()); + } + g_profiler->avg(prefix + "vertices drawn [#]", vertex_count); g_profiler->avg(prefix + "drawcalls [#]", drawcall_count); + g_profiler->avg(prefix + "material swaps [#]", material_swaps); } static bool getVisibleBrightness(Map *map, const v3f &p0, v3f dir, float step, diff --git a/src/client/clientmap.h b/src/client/clientmap.h index 97ce8d355..b4dc42395 100644 --- a/src/client/clientmap.h +++ b/src/client/clientmap.h @@ -87,10 +87,18 @@ public: void updateCamera(const v3f &pos, const v3f &dir, f32 fov, const v3s16 &offset) { + v3s16 previous_block = getContainerPos(floatToInt(m_camera_position, BS) + m_camera_offset, MAP_BLOCKSIZE); + m_camera_position = pos; m_camera_direction = dir; m_camera_fov = fov; m_camera_offset = offset; + + v3s16 current_block = getContainerPos(floatToInt(m_camera_position, BS) + m_camera_offset, MAP_BLOCKSIZE); + + // reorder the blocks when camera crosses block boundary + if (previous_block != current_block) + m_needs_update_drawlist = true; } /* @@ -122,6 +130,8 @@ public: v3s16 *p_blocks_min, v3s16 *p_blocks_max, float range=-1.0f); void updateDrawList(); void updateDrawListShadow(const v3f &shadow_light_pos, const v3f &shadow_light_dir, float shadow_range); + // Returns true if draw list needs updating before drawing the next frame. + bool needsUpdateDrawList() { return m_needs_update_drawlist; } void renderMap(video::IVideoDriver* driver, s32 pass); void renderMapShadows(video::IVideoDriver *driver, @@ -140,6 +150,23 @@ public: f32 getCameraFov() const { return m_camera_fov; } private: + // Orders blocks by distance to the camera + class MapBlockComparer + { + public: + MapBlockComparer(const v3s16 &camera_block) : m_camera_block(camera_block) {} + + bool operator() (const v3s16 &left, const v3s16 &right) const + { + auto distance_left = left.getDistanceFromSQ(m_camera_block); + auto distance_right = right.getDistanceFromSQ(m_camera_block); + return distance_left > distance_right || (distance_left == distance_right && left > right); + } + + private: + v3s16 m_camera_block; + }; + Client *m_client; RenderingEngine *m_rendering_engine; @@ -153,8 +180,9 @@ private: f32 m_camera_fov = M_PI; v3s16 m_camera_offset; - std::map m_drawlist; + std::map m_drawlist; std::map m_drawlist_shadow; + bool m_needs_update_drawlist; std::set m_last_drawn_sectors; diff --git a/src/client/game.cpp b/src/client/game.cpp index f7fd7abf9..a6448f40d 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -3897,8 +3897,8 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, v3f camera_direction = camera->getDirection(); if (runData.update_draw_list_timer >= update_draw_list_delta || runData.update_draw_list_last_cam_dir.getDistanceFrom(camera_direction) > 0.2 - || m_camera_offset_changed) { - + || m_camera_offset_changed + || client->getEnv().getClientMap().needsUpdateDrawList()) { runData.update_draw_list_timer = 0; client->getEnv().getClientMap().updateDrawList(); runData.update_draw_list_last_cam_dir = camera_direction; From 21113ad4105dd3fb181b3d0638b907af94a352ab Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Fri, 1 Oct 2021 14:21:24 +0000 Subject: [PATCH 011/412] Split liquid_viscosity to liquid_viscosity and move_resistance (#10810) --- doc/client_lua_api.txt | 7 +- doc/lua_api.txt | 45 ++++++-- games/devtest/mods/testnodes/liquids.lua | 55 ++++++++- games/devtest/mods/testnodes/properties.lua | 108 ++++++++++++++++++ .../testnodes_climbable_resistance_side.png | Bin 0 -> 295 bytes .../textures/testnodes_move_resistance.png | Bin 0 -> 221 bytes src/client/clientenvironment.cpp | 35 +++--- src/client/localplayer.cpp | 24 ++-- src/client/localplayer.h | 4 +- src/nodedef.cpp | 17 +++ src/nodedef.h | 4 + src/script/common/c_content.cpp | 22 ++++ src/script/cpp_api/s_node.h | 1 + src/script/lua_api/l_localplayer.cpp | 7 +- src/script/lua_api/l_localplayer.h | 3 +- 15 files changed, 288 insertions(+), 44 deletions(-) create mode 100644 games/devtest/mods/testnodes/textures/testnodes_climbable_resistance_side.png create mode 100644 games/devtest/mods/testnodes/textures/testnodes_move_resistance.png diff --git a/doc/client_lua_api.txt b/doc/client_lua_api.txt index 24d23b0b5..32be8c849 100644 --- a/doc/client_lua_api.txt +++ b/doc/client_lua_api.txt @@ -1030,8 +1030,8 @@ Methods: * returns true if player is in a liquid (This oscillates so that the player jumps a bit above the surface) * `is_in_liquid_stable()` * returns true if player is in a stable liquid (This is more stable and defines the maximum speed of the player) -* `get_liquid_viscosity()` - * returns liquid viscosity (Gets the viscosity of liquid to calculate friction) +* `get_move_resistance()` + * returns move resistance of current node, the higher the slower the player moves * `is_climbing()` * returns true if player is climbing * `swimming_vertical()` @@ -1233,7 +1233,7 @@ It can be created via `Raycast(pos1, pos2, objects, liquids)` or liquid_type = , -- A string containing "none", "flowing", or "source" *May not exist* liquid_alternative_flowing = , -- Alternative node for liquid *May not exist* liquid_alternative_source = , -- Alternative node for liquid *May not exist* - liquid_viscosity = , -- How fast the liquid flows *May not exist* + liquid_viscosity = , -- How slow the liquid flows *May not exist* liquid_renewable = , -- Whether the liquid makes an infinite source *May not exist* liquid_range = , -- How far the liquid flows *May not exist* drowning = bool, -- Whether the player will drown in the node @@ -1248,6 +1248,7 @@ It can be created via `Raycast(pos1, pos2, objects, liquids)` or }, legacy_facedir_simple = bool, -- Whether to use old facedir legacy_wallmounted = bool -- Whether to use old wallmounted + move_resistance = , -- How slow players can move through the node *May not exist* } ``` diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 4fab78841..9efe1afe7 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1804,7 +1804,7 @@ to games. - (14) -- constant tolerance Negative damage values are discarded as no damage. * `falling_node`: if there is no walkable block under the node it will fall -* `float`: the node will not fall through liquids +* `float`: the node will not fall through liquids (`liquidtype ~= "none"`) * `level`: Can be used to give an additional sense of progression in the game. * A larger level will cause e.g. a weapon of a lower level make much less damage, and get worn out much faster, or not be able to get drops @@ -4147,7 +4147,7 @@ differences: ### Other API functions operating on a VoxelManip -If any VoxelManip contents were set to a liquid node, +If any VoxelManip contents were set to a liquid node (`liquidtype ~= "none"`), `VoxelManip:update_liquids()` must be called for these liquid nodes to begin flowing. It is recommended to call this function only after having written all buffered data back to the VoxelManip object, save for special situations where @@ -4958,8 +4958,8 @@ Call these functions only at load time! * You should have joined some channels to receive events. * If message comes from a server mod, `sender` field is an empty string. * `minetest.register_on_liquid_transformed(function(pos_list, node_list))` - * Called after liquid nodes are modified by the engine's liquid transformation - process. + * Called after liquid nodes (`liquidtype ~= "none"`) are modified by the + engine's liquid transformation process. * `pos_list` is an array of all modified positions. * `node_list` is an array of the old node that was previously at the position with the corresponding index in pos_list. @@ -5301,7 +5301,8 @@ Environment access * `pos1`: start of the ray * `pos2`: end of the ray * `objects`: if false, only nodes will be returned. Default is `true`. - * `liquids`: if false, liquid nodes won't be returned. Default is `false`. + * `liquids`: if false, liquid nodes (`liquidtype ~= "none"`) won't be + returned. Default is `false`. * `minetest.find_path(pos1,pos2,searchdistance,max_jump,max_drop,algorithm)` * returns table containing path that can be walked on * returns a table of 3D points representing a path from `pos1` to `pos2` or @@ -5325,7 +5326,7 @@ Environment access * `minetest.spawn_tree (pos, {treedef})` * spawns L-system tree at given `pos` with definition in `treedef` table * `minetest.transforming_liquid_add(pos)` - * add node to liquid update queue + * add node to liquid flow update queue * `minetest.get_node_max_level(pos)` * get max available level for leveled node * `minetest.get_node_level(pos)` @@ -6978,7 +6979,8 @@ It can be created via `Raycast(pos1, pos2, objects, liquids)` or * `pos1`: start of the ray * `pos2`: end of the ray * `objects`: if false, only nodes will be returned. Default is true. -* `liquids`: if false, liquid nodes won't be returned. Default is false. +* `liquids`: if false, liquid nodes (`liquidtype ~= "none"`) won't be + returned. Default is false. ### Methods @@ -7462,6 +7464,8 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and range = 4.0, liquids_pointable = false, + -- If true, item points to all liquid nodes (`liquidtype ~= "none"`), + -- even those for which `pointable = false` light_source = 0, -- When used for nodes: Defines amount of light emitted by node. @@ -7647,14 +7651,21 @@ Used by `minetest.register_node`. climbable = false, -- If true, can be climbed on (ladder) + move_resistance = 0, + -- Slows down movement of players through this node (max. 7). + -- If this is nil, it will be equal to liquid_viscosity. + -- Note: If liquid movement physics apply to the node + -- (see `liquid_move_physics`), the movement speed will also be + -- affected by the `movement_liquid_*` settings. + buildable_to = false, -- If true, placed nodes can replace this node floodable = false, -- If true, liquids flow into and replace this node. -- Warning: making a liquid node 'floodable' will cause problems. - liquidtype = "none", -- specifies liquid physics - -- * "none": no liquid physics + liquidtype = "none", -- specifies liquid flowing physics + -- * "none": no liquid flowing physics -- * "source": spawns flowing liquid nodes at all 4 sides and below; -- recommended drawtype: "liquid". -- * "flowing": spawned from source, spawns more flowing liquid nodes @@ -7668,12 +7679,26 @@ Used by `minetest.register_node`. liquid_alternative_source = "", -- Source version of flowing liquid - liquid_viscosity = 0, -- Higher viscosity = slower flow (max. 7) + liquid_viscosity = 0, + -- Controls speed at which the liquid spreads/flows (max. 7). + -- 0 is fastest, 7 is slowest. + -- By default, this also slows down movement of players inside the node + -- (can be overridden using `move_resistance`) liquid_renewable = true, -- If true, a new liquid source can be created by placing two or more -- sources nearby + liquid_move_physics = nil, -- specifies movement physics if inside node + -- * false: No liquid movement physics apply. + -- * true: Enables liquid movement physics. Enables things like + -- ability to "swim" up/down, sinking slowly if not moving, + -- smoother speed change when falling into, etc. The `movement_liquid_*` + -- settings apply. + -- * nil: Will be treated as true if `liquidype ~= "none"` + -- and as false otherwise. + -- Default: nil + leveled = 0, -- Only valid for "nodebox" drawtype with 'type = "leveled"'. -- Allows defining the nodebox height without using param2. diff --git a/games/devtest/mods/testnodes/liquids.lua b/games/devtest/mods/testnodes/liquids.lua index 3d2ea17f5..be33814af 100644 --- a/games/devtest/mods/testnodes/liquids.lua +++ b/games/devtest/mods/testnodes/liquids.lua @@ -40,9 +40,11 @@ for d=0, 8 do liquid_range = d, }) + if d <= 7 then + local mod = "^[colorize:#000000:127" minetest.register_node("testnodes:vliquid_"..d, { - description = "Test Liquid Source, Viscosity "..d, + description = "Test Liquid Source, Viscosity/Resistance "..d, drawtype = "liquid", tiles = {"testnodes_liquidsource_r"..d..".png"..mod}, special_tiles = { @@ -61,7 +63,7 @@ for d=0, 8 do }) minetest.register_node("testnodes:vliquid_flowing_"..d, { - description = "Flowing Test Liquid, Viscosity "..d, + description = "Flowing Test Liquid, Viscosity/Resistance "..d, drawtype = "flowingliquid", tiles = {"testnodes_liquidflowing_r"..d..".png"..mod}, special_tiles = { @@ -80,4 +82,53 @@ for d=0, 8 do liquid_viscosity = d, }) + mod = "^[colorize:#000000:192" + local v = 4 + minetest.register_node("testnodes:vrliquid_"..d, { + description = "Test Liquid Source, Viscosity "..v..", Resistance "..d, + drawtype = "liquid", + tiles = {"testnodes_liquidsource_r"..d..".png"..mod}, + special_tiles = { + {name = "testnodes_liquidsource_r"..d..".png"..mod, backface_culling = false}, + {name = "testnodes_liquidsource_r"..d..".png"..mod, backface_culling = true}, + }, + use_texture_alpha = "blend", + paramtype = "light", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + liquidtype = "source", + liquid_alternative_flowing = "testnodes:vrliquid_flowing_"..d, + liquid_alternative_source = "testnodes:vrliquid_"..d, + liquid_viscosity = v, + move_resistance = d, + }) + + minetest.register_node("testnodes:vrliquid_flowing_"..d, { + description = "Flowing Test Liquid, Viscosity "..v..", Resistance "..d, + drawtype = "flowingliquid", + tiles = {"testnodes_liquidflowing_r"..d..".png"..mod}, + special_tiles = { + {name = "testnodes_liquidflowing_r"..d..".png"..mod, backface_culling = false}, + {name = "testnodes_liquidflowing_r"..d..".png"..mod, backface_culling = false}, + }, + use_texture_alpha = "blend", + paramtype = "light", + paramtype2 = "flowingliquid", + walkable = false, + pointable = false, + diggable = false, + buildable_to = true, + is_ground_content = false, + liquidtype = "flowing", + liquid_alternative_flowing = "testnodes:vrliquid_flowing_"..d, + liquid_alternative_source = "testnodes:vrliquid_"..d, + liquid_viscosity = v, + move_resistance = d, + }) + + end + end diff --git a/games/devtest/mods/testnodes/properties.lua b/games/devtest/mods/testnodes/properties.lua index a52cd1d6f..51f703d7c 100644 --- a/games/devtest/mods/testnodes/properties.lua +++ b/games/devtest/mods/testnodes/properties.lua @@ -152,6 +152,66 @@ minetest.register_node("testnodes:liquidflowing_nojump", { post_effect_color = {a = 70, r = 255, g = 0, b = 200}, }) +-- A liquid which doesn't have liquid movement physics (source variant) +minetest.register_node("testnodes:liquid_noswim", { + description = S("No-swim Liquid Source Node"), + liquidtype = "source", + liquid_range = 1, + liquid_viscosity = 0, + liquid_alternative_flowing = "testnodes:liquidflowing_noswim", + liquid_alternative_source = "testnodes:liquid_noswim", + liquid_renewable = false, + liquid_move_physics = false, + groups = {dig_immediate=3}, + walkable = false, + + drawtype = "liquid", + tiles = {"testnodes_liquidsource.png^[colorize:#FF00FF:127"}, + special_tiles = { + {name = "testnodes_liquidsource.png^[colorize:#FF00FF:127", backface_culling = false}, + {name = "testnodes_liquidsource.png^[colorize:#FF00FF:127", backface_culling = true}, + }, + use_texture_alpha = "blend", + paramtype = "light", + pointable = false, + liquids_pointable = true, + buildable_to = true, + is_ground_content = false, + post_effect_color = {a = 70, r = 255, g = 200, b = 200}, +}) + +-- A liquid which doen't have liquid movement physics (flowing variant) +minetest.register_node("testnodes:liquidflowing_noswim", { + description = S("No-swim Flowing Liquid Node"), + liquidtype = "flowing", + liquid_range = 1, + liquid_viscosity = 0, + liquid_alternative_flowing = "testnodes:liquidflowing_noswim", + liquid_alternative_source = "testnodes:liquid_noswim", + liquid_renewable = false, + liquid_move_physics = false, + groups = {dig_immediate=3}, + walkable = false, + + + drawtype = "flowingliquid", + tiles = {"testnodes_liquidflowing.png^[colorize:#FF00FF:127"}, + special_tiles = { + {name = "testnodes_liquidflowing.png^[colorize:#FF00FF:127", backface_culling = false}, + {name = "testnodes_liquidflowing.png^[colorize:#FF00FF:127", backface_culling = false}, + }, + use_texture_alpha = "blend", + paramtype = "light", + paramtype2 = "flowingliquid", + pointable = false, + liquids_pointable = true, + buildable_to = true, + is_ground_content = false, + post_effect_color = {a = 70, r = 255, g = 200, b = 200}, +}) + + + -- Nodes that modify fall damage (various damage modifiers) for i=-100, 100, 25 do if i ~= 0 then @@ -216,6 +276,54 @@ for i=1, 5 do }) end +-- Move resistance nodes (various resistance levels) +for r=0, 7 do + if r > 0 then + minetest.register_node("testnodes:move_resistance"..r, { + description = S("Move-resistant Node (@1)", r), + walkable = false, + move_resistance = r, + + drawtype = "glasslike", + paramtype = "light", + sunlight_propagates = true, + tiles = { "testnodes_move_resistance.png" }, + is_ground_content = false, + groups = { dig_immediate = 3 }, + color = { b = 0, g = 255, r = math.floor((r/7)*255), a = 255 }, + }) + end + + minetest.register_node("testnodes:move_resistance_liquidlike"..r, { + description = S("Move-resistant Node, liquidlike (@1)", r), + walkable = false, + move_resistance = r, + liquid_move_physics = true, + + drawtype = "glasslike", + paramtype = "light", + sunlight_propagates = true, + tiles = { "testnodes_move_resistance.png" }, + is_ground_content = false, + groups = { dig_immediate = 3 }, + color = { b = 255, g = 0, r = math.floor((r/7)*255), a = 255 }, + }) +end + +minetest.register_node("testnodes:climbable_move_resistance_4", { + description = S("Climbable Move-resistant Node (4)"), + walkable = false, + climbable = true, + move_resistance = 4, + + drawtype = "glasslike", + paramtype = "light", + sunlight_propagates = true, + tiles = {"testnodes_climbable_resistance_side.png"}, + is_ground_content = false, + groups = { dig_immediate = 3 }, +}) + -- By placing something on the node, the node itself will be replaced minetest.register_node("testnodes:buildable_to", { description = S("Replacable Node"), diff --git a/games/devtest/mods/testnodes/textures/testnodes_climbable_resistance_side.png b/games/devtest/mods/testnodes/textures/testnodes_climbable_resistance_side.png new file mode 100644 index 0000000000000000000000000000000000000000..be01583e6e4128ca26a0b813489edd28366325a6 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP#3%dY^0`KhY5kR3Wo-U3d7N?g^-Y9xlfyc#v&zlFH z8Y^vB=QT_;V)U8VHOX_6qt#LcHlAk>XS_b}{o+ZENBj~DW~_(gH`x^>vAjPPW$hew zj8}Y9;OQS5TdG}KBB!(IJgD_e_dK&}gN9E5!RoR7P3z`8`TuU;4C{SAy{$+ zpM}~EMWOvHEB}A8j}hSZ$y(L={Po=E9gCkyxnB-{UoM=pYH#uDgI`T%l|D2%wYckU m;Jc%`3*~ZbXQa*lEZ%b7f033%%QK++89ZJ6T-G@yGywn%Ds6!P literal 0 HcmV?d00001 diff --git a/games/devtest/mods/testnodes/textures/testnodes_move_resistance.png b/games/devtest/mods/testnodes/textures/testnodes_move_resistance.png new file mode 100644 index 0000000000000000000000000000000000000000..cac3944bf50725e4e6995d334e8d1f8b4c2af381 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP#Bfp@ve(Fu8K%h{Tr;B5V#p$(^1Njap@HnmfzJJ;C zir*V@K@xRlz++-dR7dHphNk&Az`}acbkv<}Y6H#;M1& literal 0 HcmV?d00001 diff --git a/src/client/clientenvironment.cpp b/src/client/clientenvironment.cpp index 7e3867537..448af36c6 100644 --- a/src/client/clientenvironment.cpp +++ b/src/client/clientenvironment.cpp @@ -194,32 +194,41 @@ void ClientEnvironment::step(float dtime) lplayer->applyControl(dtime_part, this); // Apply physics - if (!free_move && !is_climbing) { + if (!free_move) { // Gravity v3f speed = lplayer->getSpeed(); - if (!lplayer->in_liquid) + if (!is_climbing && !lplayer->in_liquid) speed.Y -= lplayer->movement_gravity * lplayer->physics_override_gravity * dtime_part * 2.0f; // Liquid floating / sinking - if (lplayer->in_liquid && !lplayer->swimming_vertical && + if (!is_climbing && lplayer->in_liquid && + !lplayer->swimming_vertical && !lplayer->swimming_pitch) speed.Y -= lplayer->movement_liquid_sink * dtime_part * 2.0f; - // Liquid resistance - if (lplayer->in_liquid_stable || lplayer->in_liquid) { - // How much the node's viscosity blocks movement, ranges - // between 0 and 1. Should match the scale at which viscosity + // Movement resistance + if (lplayer->move_resistance > 0) { + // How much the node's move_resistance blocks movement, ranges + // between 0 and 1. Should match the scale at which liquid_viscosity // increase affects other liquid attributes. - static const f32 viscosity_factor = 0.3f; + static const f32 resistance_factor = 0.3f; - v3f d_wanted = -speed / lplayer->movement_liquid_fluidity; + v3f d_wanted; + bool in_liquid_stable = lplayer->in_liquid_stable || lplayer->in_liquid; + if (in_liquid_stable) { + d_wanted = -speed / lplayer->movement_liquid_fluidity; + } else { + d_wanted = -speed / BS; + } f32 dl = d_wanted.getLength(); - if (dl > lplayer->movement_liquid_fluidity_smooth) - dl = lplayer->movement_liquid_fluidity_smooth; + if (in_liquid_stable) { + if (dl > lplayer->movement_liquid_fluidity_smooth) + dl = lplayer->movement_liquid_fluidity_smooth; + } - dl *= (lplayer->liquid_viscosity * viscosity_factor) + - (1 - viscosity_factor); + dl *= (lplayer->move_resistance * resistance_factor) + + (1 - resistance_factor); v3f d = d_wanted.normalize() * (dl * dtime_part * 100.0f); speed += d; } diff --git a/src/client/localplayer.cpp b/src/client/localplayer.cpp index 2d4f7305a..3f78d201d 100644 --- a/src/client/localplayer.cpp +++ b/src/client/localplayer.cpp @@ -227,8 +227,9 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, pp = floatToInt(position + v3f(0.0f, BS * 0.1f, 0.0f), BS); node = map->getNode(pp, &is_valid_position); if (is_valid_position) { - in_liquid = nodemgr->get(node.getContent()).isLiquid(); - liquid_viscosity = nodemgr->get(node.getContent()).liquid_viscosity; + const ContentFeatures &cf = nodemgr->get(node.getContent()); + in_liquid = cf.liquid_move_physics; + move_resistance = cf.move_resistance; } else { in_liquid = false; } @@ -238,8 +239,9 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, pp = floatToInt(position + v3f(0.0f, BS * 0.5f, 0.0f), BS); node = map->getNode(pp, &is_valid_position); if (is_valid_position) { - in_liquid = nodemgr->get(node.getContent()).isLiquid(); - liquid_viscosity = nodemgr->get(node.getContent()).liquid_viscosity; + const ContentFeatures &cf = nodemgr->get(node.getContent()); + in_liquid = cf.liquid_move_physics; + move_resistance = cf.move_resistance; } else { in_liquid = false; } @@ -252,7 +254,7 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, pp = floatToInt(position + v3f(0.0f), BS); node = map->getNode(pp, &is_valid_position); if (is_valid_position) { - in_liquid_stable = nodemgr->get(node.getContent()).isLiquid(); + in_liquid_stable = nodemgr->get(node.getContent()).liquid_move_physics; } else { in_liquid_stable = false; } @@ -800,8 +802,9 @@ void LocalPlayer::old_move(f32 dtime, Environment *env, f32 pos_max_d, pp = floatToInt(position + v3f(0.0f, BS * 0.1f, 0.0f), BS); node = map->getNode(pp, &is_valid_position); if (is_valid_position) { - in_liquid = nodemgr->get(node.getContent()).isLiquid(); - liquid_viscosity = nodemgr->get(node.getContent()).liquid_viscosity; + const ContentFeatures &cf = nodemgr->get(node.getContent()); + in_liquid = cf.liquid_move_physics; + move_resistance = cf.move_resistance; } else { in_liquid = false; } @@ -810,8 +813,9 @@ void LocalPlayer::old_move(f32 dtime, Environment *env, f32 pos_max_d, pp = floatToInt(position + v3f(0.0f, BS * 0.5f, 0.0f), BS); node = map->getNode(pp, &is_valid_position); if (is_valid_position) { - in_liquid = nodemgr->get(node.getContent()).isLiquid(); - liquid_viscosity = nodemgr->get(node.getContent()).liquid_viscosity; + const ContentFeatures &cf = nodemgr->get(node.getContent()); + in_liquid = cf.liquid_move_physics; + move_resistance = cf.move_resistance; } else { in_liquid = false; } @@ -823,7 +827,7 @@ void LocalPlayer::old_move(f32 dtime, Environment *env, f32 pos_max_d, pp = floatToInt(position + v3f(0.0f), BS); node = map->getNode(pp, &is_valid_position); if (is_valid_position) - in_liquid_stable = nodemgr->get(node.getContent()).isLiquid(); + in_liquid_stable = nodemgr->get(node.getContent()).liquid_move_physics; else in_liquid_stable = false; diff --git a/src/client/localplayer.h b/src/client/localplayer.h index 345aec9d9..13b35ae4e 100644 --- a/src/client/localplayer.h +++ b/src/client/localplayer.h @@ -55,8 +55,8 @@ public: bool in_liquid = false; // This is more stable and defines the maximum speed of the player bool in_liquid_stable = false; - // Gets the viscosity of water to calculate friction - u8 liquid_viscosity = 0; + // Slows down the player when moving through + u8 move_resistance = 0; bool is_climbing = false; bool swimming_vertical = false; bool swimming_pitch = false; diff --git a/src/nodedef.cpp b/src/nodedef.cpp index db4043aa1..703df4dee 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -403,6 +403,8 @@ void ContentFeatures::reset() palette_name = ""; palette = NULL; node_dig_prediction = "air"; + move_resistance = 0; + liquid_move_physics = false; } void ContentFeatures::setAlphaFromLegacy(u8 legacy_alpha) @@ -512,9 +514,12 @@ void ContentFeatures::serialize(std::ostream &os, u16 protocol_version) const writeU8(os, legacy_facedir_simple); writeU8(os, legacy_wallmounted); + // new attributes os << serializeString16(node_dig_prediction); writeU8(os, leveled_max); writeU8(os, alpha); + writeU8(os, move_resistance); + writeU8(os, liquid_move_physics); } void ContentFeatures::deSerialize(std::istream &is) @@ -584,9 +589,11 @@ void ContentFeatures::deSerialize(std::istream &is) // liquid liquid_type = (enum LiquidType) readU8(is); + liquid_move_physics = liquid_type != LIQUID_NONE; liquid_alternative_flowing = deSerializeString16(is); liquid_alternative_source = deSerializeString16(is); liquid_viscosity = readU8(is); + move_resistance = liquid_viscosity; // set default move_resistance liquid_renewable = readU8(is); liquid_range = readU8(is); drowning = readU8(is); @@ -618,6 +625,16 @@ void ContentFeatures::deSerialize(std::istream &is) if (is.eof()) throw SerializationError(""); alpha = static_cast(tmp); + + tmp = readU8(is); + if (is.eof()) + throw SerializationError(""); + move_resistance = tmp; + + tmp = readU8(is); + if (is.eof()) + throw SerializationError(""); + liquid_move_physics = tmp; } catch(SerializationError &e) {}; } diff --git a/src/nodedef.h b/src/nodedef.h index 8a6d88071..ea50d4281 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -376,11 +376,15 @@ struct ContentFeatures u32 damage_per_second; // client dig prediction std::string node_dig_prediction; + // how slow players move through + u8 move_resistance = 0; // --- LIQUID PROPERTIES --- // Whether the node is non-liquid, source liquid or flowing liquid enum LiquidType liquid_type; + // If true, movement (e.g. of players) inside this node is liquid-like. + bool liquid_move_physics; // If the content is liquid, this is the flowing version of the liquid. std::string liquid_alternative_flowing; content_t liquid_alternative_flowing_id; diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index 5a095fd8f..8a5a3fe71 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -719,6 +719,9 @@ void read_content_features(lua_State *L, ContentFeatures &f, int index) // the slowest possible f.liquid_viscosity = getintfield_default(L, index, "liquid_viscosity", f.liquid_viscosity); + // If move_resistance is not set explicitly, + // move_resistance is equal to liquid_viscosity + f.move_resistance = f.liquid_viscosity; f.liquid_range = getintfield_default(L, index, "liquid_range", f.liquid_range); f.leveled = getintfield_default(L, index, "leveled", f.leveled); @@ -822,6 +825,21 @@ void read_content_features(lua_State *L, ContentFeatures &f, int index) getstringfield(L, index, "node_dig_prediction", f.node_dig_prediction); + // How much the node slows down players, ranging from 1 to 7, + // the higher, the slower. + f.move_resistance = getintfield_default(L, index, + "move_resistance", f.move_resistance); + + // Whether e.g. players in this node will have liquid movement physics + lua_getfield(L, index, "liquid_move_physics"); + if(lua_isboolean(L, -1)) { + f.liquid_move_physics = lua_toboolean(L, -1); + } else if(lua_isnil(L, -1)) { + f.liquid_move_physics = f.liquid_type != LIQUID_NONE; + } else { + errorstream << "Field \"liquid_move_physics\": Invalid type!" << std::endl; + } + lua_pop(L, 1); } void push_content_features(lua_State *L, const ContentFeatures &c) @@ -949,6 +967,10 @@ void push_content_features(lua_State *L, const ContentFeatures &c) lua_setfield(L, -2, "legacy_wallmounted"); lua_pushstring(L, c.node_dig_prediction.c_str()); lua_setfield(L, -2, "node_dig_prediction"); + lua_pushnumber(L, c.move_resistance); + lua_setfield(L, -2, "move_resistance"); + lua_pushboolean(L, c.liquid_move_physics); + lua_setfield(L, -2, "liquid_move_physics"); } /******************************************************************************/ diff --git a/src/script/cpp_api/s_node.h b/src/script/cpp_api/s_node.h index 3f771c838..3c6a8445b 100644 --- a/src/script/cpp_api/s_node.h +++ b/src/script/cpp_api/s_node.h @@ -53,6 +53,7 @@ public: static struct EnumString es_ContentParamType[]; static struct EnumString es_ContentParamType2[]; static struct EnumString es_LiquidType[]; + static struct EnumString es_LiquidMoveType[]; static struct EnumString es_NodeBoxType[]; static struct EnumString es_TextureAlphaMode[]; }; diff --git a/src/script/lua_api/l_localplayer.cpp b/src/script/lua_api/l_localplayer.cpp index 9f3569ecc..bdbe98cb0 100644 --- a/src/script/lua_api/l_localplayer.cpp +++ b/src/script/lua_api/l_localplayer.cpp @@ -128,11 +128,11 @@ int LuaLocalPlayer::l_is_in_liquid_stable(lua_State *L) return 1; } -int LuaLocalPlayer::l_get_liquid_viscosity(lua_State *L) +int LuaLocalPlayer::l_get_move_resistance(lua_State *L) { LocalPlayer *player = getobject(L, 1); - lua_pushinteger(L, player->liquid_viscosity); + lua_pushinteger(L, player->move_resistance); return 1; } @@ -466,7 +466,6 @@ const luaL_Reg LuaLocalPlayer::methods[] = { luamethod(LuaLocalPlayer, is_touching_ground), luamethod(LuaLocalPlayer, is_in_liquid), luamethod(LuaLocalPlayer, is_in_liquid_stable), - luamethod(LuaLocalPlayer, get_liquid_viscosity), luamethod(LuaLocalPlayer, is_climbing), luamethod(LuaLocalPlayer, swimming_vertical), luamethod(LuaLocalPlayer, get_physics_override), @@ -488,5 +487,7 @@ const luaL_Reg LuaLocalPlayer::methods[] = { luamethod(LuaLocalPlayer, hud_change), luamethod(LuaLocalPlayer, hud_get), + luamethod(LuaLocalPlayer, get_move_resistance), + {0, 0} }; diff --git a/src/script/lua_api/l_localplayer.h b/src/script/lua_api/l_localplayer.h index 4413f2bdb..041545a49 100644 --- a/src/script/lua_api/l_localplayer.h +++ b/src/script/lua_api/l_localplayer.h @@ -51,7 +51,6 @@ private: static int l_is_touching_ground(lua_State *L); static int l_is_in_liquid(lua_State *L); static int l_is_in_liquid_stable(lua_State *L); - static int l_get_liquid_viscosity(lua_State *L); static int l_is_climbing(lua_State *L); static int l_swimming_vertical(lua_State *L); @@ -96,6 +95,8 @@ private: // hud_get(self, id) static int l_hud_get(lua_State *L); + static int l_get_move_resistance(lua_State *L); + LocalPlayer *m_localplayer = nullptr; public: From 982e03f60dc95cb2605a4a1c6520b604f85dd1d0 Mon Sep 17 00:00:00 2001 From: x2048 Date: Fri, 1 Oct 2021 16:21:53 +0200 Subject: [PATCH 012/412] Improvements to colored shadows (#11516) --- client/shaders/nodes_shader/opengl_fragment.glsl | 9 +++++++-- client/shaders/object_shader/opengl_fragment.glsl | 6 +++++- client/shaders/shadow_shaders/pass1_trans_fragment.glsl | 7 ++++++- client/shaders/shadow_shaders/pass1_trans_vertex.glsl | 7 +++++++ src/client/clientmap.cpp | 5 ++++- 5 files changed, 29 insertions(+), 5 deletions(-) diff --git a/client/shaders/nodes_shader/opengl_fragment.glsl b/client/shaders/nodes_shader/opengl_fragment.glsl index 87ef9af7d..e21890710 100644 --- a/client/shaders/nodes_shader/opengl_fragment.glsl +++ b/client/shaders/nodes_shader/opengl_fragment.glsl @@ -489,7 +489,11 @@ void main(void) if (distance_rate > 1e-7) { #ifdef COLORED_SHADOWS - vec4 visibility = getShadowColor(ShadowMapSampler, posLightSpace.xy, posLightSpace.z); + vec4 visibility; + if (cosLight > 0.0) + visibility = getShadowColor(ShadowMapSampler, posLightSpace.xy, posLightSpace.z); + else + visibility = vec4(1.0, 0.0, 0.0, 0.0); shadow_int = visibility.r; shadow_color = visibility.gba; #else @@ -507,7 +511,8 @@ void main(void) shadow_int = 1.0 - (shadow_int * f_adj_shadow_strength); - col.rgb = mix(shadow_color,col.rgb,shadow_int)*shadow_int; + // apply shadow (+color) as a factor to the material color + col.rgb = col.rgb * (1.0 - (1.0 - shadow_color) * (1.0 - pow(shadow_int, 2.0))); // col.r = 0.5 * clamp(getPenumbraRadius(ShadowMapSampler, posLightSpace.xy, posLightSpace.z, 1.0) / SOFTSHADOWRADIUS, 0.0, 1.0) + 0.5 * col.r; #endif diff --git a/client/shaders/object_shader/opengl_fragment.glsl b/client/shaders/object_shader/opengl_fragment.glsl index 9a0b90f15..3390e7227 100644 --- a/client/shaders/object_shader/opengl_fragment.glsl +++ b/client/shaders/object_shader/opengl_fragment.glsl @@ -351,7 +351,11 @@ void main(void) vec3 posLightSpace = getLightSpacePosition(); #ifdef COLORED_SHADOWS - vec4 visibility = getShadowColor(ShadowMapSampler, posLightSpace.xy, posLightSpace.z); + vec4 visibility; + if (cosLight > 0.0) + visibility = getShadowColor(ShadowMapSampler, posLightSpace.xy, posLightSpace.z); + else + visibility = vec4(1.0, 0.0, 0.0, 0.0); shadow_int = visibility.r; shadow_color = visibility.gba; #else diff --git a/client/shaders/shadow_shaders/pass1_trans_fragment.glsl b/client/shaders/shadow_shaders/pass1_trans_fragment.glsl index 9f9e5be8c..032cd9379 100644 --- a/client/shaders/shadow_shaders/pass1_trans_fragment.glsl +++ b/client/shaders/shadow_shaders/pass1_trans_fragment.glsl @@ -2,6 +2,8 @@ uniform sampler2D ColorMapSampler; varying vec4 tPos; #ifdef COLORED_SHADOWS +varying vec3 varColor; + // c_precision of 128 fits within 7 base-10 digits const float c_precision = 128.0; const float c_precisionp1 = c_precision + 1.0; @@ -30,7 +32,10 @@ void main() //col.rgb = col.a == 1.0 ? vec3(1.0) : col.rgb; #ifdef COLORED_SHADOWS - float packedColor = packColor(mix(col.rgb, black, col.a)); + col.rgb *= varColor.rgb; + // alpha 0.0 results in all-white, 0.5 means full color, 1.0 means all black + // resulting color is used as a factor in the final shader + float packedColor = packColor(mix(mix(vec3(1.0), col.rgb, 2.0 * clamp(col.a, 0.0, 0.5)), black, 2.0 * clamp(col.a - 0.5, 0.0, 0.5))); gl_FragColor = vec4(depth, packedColor, 0.0,1.0); #else gl_FragColor = vec4(depth, 0.0, 0.0, 1.0); diff --git a/client/shaders/shadow_shaders/pass1_trans_vertex.glsl b/client/shaders/shadow_shaders/pass1_trans_vertex.glsl index ca59f2796..0a9efe450 100644 --- a/client/shaders/shadow_shaders/pass1_trans_vertex.glsl +++ b/client/shaders/shadow_shaders/pass1_trans_vertex.glsl @@ -1,5 +1,8 @@ uniform mat4 LightMVP; // world matrix varying vec4 tPos; +#ifdef COLORED_SHADOWS +varying vec3 varColor; +#endif const float bias0 = 0.9; const float zPersFactor = 0.5; @@ -23,4 +26,8 @@ void main() gl_Position = vec4(tPos.xyz, 1.0); gl_TexCoord[0].st = gl_MultiTexCoord0.st; + +#ifdef COLORED_SHADOWS + varColor = gl_Color.rgb; +#endif } diff --git a/src/client/clientmap.cpp b/src/client/clientmap.cpp index 7cde085c8..1a024e464 100644 --- a/src/client/clientmap.cpp +++ b/src/client/clientmap.cpp @@ -461,7 +461,10 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) layer.Texture = shadow->get_texture(); layer.TextureWrapU = video::E_TEXTURE_CLAMP::ETC_CLAMP_TO_EDGE; layer.TextureWrapV = video::E_TEXTURE_CLAMP::ETC_CLAMP_TO_EDGE; - layer.TrilinearFilter = true; + // Do not enable filter on shadow texture to avoid visual artifacts + // with colored shadows. + // Filtering is done in shader code anyway + layer.TrilinearFilter = false; } driver->setMaterial(material); ++material_swaps; From d7e7ade0f61a0f5e05d889ffbc7d9a878148a461 Mon Sep 17 00:00:00 2001 From: Pedro Gimeno Date: Sat, 3 Apr 2021 22:51:09 +0200 Subject: [PATCH 013/412] Add an option `-t` to force text output in /help This also improves detection of whether formspecs are available. --- builtin/common/chatcommands.lua | 89 ++++++++++++++++++------ builtin/common/information_formspecs.lua | 32 ++------- 2 files changed, 76 insertions(+), 45 deletions(-) diff --git a/builtin/common/chatcommands.lua b/builtin/common/chatcommands.lua index c945e7bdb..21417e42b 100644 --- a/builtin/common/chatcommands.lua +++ b/builtin/common/chatcommands.lua @@ -6,6 +6,40 @@ local S = core.get_translator("__builtin") core.registered_chatcommands = {} +-- Interpret the parameters of a command, separating options and arguments. +-- Input: parameters of a command +-- Returns: opts, args +-- opts is a string of option letters, or false on error +-- args is an array with the non-option arguments in order, or an error message +-- Example: for this command line: +-- /command a b -cd e f -g +-- the function would receive: +-- a b -cd e f -g +-- and it would return: +-- "cdg", {"a", "b", "e", "f"} +-- Negative numbers are taken as arguments. Long options (--option) are +-- currently rejected as reserved. +local function getopts(param) + local opts = "" + local args = {} + for match in param:gmatch("%S+") do + if match:byte(1) == 45 then -- 45 = '-' + local second = match:byte(2) + if second == 45 then + return false, S("Flags beginning with -- are reserved") + elseif second and (second < 48 or second > 57) then -- 48 = '0', 57 = '9' + opts = opts .. match:sub(2) + else + -- numeric, add it to args + args[#args + 1] = match + end + else + args[#args + 1] = match + end + end + return opts, args +end + function core.register_chatcommand(cmd, def) def = def or {} def.params = def.params or "" @@ -33,22 +67,30 @@ function core.override_chatcommand(name, redefinition) core.registered_chatcommands[name] = chatcommand end -local function do_help_cmd(name, param) - local function format_help_line(cmd, def) - local cmd_marker = "/" - if INIT == "client" then - cmd_marker = "." - end - local msg = core.colorize("#00ffff", cmd_marker .. cmd) - if def.params and def.params ~= "" then - msg = msg .. " " .. def.params - end - if def.description and def.description ~= "" then - msg = msg .. ": " .. def.description - end - return msg +local function format_help_line(cmd, def) + local cmd_marker = INIT == "client" and "." or "/" + local msg = core.colorize("#00ffff", cmd_marker .. cmd) + if def.params and def.params ~= "" then + msg = msg .. " " .. def.params end - if param == "" then + if def.description and def.description ~= "" then + msg = msg .. ": " .. def.description + end + return msg +end + +local function do_help_cmd(name, param) + local opts, args = getopts(param) + if not opts then + return false, args + end + if #args > 1 then + return false, S("Too many arguments, try using just /help ") + end + local use_gui = INIT ~= "client" and core.get_player_by_name(name) + use_gui = use_gui and not opts:find("t") + + if #args == 0 and not use_gui then local cmds = {} for cmd, def in pairs(core.registered_chatcommands) do if INIT == "client" or core.check_player_privs(name, def.privs) then @@ -71,7 +113,10 @@ local function do_help_cmd(name, param) .. "everything.") end return true, msg - elseif param == "all" then + elseif #args == 0 or (args[1] == "all" and use_gui) then + core.show_general_help_formspec(name) + return true + elseif args[1] == "all" then local cmds = {} for cmd, def in pairs(core.registered_chatcommands) do if INIT == "client" or core.check_player_privs(name, def.privs) then @@ -86,7 +131,11 @@ local function do_help_cmd(name, param) msg = core.gettext("Available commands:") end return true, msg.."\n"..table.concat(cmds, "\n") - elseif INIT == "game" and param == "privs" then + elseif INIT == "game" and args[1] == "privs" then + if use_gui then + core.show_privs_help_formspec(name) + return true + end local privs = {} for priv, def in pairs(core.registered_privileges) do privs[#privs + 1] = priv .. ": " .. def.description @@ -94,7 +143,7 @@ local function do_help_cmd(name, param) table.sort(privs) return true, S("Available privileges:").."\n"..table.concat(privs, "\n") else - local cmd = param + local cmd = args[1] local def = core.registered_chatcommands[cmd] if not def then local msg @@ -120,8 +169,8 @@ if INIT == "client" then }) else core.register_chatcommand("help", { - params = S("[all | privs | ]"), - description = S("Get help for commands or list privileges"), + params = S("[all | privs | ] [-t]"), + description = S("Get help for commands or list privileges (-t: output in chat)"), func = do_help_cmd, }) end diff --git a/builtin/common/information_formspecs.lua b/builtin/common/information_formspecs.lua index e814b4c43..3405263bf 100644 --- a/builtin/common/information_formspecs.lua +++ b/builtin/common/information_formspecs.lua @@ -125,30 +125,12 @@ core.register_on_player_receive_fields(function(player, formname, fields) end end) - -local help_command = core.registered_chatcommands["help"] -local old_help_func = help_command.func - -help_command.func = function(name, param) - local admin = core.settings:get("name") - - -- If the admin ran help, put the output in the chat buffer as well to - -- work with the server terminal - if param == "privs" then - core.show_formspec(name, "__builtin:help_privs", - build_privs_formspec(name)) - if name ~= admin then - return true - end - end - if param == "" or param == "all" then - core.show_formspec(name, "__builtin:help_cmds", - build_chatcommands_formspec(name)) - if name ~= admin then - return true - end - end - - return old_help_func(name, param) +function core.show_general_help_formspec(name) + core.show_formspec(name, "__builtin:help_cmds", + build_chatcommands_formspec(name)) end +function core.show_privs_help_formspec(name) + core.show_formspec(name, "__builtin:help_privs", + build_privs_formspec(name)) +end From 4fca601e0cf74ce642e4e49ca7d4fe3e59915846 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Tue, 5 Oct 2021 12:35:55 +0000 Subject: [PATCH 014/412] Add get_server_max_lag() (#11671) --- doc/lua_api.txt | 2 ++ src/script/lua_api/l_server.cpp | 12 ++++++++++++ src/script/lua_api/l_server.h | 3 +++ 3 files changed, 17 insertions(+) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 9efe1afe7..e6cabb68e 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -5647,6 +5647,8 @@ Server a player joined. * This function may be overwritten by mods to customize the status message. * `minetest.get_server_uptime()`: returns the server uptime in seconds +* `minetest.get_server_max_lag()`: returns the current maximum lag + of the server in seconds or nil if server is not fully loaded yet * `minetest.remove_player(name)`: remove player from database (if they are not connected). * As auth data is not removed, minetest.player_exists will continue to diff --git a/src/script/lua_api/l_server.cpp b/src/script/lua_api/l_server.cpp index 473faaa14..6438fa6fd 100644 --- a/src/script/lua_api/l_server.cpp +++ b/src/script/lua_api/l_server.cpp @@ -57,6 +57,17 @@ int ModApiServer::l_get_server_uptime(lua_State *L) return 1; } +// get_server_max_lag() +int ModApiServer::l_get_server_max_lag(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + ServerEnvironment *s_env = dynamic_cast(getEnv(L)); + if (!s_env) + lua_pushnil(L); + else + lua_pushnumber(L, s_env->getMaxLagEstimate()); + return 1; +} // print(text) int ModApiServer::l_print(lua_State *L) @@ -512,6 +523,7 @@ void ModApiServer::Initialize(lua_State *L, int top) API_FCT(request_shutdown); API_FCT(get_server_status); API_FCT(get_server_uptime); + API_FCT(get_server_max_lag); API_FCT(get_worldpath); API_FCT(is_singleplayer); diff --git a/src/script/lua_api/l_server.h b/src/script/lua_api/l_server.h index c688e494b..a6f709787 100644 --- a/src/script/lua_api/l_server.h +++ b/src/script/lua_api/l_server.h @@ -33,6 +33,9 @@ private: // get_server_uptime() static int l_get_server_uptime(lua_State *L); + // get_server_max_lag() + static int l_get_server_max_lag(lua_State *L); + // get_worldpath() static int l_get_worldpath(lua_State *L); From 5aa95fef102db02aa4b2f4a5c2b59ac985a54cef Mon Sep 17 00:00:00 2001 From: Jude Melton-Houghton Date: Tue, 5 Oct 2021 08:38:33 -0400 Subject: [PATCH 015/412] Make MetaDataRef:get return nil instead of nothing (#11666) --- src/script/lua_api/l_metadata.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/script/lua_api/l_metadata.cpp b/src/script/lua_api/l_metadata.cpp index 21002e6a7..d00cb4daa 100644 --- a/src/script/lua_api/l_metadata.cpp +++ b/src/script/lua_api/l_metadata.cpp @@ -82,9 +82,10 @@ int MetaDataRef::l_get(lua_State *L) std::string str; if (meta->getStringToRef(name, str)) { lua_pushlstring(L, str.c_str(), str.size()); - return 1; + } else { + lua_pushnil(L); } - return 0; + return 1; } // get_string(self, name) From bc71622d2121347ad6dbbe3c174ad485fe1a8f8c Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Tue, 5 Oct 2021 19:53:47 +0000 Subject: [PATCH 016/412] Fix crash when calling remove/kick/ban_player on start (#11672) --- src/script/lua_api/l_server.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/script/lua_api/l_server.cpp b/src/script/lua_api/l_server.cpp index 6438fa6fd..476f74c9c 100644 --- a/src/script/lua_api/l_server.cpp +++ b/src/script/lua_api/l_server.cpp @@ -293,8 +293,10 @@ int ModApiServer::l_ban_player(lua_State *L) { NO_MAP_LOCK_REQUIRED; - Server *server = getServer(L); + if (!getEnv(L)) + throw LuaError("Can't ban player before server has started up"); + Server *server = getServer(L); const char *name = luaL_checkstring(L, 1); RemotePlayer *player = server->getEnv().getPlayer(name); if (!player) { @@ -312,6 +314,10 @@ int ModApiServer::l_ban_player(lua_State *L) int ModApiServer::l_kick_player(lua_State *L) { NO_MAP_LOCK_REQUIRED; + + if (!getEnv(L)) + throw LuaError("Can't kick player before server has started up"); + const char *name = luaL_checkstring(L, 1); std::string message("Kicked"); if (lua_isstring(L, 2)) @@ -334,7 +340,8 @@ int ModApiServer::l_remove_player(lua_State *L) NO_MAP_LOCK_REQUIRED; std::string name = luaL_checkstring(L, 1); ServerEnvironment *s_env = dynamic_cast(getEnv(L)); - assert(s_env); + if (!s_env) + throw LuaError("Can't remove player before server has started up"); RemotePlayer *player = s_env->getPlayer(name.c_str()); if (!player) From b4b9bee5f2a903f1677f12d71ebb644052877381 Mon Sep 17 00:00:00 2001 From: lhofhansl Date: Tue, 5 Oct 2021 12:54:01 -0700 Subject: [PATCH 017/412] Reduce shadow jitter (#11668) --- src/client/shadows/dynamicshadows.cpp | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/src/client/shadows/dynamicshadows.cpp b/src/client/shadows/dynamicshadows.cpp index 0c7eea0e7..6ef5a4f1d 100644 --- a/src/client/shadows/dynamicshadows.cpp +++ b/src/client/shadows/dynamicshadows.cpp @@ -65,24 +65,7 @@ void DirectionalLight::createSplitMatrices(const Camera *cam) // boundVec.getLength(); float vvolume = radius * 2.0f; - float texelsPerUnit = getMapResolution() / vvolume; - m4f mTexelScaling; - mTexelScaling.setScale(texelsPerUnit); - - m4f mLookAt, mLookAtInv; - - mLookAt.buildCameraLookAtMatrixLH(v3f(0.0f, 0.0f, 0.0f), -direction, v3f(0.0f, 1.0f, 0.0f)); - - mLookAt *= mTexelScaling; - mLookAtInv = mLookAt; - mLookAtInv.makeInverse(); - v3f frustumCenter = newCenter; - mLookAt.transformVect(frustumCenter); - frustumCenter.X = floorf(frustumCenter.X); // clamp to texel increment - frustumCenter.Y = floorf(frustumCenter.Y); // clamp to texel increment - frustumCenter.Z = floorf(frustumCenter.Z); - mLookAtInv.transformVect(frustumCenter); // probar radius multipliacdor en funcion del I, a menor I mas multiplicador v3f eye_displacement = direction * vvolume; From 53e126ac49807d066328377c7c06352b0fc1a380 Mon Sep 17 00:00:00 2001 From: HybridDog <3192173+HybridDog@users.noreply.github.com> Date: Tue, 5 Oct 2021 21:54:13 +0200 Subject: [PATCH 018/412] List only jpg and png as screenshot format options (#11675) The other formats are no longer supported in Minetest Irrlicht. --- builtin/settingtypes.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 9048d4d86..af4f5eaa6 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -614,7 +614,7 @@ shadow_poisson_filter (Poisson filtering) bool true # but also uses more resources. shadow_filters (Shadow filter quality) enum 1 0,1,2 -# Enable colored shadows. +# Enable colored shadows. # On true translucent nodes cast colored shadows. This is expensive. shadow_map_color (Colored shadows) bool false @@ -937,7 +937,7 @@ chat_font_size (Chat font size) int 0 screenshot_path (Screenshot folder) path screenshots # Format of screenshots. -screenshot_format (Screenshot format) enum png png,jpg,bmp,pcx,ppm,tga +screenshot_format (Screenshot format) enum png png,jpg # Screenshot quality. Only used for JPEG format. # 1 means worst quality; 100 means best quality. From 9fab5d594cab4c0a027f0aecf356382f3a37c1de Mon Sep 17 00:00:00 2001 From: emixa-d <85313564+emixa-d@users.noreply.github.com> Date: Wed, 6 Oct 2021 22:19:41 +0000 Subject: [PATCH 019/412] Add "MINETEST_MOD_PATH" environment variable (#11515) This adds an environment variable MINETEST_MOD_PATH. When it exists, Minetest will look there for mods in addition to ~/.minetest/mods/. --- builtin/mainmenu/pkgmgr.lua | 8 +++----- doc/menu_lua_api.txt | 8 +++++++- doc/minetest.6 | 3 +++ src/content/subgames.cpp | 14 ++++++++++++++ src/content/subgames.h | 2 ++ src/script/lua_api/l_mainmenu.cpp | 17 +++++++++++++++++ src/script/lua_api/l_mainmenu.h | 2 ++ src/unittest/CMakeLists.txt | 1 + src/unittest/test_config.h.in | 1 + src/unittest/test_mod/test_mod/init.lua | 1 + src/unittest/test_mod/test_mod/mod.conf | 2 ++ src/unittest/test_servermodmanager.cpp | 21 +++++++++++++++++++++ 12 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 src/unittest/test_mod/test_mod/init.lua create mode 100644 src/unittest/test_mod/test_mod/mod.conf diff --git a/builtin/mainmenu/pkgmgr.lua b/builtin/mainmenu/pkgmgr.lua index 787936e31..76d4a4123 100644 --- a/builtin/mainmenu/pkgmgr.lua +++ b/builtin/mainmenu/pkgmgr.lua @@ -682,11 +682,9 @@ function pkgmgr.preparemodlist(data) local game_mods = {} --read global mods - local modpath = core.get_modpath() - - if modpath ~= nil and - modpath ~= "" then - get_mods(modpath,global_mods) + local modpaths = core.get_modpaths() + for _, modpath in ipairs(modpaths) do + get_mods(modpath, global_mods) end for i=1,#global_mods,1 do diff --git a/doc/menu_lua_api.txt b/doc/menu_lua_api.txt index f4dfff261..b4b6eaba2 100644 --- a/doc/menu_lua_api.txt +++ b/doc/menu_lua_api.txt @@ -219,7 +219,13 @@ Package - content which is downloadable from the content db, may or may not be i * returns path to global user data, the directory that contains user-provided mods, worlds, games, and texture packs. * core.get_modpath() (possible in async calls) - * returns path to global modpath + * returns path to global modpath, where mods can be installed +* core.get_modpaths() (possible in async calls) + * returns list of paths to global modpaths, where mods have been installed + + The difference with "core.get_modpath" is that no mods should be installed in these + directories by Minetest -- they might be read-only. + * core.get_clientmodpath() (possible in async calls) * returns path to global client-side modpath * core.get_gamepath() (possible in async calls) diff --git a/doc/minetest.6 b/doc/minetest.6 index bac70fe1a..42ed1a45f 100644 --- a/doc/minetest.6 +++ b/doc/minetest.6 @@ -119,6 +119,9 @@ Display an interactive terminal over ncurses during execution. .TP .B MINETEST_SUBGAME_PATH Colon delimited list of directories to search for games. +.TP +.B MINETEST_MOD_PATH +Colon delimited list of directories to search for mods. .SH BUGS Please report all bugs at https://github.com/minetest/minetest/issues. diff --git a/src/content/subgames.cpp b/src/content/subgames.cpp index e9dc609b0..30447c838 100644 --- a/src/content/subgames.cpp +++ b/src/content/subgames.cpp @@ -113,6 +113,10 @@ SubgameSpec findSubgame(const std::string &id) if (user != share || user_game) mods_paths.insert(user + DIR_DELIM + "mods"); + for (const std::string &mod_path : getEnvModPaths()) { + mods_paths.insert(mod_path); + } + // Get meta std::string conf_path = game_path + DIR_DELIM + "game.conf"; Settings conf; @@ -384,3 +388,13 @@ void loadGameConfAndInitWorld(const std::string &path, const std::string &name, if (new_game_settings) delete game_settings; } + +std::vector getEnvModPaths() +{ + const char *c_mod_path = getenv("MINETEST_MOD_PATH"); + std::vector paths; + Strfnd search_paths(c_mod_path ? c_mod_path : ""); + while (!search_paths.at_end()) + paths.push_back(search_paths.next(PATH_DELIM)); + return paths; +} diff --git a/src/content/subgames.h b/src/content/subgames.h index 60392639b..4a50803e8 100644 --- a/src/content/subgames.h +++ b/src/content/subgames.h @@ -58,6 +58,8 @@ SubgameSpec findWorldSubgame(const std::string &world_path); std::set getAvailableGameIds(); std::vector getAvailableGames(); +// Get the list of paths to mods in the environment variable $MINETEST_MOD_PATH +std::vector getEnvModPaths(); bool getWorldExists(const std::string &world_path); //! Try to get the displayed name of a world diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index 6e9a5c34f..57fddc0be 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -502,6 +502,21 @@ int ModApiMainMenu::l_get_modpath(lua_State *L) return 1; } +/******************************************************************************/ +int ModApiMainMenu::l_get_modpaths(lua_State *L) +{ + int index = 1; + lua_newtable(L); + ModApiMainMenu::l_get_modpath(L); + lua_rawseti(L, -2, index); + for (const std::string &component : getEnvModPaths()) { + index++; + lua_pushstring(L, component.c_str()); + lua_rawseti(L, -2, index); + } + return 1; +} + /******************************************************************************/ int ModApiMainMenu::l_get_clientmodpath(lua_State *L) { @@ -856,6 +871,7 @@ void ModApiMainMenu::Initialize(lua_State *L, int top) API_FCT(get_mapgen_names); API_FCT(get_user_path); API_FCT(get_modpath); + API_FCT(get_modpaths); API_FCT(get_clientmodpath); API_FCT(get_gamepath); API_FCT(get_texturepath); @@ -889,6 +905,7 @@ void ModApiMainMenu::InitializeAsync(lua_State *L, int top) API_FCT(get_mapgen_names); API_FCT(get_user_path); API_FCT(get_modpath); + API_FCT(get_modpaths); API_FCT(get_clientmodpath); API_FCT(get_gamepath); API_FCT(get_texturepath); diff --git a/src/script/lua_api/l_mainmenu.h b/src/script/lua_api/l_mainmenu.h index ec2d20da2..781185425 100644 --- a/src/script/lua_api/l_mainmenu.h +++ b/src/script/lua_api/l_mainmenu.h @@ -112,6 +112,8 @@ private: static int l_get_modpath(lua_State *L); + static int l_get_modpaths(lua_State *L); + static int l_get_clientmodpath(lua_State *L); static int l_get_gamepath(lua_State *L); diff --git a/src/unittest/CMakeLists.txt b/src/unittest/CMakeLists.txt index 5703b8906..52f870901 100644 --- a/src/unittest/CMakeLists.txt +++ b/src/unittest/CMakeLists.txt @@ -44,6 +44,7 @@ set (UNITTEST_CLIENT_SRCS set (TEST_WORLDDIR ${CMAKE_CURRENT_SOURCE_DIR}/test_world) set (TEST_SUBGAME_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../games/devtest) +set (TEST_MOD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/test_mod) configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/test_config.h.in" diff --git a/src/unittest/test_config.h.in b/src/unittest/test_config.h.in index 36850b00d..50d2398e4 100644 --- a/src/unittest/test_config.h.in +++ b/src/unittest/test_config.h.in @@ -4,3 +4,4 @@ #define TEST_WORLDDIR "@TEST_WORLDDIR@" #define TEST_SUBGAME_PATH "@TEST_SUBGAME_PATH@" +#define TEST_MOD_PATH "@TEST_MOD_PATH@" diff --git a/src/unittest/test_mod/test_mod/init.lua b/src/unittest/test_mod/test_mod/init.lua new file mode 100644 index 000000000..724a863f5 --- /dev/null +++ b/src/unittest/test_mod/test_mod/init.lua @@ -0,0 +1 @@ +-- deliberately empty diff --git a/src/unittest/test_mod/test_mod/mod.conf b/src/unittest/test_mod/test_mod/mod.conf new file mode 100644 index 000000000..56c64b2d8 --- /dev/null +++ b/src/unittest/test_mod/test_mod/mod.conf @@ -0,0 +1,2 @@ +name = test_mod +description = A mod doing nothing, to test if MINETEST_MOD_PATH is recognised diff --git a/src/unittest/test_servermodmanager.cpp b/src/unittest/test_servermodmanager.cpp index e3edb0c32..4c473d8b5 100644 --- a/src/unittest/test_servermodmanager.cpp +++ b/src/unittest/test_servermodmanager.cpp @@ -48,14 +48,20 @@ static TestServerModManager g_test_instance; void TestServerModManager::runTests(IGameDef *gamedef) { const char *saved_env_mt_subgame_path = getenv("MINETEST_SUBGAME_PATH"); + const char *saved_env_mt_mod_path = getenv("MINETEST_MOD_PATH"); #ifdef WIN32 { std::string subgame_path("MINETEST_SUBGAME_PATH="); subgame_path.append(TEST_SUBGAME_PATH); _putenv(subgame_path.c_str()); + + std::string mod_path("MINETEST_MOD_PATH="); + mod_path.append(TEST_MOD_PATH); + _putenv(mod_path.c_str()); } #else setenv("MINETEST_SUBGAME_PATH", TEST_SUBGAME_PATH, 1); + setenv("MINETEST_MOD_PATH", TEST_MOD_PATH, 1); #endif TEST(testCreation); @@ -75,12 +81,21 @@ void TestServerModManager::runTests(IGameDef *gamedef) if (saved_env_mt_subgame_path) subgame_path.append(saved_env_mt_subgame_path); _putenv(subgame_path.c_str()); + + std::string mod_path("MINETEST_MOD_PATH="); + if (saved_env_mt_mod_path) + mod_path.append(saved_env_mt_mod_path); + _putenv(mod_path.c_str()); } #else if (saved_env_mt_subgame_path) setenv("MINETEST_SUBGAME_PATH", saved_env_mt_subgame_path, 1); else unsetenv("MINETEST_SUBGAME_PATH"); + if (saved_env_mt_mod_path) + setenv("MINETEST_MOD_PATH", saved_env_mt_mod_path, 1); + else + unsetenv("MINETEST_MOD_PATH"); #endif } @@ -89,6 +104,7 @@ void TestServerModManager::testCreation() std::string path = std::string(TEST_WORLDDIR) + DIR_DELIM + "world.mt"; Settings world_config; world_config.set("gameid", "devtest"); + world_config.set("load_mod_test_mod", "true"); UASSERTEQ(bool, world_config.updateConfigFile(path.c_str()), true); ServerModManager sm(TEST_WORLDDIR); } @@ -119,16 +135,21 @@ void TestServerModManager::testGetMods() UASSERTEQ(bool, mods.empty(), false); // Ensure we found basenodes mod (part of devtest) + // and test_mod (for testing MINETEST_MOD_PATH). bool default_found = false; + bool test_mod_found = false; for (const auto &m : mods) { if (m.name == "basenodes") default_found = true; + if (m.name == "test_mod") + test_mod_found = true; // Verify if paths are not empty UASSERTEQ(bool, m.path.empty(), false); } UASSERTEQ(bool, default_found, true); + UASSERTEQ(bool, test_mod_found, true); } void TestServerModManager::testGetModspec() From 2d5b7b5fb48d182fbab8e4ad69e9a552a3c07c6e Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 19 Sep 2021 16:55:35 +0200 Subject: [PATCH 020/412] Make fs::extractZipFile thread-safe --- src/filesys.cpp | 110 +++++++++++++++++------------- src/filesys.h | 6 +- src/script/lua_api/l_mainmenu.cpp | 8 +-- 3 files changed, 69 insertions(+), 55 deletions(-) diff --git a/src/filesys.cpp b/src/filesys.cpp index a07370c0e..0972acbf9 100644 --- a/src/filesys.cpp +++ b/src/filesys.cpp @@ -28,11 +28,18 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "log.h" #include "config.h" #include "porting.h" +#ifndef SERVER +#include "irr_ptr.h" +#endif namespace fs { -#ifdef _WIN32 // WINDOWS +#ifdef _WIN32 + +/*********** + * Windows * + ***********/ #define _WIN32_WINNT 0x0501 #include @@ -201,7 +208,11 @@ std::string CreateTempFile() return path; } -#else // POSIX +#else + +/********* + * POSIX * + *********/ #include #include @@ -392,6 +403,10 @@ std::string CreateTempFile() #endif +/**************************** + * portable implementations * + ****************************/ + void GetRecursiveDirs(std::vector &dirs, const std::string &dir) { static const std::set chars_to_ignore = { '_', '.' }; @@ -753,69 +768,66 @@ bool safeWriteToFile(const std::string &path, const std::string &content) return true; } +#ifndef SERVER bool extractZipFile(io::IFileSystem *fs, const char *filename, const std::string &destination) { - if (!fs->addFileArchive(filename, false, false, io::EFAT_ZIP)) { + // Be careful here not to touch the global file hierarchy in Irrlicht + // since this function needs to be thread-safe! + + io::IArchiveLoader *zip_loader = nullptr; + for (u32 i = 0; i < fs->getArchiveLoaderCount(); i++) { + if (fs->getArchiveLoader(i)->isALoadableFileFormat(io::EFAT_ZIP)) { + zip_loader = fs->getArchiveLoader(i); + break; + } + } + if (!zip_loader) { + warningstream << "fs::extractZipFile(): Irrlicht said it doesn't support ZIPs." << std::endl; return false; } - sanity_check(fs->getFileArchiveCount() > 0); - - /**********************************************************************/ - /* WARNING this is not threadsafe!! */ - /**********************************************************************/ - io::IFileArchive* opened_zip = fs->getFileArchive(fs->getFileArchiveCount() - 1); - + irr_ptr opened_zip(zip_loader->createArchive(filename, false, false)); const io::IFileList* files_in_zip = opened_zip->getFileList(); - unsigned int number_of_files = files_in_zip->getFileCount(); - - for (unsigned int i=0; i < number_of_files; i++) { - std::string fullpath = destination; - fullpath += DIR_DELIM; + for (u32 i = 0; i < files_in_zip->getFileCount(); i++) { + std::string fullpath = destination + DIR_DELIM; fullpath += files_in_zip->getFullFileName(i).c_str(); std::string fullpath_dir = fs::RemoveLastPathComponent(fullpath); - if (!files_in_zip->isDirectory(i)) { - if (!fs::PathExists(fullpath_dir) && !fs::CreateAllDirs(fullpath_dir)) { - fs->removeFileArchive(fs->getFileArchiveCount()-1); + if (files_in_zip->isDirectory(i)) + continue; // ignore, we create dirs as necessary + + if (!fs::PathExists(fullpath_dir) && !fs::CreateAllDirs(fullpath_dir)) + return false; + + irr_ptr toread(opened_zip->createAndOpenFile(i)); + + std::ofstream os(fullpath.c_str(), std::ios::binary); + if (!os.good()) + return false; + + char buffer[4096]; + long total_read = 0; + + while (total_read < toread->getSize()) { + long bytes_read = toread->read(buffer, sizeof(buffer)); + bool error = true; + if (bytes_read != 0) { + os.write(buffer, bytes_read); + error = os.fail(); + } + if (error) { + os.close(); + remove(fullpath.c_str()); return false; } - - io::IReadFile* toread = opened_zip->createAndOpenFile(i); - - FILE *targetfile = fopen(fullpath.c_str(),"wb"); - - if (targetfile == NULL) { - fs->removeFileArchive(fs->getFileArchiveCount()-1); - return false; - } - - char read_buffer[1024]; - long total_read = 0; - - while (total_read < toread->getSize()) { - - unsigned int bytes_read = - toread->read(read_buffer,sizeof(read_buffer)); - if ((bytes_read == 0 ) || - (fwrite(read_buffer, 1, bytes_read, targetfile) != bytes_read)) - { - fclose(targetfile); - fs->removeFileArchive(fs->getFileArchiveCount() - 1); - return false; - } - total_read += bytes_read; - } - - fclose(targetfile); + total_read += bytes_read; } - } - fs->removeFileArchive(fs->getFileArchiveCount() - 1); return true; } +#endif bool ReadFile(const std::string &path, std::string &out) { @@ -829,7 +841,7 @@ bool ReadFile(const std::string &path, std::string &out) is.seekg(0); is.read(&out[0], size); - return true; + return !is.fail(); } bool Rename(const std::string &from, const std::string &to) diff --git a/src/filesys.h b/src/filesys.h index f72cb0ba2..233e56bba 100644 --- a/src/filesys.h +++ b/src/filesys.h @@ -24,12 +24,12 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include "exceptions.h" -#ifdef _WIN32 // WINDOWS +#ifdef _WIN32 #define DIR_DELIM "\\" #define DIR_DELIM_CHAR '\\' #define FILESYS_CASE_INSENSITIVE true #define PATH_DELIM ";" -#else // POSIX +#else #define DIR_DELIM "/" #define DIR_DELIM_CHAR '/' #define FILESYS_CASE_INSENSITIVE false @@ -133,7 +133,9 @@ const char *GetFilenameFromPath(const char *path); bool safeWriteToFile(const std::string &path, const std::string &content); +#ifndef SERVER bool extractZipFile(irr::io::IFileSystem *fs, const char *filename, const std::string &destination); +#endif bool ReadFile(const std::string &path, std::string &out); diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index 57fddc0be..4cfbaec71 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -644,9 +644,9 @@ int ModApiMainMenu::l_extract_zip(lua_State *L) std::string absolute_destination = fs::RemoveRelativePathComponents(destination); if (ModApiMainMenu::mayModifyPath(absolute_destination)) { - auto rendering_engine = getGuiEngine(L)->m_rendering_engine; - fs::CreateAllDirs(absolute_destination); - lua_pushboolean(L, fs::extractZipFile(rendering_engine->get_filesystem(), zipfile, destination)); + auto fs = RenderingEngine::get_raw_device()->getFileSystem(); + bool ok = fs::extractZipFile(fs, zipfile, destination); + lua_pushboolean(L, ok); return 1; } @@ -916,7 +916,7 @@ void ModApiMainMenu::InitializeAsync(lua_State *L, int top) API_FCT(delete_dir); API_FCT(copy_dir); API_FCT(is_dir); - //API_FCT(extract_zip); //TODO remove dependency to GuiEngine + API_FCT(extract_zip); API_FCT(may_modify_path); API_FCT(download_file); API_FCT(get_min_supp_proto); From 2b5075f0e2a8223cdb07f000b7e8f874416ed3a8 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 19 Sep 2021 17:55:01 +0200 Subject: [PATCH 021/412] Move archive extraction in content store to async job --- builtin/common/misc_helpers.lua | 2 +- builtin/mainmenu/common.lua | 12 +---- builtin/mainmenu/dlg_contentstore.lua | 51 ++++++++++++------- builtin/mainmenu/pkgmgr.lua | 71 --------------------------- doc/menu_lua_api.txt | 4 +- src/script/lua_api/l_mainmenu.cpp | 12 +++-- 6 files changed, 47 insertions(+), 105 deletions(-) diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua index c2452fe00..f5f89acd7 100644 --- a/builtin/common/misc_helpers.lua +++ b/builtin/common/misc_helpers.lua @@ -532,7 +532,7 @@ if INIT == "mainmenu" then end end -if INIT == "client" or INIT == "mainmenu" then +if core.gettext then -- for client and mainmenu function fgettext_ne(text, ...) text = core.gettext(text) local arg = {n=select('#', ...), ...} diff --git a/builtin/mainmenu/common.lua b/builtin/mainmenu/common.lua index 6db351048..b36c9596a 100644 --- a/builtin/mainmenu/common.lua +++ b/builtin/mainmenu/common.lua @@ -119,17 +119,9 @@ function render_serverlist_row(spec) return table.concat(details, ",") end - --------------------------------------------------------------------------------- -os.tempfolder = function() - local temp = core.get_temp_path() - return temp .. DIR_DELIM .. "MT_" .. math.random(0, 10000) -end - +--------------------------------------------------------------------------------- os.tmpname = function() - local path = os.tempfolder() - io.open(path, "w"):close() - return path + error('do not use') -- instead use core.get_temp_path() end -------------------------------------------------------------------------------- diff --git a/builtin/mainmenu/dlg_contentstore.lua b/builtin/mainmenu/dlg_contentstore.lua index a3c72aee4..58421ef75 100644 --- a/builtin/mainmenu/dlg_contentstore.lua +++ b/builtin/mainmenu/dlg_contentstore.lua @@ -72,34 +72,52 @@ local function get_download_url(package, reason) end -local function download_package(param) - if core.download_file(param.url, param.filename) then +local function download_and_extract(param) + local package = param.package + + local filename = core.get_temp_path(true) + if filename == "" or not core.download_file(param.url, filename) then + core.log("error", "Downloading " .. dump(param.url) .. " failed") return { - filename = param.filename, - successful = true, - } - else - core.log("error", "downloading " .. dump(param.url) .. " failed") - return { - successful = false, + msg = fgettext("Failed to download $1", package.name) } end + + local tempfolder = core.get_temp_path() + if tempfolder ~= "" then + tempfolder = tempfolder .. DIR_DELIM .. "MT_" .. math.random(1, 1024000) + if not core.extract_zip(filename, tempfolder) then + tempfolder = nil + end + else + tempfolder = nil + end + os.remove(filename) + if not tempfolder then + return { + msg = fgettext("Install: Unsupported file type or broken archive"), + } + end + + return { + path = tempfolder + } end local function start_install(package, reason) local params = { package = package, url = get_download_url(package, reason), - filename = os.tempfolder() .. "_MODNAME_" .. package.name .. ".zip", } number_downloading = number_downloading + 1 local function callback(result) - if result.successful then - local path, msg = pkgmgr.install(package.type, - result.filename, package.name, - package.path) + if result.msg then + gamedata.errormessage = result.msg + else + local path, msg = pkgmgr.install_dir(package.type, result.path, package.name, package.path) + core.delete_dir(result.path) if not path then gamedata.errormessage = msg else @@ -137,9 +155,6 @@ local function start_install(package, reason) conf:write() end end - os.remove(result.filename) - else - gamedata.errormessage = fgettext("Failed to download $1", package.name) end package.downloading = false @@ -159,7 +174,7 @@ local function start_install(package, reason) package.queued = false package.downloading = true - if not core.handle_async(download_package, params, callback) then + if not core.handle_async(download_and_extract, params, callback) then core.log("error", "ERROR: async event failed") gamedata.errormessage = fgettext("Failed to download $1", package.name) return diff --git a/builtin/mainmenu/pkgmgr.lua b/builtin/mainmenu/pkgmgr.lua index 76d4a4123..d07dc019c 100644 --- a/builtin/mainmenu/pkgmgr.lua +++ b/builtin/mainmenu/pkgmgr.lua @@ -181,21 +181,6 @@ function pkgmgr.get_texture_packs() end -------------------------------------------------------------------------------- -function pkgmgr.extract(modfile) - if modfile.type == "zip" then - local tempfolder = os.tempfolder() - - if tempfolder ~= nil and - tempfolder ~= "" then - core.create_dir(tempfolder) - if core.extract_zip(modfile.name,tempfolder) then - return tempfolder - end - end - end - return nil -end - function pkgmgr.get_folder_type(path) local testfile = io.open(path .. DIR_DELIM .. "init.lua","r") if testfile ~= nil then @@ -657,23 +642,6 @@ function pkgmgr.install_dir(type, path, basename, targetpath) return targetpath, nil end --------------------------------------------------------------------------------- -function pkgmgr.install(type, modfilename, basename, dest) - local archive_info = pkgmgr.identify_filetype(modfilename) - local path = pkgmgr.extract(archive_info) - - if path == nil then - return nil, - fgettext("Install: file: \"$1\"", archive_info.name) .. "\n" .. - fgettext("Install: Unsupported file type \"$1\" or broken archive", - archive_info.type) - end - - local targetpath, msg = pkgmgr.install_dir(type, path, basename, dest) - core.delete_dir(path) - return targetpath, msg -end - -------------------------------------------------------------------------------- function pkgmgr.preparemodlist(data) local retval = {} @@ -817,45 +785,6 @@ function pkgmgr.refresh_globals() pkgmgr.global_mods:set_sortmode("alphabetic") end --------------------------------------------------------------------------------- -function pkgmgr.identify_filetype(name) - - if name:sub(-3):lower() == "zip" then - return { - name = name, - type = "zip" - } - end - - if name:sub(-6):lower() == "tar.gz" or - name:sub(-3):lower() == "tgz"then - return { - name = name, - type = "tgz" - } - end - - if name:sub(-6):lower() == "tar.bz2" then - return { - name = name, - type = "tbz" - } - end - - if name:sub(-2):lower() == "7z" then - return { - name = name, - type = "7z" - } - end - - return { - name = name, - type = "ukn" - } -end - - -------------------------------------------------------------------------------- function pkgmgr.find_by_gameid(gameid) for i=1,#pkgmgr.games,1 do diff --git a/doc/menu_lua_api.txt b/doc/menu_lua_api.txt index b4b6eaba2..9bc0c46bd 100644 --- a/doc/menu_lua_api.txt +++ b/doc/menu_lua_api.txt @@ -85,7 +85,9 @@ core.get_video_drivers() core.get_mapgen_names([include_hidden=false]) -> table of map generator algorithms registered in the core (possible in async calls) core.get_cache_path() -> path of cache -core.get_temp_path() -> path of temp folder +core.get_temp_path([param]) (possible in async calls) +^ param=true: returns path to a temporary file +^ otherwise: returns path to the temporary folder HTTP Requests diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index 4cfbaec71..2a6a9c32d 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -563,7 +563,10 @@ int ModApiMainMenu::l_get_cache_path(lua_State *L) /******************************************************************************/ int ModApiMainMenu::l_get_temp_path(lua_State *L) { - lua_pushstring(L, fs::TempPath().c_str()); + if (lua_isnoneornil(L, 1) || !lua_toboolean(L, 1)) + lua_pushstring(L, fs::TempPath().c_str()); + else + lua_pushstring(L, fs::CreateTempFile().c_str()); return 1; } @@ -770,8 +773,9 @@ int ModApiMainMenu::l_get_video_drivers(lua_State *L) /******************************************************************************/ int ModApiMainMenu::l_gettext(lua_State *L) { - std::string text = strgettext(std::string(luaL_checkstring(L, 1))); - lua_pushstring(L, text.c_str()); + const char *srctext = luaL_checkstring(L, 1); + const char *text = *srctext ? gettext(srctext) : ""; + lua_pushstring(L, text); return 1; } @@ -921,5 +925,5 @@ void ModApiMainMenu::InitializeAsync(lua_State *L, int top) API_FCT(download_file); API_FCT(get_min_supp_proto); API_FCT(get_max_supp_proto); - //API_FCT(gettext); (gettext lib isn't threadsafe) + API_FCT(gettext); } From 6de8d77e17017cd5cc7b065d42566b6b1cd076cc Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 19 Sep 2021 18:16:53 +0200 Subject: [PATCH 022/412] Move instead of copy during content install if possible --- builtin/mainmenu/pkgmgr.lua | 8 ++------ src/filesys.cpp | 24 ++++++++++++++++++++++++ src/filesys.h | 4 ++++ src/script/lua_api/l_mainmenu.cpp | 30 ++++++++++++++---------------- 4 files changed, 44 insertions(+), 22 deletions(-) diff --git a/builtin/mainmenu/pkgmgr.lua b/builtin/mainmenu/pkgmgr.lua index d07dc019c..e83a93c91 100644 --- a/builtin/mainmenu/pkgmgr.lua +++ b/builtin/mainmenu/pkgmgr.lua @@ -546,11 +546,10 @@ function pkgmgr.install_dir(type, path, basename, targetpath) local from = basefolder and basefolder.path or path if targetpath then core.delete_dir(targetpath) - core.create_dir(targetpath) else targetpath = core.get_texturepath() .. DIR_DELIM .. basename end - if not core.copy_dir(from, targetpath) then + if not core.copy_dir(from, targetpath, false) then return nil, fgettext("Failed to install $1 to $2", basename, targetpath) end @@ -571,7 +570,6 @@ function pkgmgr.install_dir(type, path, basename, targetpath) -- Get destination name for modpack if targetpath then core.delete_dir(targetpath) - core.create_dir(targetpath) else local clean_path = nil if basename ~= nil then @@ -595,7 +593,6 @@ function pkgmgr.install_dir(type, path, basename, targetpath) if targetpath then core.delete_dir(targetpath) - core.create_dir(targetpath) else local targetfolder = basename if targetfolder == nil then @@ -621,14 +618,13 @@ function pkgmgr.install_dir(type, path, basename, targetpath) if targetpath then core.delete_dir(targetpath) - core.create_dir(targetpath) else targetpath = core.get_gamepath() .. DIR_DELIM .. basename end end -- Copy it - if not core.copy_dir(basefolder.path, targetpath) then + if not core.copy_dir(basefolder.path, targetpath, false) then return nil, fgettext("Failed to install $1 to $2", basename, targetpath) end diff --git a/src/filesys.cpp b/src/filesys.cpp index 0972acbf9..44f1c88b3 100644 --- a/src/filesys.cpp +++ b/src/filesys.cpp @@ -558,6 +558,30 @@ bool CopyDir(const std::string &source, const std::string &target) return false; } +bool MoveDir(const std::string &source, const std::string &target) +{ + infostream << "Moving \"" << source << "\" to \"" << target << "\"" << std::endl; + + // If target exists as empty folder delete, otherwise error + if (fs::PathExists(target)) { + if (rmdir(target.c_str()) != 0) { + errorstream << "MoveDir: target \"" << target + << "\" exists as file or non-empty folder" << std::endl; + return false; + } + } + + // Try renaming first which is instant + if (fs::Rename(source, target)) + return true; + + infostream << "MoveDir: rename not possible, will copy instead" << std::endl; + bool retval = fs::CopyDir(source, target); + if (retval) + retval &= fs::RecursiveDelete(source); + return retval; +} + bool PathStartsWith(const std::string &path, const std::string &prefix) { size_t pathsize = path.size(); diff --git a/src/filesys.h b/src/filesys.h index 233e56bba..3fa2524c3 100644 --- a/src/filesys.h +++ b/src/filesys.h @@ -106,6 +106,10 @@ bool CopyFileContents(const std::string &source, const std::string &target); // Omits files and subdirectories that start with a period bool CopyDir(const std::string &source, const std::string &target); +// Move directory and all subdirectories +// Behavior with files/subdirs that start with a period is undefined +bool MoveDir(const std::string &source, const std::string &target); + // Check if one path is prefix of another // For example, "/tmp" is a prefix of "/tmp" and "/tmp/file" but not "/tmp2" // Ignores case differences and '/' vs. '\\' on Windows diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index 2a6a9c32d..3d80bdafa 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -606,26 +606,24 @@ int ModApiMainMenu::l_copy_dir(lua_State *L) const char *destination = luaL_checkstring(L, 2); bool keep_source = true; + if (!lua_isnoneornil(L, 3)) + keep_source = readParam(L, 3); - if ((!lua_isnone(L,3)) && - (!lua_isnil(L,3))) { - keep_source = readParam(L,3); - } + std::string abs_destination = fs::RemoveRelativePathComponents(destination); + std::string abs_source = fs::RemoveRelativePathComponents(source); - std::string absolute_destination = fs::RemoveRelativePathComponents(destination); - std::string absolute_source = fs::RemoveRelativePathComponents(source); - - if ((ModApiMainMenu::mayModifyPath(absolute_destination))) { - bool retval = fs::CopyDir(absolute_source,absolute_destination); - - if (retval && (!keep_source)) { - - retval &= fs::RecursiveDelete(absolute_source); - } - lua_pushboolean(L,retval); + if (!ModApiMainMenu::mayModifyPath(abs_destination) || + (!keep_source && !ModApiMainMenu::mayModifyPath(abs_source))) { + lua_pushboolean(L, false); return 1; } - lua_pushboolean(L,false); + + bool retval; + if (keep_source) + retval = fs::CopyDir(abs_source, abs_destination); + else + retval = fs::MoveDir(abs_source, abs_destination); + lua_pushboolean(L, retval); return 1; } From ecc6f4ba25cd49599922333a5f8d4b4ce368992d Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Tue, 12 Oct 2021 20:12:20 +0200 Subject: [PATCH 023/412] Remove a few unused functions reported by callcatcher (#11658) --- src/chat.cpp | 5 - src/chat.h | 2 - src/client/mesh.cpp | 589 ----------------------------- src/client/mesh.h | 7 - src/clientiface.cpp | 25 -- src/clientiface.h | 1 - src/emerge.cpp | 17 - src/emerge.h | 3 - src/inventory.cpp | 5 - src/inventory.h | 1 - src/map.cpp | 7 - src/map.h | 3 - src/mapblock.cpp | 25 -- src/mapblock.h | 14 - src/mapgen/mapgen_v6.cpp | 13 - src/mapgen/mapgen_v6.h | 4 +- src/noise.cpp | 45 --- src/noise.h | 9 - src/rollback.cpp | 6 - src/rollback.h | 1 - src/script/lua_api/l_inventory.cpp | 13 - src/script/lua_api/l_inventory.h | 2 - src/script/lua_api/l_nodemeta.cpp | 5 +- src/settings.cpp | 3 +- 24 files changed, 6 insertions(+), 799 deletions(-) diff --git a/src/chat.cpp b/src/chat.cpp index d8b577aab..92df038e8 100644 --- a/src/chat.cpp +++ b/src/chat.cpp @@ -142,11 +142,6 @@ u32 ChatBuffer::getRows() const return m_rows; } -void ChatBuffer::scrollTop() -{ - m_scroll = getTopScrollPos(); -} - void ChatBuffer::reformat(u32 cols, u32 rows) { if (cols == 0 || rows == 0) diff --git a/src/chat.h b/src/chat.h index 696d805eb..fc080f64b 100644 --- a/src/chat.h +++ b/src/chat.h @@ -110,8 +110,6 @@ public: void scrollAbsolute(s32 scroll); // Scroll to bottom of buffer (newest) void scrollBottom(); - // Scroll to top of buffer (oldest) - void scrollTop(); // Functions for keeping track of whether the lines were modified by any // preceding operations diff --git a/src/client/mesh.cpp b/src/client/mesh.cpp index e43139218..c56eba2e2 100644 --- a/src/client/mesh.cpp +++ b/src/client/mesh.cpp @@ -498,592 +498,3 @@ scene::IMesh* convertNodeboxesToMesh(const std::vector &boxes, } return dst_mesh; } - -struct vcache -{ - core::array tris; - float score; - s16 cachepos; - u16 NumActiveTris; -}; - -struct tcache -{ - u16 ind[3]; - float score; - bool drawn; -}; - -const u16 cachesize = 32; - -float FindVertexScore(vcache *v) -{ - const float CacheDecayPower = 1.5f; - const float LastTriScore = 0.75f; - const float ValenceBoostScale = 2.0f; - const float ValenceBoostPower = 0.5f; - const float MaxSizeVertexCache = 32.0f; - - if (v->NumActiveTris == 0) - { - // No tri needs this vertex! - return -1.0f; - } - - float Score = 0.0f; - int CachePosition = v->cachepos; - if (CachePosition < 0) - { - // Vertex is not in FIFO cache - no score. - } - else - { - if (CachePosition < 3) - { - // This vertex was used in the last triangle, - // so it has a fixed score. - Score = LastTriScore; - } - else - { - // Points for being high in the cache. - const float Scaler = 1.0f / (MaxSizeVertexCache - 3); - Score = 1.0f - (CachePosition - 3) * Scaler; - Score = powf(Score, CacheDecayPower); - } - } - - // Bonus points for having a low number of tris still to - // use the vert, so we get rid of lone verts quickly. - float ValenceBoost = powf(v->NumActiveTris, - -ValenceBoostPower); - Score += ValenceBoostScale * ValenceBoost; - - return Score; -} - -/* - A specialized LRU cache for the Forsyth algorithm. -*/ - -class f_lru -{ - -public: - f_lru(vcache *v, tcache *t): vc(v), tc(t) - { - for (int &i : cache) { - i = -1; - } - } - - // Adds this vertex index and returns the highest-scoring triangle index - u32 add(u16 vert, bool updatetris = false) - { - bool found = false; - - // Mark existing pos as empty - for (u16 i = 0; i < cachesize; i++) - { - if (cache[i] == vert) - { - // Move everything down - for (u16 j = i; j; j--) - { - cache[j] = cache[j - 1]; - } - - found = true; - break; - } - } - - if (!found) - { - if (cache[cachesize-1] != -1) - vc[cache[cachesize-1]].cachepos = -1; - - // Move everything down - for (u16 i = cachesize - 1; i; i--) - { - cache[i] = cache[i - 1]; - } - } - - cache[0] = vert; - - u32 highest = 0; - float hiscore = 0; - - if (updatetris) - { - // Update cache positions - for (u16 i = 0; i < cachesize; i++) - { - if (cache[i] == -1) - break; - - vc[cache[i]].cachepos = i; - vc[cache[i]].score = FindVertexScore(&vc[cache[i]]); - } - - // Update triangle scores - for (int i : cache) { - if (i == -1) - break; - - const u16 trisize = vc[i].tris.size(); - for (u16 t = 0; t < trisize; t++) - { - tcache *tri = &tc[vc[i].tris[t]]; - - tri->score = - vc[tri->ind[0]].score + - vc[tri->ind[1]].score + - vc[tri->ind[2]].score; - - if (tri->score > hiscore) - { - hiscore = tri->score; - highest = vc[i].tris[t]; - } - } - } - } - - return highest; - } - -private: - s32 cache[cachesize]; - vcache *vc; - tcache *tc; -}; - -/** -Vertex cache optimization according to the Forsyth paper: -http://home.comcast.net/~tom_forsyth/papers/fast_vert_cache_opt.html - -The function is thread-safe (read: you can optimize several meshes in different threads) - -\param mesh Source mesh for the operation. */ -scene::IMesh* createForsythOptimizedMesh(const scene::IMesh *mesh) -{ - if (!mesh) - return 0; - - scene::SMesh *newmesh = new scene::SMesh(); - newmesh->BoundingBox = mesh->getBoundingBox(); - - const u32 mbcount = mesh->getMeshBufferCount(); - - for (u32 b = 0; b < mbcount; ++b) - { - const scene::IMeshBuffer *mb = mesh->getMeshBuffer(b); - - if (mb->getIndexType() != video::EIT_16BIT) - { - //os::Printer::log("Cannot optimize a mesh with 32bit indices", ELL_ERROR); - newmesh->drop(); - return 0; - } - - const u32 icount = mb->getIndexCount(); - const u32 tcount = icount / 3; - const u32 vcount = mb->getVertexCount(); - const u16 *ind = mb->getIndices(); - - vcache *vc = new vcache[vcount]; - tcache *tc = new tcache[tcount]; - - f_lru lru(vc, tc); - - // init - for (u16 i = 0; i < vcount; i++) - { - vc[i].score = 0; - vc[i].cachepos = -1; - vc[i].NumActiveTris = 0; - } - - // First pass: count how many times a vert is used - for (u32 i = 0; i < icount; i += 3) - { - vc[ind[i]].NumActiveTris++; - vc[ind[i + 1]].NumActiveTris++; - vc[ind[i + 2]].NumActiveTris++; - - const u32 tri_ind = i/3; - tc[tri_ind].ind[0] = ind[i]; - tc[tri_ind].ind[1] = ind[i + 1]; - tc[tri_ind].ind[2] = ind[i + 2]; - } - - // Second pass: list of each triangle - for (u32 i = 0; i < tcount; i++) - { - vc[tc[i].ind[0]].tris.push_back(i); - vc[tc[i].ind[1]].tris.push_back(i); - vc[tc[i].ind[2]].tris.push_back(i); - - tc[i].drawn = false; - } - - // Give initial scores - for (u16 i = 0; i < vcount; i++) - { - vc[i].score = FindVertexScore(&vc[i]); - } - for (u32 i = 0; i < tcount; i++) - { - tc[i].score = - vc[tc[i].ind[0]].score + - vc[tc[i].ind[1]].score + - vc[tc[i].ind[2]].score; - } - - switch(mb->getVertexType()) - { - case video::EVT_STANDARD: - { - video::S3DVertex *v = (video::S3DVertex *) mb->getVertices(); - - scene::SMeshBuffer *buf = new scene::SMeshBuffer(); - buf->Material = mb->getMaterial(); - - buf->Vertices.reallocate(vcount); - buf->Indices.reallocate(icount); - - core::map sind; // search index for fast operation - typedef core::map::Node snode; - - // Main algorithm - u32 highest = 0; - u32 drawcalls = 0; - for (;;) - { - if (tc[highest].drawn) - { - bool found = false; - float hiscore = 0; - for (u32 t = 0; t < tcount; t++) - { - if (!tc[t].drawn) - { - if (tc[t].score > hiscore) - { - highest = t; - hiscore = tc[t].score; - found = true; - } - } - } - if (!found) - break; - } - - // Output the best triangle - u16 newind = buf->Vertices.size(); - - snode *s = sind.find(v[tc[highest].ind[0]]); - - if (!s) - { - buf->Vertices.push_back(v[tc[highest].ind[0]]); - buf->Indices.push_back(newind); - sind.insert(v[tc[highest].ind[0]], newind); - newind++; - } - else - { - buf->Indices.push_back(s->getValue()); - } - - s = sind.find(v[tc[highest].ind[1]]); - - if (!s) - { - buf->Vertices.push_back(v[tc[highest].ind[1]]); - buf->Indices.push_back(newind); - sind.insert(v[tc[highest].ind[1]], newind); - newind++; - } - else - { - buf->Indices.push_back(s->getValue()); - } - - s = sind.find(v[tc[highest].ind[2]]); - - if (!s) - { - buf->Vertices.push_back(v[tc[highest].ind[2]]); - buf->Indices.push_back(newind); - sind.insert(v[tc[highest].ind[2]], newind); - } - else - { - buf->Indices.push_back(s->getValue()); - } - - vc[tc[highest].ind[0]].NumActiveTris--; - vc[tc[highest].ind[1]].NumActiveTris--; - vc[tc[highest].ind[2]].NumActiveTris--; - - tc[highest].drawn = true; - - for (u16 j : tc[highest].ind) { - vcache *vert = &vc[j]; - for (u16 t = 0; t < vert->tris.size(); t++) - { - if (highest == vert->tris[t]) - { - vert->tris.erase(t); - break; - } - } - } - - lru.add(tc[highest].ind[0]); - lru.add(tc[highest].ind[1]); - highest = lru.add(tc[highest].ind[2], true); - drawcalls++; - } - - buf->setBoundingBox(mb->getBoundingBox()); - newmesh->addMeshBuffer(buf); - buf->drop(); - } - break; - case video::EVT_2TCOORDS: - { - video::S3DVertex2TCoords *v = (video::S3DVertex2TCoords *) mb->getVertices(); - - scene::SMeshBufferLightMap *buf = new scene::SMeshBufferLightMap(); - buf->Material = mb->getMaterial(); - - buf->Vertices.reallocate(vcount); - buf->Indices.reallocate(icount); - - core::map sind; // search index for fast operation - typedef core::map::Node snode; - - // Main algorithm - u32 highest = 0; - u32 drawcalls = 0; - for (;;) - { - if (tc[highest].drawn) - { - bool found = false; - float hiscore = 0; - for (u32 t = 0; t < tcount; t++) - { - if (!tc[t].drawn) - { - if (tc[t].score > hiscore) - { - highest = t; - hiscore = tc[t].score; - found = true; - } - } - } - if (!found) - break; - } - - // Output the best triangle - u16 newind = buf->Vertices.size(); - - snode *s = sind.find(v[tc[highest].ind[0]]); - - if (!s) - { - buf->Vertices.push_back(v[tc[highest].ind[0]]); - buf->Indices.push_back(newind); - sind.insert(v[tc[highest].ind[0]], newind); - newind++; - } - else - { - buf->Indices.push_back(s->getValue()); - } - - s = sind.find(v[tc[highest].ind[1]]); - - if (!s) - { - buf->Vertices.push_back(v[tc[highest].ind[1]]); - buf->Indices.push_back(newind); - sind.insert(v[tc[highest].ind[1]], newind); - newind++; - } - else - { - buf->Indices.push_back(s->getValue()); - } - - s = sind.find(v[tc[highest].ind[2]]); - - if (!s) - { - buf->Vertices.push_back(v[tc[highest].ind[2]]); - buf->Indices.push_back(newind); - sind.insert(v[tc[highest].ind[2]], newind); - } - else - { - buf->Indices.push_back(s->getValue()); - } - - vc[tc[highest].ind[0]].NumActiveTris--; - vc[tc[highest].ind[1]].NumActiveTris--; - vc[tc[highest].ind[2]].NumActiveTris--; - - tc[highest].drawn = true; - - for (u16 j : tc[highest].ind) { - vcache *vert = &vc[j]; - for (u16 t = 0; t < vert->tris.size(); t++) - { - if (highest == vert->tris[t]) - { - vert->tris.erase(t); - break; - } - } - } - - lru.add(tc[highest].ind[0]); - lru.add(tc[highest].ind[1]); - highest = lru.add(tc[highest].ind[2]); - drawcalls++; - } - - buf->setBoundingBox(mb->getBoundingBox()); - newmesh->addMeshBuffer(buf); - buf->drop(); - - } - break; - case video::EVT_TANGENTS: - { - video::S3DVertexTangents *v = (video::S3DVertexTangents *) mb->getVertices(); - - scene::SMeshBufferTangents *buf = new scene::SMeshBufferTangents(); - buf->Material = mb->getMaterial(); - - buf->Vertices.reallocate(vcount); - buf->Indices.reallocate(icount); - - core::map sind; // search index for fast operation - typedef core::map::Node snode; - - // Main algorithm - u32 highest = 0; - u32 drawcalls = 0; - for (;;) - { - if (tc[highest].drawn) - { - bool found = false; - float hiscore = 0; - for (u32 t = 0; t < tcount; t++) - { - if (!tc[t].drawn) - { - if (tc[t].score > hiscore) - { - highest = t; - hiscore = tc[t].score; - found = true; - } - } - } - if (!found) - break; - } - - // Output the best triangle - u16 newind = buf->Vertices.size(); - - snode *s = sind.find(v[tc[highest].ind[0]]); - - if (!s) - { - buf->Vertices.push_back(v[tc[highest].ind[0]]); - buf->Indices.push_back(newind); - sind.insert(v[tc[highest].ind[0]], newind); - newind++; - } - else - { - buf->Indices.push_back(s->getValue()); - } - - s = sind.find(v[tc[highest].ind[1]]); - - if (!s) - { - buf->Vertices.push_back(v[tc[highest].ind[1]]); - buf->Indices.push_back(newind); - sind.insert(v[tc[highest].ind[1]], newind); - newind++; - } - else - { - buf->Indices.push_back(s->getValue()); - } - - s = sind.find(v[tc[highest].ind[2]]); - - if (!s) - { - buf->Vertices.push_back(v[tc[highest].ind[2]]); - buf->Indices.push_back(newind); - sind.insert(v[tc[highest].ind[2]], newind); - } - else - { - buf->Indices.push_back(s->getValue()); - } - - vc[tc[highest].ind[0]].NumActiveTris--; - vc[tc[highest].ind[1]].NumActiveTris--; - vc[tc[highest].ind[2]].NumActiveTris--; - - tc[highest].drawn = true; - - for (u16 j : tc[highest].ind) { - vcache *vert = &vc[j]; - for (u16 t = 0; t < vert->tris.size(); t++) - { - if (highest == vert->tris[t]) - { - vert->tris.erase(t); - break; - } - } - } - - lru.add(tc[highest].ind[0]); - lru.add(tc[highest].ind[1]); - highest = lru.add(tc[highest].ind[2]); - drawcalls++; - } - - buf->setBoundingBox(mb->getBoundingBox()); - newmesh->addMeshBuffer(buf); - buf->drop(); - } - break; - } - - delete [] vc; - delete [] tc; - - } // for each meshbuffer - - return newmesh; -} diff --git a/src/client/mesh.h b/src/client/mesh.h index dbc091a06..1ed753c01 100644 --- a/src/client/mesh.h +++ b/src/client/mesh.h @@ -133,10 +133,3 @@ void recalculateBoundingBox(scene::IMesh *src_mesh); We assume normal to be valid when it's 0 < length < Inf. and not NaN */ bool checkMeshNormals(scene::IMesh *mesh); - -/* - Vertex cache optimization according to the Forsyth paper: - http://home.comcast.net/~tom_forsyth/papers/fast_vert_cache_opt.html - Ported from irrlicht 1.8 -*/ -scene::IMesh* createForsythOptimizedMesh(const scene::IMesh *mesh); diff --git a/src/clientiface.cpp b/src/clientiface.cpp index f35dcd0eb..a1c3e1187 100644 --- a/src/clientiface.cpp +++ b/src/clientiface.cpp @@ -714,31 +714,6 @@ void ClientInterface::sendToAll(NetworkPacket *pkt) } } -void ClientInterface::sendToAllCompat(NetworkPacket *pkt, NetworkPacket *legacypkt, - u16 min_proto_ver) -{ - RecursiveMutexAutoLock clientslock(m_clients_mutex); - for (auto &client_it : m_clients) { - RemoteClient *client = client_it.second; - NetworkPacket *pkt_to_send = nullptr; - - if (client->net_proto_version >= min_proto_ver) { - pkt_to_send = pkt; - } else if (client->net_proto_version != 0) { - pkt_to_send = legacypkt; - } else { - warningstream << "Client with unhandled version to handle: '" - << client->net_proto_version << "'"; - continue; - } - - m_con->Send(client->peer_id, - clientCommandFactoryTable[pkt_to_send->getCommand()].channel, - pkt_to_send, - clientCommandFactoryTable[pkt_to_send->getCommand()].reliable); - } -} - RemoteClient* ClientInterface::getClientNoEx(session_t peer_id, ClientState state_min) { RecursiveMutexAutoLock clientslock(m_clients_mutex); diff --git a/src/clientiface.h b/src/clientiface.h index dfd976741..b1591ddb0 100644 --- a/src/clientiface.h +++ b/src/clientiface.h @@ -465,7 +465,6 @@ public: /* send to all clients */ void sendToAll(NetworkPacket *pkt); - void sendToAllCompat(NetworkPacket *pkt, NetworkPacket *legacypkt, u16 min_proto_ver); /* delete a client */ void DeleteClient(session_t peer_id); diff --git a/src/emerge.cpp b/src/emerge.cpp index 9234fe6d3..be64d744a 100644 --- a/src/emerge.cpp +++ b/src/emerge.cpp @@ -367,12 +367,6 @@ bool EmergeManager::isBlockInQueue(v3s16 pos) // -// TODO(hmmmm): Move this to ServerMap -v3s16 EmergeManager::getContainingChunk(v3s16 blockpos) -{ - return getContainingChunk(blockpos, mgparams->chunksize); -} - // TODO(hmmmm): Move this to ServerMap v3s16 EmergeManager::getContainingChunk(v3s16 blockpos, s16 chunksize) { @@ -396,17 +390,6 @@ int EmergeManager::getSpawnLevelAtPoint(v2s16 p) } -int EmergeManager::getGroundLevelAtPoint(v2s16 p) -{ - if (m_mapgens.empty() || !m_mapgens[0]) { - errorstream << "EmergeManager: getGroundLevelAtPoint() called" - " before mapgen init" << std::endl; - return 0; - } - - return m_mapgens[0]->getGroundLevelAtPoint(p); -} - // TODO(hmmmm): Move this to ServerMap bool EmergeManager::isBlockUnderground(v3s16 blockpos) { diff --git a/src/emerge.h b/src/emerge.h index e2d727973..61e7bda63 100644 --- a/src/emerge.h +++ b/src/emerge.h @@ -176,13 +176,10 @@ public: bool isBlockInQueue(v3s16 pos); - v3s16 getContainingChunk(v3s16 blockpos); - Mapgen *getCurrentMapgen(); // Mapgen helpers methods int getSpawnLevelAtPoint(v2s16 p); - int getGroundLevelAtPoint(v2s16 p); bool isBlockUnderground(v3s16 blockpos); static v3s16 getContainingChunk(v3s16 blockpos, s16 chunksize); diff --git a/src/inventory.cpp b/src/inventory.cpp index 029fcbf4f..d14b12f9d 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -560,11 +560,6 @@ u32 InventoryList::getUsedSlots() const return num; } -u32 InventoryList::getFreeSlots() const -{ - return getSize() - getUsedSlots(); -} - const ItemStack& InventoryList::getItem(u32 i) const { assert(i < m_size); // Pre-condition diff --git a/src/inventory.h b/src/inventory.h index 276002d28..eb063d4ad 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -211,7 +211,6 @@ public: u32 getWidth() const; // Count used slots u32 getUsedSlots() const; - u32 getFreeSlots() const; // Get reference to item const ItemStack& getItem(u32 i) const; diff --git a/src/map.cpp b/src/map.cpp index 30ce064d6..77031e17d 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -139,13 +139,6 @@ MapBlock * Map::getBlockNoCreate(v3s16 p3d) return block; } -bool Map::isNodeUnderground(v3s16 p) -{ - v3s16 blockpos = getNodeBlockPos(p); - MapBlock *block = getBlockNoCreateNoEx(blockpos); - return block && block->getIsUnderground(); -} - bool Map::isValidPosition(v3s16 p) { v3s16 blockpos = getNodeBlockPos(p); diff --git a/src/map.h b/src/map.h index 8d20c4a44..fe580b20f 100644 --- a/src/map.h +++ b/src/map.h @@ -167,9 +167,6 @@ public: inline const NodeDefManager * getNodeDefManager() { return m_nodedef; } - // Returns InvalidPositionException if not found - bool isNodeUnderground(v3s16 p); - bool isValidPosition(v3s16 p); // throws InvalidPositionException if not found diff --git a/src/mapblock.cpp b/src/mapblock.cpp index 4958d3a65..e3a6caa19 100644 --- a/src/mapblock.cpp +++ b/src/mapblock.cpp @@ -218,31 +218,6 @@ void MapBlock::expireDayNightDiff() m_day_night_differs_expired = true; } -s16 MapBlock::getGroundLevel(v2s16 p2d) -{ - if(isDummy()) - return -3; - try - { - s16 y = MAP_BLOCKSIZE-1; - for(; y>=0; y--) - { - MapNode n = getNodeRef(p2d.X, y, p2d.Y); - if (m_gamedef->ndef()->get(n).walkable) { - if(y == MAP_BLOCKSIZE-1) - return -2; - - return y; - } - } - return -1; - } - catch(InvalidPositionException &e) - { - return -3; - } -} - /* Serialization */ diff --git a/src/mapblock.h b/src/mapblock.h index 8de631a29..e729fdb1c 100644 --- a/src/mapblock.h +++ b/src/mapblock.h @@ -363,20 +363,6 @@ public: return m_day_night_differs; } - //// - //// Miscellaneous stuff - //// - - /* - Tries to measure ground level. - Return value: - -1 = only air - -2 = only ground - -3 = random fail - 0...MAP_BLOCKSIZE-1 = ground level - */ - s16 getGroundLevel(v2s16 p2d); - //// //// Timestamp (see m_timestamp) //// diff --git a/src/mapgen/mapgen_v6.cpp b/src/mapgen/mapgen_v6.cpp index bce9cee81..a418acace 100644 --- a/src/mapgen/mapgen_v6.cpp +++ b/src/mapgen/mapgen_v6.cpp @@ -360,19 +360,6 @@ int MapgenV6::getSpawnLevelAtPoint(v2s16 p) //////////////////////// Noise functions -float MapgenV6::getMudAmount(v2s16 p) -{ - int index = (p.Y - node_min.Z) * ystride + (p.X - node_min.X); - return getMudAmount(index); -} - - -bool MapgenV6::getHaveBeach(v2s16 p) -{ - int index = (p.Y - node_min.Z) * ystride + (p.X - node_min.X); - return getHaveBeach(index); -} - BiomeV6Type MapgenV6::getBiome(v2s16 p) { diff --git a/src/mapgen/mapgen_v6.h b/src/mapgen/mapgen_v6.h index a6e6da8c6..b0eb67893 100644 --- a/src/mapgen/mapgen_v6.h +++ b/src/mapgen/mapgen_v6.h @@ -154,9 +154,7 @@ public: float getHumidity(v2s16 p); float getTreeAmount(v2s16 p); bool getHaveAppleTree(v2s16 p); - float getMudAmount(v2s16 p); - virtual float getMudAmount(int index); - bool getHaveBeach(v2s16 p); + float getMudAmount(int index); bool getHaveBeach(int index); BiomeV6Type getBiome(v2s16 p); BiomeV6Type getBiome(int index, v2s16 p); diff --git a/src/noise.cpp b/src/noise.cpp index a10efa3c4..2f4de6855 100644 --- a/src/noise.cpp +++ b/src/noise.cpp @@ -312,51 +312,6 @@ float noise2d_perlin(float x, float y, s32 seed, } -float noise2d_perlin_abs(float x, float y, s32 seed, - int octaves, float persistence, bool eased) -{ - float a = 0; - float f = 1.0; - float g = 1.0; - for (int i = 0; i < octaves; i++) { - a += g * std::fabs(noise2d_gradient(x * f, y * f, seed + i, eased)); - f *= 2.0; - g *= persistence; - } - return a; -} - - -float noise3d_perlin(float x, float y, float z, s32 seed, - int octaves, float persistence, bool eased) -{ - float a = 0; - float f = 1.0; - float g = 1.0; - for (int i = 0; i < octaves; i++) { - a += g * noise3d_gradient(x * f, y * f, z * f, seed + i, eased); - f *= 2.0; - g *= persistence; - } - return a; -} - - -float noise3d_perlin_abs(float x, float y, float z, s32 seed, - int octaves, float persistence, bool eased) -{ - float a = 0; - float f = 1.0; - float g = 1.0; - for (int i = 0; i < octaves; i++) { - a += g * std::fabs(noise3d_gradient(x * f, y * f, z * f, seed + i, eased)); - f *= 2.0; - g *= persistence; - } - return a; -} - - float contour(float v) { v = std::fabs(v); diff --git a/src/noise.h b/src/noise.h index 854781731..e4a9ed6c7 100644 --- a/src/noise.h +++ b/src/noise.h @@ -224,15 +224,6 @@ float noise3d_gradient(float x, float y, float z, s32 seed, bool eased=false); float noise2d_perlin(float x, float y, s32 seed, int octaves, float persistence, bool eased=true); -float noise2d_perlin_abs(float x, float y, s32 seed, - int octaves, float persistence, bool eased=true); - -float noise3d_perlin(float x, float y, float z, s32 seed, - int octaves, float persistence, bool eased=false); - -float noise3d_perlin_abs(float x, float y, float z, s32 seed, - int octaves, float persistence, bool eased=false); - inline float easeCurve(float t) { return t * t * t * (t * (6.f * t - 15.f) + 10.f); diff --git a/src/rollback.cpp b/src/rollback.cpp index 3cd9c7ce7..33b7958b9 100644 --- a/src/rollback.cpp +++ b/src/rollback.cpp @@ -941,12 +941,6 @@ void RollbackManager::addAction(const RollbackAction & action) } } -std::list RollbackManager::getEntriesSince(time_t first_time) -{ - flush(); - return getActionsSince(first_time); -} - std::list RollbackManager::getNodeActors(v3s16 pos, int range, time_t seconds, int limit) { diff --git a/src/rollback.h b/src/rollback.h index 1d9949d15..ff96e513f 100644 --- a/src/rollback.h +++ b/src/rollback.h @@ -46,7 +46,6 @@ public: void flush(); void addAction(const RollbackAction & action); - std::list getEntriesSince(time_t first_time); std::list getNodeActors(v3s16 pos, int range, time_t seconds, int limit); std::list getRevertActions( diff --git a/src/script/lua_api/l_inventory.cpp b/src/script/lua_api/l_inventory.cpp index 0dd418462..b0a4ee194 100644 --- a/src/script/lua_api/l_inventory.cpp +++ b/src/script/lua_api/l_inventory.cpp @@ -421,19 +421,6 @@ void InvRef::create(lua_State *L, const InventoryLocation &loc) luaL_getmetatable(L, className); lua_setmetatable(L, -2); } -void InvRef::createPlayer(lua_State *L, RemotePlayer *player) -{ - NO_MAP_LOCK_REQUIRED; - InventoryLocation loc; - loc.setPlayer(player->getName()); - create(L, loc); -} -void InvRef::createNodeMeta(lua_State *L, v3s16 p) -{ - InventoryLocation loc; - loc.setNodeMeta(p); - create(L, loc); -} void InvRef::Register(lua_State *L) { diff --git a/src/script/lua_api/l_inventory.h b/src/script/lua_api/l_inventory.h index 94f670c9d..6a75bac0f 100644 --- a/src/script/lua_api/l_inventory.h +++ b/src/script/lua_api/l_inventory.h @@ -111,8 +111,6 @@ public: // Creates an InvRef and leaves it on top of stack // Not callable from Lua; all references are created on the C side. static void create(lua_State *L, const InventoryLocation &loc); - static void createPlayer(lua_State *L, RemotePlayer *player); - static void createNodeMeta(lua_State *L, v3s16 p); static void Register(lua_State *L); }; diff --git a/src/script/lua_api/l_nodemeta.cpp b/src/script/lua_api/l_nodemeta.cpp index 60d14f8f2..34760157d 100644 --- a/src/script/lua_api/l_nodemeta.cpp +++ b/src/script/lua_api/l_nodemeta.cpp @@ -89,7 +89,10 @@ int NodeMetaRef::l_get_inventory(lua_State *L) NodeMetaRef *ref = checkobject(L, 1); ref->getmeta(true); // try to ensure the metadata exists - InvRef::createNodeMeta(L, ref->m_p); + + InventoryLocation loc; + loc.setNodeMeta(ref->m_p); + InvRef::create(L, loc); return 1; } diff --git a/src/settings.cpp b/src/settings.cpp index f4de5bec9..818d2bc41 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -104,8 +104,7 @@ Settings *Settings::createLayer(SettingsLayer sl, const std::string &end_tag) Settings *Settings::getLayer(SettingsLayer sl) { - sanity_check((int)sl >= 0 && sl < SL_TOTAL_COUNT); - return g_hierarchy.layers[(int)sl]; + return g_hierarchy.getLayer(sl); } From 6ea558f8ac57a391b6f54c534441f930b0609cea Mon Sep 17 00:00:00 2001 From: savilli <78875209+savilli@users.noreply.github.com> Date: Tue, 12 Oct 2021 21:12:49 +0300 Subject: [PATCH 024/412] Fix player HP desync between client and server --- src/network/serverpackethandler.cpp | 3 ++- src/server/player_sao.cpp | 5 +++-- src/server/player_sao.h | 6 +++++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index 4c609644f..dc7be0e23 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -826,7 +826,8 @@ void Server::handleCommand_Damage(NetworkPacket* pkt) << std::endl; PlayerHPChangeReason reason(PlayerHPChangeReason::FALL); - playersao->setHP((s32)playersao->getHP() - (s32)damage, reason); + playersao->setHP((s32)playersao->getHP() - (s32)damage, reason, false); + SendPlayerHPOrDie(playersao, reason); // correct client side prediction } } diff --git a/src/server/player_sao.cpp b/src/server/player_sao.cpp index d4d036726..690823bb7 100644 --- a/src/server/player_sao.cpp +++ b/src/server/player_sao.cpp @@ -462,7 +462,7 @@ void PlayerSAO::rightClick(ServerActiveObject *clicker) m_env->getScriptIface()->on_rightclickplayer(this, clicker); } -void PlayerSAO::setHP(s32 hp, const PlayerHPChangeReason &reason) +void PlayerSAO::setHP(s32 hp, const PlayerHPChangeReason &reason, bool send) { if (hp == (s32)m_hp) return; // Nothing to do @@ -490,7 +490,8 @@ void PlayerSAO::setHP(s32 hp, const PlayerHPChangeReason &reason) if ((hp == 0) != (oldhp == 0)) m_properties_sent = false; - m_env->getGameDef()->SendPlayerHPOrDie(this, reason); + if (send) + m_env->getGameDef()->SendPlayerHPOrDie(this, reason); } void PlayerSAO::setBreath(const u16 breath, bool send) diff --git a/src/server/player_sao.h b/src/server/player_sao.h index 8e2d8803f..1429d7129 100644 --- a/src/server/player_sao.h +++ b/src/server/player_sao.h @@ -112,7 +112,11 @@ public: u16 punch(v3f dir, const ToolCapabilities *toolcap, ServerActiveObject *puncher, float time_from_last_punch); void rightClick(ServerActiveObject *clicker); - void setHP(s32 hp, const PlayerHPChangeReason &reason); + void setHP(s32 hp, const PlayerHPChangeReason &reason) override + { + return setHP(hp, reason, true); + } + void setHP(s32 hp, const PlayerHPChangeReason &reason, bool send); void setHPRaw(u16 hp) { m_hp = hp; } u16 getBreath() const { return m_breath; } void setBreath(const u16 breath, bool send = true); From fe5cb2cdfb137764d20ca56f17f607ec361e0dcf Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 10 Oct 2021 21:10:52 +0200 Subject: [PATCH 025/412] Remove broken timeout behaviour Code that relies on `resend_count` was added in 7ea4a03 and 247a1eb, but never worked. This was fixed in #11607 which caused the problem to surface. Hence undo the first commit entirely and change the logic of the second. --- src/network/connectionthreads.cpp | 27 ++++----------------------- 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/src/network/connectionthreads.cpp b/src/network/connectionthreads.cpp index 47678dac5..a306ced9b 100644 --- a/src/network/connectionthreads.cpp +++ b/src/network/connectionthreads.cpp @@ -48,9 +48,6 @@ std::mutex log_conthread_mutex; #undef DEBUG_CONNECTION_KBPS #endif -/* maximum number of retries for reliable packets */ -#define MAX_RELIABLE_RETRY 5 - #define WINDOW_SIZE 5 static session_t readPeerId(u8 *packetdata) @@ -212,7 +209,6 @@ void ConnectionSendThread::runTimeouts(float dtime) } float resend_timeout = udpPeer->getResendTimeout(); - bool retry_count_exceeded = false; for (Channel &channel : udpPeer->channels) { // Remove timed out incomplete unreliable split packets @@ -231,24 +227,16 @@ void ConnectionSendThread::runTimeouts(float dtime) m_iteration_packets_avaialble -= timed_outs.size(); for (const auto &k : timed_outs) { - session_t peer_id = readPeerId(*k.data); u8 channelnum = readChannel(*k.data); u16 seqnum = readU16(&(k.data[BASE_HEADER_SIZE + 1])); channel.UpdateBytesLost(k.data.getSize()); - if (k.resend_count > MAX_RELIABLE_RETRY) { - retry_count_exceeded = true; - timeouted_peers.push_back(peer->id); - /* no need to check additional packets if a single one did timeout*/ - break; - } - LOG(derr_con << m_connection->getDesc() << "RE-SENDING timed-out RELIABLE to " << k.address.serializeString() << "(t/o=" << resend_timeout << "): " - << "from_peer_id=" << peer_id + << "count=" << k.resend_count << ", channel=" << ((int) channelnum & 0xff) << ", seqnum=" << seqnum << std::endl); @@ -259,17 +247,9 @@ void ConnectionSendThread::runTimeouts(float dtime) // lost or really takes more time to transmit } - if (retry_count_exceeded) { - break; /* no need to check other channels if we already did timeout */ - } - channel.UpdateTimers(dtime); } - /* skip to next peer if we did timeout */ - if (retry_count_exceeded) - continue; - /* send ping if necessary */ if (udpPeer->Ping(dtime, data)) { LOG(dout_con << m_connection->getDesc() @@ -1153,8 +1133,8 @@ SharedBuffer ConnectionReceiveThread::handlePacketType_Control(Channel *chan try { BufferedPacket p = channel->outgoing_reliables_sent.popSeqnum(seqnum); - // only calculate rtt from straight sent packets - if (p.resend_count == 0) { + // the rtt calculation will be a bit off for re-sent packets but that's okay + { // Get round trip time u64 current_time = porting::getTimeMs(); @@ -1174,6 +1154,7 @@ SharedBuffer ConnectionReceiveThread::handlePacketType_Control(Channel *chan dynamic_cast(peer)->reportRTT(rtt); } } + // put bytes for max bandwidth calculation channel->UpdateBytesSent(p.data.getSize(), 1); if (channel->outgoing_reliables_sent.size() == 0) From 02292e03e42e5c3be0aa09a329dabd9c8dad5571 Mon Sep 17 00:00:00 2001 From: hecks <42101236+hecktest@users.noreply.github.com> Date: Wed, 13 Oct 2021 17:51:37 +0200 Subject: [PATCH 026/412] Add embedded PNG texture modifier (#11498) --- doc/lua_api.txt | 17 ++++ games/devtest/mods/testnodes/textures.lua | 31 ++++++ src/client/tile.cpp | 113 +++++++++++++++------- 3 files changed, 126 insertions(+), 35 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index e6cabb68e..69ac55493 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -628,6 +628,23 @@ Result is more like what you'd expect if you put a color on top of another color, meaning white surfaces get a lot of your new color while black parts don't change very much. +#### `[png:` + +Embed a base64 encoded PNG image in the texture string. +You can produce a valid string for this by calling +`minetest.encode_base64(minetest.encode_png(tex))`, +refer to the documentation of these functions for details. +You can use this to send disposable images such as captchas +to individual clients, or render things that would be too +expensive to compose with `[combine:`. + +IMPORTANT: Avoid sending large images this way. +This is not a replacement for asset files, do not use it to do anything +that you could instead achieve by just using a file. +In particular consider `minetest.dynamic_add_media` and test whether +using other texture modifiers could result in a shorter string than +embedding a whole image, this may vary by use case. + Hardware coloring ----------------- diff --git a/games/devtest/mods/testnodes/textures.lua b/games/devtest/mods/testnodes/textures.lua index 4652007d9..dc581b0c7 100644 --- a/games/devtest/mods/testnodes/textures.lua +++ b/games/devtest/mods/testnodes/textures.lua @@ -102,12 +102,22 @@ local function gen_checkers(w, h, tile) end local fractal = mandelbrot(512, 512, 128) +local frac_emb = mandelbrot(64, 64, 64) local checker = gen_checkers(512, 512, 32) local floor = math.floor local abs = math.abs +local data_emb = {} local data_mb = {} local data_ck = {} +for i=1, #frac_emb do + data_emb[i] = { + r = floor(abs(frac_emb[i] * 2 - 1) * 255), + g = floor(abs(1 - frac_emb[i]) * 255), + b = floor(frac_emb[i] * 255), + a = frac_emb[i] < 0.95 and 255 or 0, + } +end for i=1, #fractal do data_mb[i] = { r = floor(fractal[i] * 255), @@ -140,3 +150,24 @@ minetest.register_node("testnodes:generated_png_ck", { groups = { dig_immediate = 2 }, }) + +local png_emb = "[png:" .. minetest.encode_base64(minetest.encode_png(64,64,data_emb)) + +minetest.register_node("testnodes:generated_png_emb", { + description = S("Generated In-Band Mandelbrot PNG Test Node"), + tiles = { png_emb }, + + groups = { dig_immediate = 2 }, +}) +minetest.register_node("testnodes:generated_png_src_emb", { + description = S("Generated In-Band Source Blit Mandelbrot PNG Test Node"), + tiles = { png_emb .. "^testnodes_damage_neg.png" }, + + groups = { dig_immediate = 2 }, +}) +minetest.register_node("testnodes:generated_png_dst_emb", { + description = S("Generated In-Band Dest Blit Mandelbrot PNG Test Node"), + tiles = { "testnodes_generated_ck.png^" .. png_emb }, + + groups = { dig_immediate = 2 }, +}) diff --git a/src/client/tile.cpp b/src/client/tile.cpp index 091e546c6..2f57503d3 100644 --- a/src/client/tile.cpp +++ b/src/client/tile.cpp @@ -33,6 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "imagefilters.h" #include "guiscalingfilter.h" #include "renderingengine.h" +#include "util/base64.h" /* A cache from texture name to texture path @@ -1059,6 +1060,45 @@ static std::string unescape_string(const std::string &str, const char esc = '\\' return out; } +void blitBaseImage(video::IImage* &src, video::IImage* &dst) +{ + //infostream<<"Blitting "< dim = src->getDimension(); + //core::dimension2d dim(16,16); + // Position to copy the blitted to in the base image + core::position2d pos_to(0,0); + // Position to copy the blitted from in the blitted image + core::position2d pos_from(0,0); + // Blit + /*image->copyToWithAlpha(baseimg, pos_to, + core::rect(pos_from, dim), + video::SColor(255,255,255,255), + NULL);*/ + + core::dimension2d dim_dst = dst->getDimension(); + if (dim == dim_dst) { + blit_with_alpha(src, dst, pos_from, pos_to, dim); + } else if (dim.Width * dim.Height < dim_dst.Width * dim_dst.Height) { + // Upscale overlying image + video::IImage *scaled_image = RenderingEngine::get_video_driver()-> + createImage(video::ECF_A8R8G8B8, dim_dst); + src->copyToScaling(scaled_image); + + blit_with_alpha(scaled_image, dst, pos_from, pos_to, dim_dst); + scaled_image->drop(); + } else { + // Upscale base image + video::IImage *scaled_base = RenderingEngine::get_video_driver()-> + createImage(video::ECF_A8R8G8B8, dim); + dst->copyToScaling(scaled_base); + dst->drop(); + dst = scaled_base; + + blit_with_alpha(src, dst, pos_from, pos_to, dim); + } +} + bool TextureSource::generateImagePart(std::string part_of_name, video::IImage *& baseimg) { @@ -1122,41 +1162,7 @@ bool TextureSource::generateImagePart(std::string part_of_name, // Else blit on base. else { - //infostream<<"Blitting "< dim = image->getDimension(); - //core::dimension2d dim(16,16); - // Position to copy the blitted to in the base image - core::position2d pos_to(0,0); - // Position to copy the blitted from in the blitted image - core::position2d pos_from(0,0); - // Blit - /*image->copyToWithAlpha(baseimg, pos_to, - core::rect(pos_from, dim), - video::SColor(255,255,255,255), - NULL);*/ - - core::dimension2d dim_dst = baseimg->getDimension(); - if (dim == dim_dst) { - blit_with_alpha(image, baseimg, pos_from, pos_to, dim); - } else if (dim.Width * dim.Height < dim_dst.Width * dim_dst.Height) { - // Upscale overlying image - video::IImage *scaled_image = RenderingEngine::get_video_driver()-> - createImage(video::ECF_A8R8G8B8, dim_dst); - image->copyToScaling(scaled_image); - - blit_with_alpha(scaled_image, baseimg, pos_from, pos_to, dim_dst); - scaled_image->drop(); - } else { - // Upscale base image - video::IImage *scaled_base = RenderingEngine::get_video_driver()-> - createImage(video::ECF_A8R8G8B8, dim); - baseimg->copyToScaling(scaled_base); - baseimg->drop(); - baseimg = scaled_base; - - blit_with_alpha(image, baseimg, pos_from, pos_to, dim); - } + blitBaseImage(image, baseimg); } //cleanup image->drop(); @@ -1784,6 +1790,43 @@ bool TextureSource::generateImagePart(std::string part_of_name, baseimg->drop(); baseimg = img; } + /* + [png:base64 + Decodes a PNG image in base64 form. + Use minetest.encode_png and minetest.encode_base64 + to produce a valid string. + */ + else if (str_starts_with(part_of_name, "[png:")) { + Strfnd sf(part_of_name); + sf.next(":"); + std::string png; + { + std::string blob = sf.next(""); + if (!base64_is_valid(blob)) { + errorstream << "generateImagePart(): " + << "malformed base64 in '[png'" + << std::endl; + return false; + } + png = base64_decode(blob); + } + + auto *device = RenderingEngine::get_raw_device(); + auto *fs = device->getFileSystem(); + auto *vd = device->getVideoDriver(); + auto *memfile = fs->createMemoryReadFile(png.data(), png.size(), "__temp_png"); + video::IImage* pngimg = vd->createImageFromFile(memfile); + memfile->drop(); + + if (baseimg) { + blitBaseImage(pngimg, baseimg); + } else { + core::dimension2d dim = pngimg->getDimension(); + baseimg = driver->createImage(video::ECF_A8R8G8B8, dim); + pngimg->copyTo(baseimg); + } + pngimg->drop(); + } else { errorstream << "generateImagePart(): Invalid " From fe7195badb2801f4957d6dea2c961a3ffcf7debf Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Wed, 17 Mar 2021 19:03:00 +0100 Subject: [PATCH 027/412] Make /status message easier to read --- src/server.cpp | 10 +++++----- src/util/string.h | 31 ++++++++++++++++++++++++++----- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/src/server.cpp b/src/server.cpp index 7fb9a78e9..5022221ee 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -3119,15 +3119,16 @@ std::string Server::getStatusString() std::ostringstream os(std::ios_base::binary); os << "# Server: "; // Version - os << "version=" << g_version_string; + os << "version: " << g_version_string; // Uptime - os << ", uptime=" << m_uptime_counter->get(); + os << " | uptime: " << duration_to_string((int) m_uptime_counter->get()); // Max lag estimate - os << ", max_lag=" << (m_env ? m_env->getMaxLagEstimate() : 0); + os << " | max lag: " << std::setprecision(3); + os << (m_env ? m_env->getMaxLagEstimate() : 0) << "s"; // Information about clients bool first = true; - os << ", clients={"; + os << " | clients: "; if (m_env) { std::vector clients = m_clients.getClientIDs(); for (session_t client_id : clients) { @@ -3144,7 +3145,6 @@ std::string Server::getStatusString() os << name; } } - os << "}"; if (m_env && !((ServerMap*)(&m_env->getMap()))->isSavingEnabled()) os << std::endl << "# Server: " << " WARNING: Map saving is disabled."; diff --git a/src/util/string.h b/src/util/string.h index 21f1d6877..bca998f56 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -661,28 +661,49 @@ inline const char *bool_to_cstr(bool val) return val ? "true" : "false"; } +/** + * Converts a duration in seconds to a pretty-printed duration in + * days, hours, minutes and seconds. + * + * @param sec duration in seconds + * @return pretty-printed duration + */ inline const std::string duration_to_string(int sec) { + std::ostringstream ss; + const char *neg = ""; + if (sec < 0) { + sec = -sec; + neg = "-"; + } + int total_sec = sec; int min = sec / 60; sec %= 60; int hour = min / 60; min %= 60; + int day = hour / 24; + hour %= 24; + + if (day > 0) { + ss << neg << day << "d"; + if (hour > 0 || min > 0 || sec > 0) + ss << " "; + } - std::stringstream ss; if (hour > 0) { - ss << hour << "h"; + ss << neg << hour << "h"; if (min > 0 || sec > 0) ss << " "; } if (min > 0) { - ss << min << "min"; + ss << neg << min << "min"; if (sec > 0) ss << " "; } - if (sec > 0) { - ss << sec << "s"; + if (sec > 0 || total_sec == 0) { + ss << neg << sec << "s"; } return ss.str(); From 6901c5fae54eafb05494823b60d4e26c14b342f1 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Fri, 15 Oct 2021 17:14:48 +0100 Subject: [PATCH 028/412] Use scoped app storage on Android (#11466) From November 2021, the Play Store will no longer be accepting apps which use the deprecated getExternalStorageDirectory() API. Therefore, this commit replaces uses of deprecated API with the new scoped API (`getExternalFilesDir()` and `getExternalCacheDir()`). It also provides a temporary migration to move user data from the shared external directory to new storage. Fixes #2097, #11417 and #11118 --- .clang-format | 9 +- .../net/minetest/minetest/CopyZipTask.java | 82 -------- .../net/minetest/minetest/GameActivity.java | 8 + .../net/minetest/minetest/MainActivity.java | 65 +++++-- .../net/minetest/minetest/UnzipService.java | 181 ++++++++++++++---- .../java/net/minetest/minetest/Utils.java | 39 ++++ .../app/src/main/res/layout/activity_main.xml | 7 +- android/app/src/main/res/values/strings.xml | 2 + android/native/build.gradle | 4 + src/porting_android.cpp | 65 +++---- 10 files changed, 276 insertions(+), 186 deletions(-) delete mode 100644 android/app/src/main/java/net/minetest/minetest/CopyZipTask.java create mode 100644 android/app/src/main/java/net/minetest/minetest/Utils.java diff --git a/.clang-format b/.clang-format index 0db8ab167..63f12b6c4 100644 --- a/.clang-format +++ b/.clang-format @@ -1,6 +1,7 @@ BasedOnStyle: LLVM -IndentWidth: 8 +IndentWidth: 4 UseTab: Always +TabWidth: 4 BreakBeforeBraces: Custom Standard: Cpp11 BraceWrapping: @@ -16,7 +17,7 @@ BraceWrapping: FixNamespaceComments: false AllowShortIfStatementsOnASingleLine: false IndentCaseLabels: false -AccessModifierOffset: -8 +AccessModifierOffset: -4 ColumnLimit: 90 AllowShortFunctionsOnASingleLine: InlineOnly SortIncludes: false @@ -26,7 +27,7 @@ IncludeCategories: - Regex: '^<.*' Priority: 1 AlignAfterOpenBracket: DontAlign -ContinuationIndentWidth: 16 -ConstructorInitializerIndentWidth: 16 +ContinuationIndentWidth: 8 +ConstructorInitializerIndentWidth: 8 BreakConstructorInitializers: AfterColon AlwaysBreakTemplateDeclarations: Yes diff --git a/android/app/src/main/java/net/minetest/minetest/CopyZipTask.java b/android/app/src/main/java/net/minetest/minetest/CopyZipTask.java deleted file mode 100644 index 6d4b6ab0f..000000000 --- a/android/app/src/main/java/net/minetest/minetest/CopyZipTask.java +++ /dev/null @@ -1,82 +0,0 @@ -/* -Minetest -Copyright (C) 2014-2020 MoNTE48, Maksim Gamarnik -Copyright (C) 2014-2020 ubulem, Bektur Mambetov - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -package net.minetest.minetest; - -import android.content.Intent; -import android.os.AsyncTask; -import android.widget.Toast; - -import androidx.appcompat.app.AppCompatActivity; - -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.lang.ref.WeakReference; - -public class CopyZipTask extends AsyncTask { - - private final WeakReference activityRef; - - CopyZipTask(AppCompatActivity activity) { - activityRef = new WeakReference<>(activity); - } - - protected String doInBackground(String... params) { - copyAsset(params[0]); - return params[0]; - } - - @Override - protected void onPostExecute(String result) { - startUnzipService(result); - } - - private void copyAsset(String zipName) { - String filename = zipName.substring(zipName.lastIndexOf("/") + 1); - try (InputStream in = activityRef.get().getAssets().open(filename); - OutputStream out = new FileOutputStream(zipName)) { - copyFile(in, out); - } catch (IOException e) { - AppCompatActivity activity = activityRef.get(); - if (activity != null) { - activity.runOnUiThread(() -> Toast.makeText(activityRef.get(), e.getLocalizedMessage(), Toast.LENGTH_LONG).show()); - } - cancel(true); - } - } - - private void copyFile(InputStream in, OutputStream out) throws IOException { - byte[] buffer = new byte[1024]; - int read; - while ((read = in.read(buffer)) != -1) - out.write(buffer, 0, read); - } - - private void startUnzipService(String file) { - Intent intent = new Intent(activityRef.get(), UnzipService.class); - intent.putExtra(UnzipService.EXTRA_KEY_IN_FILE, file); - AppCompatActivity activity = activityRef.get(); - if (activity != null) { - activity.startService(intent); - } - } -} diff --git a/android/app/src/main/java/net/minetest/minetest/GameActivity.java b/android/app/src/main/java/net/minetest/minetest/GameActivity.java index bdf764138..46fc9b1de 100644 --- a/android/app/src/main/java/net/minetest/minetest/GameActivity.java +++ b/android/app/src/main/java/net/minetest/minetest/GameActivity.java @@ -171,4 +171,12 @@ public class GameActivity extends NativeActivity { Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri)); startActivity(browserIntent); } + + public String getUserDataPath() { + return Utils.getUserDataDirectory(this).getAbsolutePath(); + } + + public String getCachePath() { + return Utils.getCacheDirectory(this).getAbsolutePath(); + } } diff --git a/android/app/src/main/java/net/minetest/minetest/MainActivity.java b/android/app/src/main/java/net/minetest/minetest/MainActivity.java index 2aa50d9ad..56615fca7 100644 --- a/android/app/src/main/java/net/minetest/minetest/MainActivity.java +++ b/android/app/src/main/java/net/minetest/minetest/MainActivity.java @@ -29,12 +29,14 @@ import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; +import android.os.Environment; import android.view.View; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.annotation.StringRes; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; @@ -43,11 +45,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import static net.minetest.minetest.UnzipService.ACTION_FAILURE; -import static net.minetest.minetest.UnzipService.ACTION_PROGRESS; -import static net.minetest.minetest.UnzipService.ACTION_UPDATE; -import static net.minetest.minetest.UnzipService.FAILURE; -import static net.minetest.minetest.UnzipService.SUCCESS; +import static net.minetest.minetest.UnzipService.*; public class MainActivity extends AppCompatActivity { private final static int versionCode = BuildConfig.VERSION_CODE; @@ -56,26 +54,40 @@ public class MainActivity extends AppCompatActivity { new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}; private static final String SETTINGS = "MinetestSettings"; private static final String TAG_VERSION_CODE = "versionCode"; + private ProgressBar mProgressBar; private TextView mTextView; private SharedPreferences sharedPreferences; + private final BroadcastReceiver myReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { int progress = 0; - if (intent != null) + @StringRes int message = 0; + if (intent != null) { progress = intent.getIntExtra(ACTION_PROGRESS, 0); - if (progress >= 0) { - if (mProgressBar != null) { - mProgressBar.setVisibility(View.VISIBLE); - mProgressBar.setProgress(progress); - } - mTextView.setVisibility(View.VISIBLE); - } else if (progress == FAILURE) { + message = intent.getIntExtra(ACTION_PROGRESS_MESSAGE, 0); + } + + if (progress == FAILURE) { Toast.makeText(MainActivity.this, intent.getStringExtra(ACTION_FAILURE), Toast.LENGTH_LONG).show(); finish(); - } else if (progress == SUCCESS) + } else if (progress == SUCCESS) { startNative(); + } else { + if (mProgressBar != null) { + mProgressBar.setVisibility(View.VISIBLE); + if (progress == INDETERMINATE) { + mProgressBar.setIndeterminate(true); + } else { + mProgressBar.setIndeterminate(false); + mProgressBar.setProgress(progress); + } + } + mTextView.setVisibility(View.VISIBLE); + if (message != 0) + mTextView.setText(message); + } } }; @@ -88,6 +100,7 @@ public class MainActivity extends AppCompatActivity { mProgressBar = findViewById(R.id.progressBar); mTextView = findViewById(R.id.textView); sharedPreferences = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) checkPermission(); else @@ -120,6 +133,7 @@ public class MainActivity extends AppCompatActivity { if (grantResult != PackageManager.PERMISSION_GRANTED) { Toast.makeText(this, R.string.not_granted, Toast.LENGTH_LONG).show(); finish(); + return; } } checkAppVersion(); @@ -127,10 +141,27 @@ public class MainActivity extends AppCompatActivity { } private void checkAppVersion() { - if (sharedPreferences.getInt(TAG_VERSION_CODE, 0) == versionCode) + if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + Toast.makeText(this, R.string.no_external_storage, Toast.LENGTH_LONG).show(); + finish(); + return; + } + + if (UnzipService.getIsRunning()) { + mProgressBar.setVisibility(View.VISIBLE); + mProgressBar.setIndeterminate(true); + mTextView.setVisibility(View.VISIBLE); + } else if (sharedPreferences.getInt(TAG_VERSION_CODE, 0) == versionCode && + Utils.isInstallValid(this)) { startNative(); - else - new CopyZipTask(this).execute(getCacheDir() + "/Minetest.zip"); + } else { + mProgressBar.setVisibility(View.VISIBLE); + mProgressBar.setIndeterminate(true); + mTextView.setVisibility(View.VISIBLE); + + Intent intent = new Intent(this, UnzipService.class); + startService(intent); + } } private void startNative() { diff --git a/android/app/src/main/java/net/minetest/minetest/UnzipService.java b/android/app/src/main/java/net/minetest/minetest/UnzipService.java index b69f7f36e..b513a7fe0 100644 --- a/android/app/src/main/java/net/minetest/minetest/UnzipService.java +++ b/android/app/src/main/java/net/minetest/minetest/UnzipService.java @@ -24,16 +24,21 @@ import android.app.IntentService; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; +import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Environment; -import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -42,32 +47,61 @@ import java.util.zip.ZipInputStream; public class UnzipService extends IntentService { public static final String ACTION_UPDATE = "net.minetest.minetest.UPDATE"; public static final String ACTION_PROGRESS = "net.minetest.minetest.PROGRESS"; + public static final String ACTION_PROGRESS_MESSAGE = "net.minetest.minetest.PROGRESS_MESSAGE"; public static final String ACTION_FAILURE = "net.minetest.minetest.FAILURE"; - public static final String EXTRA_KEY_IN_FILE = "file"; public static final int SUCCESS = -1; public static final int FAILURE = -2; + public static final int INDETERMINATE = -3; private final int id = 1; private NotificationManager mNotifyManager; private boolean isSuccess = true; private String failureMessage; + private static boolean isRunning = false; + public static synchronized boolean getIsRunning() { + return isRunning; + } + private static synchronized void setIsRunning(boolean v) { + isRunning = v; + } + public UnzipService() { super("net.minetest.minetest.UnzipService"); } - private void isDir(String dir, String location) { - File f = new File(location, dir); - if (!f.isDirectory()) - f.mkdirs(); - } - @Override protected void onHandleIntent(Intent intent) { - createNotification(); - unzip(intent); + Notification.Builder notificationBuilder = createNotification(); + final File zipFile = new File(getCacheDir(), "Minetest.zip"); + try { + setIsRunning(true); + File userDataDirectory = Utils.getUserDataDirectory(this); + if (userDataDirectory == null) { + throw new IOException("Unable to find user data directory"); + } + + try (InputStream in = this.getAssets().open(zipFile.getName())) { + try (OutputStream out = new FileOutputStream(zipFile)) { + int readLen; + byte[] readBuffer = new byte[16384]; + while ((readLen = in.read(readBuffer)) != -1) { + out.write(readBuffer, 0, readLen); + } + } + } + + migrate(notificationBuilder, userDataDirectory); + unzip(notificationBuilder, zipFile, userDataDirectory); + } catch (IOException e) { + isSuccess = false; + failureMessage = e.getLocalizedMessage(); + } finally { + setIsRunning(false); + zipFile.delete(); + } } - private void createNotification() { + private Notification.Builder createNotification() { String name = "net.minetest.minetest"; String channelId = "Minetest channel"; String description = "notifications from Minetest"; @@ -92,66 +126,129 @@ public class UnzipService extends IntentService { } else { builder = new Notification.Builder(this); } + + Intent notificationIntent = new Intent(this, MainActivity.class); + notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP + | Intent.FLAG_ACTIVITY_SINGLE_TOP); + PendingIntent intent = PendingIntent.getActivity(this, 0, + notificationIntent, 0); + builder.setContentTitle(getString(R.string.notification_title)) .setSmallIcon(R.mipmap.ic_launcher) - .setContentText(getString(R.string.notification_description)); + .setContentText(getString(R.string.notification_description)) + .setContentIntent(intent) + .setOngoing(true) + .setProgress(0, 0, true); + mNotifyManager.notify(id, builder.build()); + return builder; } - private void unzip(Intent intent) { - String zip = intent.getStringExtra(EXTRA_KEY_IN_FILE); - isDir("Minetest", Environment.getExternalStorageDirectory().toString()); - String location = Environment.getExternalStorageDirectory() + File.separator + "Minetest" + File.separator; + private void unzip(Notification.Builder notificationBuilder, File zipFile, File userDataDirectory) throws IOException { int per = 0; - int size = getSummarySize(zip); - File zipFile = new File(zip); + + int size; + try (ZipFile zipSize = new ZipFile(zipFile)) { + size = zipSize.size(); + } + int readLen; - byte[] readBuffer = new byte[8192]; + byte[] readBuffer = new byte[16384]; try (FileInputStream fileInputStream = new FileInputStream(zipFile); ZipInputStream zipInputStream = new ZipInputStream(fileInputStream)) { ZipEntry ze; while ((ze = zipInputStream.getNextEntry()) != null) { if (ze.isDirectory()) { ++per; - isDir(ze.getName(), location); - } else { - publishProgress(100 * ++per / size); - try (OutputStream outputStream = new FileOutputStream(location + ze.getName())) { - while ((readLen = zipInputStream.read(readBuffer)) != -1) { - outputStream.write(readBuffer, 0, readLen); - } + Utils.createDirs(userDataDirectory, ze.getName()); + continue; + } + publishProgress(notificationBuilder, R.string.loading, 100 * ++per / size); + try (OutputStream outputStream = new FileOutputStream( + new File(userDataDirectory, ze.getName()))) { + while ((readLen = zipInputStream.read(readBuffer)) != -1) { + outputStream.write(readBuffer, 0, readLen); } } - zipFile.delete(); } - } catch (IOException e) { - isSuccess = false; - failureMessage = e.getLocalizedMessage(); } } - private void publishProgress(int progress) { + void moveFileOrDir(@NonNull File src, @NonNull File dst) throws IOException { + try { + Process p = new ProcessBuilder("/system/bin/mv", + src.getAbsolutePath(), dst.getAbsolutePath()).start(); + int exitcode = p.waitFor(); + if (exitcode != 0) + throw new IOException("Move failed with exit code " + exitcode); + } catch (InterruptedException e) { + throw new IOException("Move operation interrupted"); + } + } + + boolean recursivelyDeleteDirectory(@NonNull File loc) { + try { + Process p = new ProcessBuilder("/system/bin/rm", "-rf", + loc.getAbsolutePath()).start(); + return p.waitFor() == 0; + } catch (IOException | InterruptedException e) { + return false; + } + } + + /** + * Migrates user data from deprecated external storage to app scoped storage + */ + private void migrate(Notification.Builder notificationBuilder, File newLocation) throws IOException { + File oldLocation = new File(Environment.getExternalStorageDirectory(), "Minetest"); + if (!oldLocation.isDirectory()) + return; + + publishProgress(notificationBuilder, R.string.migrating, 0); + newLocation.mkdir(); + + String[] dirs = new String[] { "worlds", "games", "mods", "textures", "client" }; + for (int i = 0; i < dirs.length; i++) { + publishProgress(notificationBuilder, R.string.migrating, 100 * i / dirs.length); + File dir = new File(oldLocation, dirs[i]), dir2 = new File(newLocation, dirs[i]); + if (dir.isDirectory() && !dir2.isDirectory()) { + moveFileOrDir(dir, dir2); + } + } + + for (String filename : new String[] { "minetest.conf" }) { + File file = new File(oldLocation, filename), file2 = new File(newLocation, filename); + if (file.isFile() && !file2.isFile()) { + moveFileOrDir(file, file2); + } + } + + recursivelyDeleteDirectory(oldLocation); + } + + private void publishProgress(@Nullable Notification.Builder notificationBuilder, @StringRes int message, int progress) { Intent intentUpdate = new Intent(ACTION_UPDATE); intentUpdate.putExtra(ACTION_PROGRESS, progress); - if (!isSuccess) intentUpdate.putExtra(ACTION_FAILURE, failureMessage); + intentUpdate.putExtra(ACTION_PROGRESS_MESSAGE, message); + if (!isSuccess) + intentUpdate.putExtra(ACTION_FAILURE, failureMessage); sendBroadcast(intentUpdate); - } - private int getSummarySize(String zip) { - int size = 0; - try { - ZipFile zipSize = new ZipFile(zip); - size += zipSize.size(); - } catch (IOException e) { - Toast.makeText(this, e.getLocalizedMessage(), Toast.LENGTH_LONG).show(); + if (notificationBuilder != null) { + notificationBuilder.setContentText(getString(message)); + if (progress == INDETERMINATE) { + notificationBuilder.setProgress(100, 50, true); + } else { + notificationBuilder.setProgress(100, progress, false); + } + mNotifyManager.notify(id, notificationBuilder.build()); } - return size; } @Override public void onDestroy() { super.onDestroy(); mNotifyManager.cancel(id); - publishProgress(isSuccess ? SUCCESS : FAILURE); + publishProgress(null, R.string.loading, isSuccess ? SUCCESS : FAILURE); } } diff --git a/android/app/src/main/java/net/minetest/minetest/Utils.java b/android/app/src/main/java/net/minetest/minetest/Utils.java new file mode 100644 index 000000000..b2553c844 --- /dev/null +++ b/android/app/src/main/java/net/minetest/minetest/Utils.java @@ -0,0 +1,39 @@ +package net.minetest.minetest; + +import android.content.Context; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import java.io.File; + +public class Utils { + public static @NonNull File createDirs(File root, String dir) { + File f = new File(root, dir); + if (!f.isDirectory()) + f.mkdirs(); + + return f; + } + + public static @Nullable File getUserDataDirectory(Context context) { + File extDir = context.getExternalFilesDir(null); + if (extDir == null) { + return null; + } + + return createDirs(extDir, "Minetest"); + } + + public static @Nullable File getCacheDirectory(Context context) { + return context.getCacheDir(); + } + + public static boolean isInstallValid(Context context) { + File userDataDirectory = getUserDataDirectory(context); + return userDataDirectory != null && userDataDirectory.isDirectory() && + new File(userDataDirectory, "games").isDirectory() && + new File(userDataDirectory, "builtin").isDirectory() && + new File(userDataDirectory, "client").isDirectory() && + new File(userDataDirectory, "textures").isDirectory(); + } +} diff --git a/android/app/src/main/res/layout/activity_main.xml b/android/app/src/main/res/layout/activity_main.xml index e6f461f14..93508c3cb 100644 --- a/android/app/src/main/res/layout/activity_main.xml +++ b/android/app/src/main/res/layout/activity_main.xml @@ -1,4 +1,5 @@ + android:visibility="gone" + tools:visibility="visible" /> + android:visibility="gone" + tools:visibility="visible" /> diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 85238117f..99f948c99 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -3,9 +3,11 @@ Minetest Loading… + Migrating save data from old install… (this may take a while) Required permission wasn\'t granted, Minetest can\'t run without it Loading Minetest Less than 1 minute… Done + External storage isn\'t available. If you use an SDCard, please reinsert it. Otherwise, try restarting your phone or contacting the Minetest developers diff --git a/android/native/build.gradle b/android/native/build.gradle index 8ea6347b3..a7f095641 100644 --- a/android/native/build.gradle +++ b/android/native/build.gradle @@ -41,6 +41,10 @@ android { arguments 'NDEBUG=1' } } + + ndk { + debugSymbolLevel 'SYMBOL_TABLE' + } } } } diff --git a/src/porting_android.cpp b/src/porting_android.cpp index 29e95b8ca..c71fe5ad8 100644 --- a/src/porting_android.cpp +++ b/src/porting_android.cpp @@ -152,48 +152,35 @@ static std::string javaStringToUTF8(jstring js) return str; } -// Calls static method if obj is NULL -static std::string getAndroidPath( - jclass cls, jobject obj, jmethodID mt_getAbsPath, const char *getter) -{ - // Get getter method - jmethodID mt_getter; - if (obj) - mt_getter = jnienv->GetMethodID(cls, getter, "()Ljava/io/File;"); - else - mt_getter = jnienv->GetStaticMethodID(cls, getter, "()Ljava/io/File;"); - - // Call getter - jobject ob_file; - if (obj) - ob_file = jnienv->CallObjectMethod(obj, mt_getter); - else - ob_file = jnienv->CallStaticObjectMethod(cls, mt_getter); - - // Call getAbsolutePath - auto js_path = (jstring) jnienv->CallObjectMethod(ob_file, mt_getAbsPath); - - return javaStringToUTF8(js_path); -} - void initializePathsAndroid() { - // Get Environment class - jclass cls_Env = jnienv->FindClass("android/os/Environment"); - // Get File class - jclass cls_File = jnienv->FindClass("java/io/File"); - // Get getAbsolutePath method - jmethodID mt_getAbsPath = jnienv->GetMethodID(cls_File, - "getAbsolutePath", "()Ljava/lang/String;"); - std::string path_storage = getAndroidPath(cls_Env, nullptr, - mt_getAbsPath, "getExternalStorageDirectory"); + // Set user and share paths + { + jmethodID getUserDataPath = jnienv->GetMethodID(nativeActivity, + "getUserDataPath", "()Ljava/lang/String;"); + FATAL_ERROR_IF(getUserDataPath==nullptr, + "porting::initializePathsAndroid unable to find Java getUserDataPath method"); + jobject result = jnienv->CallObjectMethod(app_global->activity->clazz, getUserDataPath); + const char *javachars = jnienv->GetStringUTFChars((jstring) result, nullptr); + path_user = javachars; + path_share = javachars; + path_locale = path_share + DIR_DELIM + "locale"; + jnienv->ReleaseStringUTFChars((jstring) result, javachars); + } - path_user = path_storage + DIR_DELIM + PROJECT_NAME_C; - path_share = path_storage + DIR_DELIM + PROJECT_NAME_C; - path_locale = path_share + DIR_DELIM + "locale"; - path_cache = getAndroidPath(nativeActivity, - app_global->activity->clazz, mt_getAbsPath, "getCacheDir"); - migrateCachePath(); + // Set cache path + { + jmethodID getCachePath = jnienv->GetMethodID(nativeActivity, + "getCachePath", "()Ljava/lang/String;"); + FATAL_ERROR_IF(getCachePath==nullptr, + "porting::initializePathsAndroid unable to find Java getCachePath method"); + jobject result = jnienv->CallObjectMethod(app_global->activity->clazz, getCachePath); + const char *javachars = jnienv->GetStringUTFChars((jstring) result, nullptr); + path_cache = javachars; + jnienv->ReleaseStringUTFChars((jstring) result, javachars); + + migrateCachePath(); + } } void showInputDialog(const std::string &acceptButton, const std::string &hint, From c82ec8b210f613fcd5bb386a14f0a8f88591253a Mon Sep 17 00:00:00 2001 From: LoneWolfHT Date: Fri, 15 Oct 2021 09:16:09 -0700 Subject: [PATCH 029/412] Fix compiling on Windows with Visual Studio --- .gitignore | 4 ++++ README.md | 2 +- src/client/imagefilters.cpp | 1 + src/filesys.cpp | 1 + 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index a83a3718f..2e1e68157 100644 --- a/.gitignore +++ b/.gitignore @@ -107,6 +107,10 @@ CMakeDoxy* compile_commands.json *.apk *.zip +# Visual Studio +*.vcxproj* +*.sln +.vs/ # Optional user provided library folder lib/irrlichtmt diff --git a/README.md b/README.md index 30cc7fb20..372276b85 100644 --- a/README.md +++ b/README.md @@ -327,7 +327,7 @@ It is highly recommended to use vcpkg as package manager. After you successfully built vcpkg you can easily install the required libraries: ```powershell -vcpkg install zlib zstd curl[winssl] openal-soft libvorbis libogg sqlite3 freetype luajit gmp jsoncpp --triplet x64-windows +vcpkg install zlib zstd curl[winssl] openal-soft libvorbis libogg libjpeg-turbo sqlite3 freetype luajit gmp jsoncpp opengl-registry --triplet x64-windows ``` - **Don't forget about IrrlichtMt.** The easiest way is to clone it to `lib/irrlichtmt` as described in the Linux section. diff --git a/src/client/imagefilters.cpp b/src/client/imagefilters.cpp index 97ad094e5..b62e336f7 100644 --- a/src/client/imagefilters.cpp +++ b/src/client/imagefilters.cpp @@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include +#include // Simple 2D bitmap class with just the functionality needed here class Bitmap { diff --git a/src/filesys.cpp b/src/filesys.cpp index 44f1c88b3..60090c801 100644 --- a/src/filesys.cpp +++ b/src/filesys.cpp @@ -45,6 +45,7 @@ namespace fs #include #include #include +#include std::vector GetDirListing(const std::string &pathstring) { From 86b44ecd8280d8304aa26a600fc004d40a970020 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Wed, 20 Oct 2021 19:50:16 +0000 Subject: [PATCH 030/412] Add no_texture.png as fallback for unspecified textures --- doc/texture_packs.txt | 3 ++- games/devtest/mods/broken/init.lua | 11 +++++++++++ games/devtest/mods/broken/mod.conf | 2 ++ src/client/content_cao.cpp | 10 +++++----- src/client/game.cpp | 5 ++--- src/client/hud.cpp | 25 ++++++++++++++++++------- src/client/wieldmesh.cpp | 11 ++++++++--- src/nodedef.cpp | 17 ++++++++++++++--- src/object_properties.cpp | 2 +- src/server/luaentity_sao.cpp | 5 +++++ textures/base/pack/no_texture.png | Bin 0 -> 281 bytes 11 files changed, 68 insertions(+), 23 deletions(-) create mode 100644 games/devtest/mods/broken/init.lua create mode 100644 games/devtest/mods/broken/mod.conf create mode 100644 textures/base/pack/no_texture.png diff --git a/doc/texture_packs.txt b/doc/texture_packs.txt index 8af2cbad6..f738032b6 100644 --- a/doc/texture_packs.txt +++ b/doc/texture_packs.txt @@ -90,9 +90,10 @@ by texture packs. All existing fallback textures can be found in the directory * `minimap_mask_square.png`: mask used for the square minimap * `minimap_overlay_round.png`: overlay texture for the round minimap * `minimap_overlay_square.png`: overlay texture for the square minimap -* `no_texture_airlike.png`: fallback inventory image for airlike nodes * `object_marker_red.png`: texture for players on the minimap * `player_marker.png`: texture for the own player on the square minimap +* `no_texture_airlike.png`: fallback inventory image for airlike nodes +* `no_texture.png`: fallback image for unspecified textures * `player.png`: front texture of the 2D upright sprite player * `player_back.png`: back texture of the 2D upright sprite player diff --git a/games/devtest/mods/broken/init.lua b/games/devtest/mods/broken/init.lua new file mode 100644 index 000000000..04993ca16 --- /dev/null +++ b/games/devtest/mods/broken/init.lua @@ -0,0 +1,11 @@ +-- Register stuff with empty definitions to test if Minetest fallback options +-- for these things work properly. + +-- The itemstrings are deliberately kept descriptive to keep them easy to +-- recognize. + +minetest.register_node("broken:node_with_empty_definition", {}) +minetest.register_tool("broken:tool_with_empty_definition", {}) +minetest.register_craftitem("broken:craftitem_with_empty_definition", {}) + +minetest.register_entity("broken:entity_with_empty_definition", {}) diff --git a/games/devtest/mods/broken/mod.conf b/games/devtest/mods/broken/mod.conf new file mode 100644 index 000000000..a24378a34 --- /dev/null +++ b/games/devtest/mods/broken/mod.conf @@ -0,0 +1,2 @@ +name = broken +description = Register items and an entity with empty definitions to test fallback diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index da78cae7c..1e79d00c9 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -647,7 +647,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) m_matrixnode, v2f(1, 1), v3f(0,0,0), -1); m_spritenode->grab(); m_spritenode->setMaterialTexture(0, - tsrc->getTextureForMesh("unknown_node.png")); + tsrc->getTextureForMesh("no_texture.png")); setSceneNodeMaterial(m_spritenode); @@ -1288,7 +1288,7 @@ void GenericCAO::updateTextures(std::string mod) if (m_spritenode) { if (m_prop.visual == "sprite") { - std::string texturestring = "unknown_node.png"; + std::string texturestring = "no_texture.png"; if (!m_prop.textures.empty()) texturestring = m_prop.textures[0]; texturestring += mod; @@ -1367,7 +1367,7 @@ void GenericCAO::updateTextures(std::string mod) { for (u32 i = 0; i < 6; ++i) { - std::string texturestring = "unknown_node.png"; + std::string texturestring = "no_texture.png"; if(m_prop.textures.size() > i) texturestring = m_prop.textures[i]; texturestring += mod; @@ -1400,7 +1400,7 @@ void GenericCAO::updateTextures(std::string mod) } else if (m_prop.visual == "upright_sprite") { scene::IMesh *mesh = m_meshnode->getMesh(); { - std::string tname = "unknown_object.png"; + std::string tname = "no_texture.png"; if (!m_prop.textures.empty()) tname = m_prop.textures[0]; tname += mod; @@ -1422,7 +1422,7 @@ void GenericCAO::updateTextures(std::string mod) buf->getMaterial().setFlag(video::EMF_ANISOTROPIC_FILTER, use_anisotropic_filter); } { - std::string tname = "unknown_object.png"; + std::string tname = "no_texture.png"; if (m_prop.textures.size() >= 2) tname = m_prop.textures[1]; else if (!m_prop.textures.empty()) diff --git a/src/client/game.cpp b/src/client/game.cpp index a6448f40d..57951dc95 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -3331,9 +3331,8 @@ void Game::handlePointingAtNode(const PointedThing &pointed, } else { MapNode n = map.getNode(nodepos); - if (nodedef_manager->get(n).tiledef[0].name == "unknown_node.png") { - m_game_ui->setInfoText(L"Unknown node: " + - utf8_to_wide(nodedef_manager->get(n).name)); + if (nodedef_manager->get(n).name == "unknown") { + m_game_ui->setInfoText(L"Unknown node"); } } diff --git a/src/client/hud.cpp b/src/client/hud.cpp index 0620759da..e08d2ef02 100644 --- a/src/client/hud.cpp +++ b/src/client/hud.cpp @@ -1007,11 +1007,15 @@ void drawItemStack( bool draw_overlay = false; + bool has_mesh = false; + ItemMesh *imesh; + // Render as mesh if animated or no inventory image if ((enable_animations && rotation_kind < IT_ROT_NONE) || def.inventory_image.empty()) { - ItemMesh *imesh = client->idef()->getWieldMesh(def.name, client); - if (!imesh || !imesh->mesh) - return; + imesh = client->idef()->getWieldMesh(def.name, client); + has_mesh = imesh && imesh->mesh; + } + if (has_mesh) { scene::IMesh *mesh = imesh->mesh; driver->clearBuffers(video::ECBF_DEPTH); s32 delta = 0; @@ -1103,10 +1107,17 @@ void drawItemStack( draw_overlay = def.type == ITEM_NODE && def.inventory_image.empty(); } else { // Otherwise just draw as 2D video::ITexture *texture = client->idef()->getInventoryTexture(def.name, client); - if (!texture) - return; - video::SColor color = - client->idef()->getItemstackColor(item, client); + video::SColor color; + if (texture) { + color = client->idef()->getItemstackColor(item, client); + } else { + color = video::SColor(255, 255, 255, 255); + ITextureSource *tsrc = client->getTextureSource(); + texture = tsrc->getTexture("no_texture.png"); + if (!texture) + return; + } + const video::SColor colors[] = { color, color, color, color }; draw2DImageFilterScaled(driver, texture, rect, diff --git a/src/client/wieldmesh.cpp b/src/client/wieldmesh.cpp index 6beed3f3a..0a4cb3b86 100644 --- a/src/client/wieldmesh.cpp +++ b/src/client/wieldmesh.cpp @@ -458,9 +458,14 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che material.setFlag(video::EMF_TRILINEAR_FILTER, m_trilinear_filter); } return; - } else if (!def.inventory_image.empty()) { - setExtruded(def.inventory_image, def.inventory_overlay, def.wield_scale, - tsrc, 1); + } else { + if (!def.inventory_image.empty()) { + setExtruded(def.inventory_image, def.inventory_overlay, def.wield_scale, + tsrc, 1); + } else { + setExtruded("no_texture.png", "", def.wield_scale, tsrc, 1); + } + m_colors.emplace_back(); // overlay is white, if present m_colors.emplace_back(true, video::SColor(0xFFFFFFFF)); diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 703df4dee..f0e0024be 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -796,8 +796,10 @@ void ContentFeatures::updateTextures(ITextureSource *tsrc, IShaderSource *shdsrc TileDef tdef[6]; for (u32 j = 0; j < 6; j++) { tdef[j] = tiledef[j]; - if (tdef[j].name.empty()) - tdef[j].name = "unknown_node.png"; + if (tdef[j].name.empty()) { + tdef[j].name = "no_texture.png"; + tdef[j].backface_culling = false; + } } // also the overlay tiles TileDef tdef_overlay[6]; @@ -805,8 +807,13 @@ void ContentFeatures::updateTextures(ITextureSource *tsrc, IShaderSource *shdsrc tdef_overlay[j] = tiledef_overlay[j]; // also the special tiles TileDef tdef_spec[6]; - for (u32 j = 0; j < CF_SPECIAL_COUNT; j++) + for (u32 j = 0; j < CF_SPECIAL_COUNT; j++) { tdef_spec[j] = tiledef_special[j]; + if (tdef_spec[j].name.empty()) { + tdef_spec[j].name = "no_texture.png"; + tdef_spec[j].backface_culling = false; + } + } bool is_liquid = false; @@ -1052,6 +1059,10 @@ void NodeDefManager::clear() { ContentFeatures f; f.name = "unknown"; + TileDef unknownTile; + unknownTile.name = "unknown_node.png"; + for (int t = 0; t < 6; t++) + f.tiledef[t] = unknownTile; // Insert directly into containers content_t c = CONTENT_UNKNOWN; m_content_features[c] = f; diff --git a/src/object_properties.cpp b/src/object_properties.cpp index db06f8930..c7f6becf0 100644 --- a/src/object_properties.cpp +++ b/src/object_properties.cpp @@ -28,7 +28,7 @@ static const video::SColor NULL_BGCOLOR{0, 1, 1, 1}; ObjectProperties::ObjectProperties() { - textures.emplace_back("unknown_object.png"); + textures.emplace_back("no_texture.png"); colors.emplace_back(255,255,255,255); } diff --git a/src/server/luaentity_sao.cpp b/src/server/luaentity_sao.cpp index 3bcbe107b..1d65ac306 100644 --- a/src/server/luaentity_sao.cpp +++ b/src/server/luaentity_sao.cpp @@ -108,7 +108,12 @@ void LuaEntitySAO::addedToEnvironment(u32 dtime_s) m_env->getScriptIface()-> luaentity_Activate(m_id, m_init_state, dtime_s); } else { + // It's an unknown object + // Use entitystring as infotext for debugging m_prop.infotext = m_init_name; + // Set unknown object texture + m_prop.textures.clear(); + m_prop.textures.emplace_back("unknown_object.png"); } } diff --git a/textures/base/pack/no_texture.png b/textures/base/pack/no_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..681b810820fc21ad7269147beddbcc419e0daf46 GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y)RhkE|14;~Xv*;X`O+`b-bgbfeS0-coAET; zzMw#_XBo^<>rPjOEPQ$^sBogkzcU6u?)~UwTRY9FVFs&Y!9};@TKl%1i0%Dcl5HCH zcit7X*7WK3{D1DAq%B$@@bmQ!wQr?6Ue;|gc)Z}Q37`1snQw3YY}aL#+#JF)i|rn} XXw|Dr-?)>3E@tp_^>bP0l+XkK)@y7& literal 0 HcmV?d00001 From 0d345dc1bd56068b8d40f8ff712a9263c6ff7517 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20M=C3=BCller?= <34514239+appgurueu@users.noreply.github.com> Date: Wed, 20 Oct 2021 21:51:21 +0200 Subject: [PATCH 031/412] Fix view bobbing not resetting when resting partially fixes #11694, also fixes #11692 --- src/client/camera.cpp | 34 ++++------------------------------ 1 file changed, 4 insertions(+), 30 deletions(-) diff --git a/src/client/camera.cpp b/src/client/camera.cpp index 48e60c433..7adcf2376 100644 --- a/src/client/camera.cpp +++ b/src/client/camera.cpp @@ -186,9 +186,7 @@ void Camera::step(f32 dtime) m_view_bobbing_anim -= offset; } else if (m_view_bobbing_anim > 0.75) { m_view_bobbing_anim += offset; - } - - if (m_view_bobbing_anim < 0.5) { + } else if (m_view_bobbing_anim < 0.5) { m_view_bobbing_anim += offset; if (m_view_bobbing_anim > 0.5) m_view_bobbing_anim = 0.5; @@ -410,41 +408,17 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_r f32 bobfrac = my_modf(m_view_bobbing_anim * 2); f32 bobdir = (m_view_bobbing_anim < 0.5) ? 1.0 : -1.0; - #if 1 f32 bobknob = 1.2; f32 bobtmp = sin(pow(bobfrac, bobknob) * M_PI); - //f32 bobtmp2 = cos(pow(bobfrac, bobknob) * M_PI); v3f bobvec = v3f( 0.3 * bobdir * sin(bobfrac * M_PI), -0.28 * bobtmp * bobtmp, 0.); - //rel_cam_pos += 0.2 * bobvec; - //rel_cam_target += 0.03 * bobvec; - //rel_cam_up.rotateXYBy(0.02 * bobdir * bobtmp * M_PI); - float f = 1.0; - f *= m_cache_view_bobbing_amount; - rel_cam_pos += bobvec * f; - //rel_cam_target += 0.995 * bobvec * f; - rel_cam_target += bobvec * f; - rel_cam_target.Z -= 0.005 * bobvec.Z * f; - //rel_cam_target.X -= 0.005 * bobvec.X * f; - //rel_cam_target.Y -= 0.005 * bobvec.Y * f; - rel_cam_up.rotateXYBy(-0.03 * bobdir * bobtmp * M_PI * f); - #else - f32 angle_deg = 1 * bobdir * sin(bobfrac * M_PI); - f32 angle_rad = angle_deg * M_PI / 180; - f32 r = 0.05; - v3f off = v3f( - r * sin(angle_rad), - r * (cos(angle_rad) - 1), - 0); - rel_cam_pos += off; - //rel_cam_target += off; - rel_cam_up.rotateXYBy(angle_deg); - #endif - + rel_cam_pos += bobvec * m_cache_view_bobbing_amount; + rel_cam_target += bobvec * m_cache_view_bobbing_amount; + rel_cam_up.rotateXYBy(-0.03 * bobdir * bobtmp * M_PI * m_cache_view_bobbing_amount); } // Compute absolute camera position and target From a78124831f71a235756ca2321a6422295d67572f Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 22 Oct 2021 10:55:18 +0200 Subject: [PATCH 032/412] Fix incorrect error message in core.encode_png --- builtin/game/misc.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua index 63d64817c..05237662c 100644 --- a/builtin/game/misc.lua +++ b/builtin/game/misc.lua @@ -287,7 +287,7 @@ function core.encode_png(width, height, data, compression) local expected_byte_count = width * height * 4 if type(data) ~= "table" and type(data) ~= "string" then - error("Incorrect type for 'height', expected table or string, got " .. type(height)) + error("Incorrect type for 'data', expected table or string, got " .. type(data)) end local data_length = type(data) == "table" and #data * 4 or string.len(data) From d4b89eb106220f43838b039b13a0e356d366c259 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Thu, 21 Oct 2021 23:01:31 +0200 Subject: [PATCH 033/412] Fix no_texture.png activation w/ simple leaves --- src/nodedef.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/nodedef.cpp b/src/nodedef.cpp index f0e0024be..6f52b608b 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -809,10 +809,6 @@ void ContentFeatures::updateTextures(ITextureSource *tsrc, IShaderSource *shdsrc TileDef tdef_spec[6]; for (u32 j = 0; j < CF_SPECIAL_COUNT; j++) { tdef_spec[j] = tiledef_special[j]; - if (tdef_spec[j].name.empty()) { - tdef_spec[j].name = "no_texture.png"; - tdef_spec[j].backface_culling = false; - } } bool is_liquid = false; From 660e63dbae5901f8178b39ab40e6f770b8d7a215 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Mon, 25 Oct 2021 20:30:27 +0200 Subject: [PATCH 034/412] Fix item duplication if player dies during interact callback (alternative) (#11662) --- builtin/game/item.lua | 50 ++++++++++++++++------------- doc/lua_api.txt | 11 ++++--- src/network/serverpackethandler.cpp | 44 ++++++++++++++----------- src/script/cpp_api/s_item.cpp | 21 ++++++++---- src/script/cpp_api/s_item.h | 14 ++++++-- src/script/lua_api/l_env.cpp | 2 +- src/util/Optional.h | 32 ++++++++++++++++-- 7 files changed, 118 insertions(+), 56 deletions(-) diff --git a/builtin/game/item.lua b/builtin/game/item.lua index c495a67bd..039947584 100644 --- a/builtin/game/item.lua +++ b/builtin/game/item.lua @@ -499,34 +499,40 @@ function core.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed return result end end + if itemstack:take_item():is_empty() then + return itemstack + end + local def = itemstack:get_definition() - if itemstack:take_item() ~= nil then - user:set_hp(user:get_hp() + hp_change) + if def and def.sound and def.sound.eat then + core.sound_play(def.sound.eat, { + pos = user:get_pos(), + max_hear_distance = 16 + }, true) + end - if def and def.sound and def.sound.eat then - core.sound_play(def.sound.eat, { - pos = user:get_pos(), - max_hear_distance = 16 - }, true) - end - - if replace_with_item then - if itemstack:is_empty() then - itemstack:add_item(replace_with_item) + -- Changing hp might kill the player causing mods to do who-knows-what to the + -- inventory, so do this before set_hp(). + if replace_with_item then + if itemstack:is_empty() then + itemstack:add_item(replace_with_item) + else + local inv = user:get_inventory() + -- Check if inv is null, since non-players don't have one + if inv and inv:room_for_item("main", {name=replace_with_item}) then + inv:add_item("main", replace_with_item) else - local inv = user:get_inventory() - -- Check if inv is null, since non-players don't have one - if inv and inv:room_for_item("main", {name=replace_with_item}) then - inv:add_item("main", replace_with_item) - else - local pos = user:get_pos() - pos.y = math.floor(pos.y + 0.5) - core.add_item(pos, replace_with_item) - end + local pos = user:get_pos() + pos.y = math.floor(pos.y + 0.5) + core.add_item(pos, replace_with_item) end end end - return itemstack + user:set_wielded_item(itemstack) + + user:set_hp(user:get_hp() + hp_change) + + return nil -- don't overwrite wield item a second time end function core.item_eat(hp_change, replace_with_item) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 69ac55493..e47df4686 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -5421,7 +5421,7 @@ Inventory * `minetest.remove_detached_inventory(name)` * Returns a `boolean` indicating whether the removal succeeded. * `minetest.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing)`: - returns left over ItemStack. + returns leftover ItemStack or nil to indicate no inventory change * See `minetest.item_eat` and `minetest.register_on_item_eat` Formspec @@ -7542,12 +7542,15 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and on_place = function(itemstack, placer, pointed_thing), -- When the 'place' key was pressed with the item in hand -- and a node was pointed at. - -- Shall place item and return the leftover itemstack. + -- Shall place item and return the leftover itemstack + -- or nil to not modify the inventory. -- The placer may be any ObjectRef or nil. -- default: minetest.item_place on_secondary_use = function(itemstack, user, pointed_thing), -- Same as on_place but called when not pointing at a node. + -- Function must return either nil if inventory shall not be modified, + -- or an itemstack to replace the original itemstack. -- The user may be any ObjectRef or nil. -- default: nil @@ -7559,8 +7562,8 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and on_use = function(itemstack, user, pointed_thing), -- default: nil -- When user pressed the 'punch/mine' key with the item in hand. - -- Function must return either nil if no item shall be removed from - -- inventory, or an itemstack to replace the original itemstack. + -- Function must return either nil if inventory shall not be modified, + -- or an itemstack to replace the original itemstack. -- e.g. itemstack:take_item(); return itemstack -- Otherwise, the function is free to do what it wants. -- The user may be any ObjectRef or nil. diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index dc7be0e23..d4bef3ca2 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -921,6 +921,13 @@ bool Server::checkInteractDistance(RemotePlayer *player, const f32 d, const std: return true; } +// Tiny helper to retrieve the selected item into an Optional +static inline void getWieldedItem(const PlayerSAO *playersao, Optional &ret) +{ + ret = ItemStack(); + playersao->getWieldedItem(&(*ret)); +} + void Server::handleCommand_Interact(NetworkPacket *pkt) { /* @@ -1228,14 +1235,17 @@ void Server::handleCommand_Interact(NetworkPacket *pkt) // Place block or right-click object case INTERACT_PLACE: { - ItemStack selected_item; - playersao->getWieldedItem(&selected_item, nullptr); + Optional selected_item; + getWieldedItem(playersao, selected_item); // Reset build time counter if (pointed.type == POINTEDTHING_NODE && - selected_item.getDefinition(m_itemdef).type == ITEM_NODE) + selected_item->getDefinition(m_itemdef).type == ITEM_NODE) getClient(peer_id)->m_time_from_building = 0.0; + const bool had_prediction = !selected_item->getDefinition(m_itemdef). + node_placement_prediction.empty(); + if (pointed.type == POINTEDTHING_OBJECT) { // Right click object @@ -1248,11 +1258,9 @@ void Server::handleCommand_Interact(NetworkPacket *pkt) << pointed_object->getDescription() << std::endl; // Do stuff - if (m_script->item_OnSecondaryUse( - selected_item, playersao, pointed)) { - if (playersao->setWieldedItem(selected_item)) { + if (m_script->item_OnSecondaryUse(selected_item, playersao, pointed)) { + if (selected_item.has_value() && playersao->setWieldedItem(*selected_item)) SendInventory(playersao, true); - } } pointed_object->rightClick(playersao); @@ -1260,7 +1268,7 @@ void Server::handleCommand_Interact(NetworkPacket *pkt) // Placement was handled in lua // Apply returned ItemStack - if (playersao->setWieldedItem(selected_item)) + if (selected_item.has_value() && playersao->setWieldedItem(*selected_item)) SendInventory(playersao, true); } @@ -1272,8 +1280,7 @@ void Server::handleCommand_Interact(NetworkPacket *pkt) RemoteClient *client = getClient(peer_id); v3s16 blockpos = getNodeBlockPos(pointed.node_abovesurface); v3s16 blockpos2 = getNodeBlockPos(pointed.node_undersurface); - if (!selected_item.getDefinition(m_itemdef - ).node_placement_prediction.empty()) { + if (had_prediction) { client->SetBlockNotSent(blockpos); if (blockpos2 != blockpos) client->SetBlockNotSent(blockpos2); @@ -1287,15 +1294,15 @@ void Server::handleCommand_Interact(NetworkPacket *pkt) } // action == INTERACT_PLACE case INTERACT_USE: { - ItemStack selected_item; - playersao->getWieldedItem(&selected_item, nullptr); + Optional selected_item; + getWieldedItem(playersao, selected_item); - actionstream << player->getName() << " uses " << selected_item.name + actionstream << player->getName() << " uses " << selected_item->name << ", pointing at " << pointed.dump() << std::endl; if (m_script->item_OnUse(selected_item, playersao, pointed)) { // Apply returned ItemStack - if (playersao->setWieldedItem(selected_item)) + if (selected_item.has_value() && playersao->setWieldedItem(*selected_item)) SendInventory(playersao, true); } @@ -1304,16 +1311,17 @@ void Server::handleCommand_Interact(NetworkPacket *pkt) // Rightclick air case INTERACT_ACTIVATE: { - ItemStack selected_item; - playersao->getWieldedItem(&selected_item, nullptr); + Optional selected_item; + getWieldedItem(playersao, selected_item); actionstream << player->getName() << " activates " - << selected_item.name << std::endl; + << selected_item->name << std::endl; pointed.type = POINTEDTHING_NOTHING; // can only ever be NOTHING if (m_script->item_OnSecondaryUse(selected_item, playersao, pointed)) { - if (playersao->setWieldedItem(selected_item)) + // Apply returned ItemStack + if (selected_item.has_value() && playersao->setWieldedItem(*selected_item)) SendInventory(playersao, true); } diff --git a/src/script/cpp_api/s_item.cpp b/src/script/cpp_api/s_item.cpp index 48dce14f3..b1916070e 100644 --- a/src/script/cpp_api/s_item.cpp +++ b/src/script/cpp_api/s_item.cpp @@ -59,13 +59,14 @@ bool ScriptApiItem::item_OnDrop(ItemStack &item, return true; } -bool ScriptApiItem::item_OnPlace(ItemStack &item, +bool ScriptApiItem::item_OnPlace(Optional &ret_item, ServerActiveObject *placer, const PointedThing &pointed) { SCRIPTAPI_PRECHECKHEADER int error_handler = PUSH_ERROR_HANDLER(L); + const ItemStack &item = *ret_item; // Push callback function on stack if (!getItemCallback(item.name.c_str(), "on_place")) return false; @@ -82,22 +83,25 @@ bool ScriptApiItem::item_OnPlace(ItemStack &item, PCALL_RES(lua_pcall(L, 3, 1, error_handler)); if (!lua_isnil(L, -1)) { try { - item = read_item(L, -1, getServer()->idef()); + ret_item = read_item(L, -1, getServer()->idef()); } catch (LuaError &e) { throw WRAP_LUAERROR(e, "item=" + item.name); } + } else { + ret_item = nullopt; } lua_pop(L, 2); // Pop item and error handler return true; } -bool ScriptApiItem::item_OnUse(ItemStack &item, +bool ScriptApiItem::item_OnUse(Optional &ret_item, ServerActiveObject *user, const PointedThing &pointed) { SCRIPTAPI_PRECHECKHEADER int error_handler = PUSH_ERROR_HANDLER(L); + const ItemStack &item = *ret_item; // Push callback function on stack if (!getItemCallback(item.name.c_str(), "on_use")) return false; @@ -109,22 +113,25 @@ bool ScriptApiItem::item_OnUse(ItemStack &item, PCALL_RES(lua_pcall(L, 3, 1, error_handler)); if(!lua_isnil(L, -1)) { try { - item = read_item(L, -1, getServer()->idef()); + ret_item = read_item(L, -1, getServer()->idef()); } catch (LuaError &e) { throw WRAP_LUAERROR(e, "item=" + item.name); } + } else { + ret_item = nullopt; } lua_pop(L, 2); // Pop item and error handler return true; } -bool ScriptApiItem::item_OnSecondaryUse(ItemStack &item, +bool ScriptApiItem::item_OnSecondaryUse(Optional &ret_item, ServerActiveObject *user, const PointedThing &pointed) { SCRIPTAPI_PRECHECKHEADER int error_handler = PUSH_ERROR_HANDLER(L); + const ItemStack &item = *ret_item; if (!getItemCallback(item.name.c_str(), "on_secondary_use")) return false; @@ -134,10 +141,12 @@ bool ScriptApiItem::item_OnSecondaryUse(ItemStack &item, PCALL_RES(lua_pcall(L, 3, 1, error_handler)); if (!lua_isnil(L, -1)) { try { - item = read_item(L, -1, getServer()->idef()); + ret_item = read_item(L, -1, getServer()->idef()); } catch (LuaError &e) { throw WRAP_LUAERROR(e, "item=" + item.name); } + } else { + ret_item = nullopt; } lua_pop(L, 2); // Pop item and error handler return true; diff --git a/src/script/cpp_api/s_item.h b/src/script/cpp_api/s_item.h index 25a3501f9..5015d8bd4 100644 --- a/src/script/cpp_api/s_item.h +++ b/src/script/cpp_api/s_item.h @@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "cpp_api/s_base.h" #include "irr_v3d.h" +#include "util/Optional.h" struct PointedThing; struct ItemStack; @@ -35,13 +36,20 @@ class ScriptApiItem : virtual public ScriptApiBase { public: + /* + * Functions with Optional are for callbacks where Lua may + * want to prevent the engine from modifying the inventory after it's done. + * This has a longer backstory where on_use may need to empty the player's + * inventory without the engine interfering (see issue #6546). + */ + bool item_OnDrop(ItemStack &item, ServerActiveObject *dropper, v3f pos); - bool item_OnPlace(ItemStack &item, + bool item_OnPlace(Optional &item, ServerActiveObject *placer, const PointedThing &pointed); - bool item_OnUse(ItemStack &item, + bool item_OnUse(Optional &item, ServerActiveObject *user, const PointedThing &pointed); - bool item_OnSecondaryUse(ItemStack &item, + bool item_OnSecondaryUse(Optional &item, ServerActiveObject *user, const PointedThing &pointed); bool item_OnCraft(ItemStack &item, ServerActiveObject *user, const InventoryList *old_craft_grid, const InventoryLocation &craft_inv); diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp index 98f8861fa..2c709d31b 100644 --- a/src/script/lua_api/l_env.cpp +++ b/src/script/lua_api/l_env.cpp @@ -477,7 +477,7 @@ int ModApiEnvMod::l_place_node(lua_State *L) return 1; } // Create item to place - ItemStack item(ndef->get(n).name, 1, 0, idef); + Optional item = ItemStack(ndef->get(n).name, 1, 0, idef); // Make pointed position PointedThing pointed; pointed.type = POINTEDTHING_NODE; diff --git a/src/util/Optional.h b/src/util/Optional.h index 9c2842b43..eda7fff89 100644 --- a/src/util/Optional.h +++ b/src/util/Optional.h @@ -19,6 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once +#include #include "debug.h" struct nullopt_t @@ -43,18 +44,38 @@ class Optional public: Optional() noexcept {} Optional(nullopt_t) noexcept {} + Optional(const T &value) noexcept : m_has_value(true), m_value(value) {} + Optional(T &&value) noexcept : m_has_value(true), m_value(std::move(value)) {} + Optional(const Optional &other) noexcept : m_has_value(other.m_has_value), m_value(other.m_value) + {} + Optional(Optional &&other) noexcept : + m_has_value(other.m_has_value), m_value(std::move(other.m_value)) { + other.m_has_value = false; } - void operator=(nullopt_t) noexcept { m_has_value = false; } + Optional &operator=(nullopt_t) noexcept { m_has_value = false; return *this; } - void operator=(const Optional &other) noexcept + Optional &operator=(const Optional &other) noexcept { + if (&other == this) + return *this; m_has_value = other.m_has_value; m_value = other.m_value; + return *this; + } + + Optional &operator=(Optional &&other) noexcept + { + if (&other == this) + return *this; + m_has_value = other.m_has_value; + m_value = std::move(other.m_value); + other.m_has_value = false; + return *this; } T &value() @@ -71,6 +92,13 @@ public: const T &value_or(const T &def) const { return m_has_value ? m_value : def; } + // Unchecked access consistent with std::optional + T* operator->() { return &m_value; } + const T* operator->() const { return &m_value; } + + T& operator*() { return m_value; } + const T& operator*() const { return m_value; } + bool has_value() const noexcept { return m_has_value; } explicit operator bool() const { return m_has_value; } From 1e26e4553033ebb11991721ba836e6425f556851 Mon Sep 17 00:00:00 2001 From: Jude Melton-Houghton Date: Mon, 25 Oct 2021 14:31:14 -0400 Subject: [PATCH 035/412] Limit stepheight smoothing to the stepheight and stop smoothing during jumps (#11705) --- src/client/camera.cpp | 20 +++++++++++++------- src/client/camera.h | 2 ++ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/client/camera.cpp b/src/client/camera.cpp index 7adcf2376..1ce92f196 100644 --- a/src/client/camera.cpp +++ b/src/client/camera.cpp @@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "player.h" #include #include "client/renderingengine.h" +#include "client/content_cao.h" #include "settings.h" #include "wieldmesh.h" #include "noise.h" // easeCurve @@ -341,13 +342,16 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_r if (player->getParent()) player_position = player->getParent()->getPosition(); - // Smooth the camera movement when the player instantly moves upward due to stepheight. - // To smooth the 'not touching_ground' stepheight, smoothing is necessary when jumping - // or swimming (for when moving from liquid to land). - // Disable smoothing if climbing or flying, to avoid upwards offset of player model - // when seen in 3rd person view. - bool flying = g_settings->getBool("free_move") && m_client->checkLocalPrivilege("fly"); - if (player_position.Y > old_player_position.Y && !player->is_climbing && !flying) { + // Smooth the camera movement after the player instantly moves upward due to stepheight. + // The smoothing usually continues until the camera position reaches the player position. + float player_stepheight = player->getCAO() ? player->getCAO()->getStepHeight() : HUGE_VALF; + float upward_movement = player_position.Y - old_player_position.Y; + if (upward_movement < 0.01f || upward_movement > player_stepheight) { + m_stepheight_smooth_active = false; + } else if (player->touching_ground) { + m_stepheight_smooth_active = true; + } + if (m_stepheight_smooth_active) { f32 oldy = old_player_position.Y; f32 newy = player_position.Y; f32 t = std::exp(-23 * frametime); @@ -587,6 +591,8 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_r const bool walking = movement_XZ && player->touching_ground; const bool swimming = (movement_XZ || player->swimming_vertical) && player->in_liquid; const bool climbing = movement_Y && player->is_climbing; + const bool flying = g_settings->getBool("free_move") + && m_client->checkLocalPrivilege("fly"); if ((walking || swimming || climbing) && !flying) { // Start animation m_view_bobbing_state = 1; diff --git a/src/client/camera.h b/src/client/camera.h index 593a97d80..bea9ab333 100644 --- a/src/client/camera.h +++ b/src/client/camera.h @@ -218,6 +218,8 @@ private: // Camera offset v3s16 m_camera_offset; + bool m_stepheight_smooth_active = false; + // Server-sent FOV variables bool m_server_sent_fov = false; f32 m_curr_fov_degrees, m_old_fov_degrees, m_target_fov_degrees; From 4ee643f472067356599946345f48fe7f743e6f38 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sat, 23 Oct 2021 17:23:30 +0200 Subject: [PATCH 036/412] Fixes around emerge handling --- src/emerge.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/emerge.cpp b/src/emerge.cpp index be64d744a..619b1fa8e 100644 --- a/src/emerge.cpp +++ b/src/emerge.cpp @@ -633,13 +633,15 @@ MapBlock *EmergeThread::finishGen(v3s16 pos, BlockMakeData *bmdata, m_server->setAsyncFatalError(e); } - /* - Clear generate notifier events - */ - m_mapgen->gennotify.clearEvents(); - EMERGE_DBG_OUT("ended up with: " << analyze_block(block)); + /* + Clear mapgen state + */ + assert(!m_mapgen->generating); + m_mapgen->gennotify.clearEvents(); + m_mapgen->vm = nullptr; + /* Activate the block */ @@ -654,19 +656,19 @@ void *EmergeThread::run() BEGIN_DEBUG_EXCEPTION_HANDLER v3s16 pos; + std::map modified_blocks; - m_map = (ServerMap *)&(m_server->m_env->getMap()); + m_map = &m_server->m_env->getServerMap(); m_emerge = m_server->m_emerge; m_mapgen = m_emerge->m_mapgens[id]; enable_mapgen_debug_info = m_emerge->enable_mapgen_debug_info; try { while (!stopRequested()) { - std::map modified_blocks; BlockEmergeData bedata; BlockMakeData bmdata; EmergeAction action; - MapBlock *block; + MapBlock *block = nullptr; if (!popBlockEmerge(&pos, &bedata)) { m_queue_event.wait(); @@ -689,6 +691,8 @@ void *EmergeThread::run() } block = finishGen(pos, &bmdata, &modified_blocks); + if (!block) + action = EMERGE_ERRORED; } runCompletionCallbacks(pos, action, bedata.callbacks); @@ -698,6 +702,7 @@ void *EmergeThread::run() if (!modified_blocks.empty()) m_server->SetBlocksNotSent(modified_blocks); + modified_blocks.clear(); } } catch (VersionMismatchException &e) { std::ostringstream err; From 8dfeba02b9f084ddd52090ccd906534200f468b3 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Mon, 25 Oct 2021 21:36:28 +0100 Subject: [PATCH 037/412] Fix crash on hypertext[] with not enough parts The length check used < rather than <=, disabling the check when the formspec version matches the client's FORMSPEC_API_VERSION. Additionally, it was possible to have fewer parts than required if the formspec version was greater than the client's FORMSPEC_API_VERSION. --- src/gui/guiFormSpecMenu.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp index 938481fa2..1ce55673d 100644 --- a/src/gui/guiFormSpecMenu.cpp +++ b/src/gui/guiFormSpecMenu.cpp @@ -1730,8 +1730,9 @@ void GUIFormSpecMenu::parseHyperText(parserData *data, const std::string &elemen { std::vector parts = split(element, ';'); - if (parts.size() != 4 && m_formspec_version < FORMSPEC_API_VERSION) { - errorstream << "Invalid text element(" << parts.size() << "): '" << element << "'" << std::endl; + if (parts.size() != 4 && + (parts.size() < 4 || m_formspec_version <= FORMSPEC_API_VERSION)) { + errorstream << "Invalid hypertext element(" << parts.size() << "): '" << element << "'" << std::endl; return; } From 532d5b21fdff8bd8aa460b010ebd3bef1b9878dd Mon Sep 17 00:00:00 2001 From: Isabelle COWAN-BERGMAN Date: Sun, 31 Oct 2021 19:17:47 +0100 Subject: [PATCH 038/412] Add joystick layout for DragonRise GameCube controller (#11467) --- builtin/settingtypes.txt | 2 +- src/client/joystick_controller.cpp | 50 ++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index af4f5eaa6..81ebef67d 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -146,7 +146,7 @@ enable_joysticks (Enable joysticks) bool false joystick_id (Joystick ID) int 0 # The type of joystick -joystick_type (Joystick type) enum auto auto,generic,xbox +joystick_type (Joystick type) enum auto auto,generic,xbox,dragonrise_gamecube # The time in seconds it takes between repeated events # when holding down a joystick button combination. diff --git a/src/client/joystick_controller.cpp b/src/client/joystick_controller.cpp index 630565d8d..aae73c62d 100644 --- a/src/client/joystick_controller.cpp +++ b/src/client/joystick_controller.cpp @@ -154,6 +154,54 @@ JoystickLayout create_xbox_layout() return jlo; } +JoystickLayout create_dragonrise_gamecube_layout() +{ + JoystickLayout jlo; + + jlo.axes_deadzone = 7000; + + const JoystickAxisLayout axes[JA_COUNT] = { + // Control Stick + {0, 1}, // JA_SIDEWARD_MOVE + {1, 1}, // JA_FORWARD_MOVE + + // C-Stick + {3, 1}, // JA_FRUSTUM_HORIZONTAL + {4, 1}, // JA_FRUSTUM_VERTICAL + }; + memcpy(jlo.axes, axes, sizeof(jlo.axes)); + + // The center button + JLO_B_PB(KeyType::ESC, 1 << 9, 1 << 9); // Start/Pause Button + + // Front right buttons + JLO_B_PB(KeyType::JUMP, 1 << 2, 1 << 2); // A Button + JLO_B_PB(KeyType::SNEAK, 1 << 3, 1 << 3); // B Button + JLO_B_PB(KeyType::DROP, 1 << 0, 1 << 0); // Y Button + JLO_B_PB(KeyType::AUX1, 1 << 1, 1 << 1); // X Button + + // Triggers + JLO_B_PB(KeyType::DIG, 1 << 4, 1 << 4); // L Trigger + JLO_B_PB(KeyType::PLACE, 1 << 5, 1 << 5); // R Trigger + JLO_B_PB(KeyType::INVENTORY, 1 << 6, 1 << 6); // Z Button + + // D-Pad + JLO_A_PB(KeyType::HOTBAR_PREV, 5, 1, jlo.axes_deadzone); // left + JLO_A_PB(KeyType::HOTBAR_NEXT, 5, -1, jlo.axes_deadzone); // right + // Axis are hard to actuate independantly, best to leave up and down unused. + //JLO_A_PB(0, 6, 1, jlo.axes_deadzone); // up + //JLO_A_PB(0, 6, -1, jlo.axes_deadzone); // down + + // Movements tied to Control Stick, important for vessels + JLO_A_PB(KeyType::LEFT, 0, 1, jlo.axes_deadzone); + JLO_A_PB(KeyType::RIGHT, 0, -1, jlo.axes_deadzone); + JLO_A_PB(KeyType::FORWARD, 1, 1, jlo.axes_deadzone); + JLO_A_PB(KeyType::BACKWARD, 1, -1, jlo.axes_deadzone); + + return jlo; +} + + JoystickController::JoystickController() : doubling_dtime(g_settings->getFloat("repeat_joystick_button_time")) { @@ -188,6 +236,8 @@ void JoystickController::setLayoutFromControllerName(const std::string &name) { if (lowercase(name).find("xbox") != std::string::npos) { m_layout = create_xbox_layout(); + } else if (lowercase(name).find("dragonrise_gamecube") != std::string::npos) { + m_layout = create_dragonrise_gamecube_layout(); } else { m_layout = create_default_layout(); } From cef016d393959e989df259aeacd055fc702a55ca Mon Sep 17 00:00:00 2001 From: x2048 Date: Sun, 31 Oct 2021 19:18:30 +0100 Subject: [PATCH 039/412] Apply shadow only to the naturally lit part of the fragment color (#11722) Fragment color for nodes is now calculated from: * Texture color, highlighted by artificial light if present (light color conveyed via vertex color). * Texture color highlighted by natural light (conveyed via vertex color) filtered by shadow. * Reflected day/moonlight filtered by shadow (color and intensity), assuming some portion of the light is directly reflected from the materials. --- .../shaders/nodes_shader/opengl_fragment.glsl | 27 ++++++++++++++----- .../shadow_shaders/pass1_trans_fragment.glsl | 5 ++-- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/client/shaders/nodes_shader/opengl_fragment.glsl b/client/shaders/nodes_shader/opengl_fragment.glsl index e21890710..b4a605b28 100644 --- a/client/shaders/nodes_shader/opengl_fragment.glsl +++ b/client/shaders/nodes_shader/opengl_fragment.glsl @@ -1,5 +1,6 @@ uniform sampler2D baseTexture; +uniform vec3 dayLight; uniform vec4 skyBgColor; uniform float fogDistance; uniform vec3 eyePosition; @@ -497,23 +498,35 @@ void main(void) shadow_int = visibility.r; shadow_color = visibility.gba; #else - shadow_int = getShadow(ShadowMapSampler, posLightSpace.xy, posLightSpace.z); + if (cosLight > 0.0) + shadow_int = getShadow(ShadowMapSampler, posLightSpace.xy, posLightSpace.z); + else + shadow_int = 1.0; #endif shadow_int *= distance_rate; - shadow_int *= 1.0 - nightRatio; - + shadow_int = clamp(shadow_int, 0.0, 1.0); } + // turns out that nightRatio falls off much faster than + // actual brightness of artificial light in relation to natual light. + // Power ratio was measured on torches in MTG (brightness = 14). + float adjusted_night_ratio = pow(nightRatio, 0.6); + if (f_normal_length != 0 && cosLight < 0.035) { - shadow_int = max(shadow_int, min(clamp(1.0-nightRatio, 0.0, 1.0), 1 - clamp(cosLight, 0.0, 0.035)/0.035)); + shadow_int = max(shadow_int, 1 - clamp(cosLight, 0.0, 0.035)/0.035); } - shadow_int = 1.0 - (shadow_int * f_adj_shadow_strength); + shadow_int *= f_adj_shadow_strength; - // apply shadow (+color) as a factor to the material color - col.rgb = col.rgb * (1.0 - (1.0 - shadow_color) * (1.0 - pow(shadow_int, 2.0))); + // calculate fragment color from components: + col.rgb = + adjusted_night_ratio * col.rgb + // artificial light + (1.0 - adjusted_night_ratio) * ( // natural light + col.rgb * (1.0 - shadow_int * (1.0 - shadow_color)) + // filtered texture color + dayLight * shadow_color * shadow_int); // reflected filtered sunlight/moonlight // col.r = 0.5 * clamp(getPenumbraRadius(ShadowMapSampler, posLightSpace.xy, posLightSpace.z, 1.0) / SOFTSHADOWRADIUS, 0.0, 1.0) + 0.5 * col.r; + // col.r = adjusted_night_ratio; // debug night ratio adjustment #endif #if ENABLE_TONE_MAPPING diff --git a/client/shaders/shadow_shaders/pass1_trans_fragment.glsl b/client/shaders/shadow_shaders/pass1_trans_fragment.glsl index 032cd9379..b267c2214 100644 --- a/client/shaders/shadow_shaders/pass1_trans_fragment.glsl +++ b/client/shaders/shadow_shaders/pass1_trans_fragment.glsl @@ -33,9 +33,8 @@ void main() //col.rgb = col.a == 1.0 ? vec3(1.0) : col.rgb; #ifdef COLORED_SHADOWS col.rgb *= varColor.rgb; - // alpha 0.0 results in all-white, 0.5 means full color, 1.0 means all black - // resulting color is used as a factor in the final shader - float packedColor = packColor(mix(mix(vec3(1.0), col.rgb, 2.0 * clamp(col.a, 0.0, 0.5)), black, 2.0 * clamp(col.a - 0.5, 0.0, 0.5))); + // premultiply color alpha (see-through side) + float packedColor = packColor(col.rgb * (1.0 - col.a)); gl_FragColor = vec4(depth, packedColor, 0.0,1.0); #else gl_FragColor = vec4(depth, 0.0, 0.0, 1.0); From 4114e3047bd2cc975d829f24d73991650817ad66 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 31 Oct 2021 23:32:25 +0100 Subject: [PATCH 040/412] Update Android to new dependency repo (#11690) --- .github/workflows/android.yml | 10 +- android/app/build.gradle | 6 +- android/build.gradle | 3 +- .../gradle/wrapper/gradle-wrapper.properties | 3 +- android/native/build.gradle | 46 +------ android/native/jni/Android.mk | 124 ++++++++++-------- android/native/jni/Application.mk | 16 +-- 7 files changed, 95 insertions(+), 113 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 660b5c8df..cc5fe83ef 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -21,15 +21,13 @@ on: jobs: build: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - - name: Set up JDK 1.8 - uses: actions/setup-java@v1 - with: - java-version: 1.8 - name: Install deps - run: sudo apt-get update; sudo apt-get install -y --no-install-recommends gettext + run: | + sudo apt-get update + sudo apt-get install -y --no-install-recommends gettext openjdk-11-jdk-headless - name: Build with Gradle run: cd android; ./gradlew assemblerelease - name: Save armeabi artifact diff --git a/android/app/build.gradle b/android/app/build.gradle index 53fe85910..234868f92 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 29 buildToolsVersion '30.0.3' - ndkVersion '22.0.7026061' + ndkVersion "$ndk_version" defaultConfig { applicationId 'net.minetest.minetest' minSdkVersion 16 @@ -68,7 +68,7 @@ task prepareAssets() { from "${projRoot}/client/shaders" into "${assetsFolder}/client/shaders" } copy { - from "../native/deps/Android/Irrlicht/shaders" into "${assetsFolder}/client/shaders/Irrlicht" + from "../native/deps/armeabi-v7a/Irrlicht/Shaders" into "${assetsFolder}/client/shaders/Irrlicht" } copy { from "${projRoot}/fonts" include "*.ttf" into "${assetsFolder}/fonts" @@ -112,5 +112,5 @@ android.applicationVariants.all { variant -> dependencies { implementation project(':native') - implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.appcompat:appcompat:1.3.1' } diff --git a/android/build.gradle b/android/build.gradle index 3ba51a4bb..e2fd2b3db 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -10,12 +10,13 @@ project.ext.set("versionCode", 32) // Android Version Code // each APK must have a larger `versionCode` than the previous buildscript { + ext.ndk_version = '23.0.7599858' repositories { google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.1' + classpath 'com.android.tools.build:gradle:7.0.3' classpath 'de.undercouch:gradle-download-task:4.1.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 7fd9307d7..8ad73a75c 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jan 08 17:52:00 UTC 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip diff --git a/android/native/build.gradle b/android/native/build.gradle index a7f095641..e37694f5b 100644 --- a/android/native/build.gradle +++ b/android/native/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'de.undercouch.download' android { compileSdkVersion 29 buildToolsVersion '30.0.3' - ndkVersion '22.0.7026061' + ndkVersion "$ndk_version" defaultConfig { minSdkVersion 16 targetSdkVersion 29 @@ -50,53 +50,19 @@ android { } // get precompiled deps -def folder = 'minetest_android_deps_binaries' - task downloadDeps(type: Download) { - src 'https://github.com/minetest/' + folder + '/archive/master.zip' + src 'https://github.com/minetest/minetest_android_deps/releases/download/latest/deps.zip' dest new File(buildDir, 'deps.zip') overwrite false } task getDeps(dependsOn: downloadDeps, type: Copy) { - def deps = file('deps') - def f = file("$buildDir/" + folder + "-master") - - if (!deps.exists() && !f.exists()) { + def deps = new File(buildDir.parent, 'deps') + if (!deps.exists()) { + deps.mkdir() from zipTree(downloadDeps.dest) - into buildDir - } - - doLast { - if (!deps.exists()) { - file(f).renameTo(file(deps)) - } - } -} - -// get sqlite -def sqlite_ver = '3340000' -task downloadSqlite(dependsOn: getDeps, type: Download) { - src 'https://www.sqlite.org/2020/sqlite-amalgamation-' + sqlite_ver + '.zip' - dest new File(buildDir, 'sqlite.zip') - overwrite false -} - -task getSqlite(dependsOn: downloadSqlite, type: Copy) { - def sqlite = file('deps/Android/sqlite') - def f = file("$buildDir/sqlite-amalgamation-" + sqlite_ver) - - if (!sqlite.exists() && !f.exists()) { - from zipTree(downloadSqlite.dest) - into buildDir - } - - doLast { - if (!sqlite.exists()) { - file(f).renameTo(file(sqlite)) - } + into deps } } preBuild.dependsOn getDeps -preBuild.dependsOn getSqlite diff --git a/android/native/jni/Android.mk b/android/native/jni/Android.mk index 26e9b058b..85c13bfb3 100644 --- a/android/native/jni/Android.mk +++ b/android/native/jni/Android.mk @@ -4,62 +4,82 @@ LOCAL_PATH := $(call my-dir)/.. include $(CLEAR_VARS) LOCAL_MODULE := Curl -LOCAL_SRC_FILES := deps/Android/Curl/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libcurl.a +LOCAL_SRC_FILES := deps/$(APP_ABI)/Curl/libcurl.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := libmbedcrypto +LOCAL_SRC_FILES := deps/$(APP_ABI)/Curl/libmbedcrypto.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := libmbedtls +LOCAL_SRC_FILES := deps/$(APP_ABI)/Curl/libmbedtls.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := libmbedx509 +LOCAL_SRC_FILES := deps/$(APP_ABI)/Curl/libmbedx509.a include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := Freetype -LOCAL_SRC_FILES := deps/Android/Freetype/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libfreetype.a +LOCAL_SRC_FILES := deps/$(APP_ABI)/Freetype/libfreetype.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := Iconv +LOCAL_SRC_FILES := deps/$(APP_ABI)/Iconv/libiconv.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := libcharset +LOCAL_SRC_FILES := deps/$(APP_ABI)/Iconv/libcharset.a include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := Irrlicht -LOCAL_SRC_FILES := deps/Android/Irrlicht/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libIrrlichtMt.a +LOCAL_SRC_FILES := deps/$(APP_ABI)/Irrlicht/libIrrlichtMt.a include $(PREBUILT_STATIC_LIBRARY) -#include $(CLEAR_VARS) -#LOCAL_MODULE := LevelDB -#LOCAL_SRC_FILES := deps/Android/LevelDB/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libleveldb.a -#include $(PREBUILT_STATIC_LIBRARY) - include $(CLEAR_VARS) LOCAL_MODULE := LuaJIT -LOCAL_SRC_FILES := deps/Android/LuaJIT/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libluajit.a -include $(PREBUILT_STATIC_LIBRARY) - -include $(CLEAR_VARS) -LOCAL_MODULE := mbedTLS -LOCAL_SRC_FILES := deps/Android/mbedTLS/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libmbedtls.a -include $(PREBUILT_STATIC_LIBRARY) - -include $(CLEAR_VARS) -LOCAL_MODULE := mbedx509 -LOCAL_SRC_FILES := deps/Android/mbedTLS/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libmbedx509.a -include $(PREBUILT_STATIC_LIBRARY) - -include $(CLEAR_VARS) -LOCAL_MODULE := mbedcrypto -LOCAL_SRC_FILES := deps/Android/mbedTLS/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libmbedcrypto.a +LOCAL_SRC_FILES := deps/$(APP_ABI)/LuaJIT/libluajit.a include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := OpenAL -LOCAL_SRC_FILES := deps/Android/OpenAL-Soft/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libopenal.a +LOCAL_SRC_FILES := deps/$(APP_ABI)/OpenAL-Soft/libopenal.a include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) -LOCAL_MODULE := GetText -LOCAL_SRC_FILES := deps/Android/GetText/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libintl.a +LOCAL_MODULE := Gettext +LOCAL_SRC_FILES := deps/$(APP_ABI)/Gettext/libintl.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := SQLite3 +LOCAL_SRC_FILES := deps/$(APP_ABI)/SQLite/libsqlite3.a include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := Vorbis -LOCAL_SRC_FILES := deps/Android/Vorbis/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libvorbis.a +LOCAL_SRC_FILES := deps/$(APP_ABI)/Vorbis/libvorbis.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := libvorbisfile +LOCAL_SRC_FILES := deps/$(APP_ABI)/Vorbis/libvorbisfile.a +include $(PREBUILT_STATIC_LIBRARY) + +include $(CLEAR_VARS) +LOCAL_MODULE := libogg +LOCAL_SRC_FILES := deps/$(APP_ABI)/Vorbis/libogg.a include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := Zstd -LOCAL_SRC_FILES := deps/Android/Zstd/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libzstd.a +LOCAL_SRC_FILES := deps/$(APP_ABI)/Zstd/libzstd.a include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) @@ -96,18 +116,16 @@ LOCAL_C_INCLUDES := \ ../../src/script \ ../../lib/gmp \ ../../lib/jsoncpp \ - deps/Android/Curl/include \ - deps/Android/Freetype/include \ - deps/Android/Irrlicht/include \ - deps/Android/LevelDB/include \ - deps/Android/GetText/include \ - deps/Android/libiconv/include \ - deps/Android/libiconv/libcharset/include \ - deps/Android/LuaJIT/src \ - deps/Android/OpenAL-Soft/include \ - deps/Android/sqlite \ - deps/Android/Vorbis/include \ - deps/Android/Zstd/include + deps/$(APP_ABI)/Curl/include \ + deps/$(APP_ABI)/Freetype/include/freetype2 \ + deps/$(APP_ABI)/Irrlicht/include \ + deps/$(APP_ABI)/Gettext/include \ + deps/$(APP_ABI)/Iconv/include \ + deps/$(APP_ABI)/LuaJIT/include \ + deps/$(APP_ABI)/OpenAL-Soft/include \ + deps/$(APP_ABI)/SQLite/include \ + deps/$(APP_ABI)/Vorbis/include \ + deps/$(APP_ABI)/Zstd/include LOCAL_SRC_FILES := \ $(wildcard ../../src/client/*.cpp) \ @@ -190,24 +208,24 @@ LOCAL_SRC_FILES := \ ../../src/voxel.cpp \ ../../src/voxelalgorithms.cpp -# LevelDB backend is disabled -# ../../src/database/database-leveldb.cpp - # GMP LOCAL_SRC_FILES += ../../lib/gmp/mini-gmp.c # JSONCPP LOCAL_SRC_FILES += ../../lib/jsoncpp/jsoncpp.cpp -# iconv -LOCAL_SRC_FILES += \ - deps/Android/libiconv/lib/iconv.c \ - deps/Android/libiconv/libcharset/lib/localcharset.c - -# SQLite3 -LOCAL_SRC_FILES += deps/Android/sqlite/sqlite3.c - -LOCAL_STATIC_LIBRARIES += Curl Freetype Irrlicht OpenAL mbedTLS mbedx509 mbedcrypto Vorbis LuaJIT GetText Zstd android_native_app_glue $(PROFILER_LIBS) #LevelDB +LOCAL_STATIC_LIBRARIES += \ + Curl libmbedcrypto libmbedtls libmbedx509 \ + Freetype \ + Iconv libcharset \ + Irrlicht \ + LuaJIT \ + OpenAL \ + Gettext \ + SQLite3 \ + Vorbis libvorbisfile libogg \ + Zstd +LOCAL_STATIC_LIBRARIES += android_native_app_glue $(PROFILER_LIBS) LOCAL_LDLIBS := -lEGL -lGLESv1_CM -lGLESv2 -landroid -lOpenSLES diff --git a/android/native/jni/Application.mk b/android/native/jni/Application.mk index 82f0148f0..e21bca61c 100644 --- a/android/native/jni/Application.mk +++ b/android/native/jni/Application.mk @@ -5,22 +5,22 @@ NDK_TOOLCHAIN_VERSION := clang APP_SHORT_COMMANDS := true APP_MODULES := Minetest -APP_CPPFLAGS := -Ofast -fvisibility=hidden -fexceptions -Wno-deprecated-declarations -Wno-extra-tokens +APP_CPPFLAGS := -O2 -fvisibility=hidden ifeq ($(APP_ABI),armeabi-v7a) -APP_CPPFLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb +APP_CPPFLAGS += -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb endif -#ifeq ($(APP_ABI),x86) -#APP_CPPFLAGS += -march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32 -funroll-loops -#endif +ifeq ($(APP_ABI),x86) +APP_CPPFLAGS += -mssse3 -mfpmath=sse -funroll-loops +endif ifndef NDEBUG -APP_CPPFLAGS := -g -D_DEBUG -O0 -fno-omit-frame-pointer -fexceptions +APP_CPPFLAGS := -g -Og -fno-omit-frame-pointer endif -APP_CFLAGS := $(APP_CPPFLAGS) -Wno-parentheses-equality #-Werror=shorten-64-to-32 -APP_CXXFLAGS := $(APP_CPPFLAGS) -frtti -std=gnu++17 +APP_CFLAGS := $(APP_CPPFLAGS) -Wno-inconsistent-missing-override -Wno-parentheses-equality +APP_CXXFLAGS := $(APP_CPPFLAGS) -fexceptions -frtti -std=gnu++17 APP_LDFLAGS := -Wl,--no-warn-mismatch,--gc-sections,--icf=safe ifeq ($(APP_ABI),arm64-v8a) From ea1396f85693ee1f752219d91adcacb32041fc84 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Mon, 25 Oct 2021 21:56:25 +0200 Subject: [PATCH 041/412] Replace uses of which(1) with command -v --- android/gradlew | 2 +- util/buildbot/buildwin32.sh | 6 +++--- util/buildbot/buildwin64.sh | 6 +++--- util/updatepo.sh | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/android/gradlew b/android/gradlew index 83f2acfdc..25e0c1148 100755 --- a/android/gradlew +++ b/android/gradlew @@ -98,7 +98,7 @@ location of your Java installation." fi else JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + command -v java >/dev/null || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." diff --git a/util/buildbot/buildwin32.sh b/util/buildbot/buildwin32.sh index eceb5b788..c1edbfa1f 100755 --- a/util/buildbot/buildwin32.sh +++ b/util/buildbot/buildwin32.sh @@ -19,9 +19,9 @@ builddir="$( cd "$builddir" && pwd )" libdir=$builddir/libs # Test which win32 compiler is present -which i686-w64-mingw32-gcc &>/dev/null && +command -v i686-w64-mingw32-gcc >/dev/null && toolchain_file=$dir/toolchain_i686-w64-mingw32.cmake -which i686-w64-mingw32-gcc-posix &>/dev/null && +command -v i686-w64-mingw32-gcc-posix >/dev/null && toolchain_file=$dir/toolchain_i686-w64-mingw32-posix.cmake if [ -z "$toolchain_file" ]; then @@ -146,7 +146,7 @@ cmake -S $sourcedir -B . \ -DCURL_INCLUDE_DIR=$libdir/curl/include \ -DCURL_LIBRARY=$libdir/curl/lib/libcurl.dll.a \ \ - -DGETTEXT_MSGFMT=`which msgfmt` \ + -DGETTEXT_MSGFMT=`command -v msgfmt` \ -DGETTEXT_DLL="$gettext_dlls" \ -DGETTEXT_INCLUDE_DIR=$libdir/gettext/include \ -DGETTEXT_LIBRARY=$libdir/gettext/lib/libintl.dll.a \ diff --git a/util/buildbot/buildwin64.sh b/util/buildbot/buildwin64.sh index 68d2ebf0c..134bc08de 100755 --- a/util/buildbot/buildwin64.sh +++ b/util/buildbot/buildwin64.sh @@ -19,9 +19,9 @@ builddir="$( cd "$builddir" && pwd )" libdir=$builddir/libs # Test which win64 compiler is present -which x86_64-w64-mingw32-gcc &>/dev/null && +command -v x86_64-w64-mingw32-gcc >/dev/null && toolchain_file=$dir/toolchain_x86_64-w64-mingw32.cmake -which x86_64-w64-mingw32-gcc-posix &>/dev/null && +command -v x86_64-w64-mingw32-gcc-posix >/dev/null && toolchain_file=$dir/toolchain_x86_64-w64-mingw32-posix.cmake if [ -z "$toolchain_file" ]; then @@ -146,7 +146,7 @@ cmake -S $sourcedir -B . \ -DCURL_INCLUDE_DIR=$libdir/curl/include \ -DCURL_LIBRARY=$libdir/curl/lib/libcurl.dll.a \ \ - -DGETTEXT_MSGFMT=`which msgfmt` \ + -DGETTEXT_MSGFMT=`command -v msgfmt` \ -DGETTEXT_DLL="$gettext_dlls" \ -DGETTEXT_INCLUDE_DIR=$libdir/gettext/include \ -DGETTEXT_LIBRARY=$libdir/gettext/lib/libintl.dll.a \ diff --git a/util/updatepo.sh b/util/updatepo.sh index dbcb16fde..070a44be6 100755 --- a/util/updatepo.sh +++ b/util/updatepo.sh @@ -13,7 +13,7 @@ abort() { # this script is. Relative paths are fine for us so we can just # use the following trick (works both for manual invocations and for # script found from PATH) -scriptisin="$(dirname "$(which "$0")")" +scriptisin="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # The script is executed from the parent of po/, which is also the # parent of the script directory and of the src/ directory. From 0b95da7ad3f36ad49e3dfb9d7e919d5f9fc8f57a Mon Sep 17 00:00:00 2001 From: sfan5 Date: Mon, 25 Oct 2021 22:33:13 +0200 Subject: [PATCH 042/412] Automatically package MinGW runtime in buildbot --- .gitlab-ci.yml | 30 ++---------------------------- README.md | 1 + src/CMakeLists.txt | 10 +++++++--- util/buildbot/buildwin32.sh | 16 ++++++++++++---- util/buildbot/buildwin64.sh | 16 ++++++++++++---- 5 files changed, 34 insertions(+), 39 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5b085c36c..f1079c568 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -204,19 +204,6 @@ build:fedora-28: .build_win_template: extends: .generic_win_template stage: build - artifacts: - expire_in: 1h - paths: - - build/build/*.zip - -.package_win_template: - extends: .generic_win_template - stage: package - script: - - unzip build/build/*.zip - - cp -p /usr/${WIN_ARCH}-w64-mingw32/bin/libgcc*.dll minetest-*-win*/bin/ - - cp -p /usr/${WIN_ARCH}-w64-mingw32/bin/libstdc++*.dll minetest-*-win*/bin/ - - cp -p /usr/${WIN_ARCH}-w64-mingw32/bin/libwinpthread*.dll minetest-*-win*/bin/ artifacts: expire_in: 90 day paths: @@ -226,28 +213,15 @@ build:win32: extends: .build_win_template script: - EXISTING_MINETEST_DIR=$PWD ./util/buildbot/buildwin32.sh build + - unzip -q build/build/*.zip variables: WIN_ARCH: "i686" -package:win32: - extends: .package_win_template - needs: - - build:win32 - variables: - WIN_ARCH: "i686" - - build:win64: extends: .build_win_template script: - EXISTING_MINETEST_DIR=$PWD ./util/buildbot/buildwin64.sh build - variables: - WIN_ARCH: "x86_64" - -package:win64: - extends: .package_win_template - needs: - - build:win64 + - unzip -q build/build/*.zip variables: WIN_ARCH: "x86_64" diff --git a/README.md b/README.md index 372276b85..9322912cf 100644 --- a/README.md +++ b/README.md @@ -269,6 +269,7 @@ Library specific options: CURL_LIBRARY - Only if building with cURL; path to libcurl.a/libcurl.so/libcurl.lib EGL_INCLUDE_DIR - Only if building with GLES; directory that contains egl.h EGL_LIBRARY - Only if building with GLES; path to libEGL.a/libEGL.so + EXTRA_DLL - Only on Windows; optional paths to additional DLLs that should be packaged FREETYPE_INCLUDE_DIR_freetype2 - Only if building with FreeType 2; directory that contains an freetype directory with files such as ftimage.h in it FREETYPE_INCLUDE_DIR_ft2build - Only if building with FreeType 2; directory that contains ft2build.h FREETYPE_LIBRARY - Only if building with FreeType 2; path to libfreetype.a/libfreetype.so/freetype.lib diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7ae5c15d4..1549587b7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -278,10 +278,12 @@ if(WIN32) endif() set(PLATFORM_LIBS ws2_32.lib version.lib shlwapi.lib ${PLATFORM_LIBS}) + set(EXTRA_DLL "" CACHE FILEPATH "Optional paths to additional DLLs that should be packaged") + # DLLs are automatically copied to the output directory by vcpkg when VCPKG_APPLOCAL_DEPS=ON if(NOT VCPKG_APPLOCAL_DEPS) - find_file(ZLIB_DLL NAMES "" DOC "Path to Zlib DLL for installation (optional)") - find_file(ZSTD_DLL NAMES "" DOC "Path to Zstd DLL for installation (optional)") + set(ZLIB_DLL "" CACHE FILEPATH "Path to Zlib DLL for installation (optional)") + set(ZSTD_DLL "" CACHE FILEPATH "Path to Zstd DLL for installation (optional)") if(ENABLE_SOUND) set(OPENAL_DLL "" CACHE FILEPATH "Path to OpenAL32.dll for installation (optional)") set(OGG_DLL "" CACHE FILEPATH "Path to libogg.dll for installation (optional)") @@ -294,7 +296,6 @@ if(WIN32) set(LUA_DLL "" CACHE FILEPATH "Path to luajit-5.1.dll for installation (optional)") endif() endif() - else() # Unix probably if(BUILD_CLIENT) @@ -794,6 +795,9 @@ endif() # Installation if(WIN32) + if(EXTRA_DLL) + install(FILES ${EXTRA_DLL} DESTINATION ${BINDIR}) + endif() if(VCPKG_APPLOCAL_DEPS) # Collect the dll's from the output path install(DIRECTORY ${EXECUTABLE_OUTPUT_PATH}/Release/ diff --git a/util/buildbot/buildwin32.sh b/util/buildbot/buildwin32.sh index c1edbfa1f..66f299a6a 100755 --- a/util/buildbot/buildwin32.sh +++ b/util/buildbot/buildwin32.sh @@ -20,16 +20,24 @@ libdir=$builddir/libs # Test which win32 compiler is present command -v i686-w64-mingw32-gcc >/dev/null && - toolchain_file=$dir/toolchain_i686-w64-mingw32.cmake + compiler=i686-w64-mingw32-gcc command -v i686-w64-mingw32-gcc-posix >/dev/null && - toolchain_file=$dir/toolchain_i686-w64-mingw32-posix.cmake + compiler=i686-w64-mingw32-gcc-posix -if [ -z "$toolchain_file" ]; then +if [ -z "$compiler" ]; then echo "Unable to determine which mingw32 compiler to use" exit 1 fi +toolchain_file=$dir/toolchain_${compiler%-gcc}.cmake echo "Using $toolchain_file" +tmp=$(dirname "$(command -v $compiler)")/../i686-w64-mingw32/bin +runtime_dlls= +[ -d "$tmp" ] && runtime_dlls=$(echo $tmp/lib{gcc_,stdc++-,winpthread-}*.dll | tr ' ' ';') +[ -z "$runtime_dlls" ] && + echo "The compiler runtime DLLs could not be found, they might be missing in the final package." + +# Get stuff irrlicht_version=1.9.0mt3 ogg_version=1.3.4 vorbis_version=1.3.7 @@ -63,7 +71,6 @@ download () { fi } -# Get stuff cd $libdir download "https://github.com/minetest/irrlicht/releases/download/$irrlicht_version/win32.zip" irrlicht-$irrlicht_version.zip download "http://minetest.kitsunemimi.pw/zlib-$zlib_version-win32.zip" @@ -108,6 +115,7 @@ cmake -S $sourcedir -B . \ -DCMAKE_INSTALL_PREFIX=/tmp \ -DVERSION_EXTRA=$git_hash \ -DBUILD_CLIENT=1 -DBUILD_SERVER=0 \ + -DEXTRA_DLL="$runtime_dll" \ \ -DENABLE_SOUND=1 \ -DENABLE_CURL=1 \ diff --git a/util/buildbot/buildwin64.sh b/util/buildbot/buildwin64.sh index 134bc08de..e9b17c420 100755 --- a/util/buildbot/buildwin64.sh +++ b/util/buildbot/buildwin64.sh @@ -20,16 +20,24 @@ libdir=$builddir/libs # Test which win64 compiler is present command -v x86_64-w64-mingw32-gcc >/dev/null && - toolchain_file=$dir/toolchain_x86_64-w64-mingw32.cmake + compiler=x86_64-w64-mingw32 command -v x86_64-w64-mingw32-gcc-posix >/dev/null && - toolchain_file=$dir/toolchain_x86_64-w64-mingw32-posix.cmake + compiler=x86_64-w64-mingw32-posix -if [ -z "$toolchain_file" ]; then +if [ -z "$compiler" ]; then echo "Unable to determine which mingw32 compiler to use" exit 1 fi +toolchain_file=$dir/toolchain_${compiler%-gcc}.cmake echo "Using $toolchain_file" +tmp=$(dirname "$(command -v $compiler)")/../x86_64-w64-mingw32/bin +runtime_dlls= +[ -d "$tmp" ] && runtime_dlls=$(echo $tmp/lib{gcc_,stdc++-,winpthread-}*.dll | tr ' ' ';') +[ -z "$runtime_dlls" ] && + echo "The compiler runtime DLLs could not be found, they might be missing in the final package." + +# Get stuff irrlicht_version=1.9.0mt3 ogg_version=1.3.4 vorbis_version=1.3.7 @@ -63,7 +71,6 @@ download () { fi } -# Get stuff cd $libdir download "https://github.com/minetest/irrlicht/releases/download/$irrlicht_version/win64.zip" irrlicht-$irrlicht_version.zip download "http://minetest.kitsunemimi.pw/zlib-$zlib_version-win64.zip" @@ -108,6 +115,7 @@ cmake -S $sourcedir -B . \ -DCMAKE_INSTALL_PREFIX=/tmp \ -DVERSION_EXTRA=$git_hash \ -DBUILD_CLIENT=1 -DBUILD_SERVER=0 \ + -DEXTRA_DLL="$runtime_dll" \ \ -DENABLE_SOUND=1 \ -DENABLE_CURL=1 \ From 38ba813c55489595cd78ab2f952be2e954083cfa Mon Sep 17 00:00:00 2001 From: JosiahWI <41302989+JosiahWI@users.noreply.github.com> Date: Sun, 31 Oct 2021 17:33:11 -0500 Subject: [PATCH 043/412] Add variable to use existing IrrlichtMt build (#11656) Co-authored-by: SmallJoker --- CMakeLists.txt | 22 ++++++++++++++++++---- README.md | 11 +++++++---- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e542d3509..b41738c06 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,7 +52,6 @@ set(BUILD_CLIENT TRUE CACHE BOOL "Build client") set(BUILD_SERVER FALSE CACHE BOOL "Build server") set(BUILD_UNITTESTS TRUE CACHE BOOL "Build unittests") - set(WARN_ALL TRUE CACHE BOOL "Enable -Wall for Release build") if(NOT CMAKE_BUILD_TYPE) @@ -64,8 +63,21 @@ endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") +set(IRRLICHTMT_BUILD_DIR "" CACHE PATH "Path to IrrlichtMt build directory.") +if(NOT "${IRRLICHTMT_BUILD_DIR}" STREQUAL "") + find_package(IrrlichtMt QUIET + PATHS "${IRRLICHTMT_BUILD_DIR}" + NO_DEFAULT_PATH +) + + if(NOT TARGET IrrlichtMt::IrrlichtMt) + # find_package() searches certain subdirectories. ${PATH}/cmake is not + # the only one, but it is the one where IrrlichtMt is supposed to export + # IrrlichtMtConfig.cmake + message(FATAL_ERROR "Could not find IrrlichtMtConfig.cmake in ${IRRLICHTMT_BUILD_DIR}/cmake.") + endif() # This is done here so that relative search paths are more reasonable -if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/lib/irrlichtmt") +elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/lib/irrlichtmt") message(STATUS "Using user-provided IrrlichtMt at subdirectory 'lib/irrlichtmt'") if(BUILD_CLIENT) # tell IrrlichtMt to create a static library @@ -101,11 +113,13 @@ else() # Note that we can't use target_include_directories() since that doesn't work for IMPORTED targets before CMake 3.11 set_target_properties(IrrlichtMt::IrrlichtMt PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${IRRLICHT_INCLUDE_DIR}") - else() - message(STATUS "Found IrrlichtMt ${IrrlichtMt_VERSION}") endif() endif() +if(TARGET IrrlichtMt::IrrlichtMt) + message(STATUS "Found IrrlichtMt ${IrrlichtMt_VERSION}") +endif() + # Installation diff --git a/README.md b/README.md index 9322912cf..65dbd7e93 100644 --- a/README.md +++ b/README.md @@ -224,10 +224,13 @@ Run it: - Debug build is slower, but gives much more useful output in a debugger. - If you build a bare server you don't need to have the Irrlicht or IrrlichtMt library installed. - In that case use `-DIRRLICHT_INCLUDE_DIR=/some/where/irrlicht/include`. -- IrrlichtMt can also be installed somewhere that is not a standard install path. - - In that case use `-DCMAKE_PREFIX_PATH=/path/to/install_prefix` - - The path must be set so that `$(CMAKE_PREFIX_PATH)/lib/cmake/IrrlichtMt` exists - or that `$(CMAKE_PREFIX_PATH)` is the path of an IrrlichtMt build folder. + +- Minetest will use the IrrlichtMt package that is found first, given by the following order: + 1. Specified `IRRLICHTMT_BUILD_DIR` CMake variable + 2. `${PROJECT_SOURCE_DIR}/lib/irrlichtmt` (if existent) + 3. Installation of IrrlichtMt in the system-specific library paths + 4. For server builds with disabled `BUILD_CLIENT` variable, the headers from `IRRLICHT_INCLUDE_DIR` will be used. + - NOTE: Changing the IrrlichtMt build directory (includes system installs) requires regenerating the CMake cache (`rm CMakeCache.txt`) ### CMake options From 6910c8d920acedb3f1df1ac03a5cdf14f5fb6081 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Sun, 31 Oct 2021 22:33:33 +0000 Subject: [PATCH 044/412] Fix number of tool uses being off by 1..32767 (#11110) --- builtin/game/item.lua | 2 +- doc/lua_api.txt | 13 ++- games/devtest/mods/basetools/init.lua | 44 +++++--- .../basetools/textures/basetools_dirtpick.png | Bin 307 -> 0 bytes games/devtest/mods/util_commands/init.lua | 53 +++++++++ src/client/content_cao.cpp | 3 +- src/client/game.cpp | 3 +- src/network/serverpackethandler.cpp | 7 +- src/script/lua_api/l_object.cpp | 2 +- src/script/lua_api/l_util.cpp | 19 ++-- src/script/lua_api/l_util.h | 4 +- src/server/luaentity_sao.cpp | 8 +- src/server/luaentity_sao.h | 5 +- src/server/player_sao.cpp | 7 +- src/server/player_sao.h | 4 +- src/server/serveractiveobject.h | 7 +- src/tool.cpp | 101 +++++++++++++++--- src/tool.h | 18 ++-- 18 files changed, 229 insertions(+), 71 deletions(-) delete mode 100644 games/devtest/mods/basetools/textures/basetools_dirtpick.png diff --git a/builtin/game/item.lua b/builtin/game/item.lua index 039947584..c9ccb8801 100644 --- a/builtin/game/item.lua +++ b/builtin/game/item.lua @@ -613,7 +613,7 @@ function core.node_dig(pos, node, digger) if wielded then local wdef = wielded:get_definition() local tp = wielded:get_tool_capabilities() - local dp = core.get_dig_params(def and def.groups, tp) + local dp = core.get_dig_params(def and def.groups, tp, wielded:get_wear()) if wdef and wdef.after_use then wielded = wdef.after_use(wielded, digger, node, dp) or wielded else diff --git a/doc/lua_api.txt b/doc/lua_api.txt index e47df4686..f3007671b 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1953,8 +1953,9 @@ to implement this. ### Uses (tools only) Determines how many uses the tool has when it is used for digging a node, -of this group, of the maximum level. For lower leveled nodes, the use count -is multiplied by `3^leveldiff`. +of this group, of the maximum level. The maximum supported number of +uses is 65535. The special number 0 is used for infinite uses. +For lower leveled nodes, the use count is multiplied by `3^leveldiff`. `leveldiff` is the difference of the tool's `maxlevel` `groupcaps` and the node's `level` group. The node cannot be dug if `leveldiff` is less than zero. @@ -3475,8 +3476,8 @@ Helper functions * `minetest.pointed_thing_to_face_pos(placer, pointed_thing)`: returns a position. * returns the exact position on the surface of a pointed node -* `minetest.get_dig_params(groups, tool_capabilities)`: Simulates an item - that digs a node. +* `minetest.get_dig_params(groups, tool_capabilities [, wear])`: + Simulates an item that digs a node. Returns a table with the following fields: * `diggable`: `true` if node can be dug, `false` otherwise. * `time`: Time it would take to dig the node. @@ -3485,7 +3486,8 @@ Helper functions Parameters: * `groups`: Table of the node groups of the node that would be dug * `tool_capabilities`: Tool capabilities table of the item -* `minetest.get_hit_params(groups, tool_capabilities [, time_from_last_punch])`: + * `wear`: Amount of wear the tool starts with (default: 0) +* `minetest.get_hit_params(groups, tool_capabilities [, time_from_last_punch [, wear]])`: Simulates an item that punches an object. Returns a table with the following fields: * `hp`: How much damage the punch would cause. @@ -3494,6 +3496,7 @@ Helper functions * `groups`: Damage groups of the object * `tool_capabilities`: Tool capabilities table of the item * `time_from_last_punch`: time in seconds since last punch action + * `wear`: Amount of wear the item starts with (default: 0) diff --git a/games/devtest/mods/basetools/init.lua b/games/devtest/mods/basetools/init.lua index bd7480030..fd83b82eb 100644 --- a/games/devtest/mods/basetools/init.lua +++ b/games/devtest/mods/basetools/init.lua @@ -16,11 +16,11 @@ Tool types: Tool materials: -* Dirt: dig nodes of rating 3, one use only * Wood: dig nodes of rating 3 * Stone: dig nodes of rating 3 or 2 * Steel: dig nodes of rating 3, 2 or 1 * Mese: dig "everything" instantly +* n-Uses: can be used n times before breaking ]] -- The hand @@ -92,20 +92,6 @@ minetest.register_tool("basetools:pick_mese", { -- Pickaxes: Dig cracky -- --- This should break after only 1 use -minetest.register_tool("basetools:pick_dirt", { - description = "Dirt Pickaxe".."\n".. - "Digs cracky=3".."\n".. - "1 use only", - inventory_image = "basetools_dirtpick.png", - tool_capabilities = { - max_drop_level=0, - groupcaps={ - cracky={times={[3]=2.00}, uses=1, maxlevel=0} - }, - }, -}) - minetest.register_tool("basetools:pick_wood", { description = "Wooden Pickaxe".."\n".. "Digs cracky=3", @@ -348,3 +334,31 @@ minetest.register_tool("basetools:dagger_steel", { damage_groups = {fleshy=2}, } }) + +-- Test tool uses and punch_attack_uses +local uses = { 1, 2, 3, 5, 10, 50, 100, 1000, 10000, 65535 } +for i=1, #uses do + local u = uses[i] + local color = string.format("#FF00%02X", math.floor(((i-1)/#uses) * 255)) + minetest.register_tool("basetools:pick_uses_"..string.format("%05d", u), { + description = u.."-Uses Pickaxe".."\n".. + "Digs cracky=3", + inventory_image = "basetools_steelpick.png^[colorize:"..color..":127", + tool_capabilities = { + max_drop_level=0, + groupcaps={ + cracky={times={[3]=0.1, [2]=0.2, [1]=0.3}, uses=u, maxlevel=0} + }, + }, + }) + + minetest.register_tool("basetools:sword_uses_"..string.format("%05d", u), { + description = u.."-Uses Sword".."\n".. + "Damage: fleshy=1", + inventory_image = "basetools_woodsword.png^[colorize:"..color..":127", + tool_capabilities = { + damage_groups = {fleshy=1}, + punch_attack_uses = u, + }, + }) +end diff --git a/games/devtest/mods/basetools/textures/basetools_dirtpick.png b/games/devtest/mods/basetools/textures/basetools_dirtpick.png deleted file mode 100644 index 20a021d725d50c3f630d3b2318767adaed5d7e62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y$ZW{!3_UF&^$uA7AW$<)5S5Q zf-(7rzfwb%2EX7+9z)IZNgAG$lvXe@-s(zrx@#fTwMctY(^?ys57`b4lT7~K>-_mu z^N;4iBH>qOKtc@SiOTucIJc$=p0snxn!vtD!~Ntlr{o1@hoq8}MH)5KoD8*m?%j)+ z(ZHsyy^bZHlf(LawATJ>%hkL&m$zMUdfLX3nKJQ_#Kdnr{%@rAG^u|55^;fLbx?2C zr4iO3saB3I&nqd=RF;15#FCC4~aJ3+Hpuh|GbTvgWN*L;OV;$M@!c);@Ett zC2PaQNqr@kRm?t${y62{7%IG4QP-(|$rE0NzIm-n?}=^T0s5K2)78&qol`;+0FTsp ARR910 diff --git a/games/devtest/mods/util_commands/init.lua b/games/devtest/mods/util_commands/init.lua index ca5dca2d9..79acaa0d0 100644 --- a/games/devtest/mods/util_commands/init.lua +++ b/games/devtest/mods/util_commands/init.lua @@ -114,6 +114,59 @@ minetest.register_chatcommand("detach", { end, }) +minetest.register_chatcommand("use_tool", { + params = "(dig ) | (hit ) []", + description = "Apply tool wear a number of times, as if it were used for digging", + func = function(name, param) + local player = minetest.get_player_by_name(name) + if not player then + return false, "No player." + end + local mode, group, level, uses = string.match(param, "([a-z]+) ([a-z0-9]+) (-?%d+) (%d+)") + if not mode then + mode, group, level = string.match(param, "([a-z]+) ([a-z0-9]+) (-?%d+)") + uses = 1 + end + if not mode or not group or not level then + return false + end + if mode ~= "dig" and mode ~= "hit" then + return false + end + local tool = player:get_wielded_item() + local caps = tool:get_tool_capabilities() + if not caps or tool:get_count() == 0 then + return false, "No tool in hand." + end + local actual_uses = 0 + for u=1, uses do + local wear = tool:get_wear() + local dp + if mode == "dig" then + dp = minetest.get_dig_params({[group]=3, level=level}, caps, wear) + else + dp = minetest.get_hit_params({[group]=100}, caps, level, wear) + end + tool:add_wear(dp.wear) + actual_uses = actual_uses + 1 + if tool:get_count() == 0 then + break + end + end + player:set_wielded_item(tool) + if tool:get_count() == 0 then + return true, string.format("Tool used %d time(s). ".. + "The tool broke after %d use(s).", uses, actual_uses) + else + local wear = tool:get_wear() + return true, string.format("Tool used %d time(s). ".. + "Final wear=%d", uses, wear) + end + end, +}) + + + -- Use this to test waypoint capabilities minetest.register_chatcommand("test_waypoints", { params = "[change_immediate]", diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index 1e79d00c9..5c8465b22 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -1870,7 +1870,8 @@ bool GenericCAO::directReportPunch(v3f dir, const ItemStack *punchitem, m_armor_groups, toolcap, punchitem, - time_from_last_punch); + time_from_last_punch, + punchitem->wear); if(result.did_punch && result.damage != 0) { diff --git a/src/client/game.cpp b/src/client/game.cpp index 57951dc95..7f0aff49c 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -3619,7 +3619,8 @@ void Game::handleDigging(const PointedThing &pointed, const v3s16 &nodepos, // cheat detection. // Get digging parameters DigParams params = getDigParams(nodedef_manager->get(n).groups, - &selected_item.getToolCapabilities(itemdef_manager)); + &selected_item.getToolCapabilities(itemdef_manager), + selected_item.wear); // If can't dig, try hand if (!params.diggable) { diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index d4bef3ca2..c1ddb5005 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -1119,8 +1119,8 @@ void Server::handleCommand_Interact(NetworkPacket *pkt) float time_from_last_punch = playersao->resetTimeFromLastPunch(); - u16 wear = pointed_object->punch(dir, &toolcap, playersao, - time_from_last_punch); + u32 wear = pointed_object->punch(dir, &toolcap, playersao, + time_from_last_punch, tool_item.wear); // Callback may have changed item, so get it again playersao->getWieldedItem(&selected_item); @@ -1173,7 +1173,8 @@ void Server::handleCommand_Interact(NetworkPacket *pkt) // Get diggability and expected digging time DigParams params = getDigParams(m_nodedef->get(n).groups, - &selected_item.getToolCapabilities(m_itemdef)); + &selected_item.getToolCapabilities(m_itemdef), + selected_item.wear); // If can't dig, try hand if (!params.diggable) { params = getDigParams(m_nodedef->get(n).groups, diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index b7185f7ec..072b13d80 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -174,7 +174,7 @@ int ObjectRef::l_punch(lua_State *L) v3f dir = readParam(L, 5, sao->getBasePosition() - puncher->getBasePosition()); dir.normalize(); - u16 wear = sao->punch(dir, &toolcap, puncher, time_from_last_punch); + u32 wear = sao->punch(dir, &toolcap, puncher, time_from_last_punch); lua_pushnumber(L, wear); return 1; diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp index 2405cd90d..53319ccfd 100644 --- a/src/script/lua_api/l_util.cpp +++ b/src/script/lua_api/l_util.cpp @@ -160,28 +160,33 @@ int ModApiUtil::l_write_json(lua_State *L) return 1; } -// get_dig_params(groups, tool_capabilities) +// get_dig_params(groups, tool_capabilities[, wear]) int ModApiUtil::l_get_dig_params(lua_State *L) { NO_MAP_LOCK_REQUIRED; ItemGroupList groups; read_groups(L, 1, groups); ToolCapabilities tp = read_tool_capabilities(L, 2); - push_dig_params(L, getDigParams(groups, &tp)); + if (lua_isnoneornil(L, 3)) { + push_dig_params(L, getDigParams(groups, &tp)); + } else { + u16 wear = readParam(L, 3); + push_dig_params(L, getDigParams(groups, &tp, wear)); + } return 1; } -// get_hit_params(groups, tool_capabilities[, time_from_last_punch]) +// get_hit_params(groups, tool_capabilities[, time_from_last_punch, [, wear]]) int ModApiUtil::l_get_hit_params(lua_State *L) { NO_MAP_LOCK_REQUIRED; std::unordered_map groups; read_groups(L, 1, groups); ToolCapabilities tp = read_tool_capabilities(L, 2); - if(lua_isnoneornil(L, 3)) - push_hit_params(L, getHitParams(groups, &tp)); - else - push_hit_params(L, getHitParams(groups, &tp, readParam(L, 3))); + float time_from_last_punch = readParam(L, 3, 1000000); + int wear = readParam(L, 4, 0); + push_hit_params(L, getHitParams(groups, &tp, + time_from_last_punch, wear)); return 1; } diff --git a/src/script/lua_api/l_util.h b/src/script/lua_api/l_util.h index cc91e8d39..314e92f5c 100644 --- a/src/script/lua_api/l_util.h +++ b/src/script/lua_api/l_util.h @@ -50,10 +50,10 @@ private: // write_json(data[, styled]) static int l_write_json(lua_State *L); - // get_dig_params(groups, tool_capabilities[, time_from_last_punch]) + // get_dig_params(groups, tool_capabilities[, wear]) static int l_get_dig_params(lua_State *L); - // get_hit_params(groups, tool_capabilities[, time_from_last_punch]) + // get_hit_params(groups, tool_capabilities[, time_from_last_punch[, wear]]) static int l_get_hit_params(lua_State *L); // check_password_entry(name, entry, password) diff --git a/src/server/luaentity_sao.cpp b/src/server/luaentity_sao.cpp index 1d65ac306..82f6da231 100644 --- a/src/server/luaentity_sao.cpp +++ b/src/server/luaentity_sao.cpp @@ -305,10 +305,11 @@ void LuaEntitySAO::getStaticData(std::string *result) const *result = os.str(); } -u16 LuaEntitySAO::punch(v3f dir, +u32 LuaEntitySAO::punch(v3f dir, const ToolCapabilities *toolcap, ServerActiveObject *puncher, - float time_from_last_punch) + float time_from_last_punch, + u16 initial_wear) { if (!m_registered) { // Delete unknown LuaEntities when punched @@ -326,7 +327,8 @@ u16 LuaEntitySAO::punch(v3f dir, m_armor_groups, toolcap, &tool_item, - time_from_last_punch); + time_from_last_punch, + initial_wear); bool damage_handled = m_env->getScriptIface()->luaentity_Punch(m_id, puncher, time_from_last_punch, toolcap, dir, result.did_punch ? result.damage : 0); diff --git a/src/server/luaentity_sao.h b/src/server/luaentity_sao.h index 6883ae1b9..87b664a8b 100644 --- a/src/server/luaentity_sao.h +++ b/src/server/luaentity_sao.h @@ -44,9 +44,10 @@ public: bool isStaticAllowed() const { return m_prop.static_save; } bool shouldUnload() const { return true; } void getStaticData(std::string *result) const; - u16 punch(v3f dir, const ToolCapabilities *toolcap = nullptr, + u32 punch(v3f dir, const ToolCapabilities *toolcap = nullptr, ServerActiveObject *puncher = nullptr, - float time_from_last_punch = 1000000.0f); + float time_from_last_punch = 1000000.0f, + u16 initial_wear = 0); void rightClick(ServerActiveObject *clicker); void setPos(const v3f &pos); void moveTo(v3f pos, bool continuous); diff --git a/src/server/player_sao.cpp b/src/server/player_sao.cpp index 690823bb7..83e17f830 100644 --- a/src/server/player_sao.cpp +++ b/src/server/player_sao.cpp @@ -409,10 +409,11 @@ void PlayerSAO::setLookPitchAndSend(const float pitch) m_env->getGameDef()->SendMovePlayer(m_peer_id); } -u16 PlayerSAO::punch(v3f dir, +u32 PlayerSAO::punch(v3f dir, const ToolCapabilities *toolcap, ServerActiveObject *puncher, - float time_from_last_punch) + float time_from_last_punch, + u16 initial_wear) { if (!toolcap) return 0; @@ -430,7 +431,7 @@ u16 PlayerSAO::punch(v3f dir, s32 old_hp = getHP(); HitParams hitparams = getHitParams(m_armor_groups, toolcap, - time_from_last_punch); + time_from_last_punch, initial_wear); PlayerSAO *playersao = m_player->getPlayerSAO(); diff --git a/src/server/player_sao.h b/src/server/player_sao.h index 1429d7129..47fe85413 100644 --- a/src/server/player_sao.h +++ b/src/server/player_sao.h @@ -109,8 +109,8 @@ public: Interaction interface */ - u16 punch(v3f dir, const ToolCapabilities *toolcap, ServerActiveObject *puncher, - float time_from_last_punch); + u32 punch(v3f dir, const ToolCapabilities *toolcap, ServerActiveObject *puncher, + float time_from_last_punch, u16 initial_wear = 0); void rightClick(ServerActiveObject *clicker); void setHP(s32 hp, const PlayerHPChangeReason &reason) override { diff --git a/src/server/serveractiveobject.h b/src/server/serveractiveobject.h index 51f445914..5b0ee2d9b 100644 --- a/src/server/serveractiveobject.h +++ b/src/server/serveractiveobject.h @@ -145,11 +145,12 @@ public: virtual bool shouldUnload() const { return true; } - // Returns tool wear - virtual u16 punch(v3f dir, + // Returns added tool wear + virtual u32 punch(v3f dir, const ToolCapabilities *toolcap = nullptr, ServerActiveObject *puncher = nullptr, - float time_from_last_punch = 1000000.0f) + float time_from_last_punch = 1000000.0f, + u16 initial_wear = 0) { return 0; } virtual void rightClick(ServerActiveObject *clicker) {} diff --git a/src/tool.cpp b/src/tool.cpp index 3f639a69e..b0749286d 100644 --- a/src/tool.cpp +++ b/src/tool.cpp @@ -183,9 +183,74 @@ void ToolCapabilities::deserializeJson(std::istream &is) } } -DigParams getDigParams(const ItemGroupList &groups, - const ToolCapabilities *tp) +static u32 calculateResultWear(const u32 uses, const u16 initial_wear) { + if (uses == 0) { + // Trivial case: Infinite uses + return 0; + } + /* Finite uses. This is not trivial, + as the maximum wear is not neatly evenly divisible by + most possible uses numbers. For example, for 128 + uses, the calculation of wear is trivial, as + 65536 / 128 uses = 512 wear, + so the tool will get 512 wear 128 times in its lifetime. + But for a number like 130, this does not work: + 65536 / 130 uses = 504.123... wear. + Since wear must be an integer, we will get + 504*130 = 65520, which would lead to the wrong number + of uses. + + Instead, we partition the "wear range" into blocks: + A block represents a single use and can be + of two possible sizes: normal and oversized. + A normal block is equal to floor(65536 / uses). + An oversized block is a normal block plus 1. + Then we determine how many oversized and normal + blocks we need and finally, whether we add + the normal wear or the oversized wear. + + Example for 130 uses: + * Normal wear = 504 + * Number of normal blocks = 114 + * Oversized wear = 505 + * Number of oversized blocks = 16 + + If we add everything together, we get: + 114*504 + 16*505 = 65536 + */ + u32 result_wear; + u32 wear_normal = ((U16_MAX+1) / uses); + // Will be non-zero if its not evenly divisible + u16 blocks_oversize = (U16_MAX+1) % uses; + // Whether to add one extra wear point in case + // of oversized wear. + u16 wear_extra = 0; + if (blocks_oversize > 0) { + u16 blocks_normal = uses - blocks_oversize; + /* When the wear has reached this value, we + know that wear_normal has been applied + for blocks_normal times, therefore, + only oversized blocks remain. + This also implies the raw tool wear number + increases a bit faster after this point, + but this should be barely noticable by the + player. + */ + u16 wear_extra_at = blocks_normal * wear_normal; + if (initial_wear >= wear_extra_at) { + wear_extra = 1; + } + } + result_wear = wear_normal + wear_extra; + return result_wear; +} + +DigParams getDigParams(const ItemGroupList &groups, + const ToolCapabilities *tp, + const u16 initial_wear) +{ + // Group dig_immediate defaults to fixed time and no wear if (tp->groupcaps.find("dig_immediate") == tp->groupcaps.cend()) { switch (itemgroup_get(groups, "dig_immediate")) { @@ -201,7 +266,7 @@ DigParams getDigParams(const ItemGroupList &groups, // Values to be returned (with a bit of conversion) bool result_diggable = false; float result_time = 0.0; - float result_wear = 0.0; + u32 result_wear = 0; std::string result_main_group; int level = itemgroup_get(groups, "level"); @@ -224,20 +289,22 @@ DigParams getDigParams(const ItemGroupList &groups, if (!result_diggable || time < result_time) { result_time = time; result_diggable = true; - if (cap.uses != 0) - result_wear = 1.0 / cap.uses / pow(3.0, leveldiff); - else - result_wear = 0; + // The actual number of uses increases + // exponentially with leveldiff. + // If the levels are equal, real_uses equals cap.uses. + u32 real_uses = cap.uses * pow(3.0, leveldiff); + real_uses = MYMIN(real_uses, U16_MAX); + result_wear = calculateResultWear(real_uses, initial_wear); result_main_group = groupname; } } - u16 wear_i = U16_MAX * result_wear; - return DigParams(result_diggable, result_time, wear_i, result_main_group); + return DigParams(result_diggable, result_time, result_wear, result_main_group); } HitParams getHitParams(const ItemGroupList &armor_groups, - const ToolCapabilities *tp, float time_from_last_punch) + const ToolCapabilities *tp, float time_from_last_punch, + u16 initial_wear) { s16 damage = 0; float result_wear = 0.0f; @@ -249,10 +316,12 @@ HitParams getHitParams(const ItemGroupList &armor_groups, damage += damageGroup.second * punch_interval_multiplier * armor / 100.0; } - if (tp->punch_attack_uses > 0) - result_wear = 1.0f / tp->punch_attack_uses * punch_interval_multiplier; + if (tp->punch_attack_uses > 0) { + result_wear = calculateResultWear(tp->punch_attack_uses, initial_wear); + result_wear *= punch_interval_multiplier; + } - u16 wear_i = U16_MAX * result_wear; + u32 wear_i = (u32) result_wear; return {damage, wear_i}; } @@ -266,7 +335,8 @@ PunchDamageResult getPunchDamage( const ItemGroupList &armor_groups, const ToolCapabilities *toolcap, const ItemStack *punchitem, - float time_from_last_punch + float time_from_last_punch, + u16 initial_wear ){ bool do_hit = true; { @@ -286,7 +356,8 @@ PunchDamageResult getPunchDamage( if(do_hit) { HitParams hitparams = getHitParams(armor_groups, toolcap, - time_from_last_punch); + time_from_last_punch, + punchitem->wear); result.did_punch = true; result.wear = hitparams.wear; result.damage = hitparams.hp; diff --git a/src/tool.h b/src/tool.h index 59dd501f5..0e3388485 100644 --- a/src/tool.h +++ b/src/tool.h @@ -88,10 +88,10 @@ struct DigParams // Digging time in seconds float time; // Caused wear - u16 wear; + u32 wear; // u32 because wear could be 65536 (single-use tool) std::string main_group; - DigParams(bool a_diggable = false, float a_time = 0.0f, u16 a_wear = 0, + DigParams(bool a_diggable = false, float a_time = 0.0f, u32 a_wear = 0, const std::string &a_main_group = ""): diggable(a_diggable), time(a_time), @@ -101,21 +101,24 @@ struct DigParams }; DigParams getDigParams(const ItemGroupList &groups, - const ToolCapabilities *tp); + const ToolCapabilities *tp, + const u16 initial_wear = 0); struct HitParams { s16 hp; - u16 wear; + // Caused wear + u32 wear; // u32 because wear could be 65536 (single-use weapon) - HitParams(s16 hp_ = 0, u16 wear_ = 0): + HitParams(s16 hp_ = 0, u32 wear_ = 0): hp(hp_), wear(wear_) {} }; HitParams getHitParams(const ItemGroupList &armor_groups, - const ToolCapabilities *tp, float time_from_last_punch); + const ToolCapabilities *tp, float time_from_last_punch, + u16 initial_wear = 0); HitParams getHitParams(const ItemGroupList &armor_groups, const ToolCapabilities *tp); @@ -135,7 +138,8 @@ PunchDamageResult getPunchDamage( const ItemGroupList &armor_groups, const ToolCapabilities *toolcap, const ItemStack *punchitem, - float time_from_last_punch + float time_from_last_punch, + u16 initial_wear = 0 ); f32 getToolRange(const ItemDefinition &def_selected, const ItemDefinition &def_hand); From 693f98373bc4681d8eac1ab898f9ca9b9c9860d2 Mon Sep 17 00:00:00 2001 From: Riceball LEE Date: Mon, 1 Nov 2021 20:27:46 +0800 Subject: [PATCH 045/412] Localize error messages in mainmenu (#11495) Co-authored-by: sfan5 Co-authored-by: rubenwardy --- builtin/fstk/ui.lua | 2 +- src/client/camera.cpp | 23 +---------------- src/client/camera.h | 3 --- src/client/game.cpp | 37 +++++++++++++-------------- src/gettext.h | 29 +++++++++++++++++++++ src/unittest/CMakeLists.txt | 1 + src/unittest/test_gettext.cpp | 47 +++++++++++++++++++++++++++++++++++ util/updatepo.sh | 1 + 8 files changed, 97 insertions(+), 46 deletions(-) create mode 100644 src/unittest/test_gettext.cpp diff --git a/builtin/fstk/ui.lua b/builtin/fstk/ui.lua index 976659ed3..13f9cbec2 100644 --- a/builtin/fstk/ui.lua +++ b/builtin/fstk/ui.lua @@ -63,7 +63,7 @@ function ui.update() -- handle errors if gamedata ~= nil and gamedata.reconnect_requested then local error_message = core.formspec_escape( - gamedata.errormessage or "") + gamedata.errormessage or fgettext("")) formspec = { "size[14,8]", "real_coordinates[true]", diff --git a/src/client/camera.cpp b/src/client/camera.cpp index 1ce92f196..3712d77ea 100644 --- a/src/client/camera.cpp +++ b/src/client/camera.cpp @@ -37,6 +37,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "constants.h" #include "fontengine.h" #include "script/scripting_client.h" +#include "gettext.h" #define CAMERA_OFFSET_STEP 200 #define WIELDMESH_OFFSET_X 55.0f @@ -133,28 +134,6 @@ void Camera::notifyFovChange() } } -bool Camera::successfullyCreated(std::string &error_message) -{ - if (!m_playernode) { - error_message = "Failed to create the player scene node"; - } else if (!m_headnode) { - error_message = "Failed to create the head scene node"; - } else if (!m_cameranode) { - error_message = "Failed to create the camera scene node"; - } else if (!m_wieldmgr) { - error_message = "Failed to create the wielded item scene manager"; - } else if (!m_wieldnode) { - error_message = "Failed to create the wielded item scene node"; - } else { - error_message.clear(); - } - - if (m_client->modsLoaded()) - m_client->getScript()->on_camera_ready(this); - - return error_message.empty(); -} - // Returns the fractional part of x inline f32 my_modf(f32 x) { diff --git a/src/client/camera.h b/src/client/camera.h index bea9ab333..3e1cb4fdf 100644 --- a/src/client/camera.h +++ b/src/client/camera.h @@ -136,9 +136,6 @@ public: // Notify about new server-sent FOV and initialize smooth FOV transition void notifyFovChange(); - // Checks if the constructor was able to create the scene nodes - bool successfullyCreated(std::string &error_message); - // Step the camera: updates the viewing range and view bobbing. void step(f32 dtime); diff --git a/src/client/game.cpp b/src/client/game.cpp index 7f0aff49c..fb993d92f 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -1282,9 +1282,8 @@ bool Game::createSingleplayerServer(const std::string &map_dir, } if (bind_addr.isIPv6() && !g_settings->getBool("enable_ipv6")) { - *error_message = "Unable to listen on " + - bind_addr.serializeString() + - " because IPv6 is disabled"; + *error_message = fmtgettext("Unable to listen on %s because IPv6 is disabled", + bind_addr.serializeString().c_str()); errorstream << *error_message << std::endl; return false; } @@ -1317,7 +1316,7 @@ bool Game::createClient(const GameStartData &start_data) if (!could_connect) { if (error_message->empty() && !connect_aborted) { // Should not happen if error messages are set properly - *error_message = "Connection failed for unknown reason"; + *error_message = gettext("Connection failed for unknown reason"); errorstream << *error_message << std::endl; } return false; @@ -1326,7 +1325,7 @@ bool Game::createClient(const GameStartData &start_data) if (!getServerContent(&connect_aborted)) { if (error_message->empty() && !connect_aborted) { // Should not happen if error messages are set properly - *error_message = "Connection failed for unknown reason"; + *error_message = gettext("Connection failed for unknown reason"); errorstream << *error_message << std::endl; } return false; @@ -1342,8 +1341,8 @@ bool Game::createClient(const GameStartData &start_data) /* Camera */ camera = new Camera(*draw_control, client, m_rendering_engine); - if (!camera->successfullyCreated(*error_message)) - return false; + if (client->modsLoaded()) + client->getScript()->on_camera_ready(camera); client->setCamera(camera); /* Clouds @@ -1456,15 +1455,14 @@ bool Game::connectToServer(const GameStartData &start_data, local_server_mode = true; } } catch (ResolveError &e) { - *error_message = std::string("Couldn't resolve address: ") + e.what(); + *error_message = fmtgettext("Couldn't resolve address: %s", e.what()); + errorstream << *error_message << std::endl; return false; } if (connect_address.isIPv6() && !g_settings->getBool("enable_ipv6")) { - *error_message = "Unable to connect to " + - connect_address.serializeString() + - " because IPv6 is disabled"; + *error_message = fmtgettext("Unable to connect to %s because IPv6 is disabled", connect_address.serializeString().c_str()); errorstream << *error_message << std::endl; return false; } @@ -1518,8 +1516,7 @@ bool Game::connectToServer(const GameStartData &start_data, break; if (client->accessDenied()) { - *error_message = "Access denied. Reason: " - + client->accessDeniedReason(); + *error_message = fmtgettext("Access denied. Reason: %s", client->accessDeniedReason().c_str()); *reconnect_requested = client->reconnectRequested(); errorstream << *error_message << std::endl; break; @@ -1545,7 +1542,7 @@ bool Game::connectToServer(const GameStartData &start_data, wait_time += dtime; // Only time out if we aren't waiting for the server we started if (!start_data.address.empty() && wait_time > 10) { - *error_message = "Connection timed out."; + *error_message = gettext("Connection timed out."); errorstream << *error_message << std::endl; break; } @@ -1593,7 +1590,7 @@ bool Game::getServerContent(bool *aborted) return false; if (client->getState() < LC_Init) { - *error_message = "Client disconnected"; + *error_message = gettext("Client disconnected"); errorstream << *error_message << std::endl; return false; } @@ -1675,8 +1672,7 @@ inline void Game::updateInteractTimers(f32 dtime) inline bool Game::checkConnection() { if (client->accessDenied()) { - *error_message = "Access denied. Reason: " - + client->accessDeniedReason(); + *error_message = fmtgettext("Access denied. Reason: %s", client->accessDeniedReason().c_str()); *reconnect_requested = client->reconnectRequested(); errorstream << *error_message << std::endl; return false; @@ -4351,14 +4347,15 @@ void the_game(bool *kill, } } catch (SerializationError &e) { - error_message = std::string("A serialization error occurred:\n") - + e.what() + "\n\nThe server is probably " - " running a different version of " PROJECT_NAME_C "."; + const std::string ver_err = fmtgettext("The server is probably running a different version of %s.", PROJECT_NAME_C); + error_message = strgettext("A serialization error occurred:") +"\n" + + e.what() + "\n\n" + ver_err; errorstream << error_message << std::endl; } catch (ServerError &e) { error_message = e.what(); errorstream << "ServerError: " << error_message << std::endl; } catch (ModError &e) { + // DO NOT TRANSLATE the `ModError`, it's used by ui.lua error_message = std::string("ModError: ") + e.what() + strgettext("\nCheck debug.txt for details."); errorstream << error_message << std::endl; diff --git a/src/gettext.h b/src/gettext.h index 5a3654be4..67fd9244f 100644 --- a/src/gettext.h +++ b/src/gettext.h @@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "config.h" // for USE_GETTEXT #include +#include "porting.h" #if USE_GETTEXT #include @@ -77,3 +78,31 @@ inline std::wstring fwgettext(const char *src, Args&&... args) delete[] str; return std::wstring(buf); } + +/** + * Returns translated string with format args applied + * + * @tparam Args Template parameter for format args + * @param format Translation source string + * @param args Variable format args + * @return translated string. + */ +template +inline std::string fmtgettext(const char *format, Args&&... args) +{ + std::string buf; + std::size_t buf_size = 256; + buf.resize(buf_size); + + format = gettext(format); + + int len = porting::mt_snprintf(&buf[0], buf_size, format, std::forward(args)...); + if (len <= 0) throw std::runtime_error("gettext format error: " + std::string(format)); + if ((size_t)len >= buf.size()) { + buf.resize(len+1); // extra null byte + porting::mt_snprintf(&buf[0], buf.size(), format, std::forward(args)...); + } + buf.resize(len); // remove null bytes + + return buf; +} diff --git a/src/unittest/CMakeLists.txt b/src/unittest/CMakeLists.txt index 52f870901..4d295e4ed 100644 --- a/src/unittest/CMakeLists.txt +++ b/src/unittest/CMakeLists.txt @@ -33,6 +33,7 @@ set (UNITTEST_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/test_voxelarea.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_voxelalgorithms.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_voxelmanipulator.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_gettext.cpp PARENT_SCOPE) set (UNITTEST_CLIENT_SRCS diff --git a/src/unittest/test_gettext.cpp b/src/unittest/test_gettext.cpp new file mode 100644 index 000000000..98f73ec62 --- /dev/null +++ b/src/unittest/test_gettext.cpp @@ -0,0 +1,47 @@ +#include "test.h" +#include "porting.h" +#include "gettext.h" + +class TestGettext : public TestBase +{ +public: + TestGettext() { + TestManager::registerTestModule(this); + } + + const char *getName() { return "TestGettext"; } + + void runTests(IGameDef *gamedef); + + void testSnfmtgettext(); + void testFmtgettext(); +}; + +static TestGettext g_test_instance; + +void TestGettext::runTests(IGameDef *gamedef) +{ + TEST(testFmtgettext); +} + +void TestGettext::testFmtgettext() +{ + std::string buf = fmtgettext("Viewing range changed to %d", 12); + UASSERTEQ(std::string, buf, "Viewing range changed to 12"); + buf = fmtgettext( + "You are about to join this server with the name \"%s\" for the " + "first time.\n" + "If you proceed, a new account using your credentials will be " + "created on this server.\n" + "Please retype your password and click 'Register and Join' to " + "confirm account creation, or click 'Cancel' to abort." + , "A"); + UASSERTEQ(std::string, buf, + "You are about to join this server with the name \"A\" for the " + "first time.\n" + "If you proceed, a new account using your credentials will be " + "created on this server.\n" + "Please retype your password and click 'Register and Join' to " + "confirm account creation, or click 'Cancel' to abort." + ); +} diff --git a/util/updatepo.sh b/util/updatepo.sh index 070a44be6..23e2c61e9 100755 --- a/util/updatepo.sh +++ b/util/updatepo.sh @@ -61,6 +61,7 @@ xgettext --package-name=minetest \ --keyword=wstrgettext \ --keyword=core.gettext \ --keyword=showTranslatedStatusText \ + --keyword=fmtgettext \ --output $potfile \ --from-code=utf-8 \ `find src/ -name '*.cpp' -o -name '*.h'` \ From 6db914780ed6e27d9876763d561ea0daafe01f4f Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 5 Nov 2021 11:12:56 +0100 Subject: [PATCH 046/412] Fix typo in buildbot scripts --- util/buildbot/buildwin32.sh | 2 +- util/buildbot/buildwin64.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/util/buildbot/buildwin32.sh b/util/buildbot/buildwin32.sh index 66f299a6a..bbeab3a3f 100755 --- a/util/buildbot/buildwin32.sh +++ b/util/buildbot/buildwin32.sh @@ -115,7 +115,7 @@ cmake -S $sourcedir -B . \ -DCMAKE_INSTALL_PREFIX=/tmp \ -DVERSION_EXTRA=$git_hash \ -DBUILD_CLIENT=1 -DBUILD_SERVER=0 \ - -DEXTRA_DLL="$runtime_dll" \ + -DEXTRA_DLL="$runtime_dlls" \ \ -DENABLE_SOUND=1 \ -DENABLE_CURL=1 \ diff --git a/util/buildbot/buildwin64.sh b/util/buildbot/buildwin64.sh index e9b17c420..2bc127896 100755 --- a/util/buildbot/buildwin64.sh +++ b/util/buildbot/buildwin64.sh @@ -115,7 +115,7 @@ cmake -S $sourcedir -B . \ -DCMAKE_INSTALL_PREFIX=/tmp \ -DVERSION_EXTRA=$git_hash \ -DBUILD_CLIENT=1 -DBUILD_SERVER=0 \ - -DEXTRA_DLL="$runtime_dll" \ + -DEXTRA_DLL="$runtime_dlls" \ \ -DENABLE_SOUND=1 \ -DENABLE_CURL=1 \ From cbf658f83d206bf340ab4aa8eab02b058e9b293f Mon Sep 17 00:00:00 2001 From: Elijah Duffy Date: Wed, 10 Nov 2021 10:10:20 -0800 Subject: [PATCH 047/412] Lua API: Add `rmdir`, `cpdir` and `mvdir` (#9638) Co-authored-by: rubenwardy --- doc/lua_api.txt | 13 ++++++++++ src/script/lua_api/l_util.cpp | 49 +++++++++++++++++++++++++++++++++++ src/script/lua_api/l_util.h | 9 +++++++ 3 files changed, 71 insertions(+) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index f3007671b..3b9f4c339 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -4624,6 +4624,19 @@ Utilities * `minetest.mkdir(path)`: returns success. * Creates a directory specified by `path`, creating parent directories if they don't exist. +* `minetest.rmdir(path, recursive)`: returns success. + * Removes a directory specified by `path`. + * If `recursive` is set to `true`, the directory is recursively removed. + Otherwise, the directory will only be removed if it is empty. + * Returns true on success, false on failure. +* `minetest.cpdir(source, destination)`: returns success. + * Copies a directory specified by `path` to `destination` + * Any files in `destination` will be overwritten if they already exist. + * Returns true on success, false on failure. +* `minetest.mvdir(source, destination)`: returns success. + * Moves a directory specified by `path` to `destination`. + * If the `destination` is a non-empty directory, then the move will fail. + * Returns true on success, false on failure. * `minetest.get_dir_list(path, [is_dir])`: returns list of entry names * is_dir is one of: * nil: return all entries, diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp index 53319ccfd..528d9c6dd 100644 --- a/src/script/lua_api/l_util.cpp +++ b/src/script/lua_api/l_util.cpp @@ -349,6 +349,49 @@ int ModApiUtil::l_mkdir(lua_State *L) return 1; } +// rmdir(path, recursive) +int ModApiUtil::l_rmdir(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + const char *path = luaL_checkstring(L, 1); + CHECK_SECURE_PATH(L, path, true); + + bool recursive = readParam(L, 2, false); + + if (recursive) + lua_pushboolean(L, fs::RecursiveDelete(path)); + else + lua_pushboolean(L, fs::DeleteSingleFileOrEmptyDirectory(path)); + + return 1; +} + +// cpdir(source, destination) +int ModApiUtil::l_cpdir(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + const char *source = luaL_checkstring(L, 1); + const char *destination = luaL_checkstring(L, 2); + CHECK_SECURE_PATH(L, source, false); + CHECK_SECURE_PATH(L, destination, true); + + lua_pushboolean(L, fs::CopyDir(source, destination)); + return 1; +} + +// mpdir(source, destination) +int ModApiUtil::l_mvdir(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + const char *source = luaL_checkstring(L, 1); + const char *destination = luaL_checkstring(L, 2); + CHECK_SECURE_PATH(L, source, true); + CHECK_SECURE_PATH(L, destination, true); + + lua_pushboolean(L, fs::MoveDir(source, destination)); + return 1; +} + // get_dir_list(path, is_dir) int ModApiUtil::l_get_dir_list(lua_State *L) { @@ -588,6 +631,9 @@ void ModApiUtil::Initialize(lua_State *L, int top) API_FCT(decompress); API_FCT(mkdir); + API_FCT(rmdir); + API_FCT(cpdir); + API_FCT(mvdir); API_FCT(get_dir_list); API_FCT(safe_file_write); @@ -651,6 +697,9 @@ void ModApiUtil::InitializeAsync(lua_State *L, int top) API_FCT(decompress); API_FCT(mkdir); + API_FCT(rmdir); + API_FCT(cpdir); + API_FCT(mvdir); API_FCT(get_dir_list); API_FCT(encode_base64); diff --git a/src/script/lua_api/l_util.h b/src/script/lua_api/l_util.h index 314e92f5c..fcf8a1057 100644 --- a/src/script/lua_api/l_util.h +++ b/src/script/lua_api/l_util.h @@ -80,6 +80,15 @@ private: // mkdir(path) static int l_mkdir(lua_State *L); + // rmdir(path, recursive) + static int l_rmdir(lua_State *L); + + // cpdir(source, destination, remove_source) + static int l_cpdir(lua_State *L); + + // mvdir(source, destination) + static int l_mvdir(lua_State *L); + // get_dir_list(path, is_dir) static int l_get_dir_list(lua_State *L); From c510037e9a334b3327a6d6b066203618051e4a09 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 7 Nov 2021 17:50:57 +0100 Subject: [PATCH 048/412] Fix compiler detection in buildbot it was just half-broken before... --- util/buildbot/buildwin32.sh | 4 ++-- util/buildbot/buildwin64.sh | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/util/buildbot/buildwin32.sh b/util/buildbot/buildwin32.sh index bbeab3a3f..cdf6105d1 100755 --- a/util/buildbot/buildwin32.sh +++ b/util/buildbot/buildwin32.sh @@ -25,10 +25,10 @@ command -v i686-w64-mingw32-gcc-posix >/dev/null && compiler=i686-w64-mingw32-gcc-posix if [ -z "$compiler" ]; then - echo "Unable to determine which mingw32 compiler to use" + echo "Unable to determine which MinGW compiler to use" exit 1 fi -toolchain_file=$dir/toolchain_${compiler%-gcc}.cmake +toolchain_file=$dir/toolchain_${compiler/-gcc/}.cmake echo "Using $toolchain_file" tmp=$(dirname "$(command -v $compiler)")/../i686-w64-mingw32/bin diff --git a/util/buildbot/buildwin64.sh b/util/buildbot/buildwin64.sh index 2bc127896..f8ff3cfdd 100755 --- a/util/buildbot/buildwin64.sh +++ b/util/buildbot/buildwin64.sh @@ -20,15 +20,15 @@ libdir=$builddir/libs # Test which win64 compiler is present command -v x86_64-w64-mingw32-gcc >/dev/null && - compiler=x86_64-w64-mingw32 + compiler=x86_64-w64-mingw32-gcc command -v x86_64-w64-mingw32-gcc-posix >/dev/null && - compiler=x86_64-w64-mingw32-posix + compiler=x86_64-w64-mingw32-gcc-posix if [ -z "$compiler" ]; then - echo "Unable to determine which mingw32 compiler to use" + echo "Unable to determine which MinGW compiler to use" exit 1 fi -toolchain_file=$dir/toolchain_${compiler%-gcc}.cmake +toolchain_file=$dir/toolchain_${compiler/-gcc/}.cmake echo "Using $toolchain_file" tmp=$(dirname "$(command -v $compiler)")/../x86_64-w64-mingw32/bin From c9070e54bc5b3a99d941a3afd24d262f8925a962 Mon Sep 17 00:00:00 2001 From: savilli <78875209+savilli@users.noreply.github.com> Date: Sat, 20 Nov 2021 01:31:04 +0300 Subject: [PATCH 049/412] Fix local digging animation (#11772) --- src/client/content_cao.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index 5c8465b22..bb78b594d 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -996,12 +996,14 @@ void GenericCAO::step(float dtime, ClientEnvironment *env) m_velocity = v3f(0,0,0); m_acceleration = v3f(0,0,0); const PlayerControl &controls = player->getPlayerControl(); + f32 new_speed = player->local_animation_speed; bool walking = false; - if (controls.movement_speed > 0.001f) + if (controls.movement_speed > 0.001f) { + new_speed *= controls.movement_speed; walking = true; + } - f32 new_speed = player->local_animation_speed; v2s32 new_anim = v2s32(0,0); bool allow_update = false; @@ -1016,7 +1018,6 @@ void GenericCAO::step(float dtime, ClientEnvironment *env) // slowdown speed if sneaking if (controls.sneak && walking) new_speed /= 2; - new_speed *= controls.movement_speed; if (walking && (controls.dig || controls.place)) { new_anim = player->local_animations[3]; From e35cfa589a11bbfbdbe9c815553842b472da2b41 Mon Sep 17 00:00:00 2001 From: Andrew Kerr <79798289+andkerr@users.noreply.github.com> Date: Fri, 19 Nov 2021 17:31:15 -0500 Subject: [PATCH 050/412] Add macOS build docs (#11757) --- README.md | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 65dbd7e93..009ae8d38 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,7 @@ For Debian/Ubuntu users: For Fedora users: sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libcurl-devel openal-soft-devel libvorbis-devel libXxf86vm-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel spatialindex-devel libzstd-devel - + For Arch users: sudo pacman -S base-devel libcurl-gnutls cmake libxxf86vm libpng sqlite libogg libvorbis openal freetype2 jsoncpp gmp luajit leveldb ncurses zstd @@ -386,6 +386,61 @@ Build the binaries as described above, but make sure you unselect `RUN_IN_PLACE` Open the generated project file with Visual Studio. Right-click **Package** and choose **Generate**. It may take some minutes to generate the installer. +### Compiling on MacOS + +#### Requirements +- [Homebrew](https://brew.sh/) +- [Git](https://git-scm.com/downloads) + +Install dependencies with homebrew: + +``` +brew install cmake freetype gettext gmp hiredis jpeg jsoncpp leveldb libogg libpng libvorbis luajit zstd +``` + +#### Download + +Download source (this is the URL to the latest of source repository, which might not work at all times) using Git: + +```bash +git clone --depth 1 https://github.com/minetest/minetest.git +cd minetest +``` + +Download minetest_game (otherwise only the "Development Test" game is available) using Git: + +``` +git clone --depth 1 https://github.com/minetest/minetest_game.git games/minetest_game +``` + +Download Minetest's fork of Irrlicht: + +``` +git clone --depth 1 https://github.com/minetest/irrlicht.git lib/irrlichtmt +``` + +#### Build + +```bash +mkdir cmakebuild +cd cmakebuild + +cmake .. \ + -DCMAKE_OSX_DEPLOYMENT_TARGET=10.14 \ + -DCMAKE_FIND_FRAMEWORK=LAST \ + -DCMAKE_INSTALL_PREFIX=../build/macos/ \ + -DRUN_IN_PLACE=FALSE \ + -DENABLE_FREETYPE=TRUE -DENABLE_GETTEXT=TRUE + +make -j$(nproc) +make install +``` + +#### Run + +``` +open ./build/macos/minetest.app +``` Docker ------ From 52bfbf6ed02e16d11f353c4066a0f4129d045e15 Mon Sep 17 00:00:00 2001 From: ExeVirus <44562154+ExeVirus@users.noreply.github.com> Date: Mon, 22 Nov 2021 12:26:46 -0500 Subject: [PATCH 051/412] Allow for Game-Specific Menu Music (#11241) --- builtin/mainmenu/dlg_create_world.lua | 2 +- .../mainmenu/{textures.lua => game_theme.lua} | 98 +++++++++++-------- builtin/mainmenu/init.lua | 8 +- builtin/mainmenu/tab_local.lua | 12 +-- builtin/mainmenu/tab_settings.lua | 2 +- doc/lua_api.txt | 10 ++ src/gui/guiEngine.cpp | 26 +++-- 7 files changed, 95 insertions(+), 63 deletions(-) rename builtin/mainmenu/{textures.lua => game_theme.lua} (57%) diff --git a/builtin/mainmenu/dlg_create_world.lua b/builtin/mainmenu/dlg_create_world.lua index 1938747fe..5456eb3eb 100644 --- a/builtin/mainmenu/dlg_create_world.lua +++ b/builtin/mainmenu/dlg_create_world.lua @@ -393,7 +393,7 @@ local function create_world_buttonhandler(this, fields) core.settings:set("menu_last_game",pkgmgr.games[gameindex].id) if this.data.update_worldlist_filter then menudata.worldlist:set_filtercriteria(pkgmgr.games[gameindex].id) - mm_texture.update("singleplayer", pkgmgr.games[gameindex].id) + mm_game_theme.update("singleplayer", pkgmgr.games[gameindex].id) end menudata.worldlist:refresh() core.settings:set("mainmenu_last_selected_world", diff --git a/builtin/mainmenu/textures.lua b/builtin/mainmenu/game_theme.lua similarity index 57% rename from builtin/mainmenu/textures.lua rename to builtin/mainmenu/game_theme.lua index a3acbbdec..f8deb29a1 100644 --- a/builtin/mainmenu/textures.lua +++ b/builtin/mainmenu/game_theme.lua @@ -16,23 +16,25 @@ --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -mm_texture = {} +mm_game_theme = {} -------------------------------------------------------------------------------- -function mm_texture.init() - mm_texture.defaulttexturedir = core.get_texturepath() .. DIR_DELIM .. "base" .. +function mm_game_theme.init() + mm_game_theme.defaulttexturedir = core.get_texturepath() .. DIR_DELIM .. "base" .. DIR_DELIM .. "pack" .. DIR_DELIM - mm_texture.basetexturedir = mm_texture.defaulttexturedir + mm_game_theme.basetexturedir = mm_game_theme.defaulttexturedir - mm_texture.texturepack = core.settings:get("texture_path") + mm_game_theme.texturepack = core.settings:get("texture_path") - mm_texture.gameid = nil + mm_game_theme.gameid = nil + + mm_game_theme.music_handle = nil end -------------------------------------------------------------------------------- -function mm_texture.update(tab,gamedetails) +function mm_game_theme.update(tab,gamedetails) if tab ~= "singleplayer" then - mm_texture.reset() + mm_game_theme.reset() return end @@ -40,50 +42,54 @@ function mm_texture.update(tab,gamedetails) return end - mm_texture.update_game(gamedetails) + mm_game_theme.update_game(gamedetails) end -------------------------------------------------------------------------------- -function mm_texture.reset() - mm_texture.gameid = nil +function mm_game_theme.reset() + mm_game_theme.gameid = nil local have_bg = false - local have_overlay = mm_texture.set_generic("overlay") + local have_overlay = mm_game_theme.set_generic("overlay") if not have_overlay then - have_bg = mm_texture.set_generic("background") + have_bg = mm_game_theme.set_generic("background") end - mm_texture.clear("header") - mm_texture.clear("footer") + mm_game_theme.clear("header") + mm_game_theme.clear("footer") core.set_clouds(false) - mm_texture.set_generic("footer") - mm_texture.set_generic("header") + mm_game_theme.set_generic("footer") + mm_game_theme.set_generic("header") if not have_bg then if core.settings:get_bool("menu_clouds") then core.set_clouds(true) else - mm_texture.set_dirt_bg() + mm_game_theme.set_dirt_bg() end end + + if mm_game_theme.music_handle ~= nil then + core.sound_stop(mm_game_theme.music_handle) + end end -------------------------------------------------------------------------------- -function mm_texture.update_game(gamedetails) - if mm_texture.gameid == gamedetails.id then +function mm_game_theme.update_game(gamedetails) + if mm_game_theme.gameid == gamedetails.id then return end local have_bg = false - local have_overlay = mm_texture.set_game("overlay",gamedetails) + local have_overlay = mm_game_theme.set_game("overlay",gamedetails) if not have_overlay then - have_bg = mm_texture.set_game("background",gamedetails) + have_bg = mm_game_theme.set_game("background",gamedetails) end - mm_texture.clear("header") - mm_texture.clear("footer") + mm_game_theme.clear("header") + mm_game_theme.clear("footer") core.set_clouds(false) if not have_bg then @@ -91,34 +97,34 @@ function mm_texture.update_game(gamedetails) if core.settings:get_bool("menu_clouds") then core.set_clouds(true) else - mm_texture.set_dirt_bg() + mm_game_theme.set_dirt_bg() end end - mm_texture.set_game("footer",gamedetails) - mm_texture.set_game("header",gamedetails) + mm_game_theme.set_game("footer",gamedetails) + mm_game_theme.set_game("header",gamedetails) - mm_texture.gameid = gamedetails.id + mm_game_theme.gameid = gamedetails.id end -------------------------------------------------------------------------------- -function mm_texture.clear(identifier) +function mm_game_theme.clear(identifier) core.set_background(identifier,"") end -------------------------------------------------------------------------------- -function mm_texture.set_generic(identifier) +function mm_game_theme.set_generic(identifier) --try texture pack first - if mm_texture.texturepack ~= nil then - local path = mm_texture.texturepack .. DIR_DELIM .."menu_" .. + if mm_game_theme.texturepack ~= nil then + local path = mm_game_theme.texturepack .. DIR_DELIM .."menu_" .. identifier .. ".png" if core.set_background(identifier,path) then return true end end - if mm_texture.defaulttexturedir ~= nil then - local path = mm_texture.defaulttexturedir .. DIR_DELIM .."menu_" .. + if mm_game_theme.defaulttexturedir ~= nil then + local path = mm_game_theme.defaulttexturedir .. DIR_DELIM .."menu_" .. identifier .. ".png" if core.set_background(identifier,path) then return true @@ -129,14 +135,16 @@ function mm_texture.set_generic(identifier) end -------------------------------------------------------------------------------- -function mm_texture.set_game(identifier, gamedetails) +function mm_game_theme.set_game(identifier, gamedetails) if gamedetails == nil then return false end - if mm_texture.texturepack ~= nil then - local path = mm_texture.texturepack .. DIR_DELIM .. + mm_game_theme.set_music(gamedetails) + + if mm_game_theme.texturepack ~= nil then + local path = mm_game_theme.texturepack .. DIR_DELIM .. gamedetails.id .. "_menu_" .. identifier .. ".png" if core.set_background(identifier, path) then return true @@ -171,9 +179,10 @@ function mm_texture.set_game(identifier, gamedetails) return false end -function mm_texture.set_dirt_bg() - if mm_texture.texturepack ~= nil then - local path = mm_texture.texturepack .. DIR_DELIM .."default_dirt.png" +-------------------------------------------------------------------------------- +function mm_game_theme.set_dirt_bg() + if mm_game_theme.texturepack ~= nil then + local path = mm_game_theme.texturepack .. DIR_DELIM .."default_dirt.png" if core.set_background("background", path, true, 128) then return true end @@ -183,3 +192,12 @@ function mm_texture.set_dirt_bg() local minimalpath = defaulttexturedir .. "menu_bg.png" core.set_background("background", minimalpath, true, 128) end + +-------------------------------------------------------------------------------- +function mm_game_theme.set_music(gamedetails) + if mm_game_theme.music_handle ~= nil then + core.sound_stop(mm_game_theme.music_handle) + end + local music_path = gamedetails.path .. DIR_DELIM .. "menu" .. DIR_DELIM .. "theme" + mm_game_theme.music_handle = core.sound_play(music_path, true) +end diff --git a/builtin/mainmenu/init.lua b/builtin/mainmenu/init.lua index 0c8578cd6..8e716c2eb 100644 --- a/builtin/mainmenu/init.lua +++ b/builtin/mainmenu/init.lua @@ -35,7 +35,7 @@ dofile(menupath .. DIR_DELIM .. "async_event.lua") dofile(menupath .. DIR_DELIM .. "common.lua") dofile(menupath .. DIR_DELIM .. "pkgmgr.lua") dofile(menupath .. DIR_DELIM .. "serverlistmgr.lua") -dofile(menupath .. DIR_DELIM .. "textures.lua") +dofile(menupath .. DIR_DELIM .. "game_theme.lua") dofile(menupath .. DIR_DELIM .. "dlg_config_world.lua") dofile(menupath .. DIR_DELIM .. "dlg_settings_advanced.lua") @@ -87,7 +87,7 @@ local function init_globals() core.settings:set("menu_last_game", default_game) end - mm_texture.init() + mm_game_theme.init() -- Create main tabview local tv_main = tabview_create("maintab", {x = 12, y = 5.4}, {x = 0, y = 0}) @@ -113,7 +113,7 @@ local function init_globals() if tv_main.current_tab == "local" then local game = pkgmgr.find_by_gameid(core.settings:get("menu_last_game")) if game == nil then - mm_texture.reset() + mm_game_theme.reset() end end @@ -121,8 +121,6 @@ local function init_globals() tv_main:show() ui.update() - - core.sound_play("main_menu", true) end init_globals() diff --git a/builtin/mainmenu/tab_local.lua b/builtin/mainmenu/tab_local.lua index be5f905ac..2d1a616a8 100644 --- a/builtin/mainmenu/tab_local.lua +++ b/builtin/mainmenu/tab_local.lua @@ -54,7 +54,7 @@ if enable_gamebar then for key,value in pairs(fields) do for j=1,#pkgmgr.games,1 do if ("game_btnbar_" .. pkgmgr.games[j].id == key) then - mm_texture.update("singleplayer", pkgmgr.games[j]) + mm_game_theme.update("singleplayer", pkgmgr.games[j]) core.set_topleft_text(pkgmgr.games[j].name) core.settings:set("menu_last_game",pkgmgr.games[j].id) menudata.worldlist:set_filtercriteria(pkgmgr.games[j].id) @@ -323,7 +323,7 @@ local function main_button_handler(this, fields, name, tabdata) create_world_dlg:set_parent(this) this:hide() create_world_dlg:show() - mm_texture.update("singleplayer", current_game()) + mm_game_theme.update("singleplayer", current_game()) return true end @@ -340,7 +340,7 @@ local function main_button_handler(this, fields, name, tabdata) delete_world_dlg:set_parent(this) this:hide() delete_world_dlg:show() - mm_texture.update("singleplayer",current_game()) + mm_game_theme.update("singleplayer",current_game()) end end @@ -358,7 +358,7 @@ local function main_button_handler(this, fields, name, tabdata) configdialog:set_parent(this) this:hide() configdialog:show() - mm_texture.update("singleplayer",current_game()) + mm_game_theme.update("singleplayer",current_game()) end end @@ -375,7 +375,7 @@ if enable_gamebar then if game then menudata.worldlist:set_filtercriteria(game.id) core.set_topleft_text(game.name) - mm_texture.update("singleplayer",game) + mm_game_theme.update("singleplayer",game) end singleplayer_refresh_gamebar() @@ -387,7 +387,7 @@ if enable_gamebar then gamebar:hide() end core.set_topleft_text("") - mm_texture.update(new_tab,nil) + mm_game_theme.update(new_tab,nil) end end end diff --git a/builtin/mainmenu/tab_settings.lua b/builtin/mainmenu/tab_settings.lua index f06e35872..29f3c9b62 100644 --- a/builtin/mainmenu/tab_settings.lua +++ b/builtin/mainmenu/tab_settings.lua @@ -247,7 +247,7 @@ local function handle_settings_buttons(this, fields, tabname, tabdata) adv_settings_dlg:set_parent(this) this:hide() adv_settings_dlg:show() - --mm_texture.update("singleplayer", current_game()) + --mm_game_theme.update("singleplayer", current_game()) return true end if fields["cb_smooth_lighting"] then diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 3b9f4c339..efc9585e4 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -113,8 +113,16 @@ If you want to specify multiple images for one identifier, add additional images named like `$identifier.$n.png`, with an ascending number $n starting with 1, and a random image will be chosen from the provided ones. +Menu music +----------- +Games can provide custom main menu music. They are put inside a `menu` +directory inside the game directory. +The music files are named `theme.ogg`. +If you want to specify multiple music files for one game, add additional +images named like `theme.$n.ogg`, with an ascending number $n starting +with 1 (max 10), and a random music file will be chosen from the provided ones. Mods ==== @@ -5642,6 +5650,8 @@ Sounds player actions (e.g. door closing). * `minetest.sound_stop(handle)` * `handle` is a handle returned by `minetest.sound_play` +* `minetest.sound_stop_all()` + Stops all currently playing non-ephermeral sounds. * `minetest.sound_fade(handle, step, gain)` * `handle` is a handle returned by `minetest.sound_play` * `step` determines how fast a sound will fade. diff --git a/src/gui/guiEngine.cpp b/src/gui/guiEngine.cpp index c39c3ee0d..b65b31304 100644 --- a/src/gui/guiEngine.cpp +++ b/src/gui/guiEngine.cpp @@ -104,16 +104,22 @@ void MenuMusicFetcher::fetchSounds(const std::string &name, if(m_fetched.count(name)) return; m_fetched.insert(name); - std::string base; - base = porting::path_share + DIR_DELIM + "sounds"; - dst_paths.insert(base + DIR_DELIM + name + ".ogg"); - int i; - for(i=0; i<10; i++) - dst_paths.insert(base + DIR_DELIM + name + "."+itos(i)+".ogg"); - base = porting::path_user + DIR_DELIM + "sounds"; - dst_paths.insert(base + DIR_DELIM + name + ".ogg"); - for(i=0; i<10; i++) - dst_paths.insert(base + DIR_DELIM + name + "."+itos(i)+".ogg"); + std::vector list; + // Reusable local function + auto add_paths = [&dst_paths](const std::string name, const std::string base = "") { + dst_paths.insert(base + name + ".ogg"); + for (int i = 0; i < 10; i++) + dst_paths.insert(base + name + "." + itos(i) + ".ogg"); + }; + // Allow full paths + if (name.find(DIR_DELIM_CHAR) != std::string::npos) { + add_paths(name); + } else { + std::string share_prefix = porting::path_share + DIR_DELIM; + add_paths(name, share_prefix + "sounds" + DIR_DELIM); + std::string user_prefix = porting::path_user + DIR_DELIM; + add_paths(name, user_prefix + "sounds" + DIR_DELIM); + } } /******************************************************************************/ From 206e131854392ed2d39b3456f7a1b5a54bd1bff9 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Mon, 22 Nov 2021 18:27:49 +0100 Subject: [PATCH 052/412] Add backwards-compatible behaviour if too few CAO textures specified (#11766) --- doc/lua_api.txt | 1 + src/client/content_cao.cpp | 38 +++++++++++++++++++++++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index efc9585e4..36db23b6f 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -7184,6 +7184,7 @@ Player properties need to be saved manually. -- "sprite" uses 1 texture. -- "upright_sprite" uses 2 textures: {front, back}. -- "wielditem" expects 'textures = {itemname}' (see 'visual' above). + -- "mesh" requires one texture for each mesh buffer/material (in order) colors = {}, -- Number of required colors depends on visual diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index bb78b594d..24a9e7921 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -27,7 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "client/sound.h" #include "client/tile.h" #include "util/basic_macros.h" -#include "util/numeric.h" // For IntervalLimiter & setPitchYawRoll +#include "util/numeric.h" #include "util/serialize.h" #include "camera.h" // CameraModes #include "collision.h" @@ -171,6 +171,20 @@ static void updatePositionRecursive(scene::ISceneNode *node) node->updateAbsolutePosition(); } +static bool logOnce(const std::ostringstream &from, std::ostream &log_to) +{ + thread_local std::vector logged; + + std::string message = from.str(); + u64 hash = murmur_hash_64_ua(message.data(), message.length(), 0xBADBABE); + + if (std::find(logged.begin(), logged.end(), hash) != logged.end()) + return false; + logged.push_back(hash); + log_to << message << std::endl; + return true; +} + /* TestCAO */ @@ -822,6 +836,28 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) updateAttachments(); setNodeLight(m_last_light); updateMeshCulling(); + + if (m_animated_meshnode) { + u32 mat_count = m_animated_meshnode->getMaterialCount(); + if (mat_count == 0 || m_prop.textures.empty()) { + // nothing + } else if (mat_count > m_prop.textures.size()) { + std::ostringstream oss; + oss << "GenericCAO::addToScene(): Model " + << m_prop.mesh << " loaded with " << mat_count + << " mesh buffers but only " << m_prop.textures.size() + << " texture(s) specifed, this is deprecated."; + logOnce(oss, warningstream); + + video::ITexture *last = m_animated_meshnode->getMaterial(0).TextureLayer[0].Texture; + for (s32 i = 1; i < mat_count; i++) { + auto &layer = m_animated_meshnode->getMaterial(i).TextureLayer[0]; + if (!layer.Texture) + layer.Texture = last; + last = layer.Texture; + } + } + } } void GenericCAO::updateLight(u32 day_night_ratio) From 7a1464d783742512fdc6e0a083ffadd0ce63c1b4 Mon Sep 17 00:00:00 2001 From: HybridDog <3192173+HybridDog@users.noreply.github.com> Date: Fri, 26 Nov 2021 19:30:49 +0100 Subject: [PATCH 053/412] Minimap: gamma-correct average texture colour calculation (#9249) This calculates the average texture colour while heeding the sRGB colourspace. --- src/client/tile.cpp | 55 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/src/client/tile.cpp b/src/client/tile.cpp index 2f57503d3..da03ff5c8 100644 --- a/src/client/tile.cpp +++ b/src/client/tile.cpp @@ -2229,6 +2229,48 @@ video::ITexture* TextureSource::getNormalTexture(const std::string &name) return NULL; } +namespace { + // For more colourspace transformations, see for example + // https://github.com/tobspr/GLSL-Color-Spaces/blob/master/ColorSpaces.inc.glsl + + inline float linear_to_srgb_component(float v) + { + if (v > 0.0031308f) + return 1.055f * powf(v, 1.0f / 2.4f) - 0.055f; + return 12.92f * v; + } + inline float srgb_to_linear_component(float v) + { + if (v > 0.04045f) + return powf((v + 0.055f) / 1.055f, 2.4f); + return v / 12.92f; + } + + v3f srgb_to_linear(const video::SColor &col_srgb) + { + v3f col(col_srgb.getRed(), col_srgb.getGreen(), col_srgb.getBlue()); + col /= 255.0f; + col.X = srgb_to_linear_component(col.X); + col.Y = srgb_to_linear_component(col.Y); + col.Z = srgb_to_linear_component(col.Z); + return col; + } + + video::SColor linear_to_srgb(const v3f &col_linear) + { + v3f col; + col.X = linear_to_srgb_component(col_linear.X); + col.Y = linear_to_srgb_component(col_linear.Y); + col.Z = linear_to_srgb_component(col_linear.Z); + col *= 255.0f; + col.X = core::clamp(col.X, 0.0f, 255.0f); + col.Y = core::clamp(col.Y, 0.0f, 255.0f); + col.Z = core::clamp(col.Z, 0.0f, 255.0f); + return video::SColor(0xff, myround(col.X), myround(col.Y), + myround(col.Z)); + } +} + video::SColor TextureSource::getTextureAverageColor(const std::string &name) { video::IVideoDriver *driver = RenderingEngine::get_video_driver(); @@ -2243,9 +2285,7 @@ video::SColor TextureSource::getTextureAverageColor(const std::string &name) return c; u32 total = 0; - u32 tR = 0; - u32 tG = 0; - u32 tB = 0; + v3f col_acc(0, 0, 0); core::dimension2d dim = image->getDimension(); u16 step = 1; if (dim.Width > 16) @@ -2255,17 +2295,14 @@ video::SColor TextureSource::getTextureAverageColor(const std::string &name) c = image->getPixel(x,y); if (c.getAlpha() > 0) { total++; - tR += c.getRed(); - tG += c.getGreen(); - tB += c.getBlue(); + col_acc += srgb_to_linear(c); } } } image->drop(); if (total > 0) { - c.setRed(tR / total); - c.setGreen(tG / total); - c.setBlue(tB / total); + col_acc /= total; + c = linear_to_srgb(col_acc); } c.setAlpha(255); return c; From b9051386ae296a6112383725bc8bfcd96dc9a226 Mon Sep 17 00:00:00 2001 From: Lejo Date: Fri, 26 Nov 2021 19:31:05 +0100 Subject: [PATCH 054/412] Add Lua bitop library (#9847) --- CMakeLists.txt | 5 + doc/lua_api.txt | 7 ++ lib/bitop/CMakeLists.txt | 4 + lib/bitop/bit.c | 189 ++++++++++++++++++++++++++++++ lib/bitop/bit.h | 34 ++++++ src/CMakeLists.txt | 3 + src/script/cpp_api/s_base.cpp | 7 ++ src/script/cpp_api/s_security.cpp | 3 +- 8 files changed, 251 insertions(+), 1 deletion(-) create mode 100644 lib/bitop/CMakeLists.txt create mode 100644 lib/bitop/bit.c create mode 100644 lib/bitop/bit.h diff --git a/CMakeLists.txt b/CMakeLists.txt index b41738c06..3ba99bc21 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -261,6 +261,11 @@ endif() find_package(GMP REQUIRED) find_package(Json REQUIRED) find_package(Lua REQUIRED) +if(NOT USE_LUAJIT) + set(LUA_BIT_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/bitop) + set(LUA_BIT_LIBRARY bitop) + add_subdirectory(lib/bitop) +endif() # JsonCpp doesn't compile well on GCC 4.8 if(NOT USE_SYSTEM_JSONCPP) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 36db23b6f..0a63642af 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -8825,3 +8825,10 @@ Used by `minetest.register_authentication_handler`. -- Returns an iterator (use with `for` loops) for all player names -- currently in the auth database } + +Bit Library +----------- + +Functions: bit.tobit, bit.tohex, bit.bnot, bit.band, bit.bor, bit.bxor, bit.lshift, bit.rshift, bit.arshift, bit.rol, bit.ror, bit.bswap + +See http://bitop.luajit.org/ for advanced information. diff --git a/lib/bitop/CMakeLists.txt b/lib/bitop/CMakeLists.txt new file mode 100644 index 000000000..03b4d0b96 --- /dev/null +++ b/lib/bitop/CMakeLists.txt @@ -0,0 +1,4 @@ +add_library(bitop bit.c) +target_link_libraries(bitop) + +include_directories(${LUA_INCLUDE_DIR}) diff --git a/lib/bitop/bit.c b/lib/bitop/bit.c new file mode 100644 index 000000000..f23c31a4c --- /dev/null +++ b/lib/bitop/bit.c @@ -0,0 +1,189 @@ +/* +** Lua BitOp -- a bit operations library for Lua 5.1/5.2. +** http://bitop.luajit.org/ +** +** Copyright (C) 2008-2012 Mike Pall. All rights reserved. +** +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +** +** [ MIT license: http://www.opensource.org/licenses/mit-license.php ] +*/ + +#include "bit.h" + +#define LUA_BITOP_VERSION "1.0.2" + +#define LUA_LIB +#include "lauxlib.h" + +#ifdef _MSC_VER +/* MSVC is stuck in the last century and doesn't have C99's stdint.h. */ +typedef __int32 int32_t; +typedef unsigned __int32 uint32_t; +typedef unsigned __int64 uint64_t; +#else +#include +#endif + +typedef int32_t SBits; +typedef uint32_t UBits; + +typedef union { + lua_Number n; +#ifdef LUA_NUMBER_DOUBLE + uint64_t b; +#else + UBits b; +#endif +} BitNum; + +/* Convert argument to bit type. */ +static UBits barg(lua_State *L, int idx) +{ + BitNum bn; + UBits b; +#if LUA_VERSION_NUM < 502 + bn.n = lua_tonumber(L, idx); +#else + bn.n = luaL_checknumber(L, idx); +#endif +#if defined(LUA_NUMBER_DOUBLE) + bn.n += 6755399441055744.0; /* 2^52+2^51 */ +#ifdef SWAPPED_DOUBLE + b = (UBits)(bn.b >> 32); +#else + b = (UBits)bn.b; +#endif +#elif defined(LUA_NUMBER_INT) || defined(LUA_NUMBER_LONG) || \ + defined(LUA_NUMBER_LONGLONG) || defined(LUA_NUMBER_LONG_LONG) || \ + defined(LUA_NUMBER_LLONG) + if (sizeof(UBits) == sizeof(lua_Number)) + b = bn.b; + else + b = (UBits)(SBits)bn.n; +#elif defined(LUA_NUMBER_FLOAT) +#error "A 'float' lua_Number type is incompatible with this library" +#else +#error "Unknown number type, check LUA_NUMBER_* in luaconf.h" +#endif +#if LUA_VERSION_NUM < 502 + if (b == 0 && !lua_isnumber(L, idx)) { + luaL_typerror(L, idx, "number"); + } +#endif + return b; +} + +/* Return bit type. */ +#define BRET(b) lua_pushnumber(L, (lua_Number)(SBits)(b)); return 1; + +static int bit_tobit(lua_State *L) { BRET(barg(L, 1)) } +static int bit_bnot(lua_State *L) { BRET(~barg(L, 1)) } + +#define BIT_OP(func, opr) \ + static int func(lua_State *L) { int i; UBits b = barg(L, 1); \ + for (i = lua_gettop(L); i > 1; i--) b opr barg(L, i); BRET(b) } +BIT_OP(bit_band, &=) +BIT_OP(bit_bor, |=) +BIT_OP(bit_bxor, ^=) + +#define bshl(b, n) (b << n) +#define bshr(b, n) (b >> n) +#define bsar(b, n) ((SBits)b >> n) +#define brol(b, n) ((b << n) | (b >> (32-n))) +#define bror(b, n) ((b << (32-n)) | (b >> n)) +#define BIT_SH(func, fn) \ + static int func(lua_State *L) { \ + UBits b = barg(L, 1); UBits n = barg(L, 2) & 31; BRET(fn(b, n)) } +BIT_SH(bit_lshift, bshl) +BIT_SH(bit_rshift, bshr) +BIT_SH(bit_arshift, bsar) +BIT_SH(bit_rol, brol) +BIT_SH(bit_ror, bror) + +static int bit_bswap(lua_State *L) +{ + UBits b = barg(L, 1); + b = (b >> 24) | ((b >> 8) & 0xff00) | ((b & 0xff00) << 8) | (b << 24); + BRET(b) +} + +static int bit_tohex(lua_State *L) +{ + UBits b = barg(L, 1); + SBits n = lua_isnone(L, 2) ? 8 : (SBits)barg(L, 2); + const char *hexdigits = "0123456789abcdef"; + char buf[8]; + int i; + if (n < 0) { n = -n; hexdigits = "0123456789ABCDEF"; } + if (n > 8) n = 8; + for (i = (int)n; --i >= 0; ) { buf[i] = hexdigits[b & 15]; b >>= 4; } + lua_pushlstring(L, buf, (size_t)n); + return 1; +} + +static const struct luaL_Reg bit_funcs[] = { + { "tobit", bit_tobit }, + { "bnot", bit_bnot }, + { "band", bit_band }, + { "bor", bit_bor }, + { "bxor", bit_bxor }, + { "lshift", bit_lshift }, + { "rshift", bit_rshift }, + { "arshift", bit_arshift }, + { "rol", bit_rol }, + { "ror", bit_ror }, + { "bswap", bit_bswap }, + { "tohex", bit_tohex }, + { NULL, NULL } +}; + +/* Signed right-shifts are implementation-defined per C89/C99. +** But the de facto standard are arithmetic right-shifts on two's +** complement CPUs. This behaviour is required here, so test for it. +*/ +#define BAD_SAR (bsar(-8, 2) != (SBits)-2) + +LUALIB_API int luaopen_bit(lua_State *L) +{ + UBits b; + lua_pushnumber(L, (lua_Number)1437217655L); + b = barg(L, -1); + if (b != (UBits)1437217655L || BAD_SAR) { /* Perform a simple self-test. */ + const char *msg = "compiled with incompatible luaconf.h"; +#ifdef LUA_NUMBER_DOUBLE +#ifdef _WIN32 + if (b == (UBits)1610612736L) + msg = "use D3DCREATE_FPU_PRESERVE with DirectX"; +#endif + if (b == (UBits)1127743488L) + msg = "not compiled with SWAPPED_DOUBLE"; +#endif + if (BAD_SAR) + msg = "arithmetic right-shift broken"; + luaL_error(L, "bit library self-test failed (%s)", msg); + } +#if LUA_VERSION_NUM < 502 + luaL_register(L, "bit", bit_funcs); +#else + luaL_newlib(L, bit_funcs); +#endif + return 1; +} diff --git a/lib/bitop/bit.h b/lib/bitop/bit.h new file mode 100644 index 000000000..3e5845ee5 --- /dev/null +++ b/lib/bitop/bit.h @@ -0,0 +1,34 @@ +/* +** Lua BitOp -- a bit operations library for Lua 5.1/5.2. +** http://bitop.luajit.org/ +** +** Copyright (C) 2008-2012 Mike Pall. All rights reserved. +** +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +** +** [ MIT license: http://www.opensource.org/licenses/mit-license.php ] +*/ + +#pragma once + +#include "lua.h" + +#define LUA_BITLIBNAME "bit" +LUALIB_API int luaopen_bit(lua_State *L); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1549587b7..4803b475b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -500,6 +500,7 @@ include_directories( ${LUA_INCLUDE_DIR} ${GMP_INCLUDE_DIR} ${JSON_INCLUDE_DIR} + ${LUA_BIT_INCLUDE_DIR} ${X11_INCLUDE_DIR} ${PROJECT_SOURCE_DIR}/script ) @@ -537,6 +538,7 @@ if(BUILD_CLIENT) ${LUA_LIBRARY} ${GMP_LIBRARY} ${JSON_LIBRARY} + ${LUA_BIT_LIBRARY} ${PLATFORM_LIBS} ) if(NOT USE_LUAJIT) @@ -619,6 +621,7 @@ if(BUILD_SERVER) ${SQLITE3_LIBRARY} ${JSON_LIBRARY} ${LUA_LIBRARY} + ${LUA_BIT_LIBRARY} ${GMP_LIBRARY} ${PLATFORM_LIBS} ) diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp index 921f713c0..f7b8a5102 100644 --- a/src/script/cpp_api/s_base.cpp +++ b/src/script/cpp_api/s_base.cpp @@ -37,6 +37,8 @@ extern "C" { #include "lualib.h" #if USE_LUAJIT #include "luajit.h" +#else + #include "bit.h" #endif } @@ -88,6 +90,11 @@ ScriptApiBase::ScriptApiBase(ScriptingType type): else luaL_openlibs(m_luastack); + // Load bit library + lua_pushcfunction(m_luastack, luaopen_bit); + lua_pushstring(m_luastack, LUA_BITLIBNAME); + lua_call(m_luastack, 1, 0); + // Make the ScriptApiBase* accessible to ModApiBase #if INDIRECT_SCRIPTAPI_RIDX *(void **)(lua_newuserdata(m_luastack, sizeof(void *))) = this; diff --git a/src/script/cpp_api/s_security.cpp b/src/script/cpp_api/s_security.cpp index 580042ec2..5faf8cc80 100644 --- a/src/script/cpp_api/s_security.cpp +++ b/src/script/cpp_api/s_security.cpp @@ -106,6 +106,7 @@ void ScriptApiSecurity::initializeSecurity() "string", "table", "math", + "bit" }; static const char *io_whitelist[] = { "close", @@ -298,6 +299,7 @@ void ScriptApiSecurity::initializeSecurityClient() "string", "table", "math", + "bit", }; static const char *os_whitelist[] = { "clock", @@ -834,4 +836,3 @@ int ScriptApiSecurity::sl_os_remove(lua_State *L) lua_call(L, 1, 2); return 2; } - From 87ab97da2ace31fdb46a88a0901ec664dd666feb Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 26 Nov 2021 19:32:41 +0100 Subject: [PATCH 055/412] Fix find_nodes_in_area misbehaving with out-of-map coordinates (#11770) This ensures that no overflows (side-effects) happen within the find_nodes_in_area function by limiting coordinates like done in the map generation code. --- src/script/lua_api/l_env.cpp | 31 +++++++++++++++++-------------- src/unittest/test_voxelarea.cpp | 18 ++++++++++++++++-- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp index 2c709d31b..18ee3a521 100644 --- a/src/script/lua_api/l_env.cpp +++ b/src/script/lua_api/l_env.cpp @@ -880,6 +880,21 @@ int ModApiEnvMod::l_find_node_near(lua_State *L) return 0; } +static void checkArea(v3s16 &minp, v3s16 &maxp) +{ + auto volume = VoxelArea(minp, maxp).getVolume(); + // Volume limit equal to 8 default mapchunks, (80 * 2) ^ 3 = 4,096,000 + if (volume > 4096000) { + throw LuaError("Area volume exceeds allowed value of 4096000"); + } + + // Clamp to map range to avoid problems +#define CLAMP(arg) core::clamp(arg, (s16)-MAX_MAP_GENERATION_LIMIT, (s16)MAX_MAP_GENERATION_LIMIT) + minp = v3s16(CLAMP(minp.X), CLAMP(minp.Y), CLAMP(minp.Z)); + maxp = v3s16(CLAMP(maxp.X), CLAMP(maxp.Y), CLAMP(maxp.Z)); +#undef CLAMP +} + // find_nodes_in_area(minp, maxp, nodenames, [grouped]) int ModApiEnvMod::l_find_nodes_in_area(lua_State *L) { @@ -899,13 +914,7 @@ int ModApiEnvMod::l_find_nodes_in_area(lua_State *L) } #endif - v3s16 cube = maxp - minp + 1; - // Volume limit equal to 8 default mapchunks, (80 * 2) ^ 3 = 4,096,000 - if ((u64)cube.X * (u64)cube.Y * (u64)cube.Z > 4096000) { - luaL_error(L, "find_nodes_in_area(): area volume" - " exceeds allowed value of 4096000"); - return 0; - } + checkArea(minp, maxp); std::vector filter; collectNodeIds(L, 3, ndef, filter); @@ -1010,13 +1019,7 @@ int ModApiEnvMod::l_find_nodes_in_area_under_air(lua_State *L) } #endif - v3s16 cube = maxp - minp + 1; - // Volume limit equal to 8 default mapchunks, (80 * 2) ^ 3 = 4,096,000 - if ((u64)cube.X * (u64)cube.Y * (u64)cube.Z > 4096000) { - luaL_error(L, "find_nodes_in_area_under_air(): area volume" - " exceeds allowed value of 4096000"); - return 0; - } + checkArea(minp, maxp); std::vector filter; collectNodeIds(L, 3, ndef, filter); diff --git a/src/unittest/test_voxelarea.cpp b/src/unittest/test_voxelarea.cpp index 6ec0412d5..9826d2ee7 100644 --- a/src/unittest/test_voxelarea.cpp +++ b/src/unittest/test_voxelarea.cpp @@ -30,6 +30,7 @@ public: void test_addarea(); void test_pad(); + void test_extent(); void test_volume(); void test_contains_voxelarea(); void test_contains_point(); @@ -65,6 +66,7 @@ void TestVoxelArea::runTests(IGameDef *gamedef) { TEST(test_addarea); TEST(test_pad); + TEST(test_extent); TEST(test_volume); TEST(test_contains_voxelarea); TEST(test_contains_point); @@ -113,10 +115,22 @@ void TestVoxelArea::test_pad() UASSERT(v1.MaxEdge == v3s16(-47, -9347, 969)); } +void TestVoxelArea::test_extent() +{ + VoxelArea v1(v3s16(-1337, -547, -789), v3s16(-147, 447, 669)); + UASSERT(v1.getExtent() == v3s16(1191, 995, 1459)); + + VoxelArea v2(v3s16(32493, -32507, 32753), v3s16(32508, -32492, 32768)); + UASSERT(v2.getExtent() == v3s16(16, 16, 16)); +} + void TestVoxelArea::test_volume() { - VoxelArea v1(v3s16(-1337, 447, -789), v3s16(-147, -9547, 669)); - UASSERTEQ(s32, v1.getVolume(), -184657133); + VoxelArea v1(v3s16(-1337, -547, -789), v3s16(-147, 447, 669)); + UASSERTEQ(s32, v1.getVolume(), 1728980655); + + VoxelArea v2(v3s16(32493, -32507, 32753), v3s16(32508, -32492, 32768)); + UASSERTEQ(s32, v2.getVolume(), 4096); } void TestVoxelArea::test_contains_voxelarea() From c85aa0030f48e088d64a60b1e0df924a68c3964a Mon Sep 17 00:00:00 2001 From: ROllerozxa Date: Fri, 26 Nov 2021 19:33:24 +0100 Subject: [PATCH 056/412] Remove unused Direct3D shader error/warning (#11793) --- builtin/mainmenu/tab_settings.lua | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/builtin/mainmenu/tab_settings.lua b/builtin/mainmenu/tab_settings.lua index 29f3c9b62..42f7f8daf 100644 --- a/builtin/mainmenu/tab_settings.lua +++ b/builtin/mainmenu/tab_settings.lua @@ -275,13 +275,7 @@ local function handle_settings_buttons(this, fields, tabname, tabdata) return true end if fields["cb_shaders"] then - if (core.settings:get("video_driver") == "direct3d8" or - core.settings:get("video_driver") == "direct3d9") then - core.settings:set("enable_shaders", "false") - gamedata.errormessage = fgettext("To enable shaders the OpenGL driver needs to be used.") - else - core.settings:set("enable_shaders", fields["cb_shaders"]) - end + core.settings:set("enable_shaders", fields["cb_shaders"]) return true end if fields["cb_tonemapping"] then From 413be76c63309266d3d271f01cc74385067d7263 Mon Sep 17 00:00:00 2001 From: Corey Powell Date: Fri, 26 Nov 2021 14:19:40 -0500 Subject: [PATCH 057/412] Implemented disconnect_player (#10492) Co-authored-by: rubenwardy --- builtin/game/misc.lua | 10 ++++++++++ doc/lua_api.txt | 4 ++++ src/script/lua_api/l_server.cpp | 12 ++++++------ src/script/lua_api/l_server.h | 4 ++-- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua index 05237662c..ef826eda7 100644 --- a/builtin/game/misc.lua +++ b/builtin/game/misc.lua @@ -6,6 +6,16 @@ local S = core.get_translator("__builtin") -- Misc. API functions -- +-- @spec core.kick_player(String, String) :: Boolean +function core.kick_player(player_name, reason) + if type(reason) == "string" then + reason = "Kicked: " .. reason + else + reason = "Kicked." + end + return core.disconnect_player(player_name, reason) +end + function core.check_player_privs(name, ...) if core.is_player(name) then name = name:get_player_name() diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 0a63642af..aff739cfb 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -5741,6 +5741,10 @@ Bans * `minetest.kick_player(name, [reason])`: disconnect a player with an optional reason. * Returns boolean indicating success (false if player nonexistant) +* `minetest.disconnect_player(name, [reason])`: disconnect a player with an + optional reason, this will not prefix with 'Kicked: ' like kick_player. + If no reason is given, it will default to 'Disconnected.' + * Returns boolean indicating success (false if player nonexistant) Particles --------- diff --git a/src/script/lua_api/l_server.cpp b/src/script/lua_api/l_server.cpp index 476f74c9c..82a692070 100644 --- a/src/script/lua_api/l_server.cpp +++ b/src/script/lua_api/l_server.cpp @@ -310,8 +310,8 @@ int ModApiServer::l_ban_player(lua_State *L) return 1; } -// kick_player(name, [reason]) -> success -int ModApiServer::l_kick_player(lua_State *L) +// disconnect_player(name, [reason]) -> success +int ModApiServer::l_disconnect_player(lua_State *L) { NO_MAP_LOCK_REQUIRED; @@ -319,11 +319,11 @@ int ModApiServer::l_kick_player(lua_State *L) throw LuaError("Can't kick player before server has started up"); const char *name = luaL_checkstring(L, 1); - std::string message("Kicked"); + std::string message; if (lua_isstring(L, 2)) - message.append(": ").append(readParam(L, 2)); + message.append(readParam(L, 2)); else - message.append("."); + message.append("Disconnected."); RemotePlayer *player = dynamic_cast(getEnv(L))->getPlayer(name); if (player == NULL) { @@ -554,7 +554,7 @@ void ModApiServer::Initialize(lua_State *L, int top) API_FCT(get_ban_list); API_FCT(get_ban_description); API_FCT(ban_player); - API_FCT(kick_player); + API_FCT(disconnect_player); API_FCT(remove_player); API_FCT(unban_player_or_ip); API_FCT(notify_authentication_modified); diff --git a/src/script/lua_api/l_server.h b/src/script/lua_api/l_server.h index a6f709787..f05c0b7c9 100644 --- a/src/script/lua_api/l_server.h +++ b/src/script/lua_api/l_server.h @@ -97,8 +97,8 @@ private: // unban_player_or_ip() static int l_unban_player_or_ip(lua_State *L); - // kick_player(name, [message]) -> success - static int l_kick_player(lua_State *L); + // disconnect_player(name, [reason]) -> success + static int l_disconnect_player(lua_State *L); // remove_player(name) static int l_remove_player(lua_State *L); From 51cfb57b4da8e71e39380bf5bf3e19414c779e12 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sat, 27 Nov 2021 00:10:13 +0000 Subject: [PATCH 058/412] Update to Android target SDK 30 (#11746) --- android/app/build.gradle | 4 ++-- android/app/src/main/AndroidManifest.xml | 6 ++++-- .../src/main/java/net/minetest/minetest/MainActivity.java | 3 ++- .../src/main/java/net/minetest/minetest/UnzipService.java | 5 +++++ android/native/build.gradle | 4 ++-- 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 234868f92..e8ba95722 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 29 + compileSdkVersion 30 buildToolsVersion '30.0.3' ndkVersion "$ndk_version" defaultConfig { applicationId 'net.minetest.minetest' minSdkVersion 16 - targetSdkVersion 29 + targetSdkVersion 30 versionName "${versionMajor}.${versionMinor}.${versionPatch}" versionCode project.versionCode } diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index fa93e7069..6ea677cb9 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -30,7 +30,8 @@ android:configChanges="orientation|keyboardHidden|navigation|screenSize" android:maxAspectRatio="3.0" android:screenOrientation="sensorLandscape" - android:theme="@style/AppTheme"> + android:theme="@style/AppTheme" + android:exported="true"> @@ -44,7 +45,8 @@ android:launchMode="singleTask" android:maxAspectRatio="3.0" android:screenOrientation="sensorLandscape" - android:theme="@style/AppTheme"> + android:theme="@style/AppTheme" + android:exported="true"> diff --git a/android/app/src/main/java/net/minetest/minetest/MainActivity.java b/android/app/src/main/java/net/minetest/minetest/MainActivity.java index 56615fca7..b6567b4b7 100644 --- a/android/app/src/main/java/net/minetest/minetest/MainActivity.java +++ b/android/app/src/main/java/net/minetest/minetest/MainActivity.java @@ -101,7 +101,8 @@ public class MainActivity extends AppCompatActivity { mTextView = findViewById(R.id.textView); sharedPreferences = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && + Build.VERSION.SDK_INT < Build.VERSION_CODES.R) checkPermission(); else checkAppVersion(); diff --git a/android/app/src/main/java/net/minetest/minetest/UnzipService.java b/android/app/src/main/java/net/minetest/minetest/UnzipService.java index b513a7fe0..a61a49139 100644 --- a/android/app/src/main/java/net/minetest/minetest/UnzipService.java +++ b/android/app/src/main/java/net/minetest/minetest/UnzipService.java @@ -32,6 +32,7 @@ import android.os.Environment; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; import androidx.annotation.StringRes; import java.io.File; @@ -200,6 +201,10 @@ public class UnzipService extends IntentService { * Migrates user data from deprecated external storage to app scoped storage */ private void migrate(Notification.Builder notificationBuilder, File newLocation) throws IOException { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + return; + } + File oldLocation = new File(Environment.getExternalStorageDirectory(), "Minetest"); if (!oldLocation.isDirectory()) return; diff --git a/android/native/build.gradle b/android/native/build.gradle index e37694f5b..2ddc77135 100644 --- a/android/native/build.gradle +++ b/android/native/build.gradle @@ -2,12 +2,12 @@ apply plugin: 'com.android.library' apply plugin: 'de.undercouch.download' android { - compileSdkVersion 29 + compileSdkVersion 30 buildToolsVersion '30.0.3' ndkVersion "$ndk_version" defaultConfig { minSdkVersion 16 - targetSdkVersion 29 + targetSdkVersion 30 externalNativeBuild { ndkBuild { arguments '-j' + Runtime.getRuntime().availableProcessors(), From 70ece73da9b6f12d3f443d1e638615c7bca096e4 Mon Sep 17 00:00:00 2001 From: "Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat Yasuyoshi" Date: Wed, 16 Jun 2021 18:47:58 +0000 Subject: [PATCH 059/412] Translated using Weblate (Malay) Currently translated at 100.0% (1396 of 1396 strings) --- po/ms/minetest.po | 265 +++++++++++++++++++++++----------------------- 1 file changed, 133 insertions(+), 132 deletions(-) diff --git a/po/ms/minetest.po b/po/ms/minetest.po index 5985a4220..a7e5d7e87 100644 --- a/po/ms/minetest.po +++ b/po/ms/minetest.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Malay (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-06-01 16:17+0000\n" +"PO-Revision-Date: 2021-06-16 19:05+0000\n" "Last-Translator: Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat " "Yasuyoshi \n" "Language-Team: Malay ' to get more information, or '.help all' to list everything." msgstr "" +"Gunakan '.help ' untuk dapatkan maklumat lanjut, atau '.help all' " +"untuk senaraikan kesemuanya." #: builtin/common/chatcommands.lua msgid "[all | ]" -msgstr "" +msgstr "[all | ]" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" @@ -613,7 +606,7 @@ msgstr "Dilumpuhkan" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Edit" -msgstr "Edit" +msgstr "Sunting" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Enabled" @@ -786,16 +779,15 @@ msgstr "" #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "" +msgstr "Perihal" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" msgstr "Penyumbang Aktif" #: builtin/mainmenu/tab_about.lua -#, fuzzy msgid "Active renderer:" -msgstr "Jarak penghantaran objek aktif" +msgstr "Penterjemah aktif:" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" @@ -930,9 +922,8 @@ msgid "Start Game" msgstr "Mulakan Permainan" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Address" -msgstr "- Alamat: " +msgstr "Alamat" #: builtin/mainmenu/tab_online.lua src/client/keycode.cpp msgid "Clear" @@ -948,22 +939,20 @@ msgstr "Mod Kreatif" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Damage / PvP" -msgstr "Boleh cedera" +msgstr "Boleh cedera / PvP" #: builtin/mainmenu/tab_online.lua msgid "Del. Favorite" msgstr "Padam Kegemaran" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Favorites" msgstr "Kegemaran" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" -msgstr "" +msgstr "Pelayan Tidak Serasi" #: builtin/mainmenu/tab_online.lua msgid "Join Game" @@ -974,18 +963,16 @@ msgid "Ping" msgstr "Ping" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Public Servers" -msgstr "Umumkan Pelayan" +msgstr "Pelayan Awam" #: builtin/mainmenu/tab_online.lua msgid "Refresh" -msgstr "" +msgstr "Segarkan semula" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Server Description" -msgstr "Perihal pelayan" +msgstr "Keterangan Pelayan" #: builtin/mainmenu/tab_settings.lua msgid "2x" @@ -1028,13 +1015,12 @@ msgid "Connected Glass" msgstr "Kaca Bersambungan" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp -#, fuzzy msgid "Dynamic shadows" -msgstr "Bayang fon" +msgstr "Bayang dinamik" #: builtin/mainmenu/tab_settings.lua msgid "Dynamic shadows: " -msgstr "" +msgstr "Bayang dinamik: " #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" @@ -1042,15 +1028,15 @@ msgstr "Daun Beragam" #: builtin/mainmenu/tab_settings.lua msgid "High" -msgstr "" +msgstr "Tinggi" #: builtin/mainmenu/tab_settings.lua msgid "Low" -msgstr "" +msgstr "Rendah" #: builtin/mainmenu/tab_settings.lua msgid "Medium" -msgstr "" +msgstr "Sederhana" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" @@ -1142,11 +1128,11 @@ msgstr "Penapisan Trilinear" #: builtin/mainmenu/tab_settings.lua msgid "Ultra High" -msgstr "" +msgstr "Ultra Tinggi" #: builtin/mainmenu/tab_settings.lua msgid "Very Low" -msgstr "" +msgstr "Sangat Rendah" #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" @@ -1466,9 +1452,8 @@ msgid "Minimap currently disabled by game or mod" msgstr "Peta mini dilumpuhkan oleh permainan atau mods" #: src/client/game.cpp -#, fuzzy msgid "Multiplayer" -msgstr "Pemain Perseorangan" +msgstr "Pemain Ramai" #: src/client/game.cpp msgid "Noclip mode disabled" @@ -1904,9 +1889,8 @@ msgid "Proceed" msgstr "Teruskan" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "\"Aux1\" = climb down" -msgstr "\"Istimewa\" = panjat turun" +msgstr "\"Aux1\" = panjat turun" #: src/gui/guiKeyChangeMenu.cpp msgid "Autoforward" @@ -1918,7 +1902,7 @@ msgstr "Lompat automatik" #: src/gui/guiKeyChangeMenu.cpp msgid "Aux1" -msgstr "" +msgstr "Aux1" #: src/gui/guiKeyChangeMenu.cpp msgid "Backward" @@ -1926,7 +1910,7 @@ msgstr "Ke Belakang" #: src/gui/guiKeyChangeMenu.cpp msgid "Block bounds" -msgstr "" +msgstr "Batas blok" #: src/gui/guiKeyChangeMenu.cpp msgid "Change camera" @@ -1938,7 +1922,7 @@ msgstr "Sembang" #: src/gui/guiKeyChangeMenu.cpp msgid "Command" -msgstr "Arahan" +msgstr "Perintah" #: src/gui/guiKeyChangeMenu.cpp msgid "Console" @@ -1992,7 +1976,7 @@ msgstr "" #: src/gui/guiKeyChangeMenu.cpp msgid "Local command" -msgstr "Arahan tempatan" +msgstr "Perintah tempatan" #: src/gui/guiKeyChangeMenu.cpp msgid "Mute" @@ -2105,14 +2089,13 @@ msgstr "" "berdasarkan kedudukan sentuhan pertama." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "(Android) Use virtual joystick to trigger \"Aux1\" button.\n" "If enabled, virtual joystick will also tap \"Aux1\" button when out of main " "circle." msgstr "" -"(Android) Guna kayu bedik maya untuk picu butang \"aux\".\n" -"Jika dibolehkan, kayu bedik maya juga akan menekan butang \"aux\" apabila " +"(Android) Guna kayu bedik maya untuk picu butang \"Aux1\".\n" +"Jika dibolehkan, kayu bedik maya juga akan menekan butang \"Aux1\" apabila " "berada di luar bulatan utama." #: src/settings_translation_file.cpp @@ -2249,13 +2232,14 @@ msgid "" msgstr "" "Sokongan 3D.\n" "Yang disokong pada masa ini:\n" -"- tiada: tiada output 3D.\n" -"- anaglif: 3D warna biru/merah.\n" -"- selang-seli: garis genap/ganjil berdasarkan sokongan skrin polarisasi.\n" -"- atas-bawah: pisah skrin atas/bawah.\n" -"- kiri-kanan: pisah skrin kiri/kanan.\n" -"- silang lihat: 3D mata bersilang\n" -"- selak halaman: 3D berasaskan penimbal kuad.\n" +"- none (tiada): untuk tiada output 3D.\n" +"- anaglyph (anaglif): 3D warna biru/merah.\n" +"- interlaced (selang-seli): garis genap/ganjil berdasarkan sokongan skrin " +"polarisasi.\n" +"- topbottom (atas-bawah): pisah skrin atas/bawah.\n" +"- sidebyside (kiri-kanan): pisah skrin kiri/kanan.\n" +"- crossview (silang lihat): 3D mata bersilang\n" +"- pageflip (selak halaman): 3D berasaskan penimbal kuad.\n" "Ambil perhatian bahawa mod selang-seli memerlukan pembayang." #: src/settings_translation_file.cpp @@ -2467,14 +2451,12 @@ msgid "Autoscaling mode" msgstr "Mod skala automatik" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key" -msgstr "Kekunci lompat" +msgstr "Kekunci Aux1" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key for climbing/descending" -msgstr "Kekunci untuk memanjat/menurun" +msgstr "Kekunci Aux1 untuk memanjat/menurun" #: src/settings_translation_file.cpp msgid "Backward key" @@ -2626,9 +2608,8 @@ msgstr "" "Di mana 0.0 ialah aras cahaya minimum, 1.0 ialah maksimum." #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat command time message threshold" -msgstr "Nilai ambang tendang mesej sembang" +msgstr "Nilai ambang mesej masa perintah sembang" #: src/settings_translation_file.cpp msgid "Chat font size" @@ -2727,9 +2708,8 @@ msgid "Colored fog" msgstr "Kabut berwarna" #: src/settings_translation_file.cpp -#, fuzzy msgid "Colored shadows" -msgstr "Kabut berwarna" +msgstr "Bayang berwarna" #: src/settings_translation_file.cpp msgid "" @@ -2771,7 +2751,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Command key" -msgstr "Kekunci arahan" +msgstr "Kekunci perintah" #: src/settings_translation_file.cpp msgid "Connect glass" @@ -2962,6 +2942,9 @@ msgid "" "This simulates the soft shadows effect by applying a PCF or poisson disk\n" "but also uses more resources." msgstr "" +"Mentakrifkan kualiti penapisan bayang\n" +"Tetapan ini menyelakukan kesan bayang lembut dengan menggunakan\n" +"PCF atau cakera poisson tetapi turut menggunakan lebih banyak sumber." #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." @@ -3142,6 +3125,9 @@ msgid "" "Enable colored shadows. \n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" +"Membolehkan bayang berwarna. \n" +"Jika dibenarkan, nod lut cahaya mengeluarkan bayang berwarna. Fungsi ini " +"sangat berat." #: src/settings_translation_file.cpp msgid "Enable console window" @@ -3173,6 +3159,9 @@ msgid "" "On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " "filtering." msgstr "" +"Membolehkan penapisan cakera poisson.\n" +"Jika dibenarkan, gunakan cakera poisson untuk membuat \"bayang lembut\". " +"Jika tidak, gunakan penapisan PCF." #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." @@ -3348,13 +3337,12 @@ msgid "Fast movement" msgstr "Pergerakan pantas" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Fast movement (via the \"Aux1\" key).\n" "This requires the \"fast\" privilege on the server." msgstr "" -"Bergerak pantas (dengan kekunci \"istimewa\").\n" -"Ini memerlukan keistimewaan \"pergerakan pantas\" dalam pelayan tersebut." +"Bergerak pantas (dengan kekunci \"Aux1\").\n" +"Ini memerlukan keistimewaan \"pergerakan pantas\" di pelayan tersebut." #: src/settings_translation_file.cpp msgid "Field of view" @@ -3386,7 +3374,6 @@ msgid "Filmic tone mapping" msgstr "Pemetaan tona sinematik" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Filtered textures can blend RGB values with fully-transparent neighbors,\n" "which PNG optimizers usually discard, often resulting in dark or\n" @@ -3399,7 +3386,8 @@ msgstr "" "atau\n" "terang pada tekstur lut sinar. Guna penapisan ini untuk membersihkan tekstur " "tersebut\n" -"ketika ia sedang dimuatkan." +"ketika ia sedang dimuatkan. Ini dibolehkan secara automatik jika pemetaan " +"mip dibolehkan." #: src/settings_translation_file.cpp msgid "Filtering" @@ -3724,10 +3712,9 @@ msgid "Heat noise" msgstr "Hingar haba" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Height component of the initial window size. Ignored in fullscreen mode." -msgstr "Komponen tinggi saiz tetingkap awal." +msgstr "Komponen tinggi saiz tetingkap awal. Diabaikan dalam mod skrin penuh." #: src/settings_translation_file.cpp msgid "Height noise" @@ -3982,12 +3969,11 @@ msgstr "" "tidurkannya supaya tidak bazirkan kuasa CPU dengan sia-sia." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n" "enabled." msgstr "" -"Jika dilumpuhkan, kekunci \"istimewa\" akan digunakan untuk terbang laju\n" +"Jika dilumpuhkan, kekunci \"Aux1\" akan digunakan untuk terbang laju\n" "sekiranya kedua-dua mod terbang dan mod pergerakan pantas dibolehkan." #: src/settings_translation_file.cpp @@ -4014,15 +4000,13 @@ msgstr "" "Ini memerlukan keistimewaan \"tembus blok\" dalam pelayan tersebut." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down " "and\n" "descending." msgstr "" -"Jika dibolehkan, kekunci \"istimewa\" akan digunakan untuk panjat ke bawah " -"dan\n" -"turun dalam mod terbang, menggantikan kekunci \"selinap\"." +"Jika dibolehkan, kekunci \"Aux1\" akan digunakan untuk panjat ke bawah dan\n" +"turun dalam mod terbang, menggantikan kekunci \"Selinap\"." #: src/settings_translation_file.cpp msgid "" @@ -4084,6 +4068,10 @@ msgid "" "If the execution of a chat command takes longer than this specified time in\n" "seconds, add the time information to the chat command message" msgstr "" +"Jika pelaksanaan sesuatu perintah sembang mengambil masa lebih lama daripada " +"yang\n" +"dinyatakan di sini dalam unit saat, tambah maklumat masa ke mesej perintah " +"sembang" #: src/settings_translation_file.cpp msgid "" @@ -4459,7 +4447,7 @@ msgid "" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Kekunci untuk membuka tetingkap sembang untuk menaip arahan.\n" +"Kekunci untuk membuka tetingkap sembang untuk menaip perintah.\n" "Lihat http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4469,7 +4457,7 @@ msgid "" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Kekunci untuk membuka tetingkap sembang untuk menaip arahan tempatan.\n" +"Kekunci untuk membuka tetingkap sembang untuk menaip perintah tempatan.\n" "Lihat http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -5350,9 +5338,8 @@ msgid "Map save interval" msgstr "Selang masa penyimpanan peta" #: src/settings_translation_file.cpp -#, fuzzy msgid "Map update time" -msgstr "Detik kemas kini cecair" +msgstr "Masa kemas kini peta" #: src/settings_translation_file.cpp msgid "Mapblock limit" @@ -5466,7 +5453,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Maximum distance to render shadows." -msgstr "" +msgstr "Jarak maksimum untuk menterjemah bayang." #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" @@ -5597,18 +5584,20 @@ msgstr "" "had." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum time a file download (e.g. a mod download) may take, stated in " "milliseconds." msgstr "" -"Masa maksimum dalam unit ms untuk muat turun fail (cth. muat turun mods)." +"Masa maksimum yang dibenarkan untuk muat turun fail (cth. muat turun mods), " +"dalam unit milisaat." #: src/settings_translation_file.cpp msgid "" "Maximum time an interactive request (e.g. server list fetch) may take, " "stated in milliseconds." msgstr "" +"Masa maksimum yang dibenarkan untuk permintaan saling tindak (cth. mengambil " +"senarai pelayan), dalam unit milisaat." #: src/settings_translation_file.cpp msgid "Maximum users" @@ -5976,9 +5965,8 @@ msgid "Player versus player" msgstr "Pemain lawan pemain" #: src/settings_translation_file.cpp -#, fuzzy msgid "Poisson filtering" -msgstr "Penapisan bilinear" +msgstr "Penapisan poisson" #: src/settings_translation_file.cpp msgid "" @@ -6319,7 +6307,7 @@ msgstr "" "6 = Set Julia \"Sepupu Mandy\" 4D.\n" "7 = Set Mandelbrot \"Variasi\" 4D.\n" "8 = Set Julia \"Variasi\" 4D.\n" -"9 = Set Mandelbrot \"Mandelbrot/Mandelbar\" 3D.\n" +"9 = Set Mandelbrot jenis \"Mandelbrot/Mandelbar\" 3D.\n" "10 = Set Julia \"Mandelbrot/Mandelbar\" 3D.\n" "11 = Set Mandelbrot \"Pokok Krismas\" 3D.\n" "12 = Set Julia \"Pokok Krismas\" 3D.\n" @@ -6383,6 +6371,9 @@ msgid "" "Set the shadow strength.\n" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" +"Menetapkan kekuatan bayang.\n" +"Nilai lebih rendah untuk bayang lebih terang, nilai lebih tinggi untuk " +"bayang lebih gelap." #: src/settings_translation_file.cpp msgid "" @@ -6391,6 +6382,10 @@ msgid "" "resources.\n" "Minimun value 0.001 seconds max value 0.2 seconds" msgstr "" +"Menetapkan masa kemas kini bayang.\n" +"Nilai lebih rendah untuk kemas kini peta dan bayang lebih laju, tetapi " +"menggunakan lebih banyak sumber.\n" +"Nilai minimum 0.001 saat dan nilai maksimum 0.2 saat" #: src/settings_translation_file.cpp msgid "" @@ -6398,6 +6393,10 @@ msgid "" "Lower values mean sharper shadows bigger values softer.\n" "Minimun value 1.0 and max value 10.0" msgstr "" +"Menetapkan saiz jejari bayang lembut.\n" +"Nilai lebih rendah untuk bayang lebih tajam dan nilai lebih tinggi untuk " +"bayang lebih lembut.\n" +"Nilai minimum 1.0 dan nilai maksimum 10.0" #: src/settings_translation_file.cpp msgid "" @@ -6405,14 +6404,16 @@ msgid "" "Value of 0 means no tilt / vertical orbit.\n" "Minimun value 0.0 and max value 60.0" msgstr "" +"Menetapkan kecondongan orbit Matahari/Bulan dalam unit darjah\n" +"Nilai 0 untuk tidak condong / tiada orbit menegak.\n" +"Nilai minimum 0.0 dan nilai maksimum 60.0" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable Shadow Mapping.\n" "Requires shaders to be enabled." msgstr "" -"Tetapkan kepada \"true\" untuk membolehkan daun bergoyang.\n" +"Tetapkan kepada \"true\" untuk membolehkan Pemetaan Bayang.\n" "Memerlukan pembayang untuk dibolehkan." #: src/settings_translation_file.cpp @@ -6445,6 +6446,9 @@ msgid "" "On false, 16 bits texture will be used.\n" "This can cause much more artifacts in the shadow." msgstr "" +"Menetapkan kualiti tekstur bayang kepada 32 bit.\n" +"Jika tetapkan kepada \"false\", tekstur 16 bit akan digunakan.\n" +"Tetapan ini boleh menyebabkan lebih banyak artifak pada bayang." #: src/settings_translation_file.cpp msgid "Shader path" @@ -6462,22 +6466,20 @@ msgstr "" "Namun ia hanya berfungsi dengan pembahagian belakang video OpenGL." #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow filter quality" -msgstr "Kualiti tangkap layar" +msgstr "Kualiti penapisan bayang" #: src/settings_translation_file.cpp msgid "Shadow map max distance in nodes to render shadows" -msgstr "" +msgstr "Jarak maksimum peta bayang untuk menerjemah bayang, dalam unit nod" #: src/settings_translation_file.cpp msgid "Shadow map texture in 32 bits" -msgstr "" +msgstr "Tekstur peta bayang dalam 32 bit" #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow map texture size" -msgstr "Saiz tekstur minimum" +msgstr "Saiz tekstur peta bayang" #: src/settings_translation_file.cpp msgid "" @@ -6489,7 +6491,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Shadow strength" -msgstr "" +msgstr "Kekuatan bayang" #: src/settings_translation_file.cpp msgid "Shape of the minimap. Enabled = round, disabled = square." @@ -6547,7 +6549,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" -msgstr "" +msgstr "Kecondongan Orbit Badan Angkasa" #: src/settings_translation_file.cpp msgid "Slice w" @@ -6610,9 +6612,8 @@ msgid "Sneaking speed, in nodes per second." msgstr "Kelajuan menyelinap, dalam unit nod per saat." #: src/settings_translation_file.cpp -#, fuzzy msgid "Soft shadow radius" -msgstr "Nilai alfa bayang fon" +msgstr "Jejari bayang lembut" #: src/settings_translation_file.cpp msgid "Sound" @@ -6781,6 +6782,10 @@ msgid "" "This must be a power of two.\n" "Bigger numbers create better shadowsbut it is also more expensive." msgstr "" +"Saiz tekstur yang akan digunakan untuk menerjemah peta bayang.\n" +"Nilai ini mestilah hasil kuasa dua.\n" +"Nombor lebih besar mencipta bayang lebih baik tetapi ia juga lebih banyak " +"guna sumber." #: src/settings_translation_file.cpp msgid "" @@ -6880,7 +6885,6 @@ msgstr "" "(active_object_send_range_blocks)." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end.\n" "A restart is required after changing this.\n" @@ -6889,7 +6893,7 @@ msgid "" "On other platforms, OpenGL is recommended.\n" "Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)" msgstr "" -"Terjemahan bahagian belakang untuk Irrlicht.\n" +"Terjemahan bahagian belakang.\n" "Anda perlu memulakan semula selepas mengubah tetapan ini.\n" "Nota: Di Android, kekalkan dengan OGLES1 jika tidak pasti! Apl mungkin gagal " "dimulakan jika ditukar.\n" @@ -6976,7 +6980,8 @@ msgid "" "Time in seconds for item entity (dropped items) to live.\n" "Setting it to -1 disables the feature." msgstr "" -"Masa untuk entiti item (item yang dijatuhkan) terus hidup dalam unit saat.\n" +"Masa untuk entiti item (iaitu item yang dijatuhkan) terus hidup dalam unit " +"saat.\n" "Tetapkan kepada -1 untuk melumpuhkan sifat tersebut." #: src/settings_translation_file.cpp @@ -7136,7 +7141,7 @@ msgstr "VBO" #: src/settings_translation_file.cpp msgid "VSync" -msgstr "VSync" +msgstr "Segerak Menegak" #: src/settings_translation_file.cpp msgid "Valley depth" @@ -7228,9 +7233,8 @@ msgid "Viewing range" msgstr "Jarak pandang" #: src/settings_translation_file.cpp -#, fuzzy msgid "Virtual joystick triggers Aux1 button" -msgstr "Kayu bedik maya memicu butang aux" +msgstr "Kayu bedik maya memicu butang Aux1" #: src/settings_translation_file.cpp msgid "Volume" @@ -7338,7 +7342,6 @@ msgstr "" "perkakasan." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" "can be blurred, so automatically upscale them with nearest-neighbor\n" @@ -7351,18 +7354,18 @@ msgid "" msgstr "" "Apabila menggunakan tapisan bilinear/trilinear/anisotropik, tekstur " "resolusi\n" -"rendah boleh jadi kabur, jadi sesuai-naikkan mereka secara automatik dengan\n" -"sisipan jiran terdekat untuk memelihara piksel keras. Tetapan ini " -"menetapkan\n" -"saiz tekstur minima untuk tekstur penyesuai-naikkan; nilai lebih tinggi " -"tampak\n" -"lebih tajam, tetapi memerlukan memori yang lebih banyak. Nilai kuasa 2\n" -"digalakkan. Menetapkan nilai ini lebih tinggi dari 1 tidak akan " -"menampakkan\n" -"kesan yang nyata melainkan tapisan bilinear/trilinear/anisotropik " +"rendah boleh jadi kabur, jadi sesuai-naikkannya secara automatik dengan " +"sisipan\n" +"jiran terdekat untuk memelihara piksel keras. Tetapan ini menetapkan saiz " +"tekstur\n" +"minimum untuk tekstur yang disesuai-naikkan; nilai lebih tinggi tampak " +"lebih\n" +"tajam, tetapi memerlukan memori yang lebih banyak. Nilai kuasa 2 digalakkan." +"\n" +"Tetapan ini HANYA digunakan jika penapisan bilinear/trilinear/anisotropik " "dibolehkan.\n" -"Ini juga digunakan sebagai saiz tekstur nod asas untuk autopenyesuaian\n" -"tekstur jajaran dunia." +"Tetapan ini juga digunakan sebagai saiz tekstur nod asas untuk\n" +"penyesuaian automatik bagi tekstur jajaran dunia." #: src/settings_translation_file.cpp msgid "" @@ -7435,9 +7438,8 @@ msgstr "" "seperti menekan butang F5)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Width component of the initial window size. Ignored in fullscreen mode." -msgstr "Komponen lebar saiz tetingkap awal." +msgstr "Komponen lebar saiz tetingkap awal. Diabaikan dalam mod skrin penuh." #: src/settings_translation_file.cpp msgid "Width of the selection box lines around nodes." @@ -7573,9 +7575,8 @@ msgid "cURL file download timeout" msgstr "Had masa muat turun fail cURL" #: src/settings_translation_file.cpp -#, fuzzy msgid "cURL interactive timeout" -msgstr "Had masa cURL" +msgstr "Had masa saling tindak cURL" #: src/settings_translation_file.cpp msgid "cURL parallel limit" From b9c1a999ff5b7de8000f619c432cab2583c79486 Mon Sep 17 00:00:00 2001 From: waxtatect Date: Wed, 16 Jun 2021 19:13:36 +0000 Subject: [PATCH 060/412] Translated using Weblate (French) Currently translated at 94.9% (1325 of 1396 strings) --- po/fr/minetest.po | 920 +++++++++++++++++++++++----------------------- 1 file changed, 462 insertions(+), 458 deletions(-) diff --git a/po/fr/minetest.po b/po/fr/minetest.po index aa0ffd158..bcfe2d77a 100644 --- a/po/fr/minetest.po +++ b/po/fr/minetest.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: French (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-06-02 19:33+0000\n" +"PO-Revision-Date: 2021-09-26 15:58+0000\n" "Last-Translator: waxtatect \n" "Language-Team: French \n" @@ -12,49 +12,43 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Clear the out chat queue" -msgstr "Taille maximale de la file de sortie de message du tchat" +msgstr "Effacer la file de sortie de message du tchat" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Empty command." -msgstr "Commandes de tchat" +msgstr "Commande vide." #: builtin/client/chatcommands.lua -#, fuzzy msgid "Exit to main menu" -msgstr "Menu principal" +msgstr "Quitter vers le menu principal" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Invalid command: " -msgstr "Commande locale" +msgstr "Commande invalide : " #: builtin/client/chatcommands.lua msgid "Issued command: " -msgstr "" +msgstr "Commande émise : " #: builtin/client/chatcommands.lua -#, fuzzy msgid "List online players" -msgstr "Solo" +msgstr "Liste des joueurs en ligne" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Online players: " -msgstr "Solo" +msgstr "Joueurs en ligne : " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." -msgstr "" +msgstr "La file de sortie de message du tchat est maintenant vide." #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "Cette commande est désactivée par le serveur." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -65,36 +59,35 @@ msgid "You died" msgstr "Vous êtes mort" #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." -msgstr "Vous êtes mort" +msgstr "Vous êtes mort." #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands:" -msgstr "Commande locale" +msgstr "Commandes disponibles :" #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands: " -msgstr "Commande locale" +msgstr "Commandes disponibles : " #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "Commande non disponible : " #: builtin/common/chatcommands.lua msgid "Get help for commands" -msgstr "" +msgstr "Obtenir de l'aide pour les commandes" #: builtin/common/chatcommands.lua msgid "" "Use '.help ' to get more information, or '.help all' to list everything." msgstr "" +"Utilisez « .help  » pour obtenir plus d'informations, ou « .help all » " +"pour tout lister." #: builtin/common/chatcommands.lua msgid "[all | ]" -msgstr "" +msgstr "[all | ]" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" @@ -370,7 +363,7 @@ msgstr "Refroidissement en altitude" #: builtin/mainmenu/dlg_create_world.lua msgid "Altitude dry" -msgstr "Faible humidité d'altitude" +msgstr "Faible humidité en altitude" #: builtin/mainmenu/dlg_create_world.lua msgid "Biome blending" @@ -414,11 +407,11 @@ msgstr "Terrain plat" #: builtin/mainmenu/dlg_create_world.lua msgid "Floating landmasses in the sky" -msgstr "Îles volantes" +msgstr "Masses de terrains flottants dans le ciel" #: builtin/mainmenu/dlg_create_world.lua msgid "Floatlands (experimental)" -msgstr "Îles volantes (expérimental)" +msgstr "Terrains flottants (expérimental)" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" @@ -426,7 +419,7 @@ msgstr "Jeu" #: builtin/mainmenu/dlg_create_world.lua msgid "Generate non-fractal terrain: Oceans and underground" -msgstr "Générer un terrain non fractal : océans et souterrain" +msgstr "Générer un terrain non fractal : océans et souterrain" #: builtin/mainmenu/dlg_create_world.lua msgid "Hills" @@ -446,7 +439,8 @@ msgstr "Lacs" #: builtin/mainmenu/dlg_create_world.lua msgid "Low humidity and high heat causes shallow or dry rivers" -msgstr "L'air sec et chaud réduit le niveau d'eau ou assèche les rivières" +msgstr "" +"Humidité basse et chaleur élevée rendent les rivières peu profondes ou sèches" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen" @@ -478,11 +472,11 @@ msgstr "Aucun jeu sélectionné" #: builtin/mainmenu/dlg_create_world.lua msgid "Reduces heat with altitude" -msgstr "Réduire la température avec l'altitude" +msgstr "Réduit la chaleur avec l'altitude" #: builtin/mainmenu/dlg_create_world.lua msgid "Reduces humidity with altitude" -msgstr "Réduire l'humidité avec l'altitude" +msgstr "Réduit l'humidité avec l'altitude" #: builtin/mainmenu/dlg_create_world.lua msgid "Rivers" @@ -490,7 +484,7 @@ msgstr "Rivières" #: builtin/mainmenu/dlg_create_world.lua msgid "Sea level rivers" -msgstr "Rivière au niveau de mer" +msgstr "Rivières au niveau de la mer" #: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -506,8 +500,8 @@ msgid "" "Structures appearing on the terrain (no effect on trees and jungle grass " "created by v6)" msgstr "" -"Structures apparaissantes sur le sol (sans effets sur la création d'arbre et " -"de jungle par v6)" +"Structures apparaissant sur le sol (sans effet sur la création d'arbres et " +"d'herbes de la jungle par v6)" #: builtin/mainmenu/dlg_create_world.lua msgid "Structures appearing on the terrain, typically trees and plants" @@ -521,11 +515,11 @@ msgstr "Tempéré, désertique" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle" -msgstr "Tempéré, désertique, tropical" +msgstr "Tempéré, désertique, jungle" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle, Tundra, Taiga" -msgstr "Tempéré, désertique, tropical, de toundra, de taïga" +msgstr "Tempéré, désertique, jungle, toundra, taïga" #: builtin/mainmenu/dlg_create_world.lua msgid "Terrain surface erosion" @@ -533,7 +527,7 @@ msgstr "Érosion du sol" #: builtin/mainmenu/dlg_create_world.lua msgid "Trees and jungle grass" -msgstr "Arbres et végétation de jungle" +msgstr "Arbres et herbes de la jungle" #: builtin/mainmenu/dlg_create_world.lua msgid "Vary river depth" @@ -545,7 +539,7 @@ msgstr "Très grande cavernes profondes" #: builtin/mainmenu/dlg_create_world.lua msgid "Warning: The Development Test is meant for developers." -msgstr "Avertissement : le jeu minimal est fait pour les développeurs." +msgstr "Avertissement : le jeu minimal est fait pour les développeurs." #: builtin/mainmenu/dlg_create_world.lua msgid "World name" @@ -571,7 +565,7 @@ msgstr "Le gestionnaire de mods n'a pas pu supprimer « $1 »" #: builtin/mainmenu/dlg_delete_content.lua msgid "pkgmgr: invalid path \"$1\"" -msgstr "Gestionnaire de mods : chemin de mod invalide « $1 »" +msgstr "Gestionnaire de mods : chemin de mod invalide « $1 »" #: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" @@ -595,7 +589,7 @@ msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "(No description of setting given)" -msgstr "(Aucune description donnée de l'option)" +msgstr "(Aucune description du paramètre donnée)" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "2D Noise" @@ -631,7 +625,7 @@ msgstr "Octaves" #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp msgid "Offset" -msgstr "Décallage" +msgstr "Décalage" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Persistance" @@ -651,7 +645,7 @@ msgstr "Réinitialiser" #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp msgid "Scale" -msgstr "Echelle" +msgstr "Échelle" #: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua msgid "Search" @@ -739,23 +733,23 @@ msgstr "Échec de l'installation de $1 vers $2" #: builtin/mainmenu/pkgmgr.lua msgid "Install Mod: Unable to find real mod name for: $1" msgstr "" -"Installation d'un mod : impossible de trouver le vrai nom du mod pour : $1" +"Installation d'un mod : impossible de trouver le vrai nom du mod pour : $1" #: builtin/mainmenu/pkgmgr.lua msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -"Installation un mod : impossible de trouver un nom de dossier valide pour le " +"Installation un mod : impossible de trouver un nom de dossier valide pour le " "pack de mods $1" #: builtin/mainmenu/pkgmgr.lua msgid "Install: Unsupported file type \"$1\" or broken archive" msgstr "" -"Installation d'un mod : type de fichier non supporté « $1 » ou archive " +"Installation d'un mod : type de fichier non supporté « $1 » ou archive " "endommagée" #: builtin/mainmenu/pkgmgr.lua msgid "Install: file: \"$1\"" -msgstr "Installation : fichier : « $1 »" +msgstr "Installation : fichier : « $1 »" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" @@ -788,21 +782,20 @@ msgstr "La liste des serveurs publics est désactivée" #: builtin/mainmenu/serverlistmgr.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -"Essayez de rechargez la liste des serveurs publics et vérifiez votre " -"connexion Internet." +"Essayez de réactiver la liste des serveurs et vérifiez votre connexion " +"Internet." #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "" +msgstr "À propos" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" msgstr "Contributeurs actifs" #: builtin/mainmenu/tab_about.lua -#, fuzzy msgid "Active renderer:" -msgstr "Portée des objets actifs envoyés" +msgstr "Moteur de rendu actif :" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" @@ -891,7 +884,7 @@ msgstr "Héberger une partie" #: builtin/mainmenu/tab_local.lua msgid "Host Server" -msgstr "Héberger un serveur" +msgstr "Héberger le serveur" #: builtin/mainmenu/tab_local.lua msgid "Install games from ContentDB" @@ -938,9 +931,8 @@ msgid "Start Game" msgstr "Démarrer" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Address" -msgstr "- Adresse : " +msgstr "Adresse" #: builtin/mainmenu/tab_online.lua src/client/keycode.cpp msgid "Clear" @@ -956,22 +948,20 @@ msgstr "Mode créatif" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Damage / PvP" -msgstr "Dégâts" +msgstr "Dégâts / JcJ" #: builtin/mainmenu/tab_online.lua msgid "Del. Favorite" msgstr "Supprimer favori" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Favorites" -msgstr "Favori" +msgstr "Favoris" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" -msgstr "" +msgstr "Serveurs incompatibles" #: builtin/mainmenu/tab_online.lua msgid "Join Game" @@ -982,16 +972,14 @@ msgid "Ping" msgstr "Ping" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Public Servers" -msgstr "Annoncer le serveur" +msgstr "Serveurs publics" #: builtin/mainmenu/tab_online.lua msgid "Refresh" -msgstr "" +msgstr "Actualiser" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Server Description" msgstr "Description du serveur" @@ -1036,13 +1024,12 @@ msgid "Connected Glass" msgstr "Verre unifié" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp -#, fuzzy msgid "Dynamic shadows" -msgstr "Ombre de la police" +msgstr "Ombres dynamiques" #: builtin/mainmenu/tab_settings.lua msgid "Dynamic shadows: " -msgstr "" +msgstr "Ombres dynamiques : " #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" @@ -1050,19 +1037,19 @@ msgstr "Feuilles détaillées" #: builtin/mainmenu/tab_settings.lua msgid "High" -msgstr "" +msgstr "Élevées" #: builtin/mainmenu/tab_settings.lua msgid "Low" -msgstr "" +msgstr "Basses" #: builtin/mainmenu/tab_settings.lua msgid "Medium" -msgstr "" +msgstr "Moyennes" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" -msgstr "MIP mapping" +msgstr "MIP map" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap + Aniso. Filter" @@ -1134,8 +1121,7 @@ msgstr "Texturisation :" #: builtin/mainmenu/tab_settings.lua msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" -"Pour activer les textures nuancées, le pilote OpenGL doit être utilisé." +msgstr "Pour activer les shaders, le pilote OpenGL doit être utilisé." #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" @@ -1151,11 +1137,11 @@ msgstr "Filtrage trilinéaire" #: builtin/mainmenu/tab_settings.lua msgid "Ultra High" -msgstr "" +msgstr "Très élevées" #: builtin/mainmenu/tab_settings.lua msgid "Very Low" -msgstr "" +msgstr "Très basses" #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" @@ -1191,7 +1177,7 @@ msgstr "Chargement des textures…" #: src/client/client.cpp msgid "Rebuilding shaders..." -msgstr "Reconstruction des textures nuancées…" +msgstr "Reconstruction des shaders…" #: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" @@ -1235,40 +1221,40 @@ msgid "" "Check debug.txt for details." msgstr "" "\n" -"Voir debug.txt pour plus d'informations." +"Voir « debug.txt » pour plus d'informations." #: src/client/game.cpp msgid "- Address: " -msgstr "- Adresse : " +msgstr "– Adresse : " #: src/client/game.cpp msgid "- Creative Mode: " -msgstr "- Mode créatif : " +msgstr "– Mode créatif : " #: src/client/game.cpp msgid "- Damage: " -msgstr "- Dégâts : " +msgstr "– Dégâts : " #: src/client/game.cpp msgid "- Mode: " -msgstr "- Mode : " +msgstr "– Mode : " #: src/client/game.cpp msgid "- Port: " -msgstr "- Port : " +msgstr "– Port : " #: src/client/game.cpp msgid "- Public: " -msgstr "- Public : " +msgstr "– Public : " #. ~ PvP = Player versus Player #: src/client/game.cpp msgid "- PvP: " -msgstr "- JcJ : " +msgstr "– JcJ : " #: src/client/game.cpp msgid "- Server Name: " -msgstr "- Nom du serveur : " +msgstr "– Nom du serveur : " #: src/client/game.cpp msgid "Automatic forward disabled" @@ -1328,19 +1314,19 @@ msgid "" "- Mouse wheel: select item\n" "- %s: chat\n" msgstr "" -"Contrôles : \n" -"– %s : avancer\n" -"– %s : reculer\n" -"– %s : à gauche\n" -"– %s : à droite\n" -"– %s : sauter/grimper\n" -"– %s : creuser/actionner\n" -"– %s : placer/utiliser\n" -"– %s : marcher lentement/descendre\n" -"– %s : lâcher un objet\n" -"– %s : inventaire\n" -"– Souris : tourner/regarder\n" -"– Molette souris : sélectionner un objet\n" +"Contrôles :\n" +"– %s : avancer\n" +"– %s : reculer\n" +"– %s : à gauche\n" +"– %s : à droite\n" +"– %s : sauter/grimper\n" +"– %s : creuser/actionner\n" +"– %s : placer/utiliser\n" +"– %s : marcher lentement/descendre\n" +"– %s : lâcher un objet\n" +"– %s : inventaire\n" +"– Souris : tourner/regarder\n" +"– Molette souris : sélectionner un objet\n" "– %s : tchat\n" #: src/client/game.cpp @@ -1353,15 +1339,15 @@ msgstr "Création du serveur…" #: src/client/game.cpp msgid "Debug info and profiler graph hidden" -msgstr "Informations de debogage et graphique de profil cachés" +msgstr "Informations de débogage et graphique du profileur cachés" #: src/client/game.cpp msgid "Debug info shown" -msgstr "Infos de débogage affichées" +msgstr "Informations de débogage affichées" #: src/client/game.cpp msgid "Debug info, profiler graph, and wireframe hidden" -msgstr "Informations de debogage, graphique de profil et fils de fer cachés" +msgstr "Informations de débogage, graphique du profileur et fils de fer cachés" #: src/client/game.cpp msgid "" @@ -1378,15 +1364,15 @@ msgid "" "- touch&drag, tap 2nd finger\n" " --> place single item to slot\n" msgstr "" -"Touches par défaut : \n" -"Sans menu visible : \n" -"– un seul appui : touche d'activation\n" -"– double-appui : placement / utilisation\n" -"– Glissement du doigt : regarder autour\n" -"Menu / Inventaire visible : \n" -"– double-appui (en dehors) : fermeture\n" -"– objet(s) dans l'inventaire : déplacement\n" -"– appui, glissement et appui : pose d'un seul item par emplacement\n" +"Touches par défaut :\n" +"Sans menu visible :\n" +"– un seul appui : touche d'activation\n" +"– double-appui : placement / utilisation\n" +"– Glissement du doigt : regarder autour\n" +"Menu / Inventaire visible :\n" +"– double-appui (en dehors) : fermeture\n" +"– objet(s) dans l'inventaire : déplacement\n" +"– appui, glissement et appui : pose d'un seul item par emplacement\n" #: src/client/game.cpp msgid "Disabled unlimited viewing range" @@ -1414,7 +1400,7 @@ msgstr "Vitesse en mode rapide activée" #: src/client/game.cpp msgid "Fast mode enabled (note: no 'fast' privilege)" -msgstr "Vitesse en mode rapide activée (note : pas de privilège « fast »)" +msgstr "Vitesse en mode rapide activée (note : pas de privilège « fast »)" #: src/client/game.cpp msgid "Fly mode disabled" @@ -1426,7 +1412,7 @@ msgstr "Mode vol activé" #: src/client/game.cpp msgid "Fly mode enabled (note: no 'fly' privilege)" -msgstr "Mode vol activé (note : pas de privilège « fly »)" +msgstr "Mode vol activé (note : pas de privilège « fly »)" #: src/client/game.cpp msgid "Fog disabled" @@ -1446,7 +1432,7 @@ msgstr "Jeu en pause" #: src/client/game.cpp msgid "Hosting server" -msgstr "Héberger un serveur" +msgstr "Serveur hôte" #: src/client/game.cpp msgid "Item definitions..." @@ -1469,9 +1455,8 @@ msgid "Minimap currently disabled by game or mod" msgstr "Mini-carte actuellement désactivée par un jeu ou un mod" #: src/client/game.cpp -#, fuzzy msgid "Multiplayer" -msgstr "Solo" +msgstr "Multijoueur" #: src/client/game.cpp msgid "Noclip mode disabled" @@ -1483,7 +1468,7 @@ msgstr "Collisions désactivées" #: src/client/game.cpp msgid "Noclip mode enabled (note: no 'noclip' privilege)" -msgstr "Collisions activées (note : pas de privilège « noclip »)" +msgstr "Collisions activées (note : pas de privilège « noclip »)" #: src/client/game.cpp msgid "Node definitions..." @@ -1507,7 +1492,7 @@ msgstr "Mode de mouvement à direction libre activé" #: src/client/game.cpp msgid "Profiler graph shown" -msgstr "Graphique de profil affiché" +msgstr "Graphique du profileur affiché" #: src/client/game.cpp msgid "Remote server" @@ -1553,12 +1538,12 @@ msgstr "Distance de vue réglée sur %d" #: src/client/game.cpp #, c-format msgid "Viewing range is at maximum: %d" -msgstr "Distance de vue maximale : %d" +msgstr "Distance de vue maximale : %d" #: src/client/game.cpp #, c-format msgid "Viewing range is at minimum: %d" -msgstr "Distance de vue minimale : %d" +msgstr "Distance de vue minimale : %d" #: src/client/game.cpp #, c-format @@ -1672,7 +1657,7 @@ msgstr "Gauche" #: src/client/keycode.cpp msgid "Left Button" -msgstr "Bouton gauche" +msgstr "Clic gauche" #: src/client/keycode.cpp msgid "Left Control" @@ -1697,7 +1682,7 @@ msgstr "Menu" #: src/client/keycode.cpp msgid "Middle Button" -msgstr "Bouton du milieu" +msgstr "Clic central" #: src/client/keycode.cpp msgid "Num Lock" @@ -1798,7 +1783,7 @@ msgstr "Droite" #: src/client/keycode.cpp msgid "Right Button" -msgstr "Bouton droit" +msgstr "Clic droit" #: src/client/keycode.cpp msgid "Right Control" @@ -1909,9 +1894,8 @@ msgid "Proceed" msgstr "Procéder" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "\"Aux1\" = climb down" -msgstr "« Spécial » = descendre" +msgstr "« Aux1 » = descendre" #: src/gui/guiKeyChangeMenu.cpp msgid "Autoforward" @@ -1923,7 +1907,7 @@ msgstr "Sauts automatiques" #: src/gui/guiKeyChangeMenu.cpp msgid "Aux1" -msgstr "" +msgstr "Aux1" #: src/gui/guiKeyChangeMenu.cpp msgid "Backward" @@ -1931,7 +1915,7 @@ msgstr "Reculer" #: src/gui/guiKeyChangeMenu.cpp msgid "Block bounds" -msgstr "" +msgstr "Limites des blocs" #: src/gui/guiKeyChangeMenu.cpp msgid "Change camera" @@ -2108,14 +2092,13 @@ msgstr "" "principal." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "(Android) Use virtual joystick to trigger \"Aux1\" button.\n" "If enabled, virtual joystick will also tap \"Aux1\" button when out of main " "circle." msgstr "" -"(Android) Utiliser la manette virtuelle pour déclencher le bouton « aux ».\n" -"Si activé, la manette virtuelle va également appuyer sur le bouton « aux » " +"(Android) Utiliser la manette virtuelle pour déclencher le bouton « Aux1 ».\n" +"Si activé, la manette virtuelle va également appuyer sur le bouton « Aux1 » " "lorsqu'en dehors du cercle principal." #: src/settings_translation_file.cpp @@ -2150,14 +2133,13 @@ msgid "" "Default is for a vertically-squashed shape suitable for\n" "an island, set all 3 numbers equal for the raw shape." msgstr "" -"(Échelle (X,Y,Z) de fractales, en nœuds.\n" -"La taille des fractales sera 2 à 3 fais plus grande en réalité.\n" -"Ces nombres peuvent être très grands, les fractales de devant\n" -"pas être impérativement contenues dans le monde.\n" -"Augmentez-les pour « zoomer » dans les détails de la fractale.\n" -"Le réglage par défaut correspond à un forme écrasée verticalement, " -"appropriée pour\n" -"un île, rendez les 3 nombres égaux pour la forme de base." +"Échelle (X,Y,Z) de la fractale en nœuds.\n" +"La taille réelle de la fractale sera 2 à 3 fois plus grande.\n" +"Ces nombres peuvent être très grands, la fractale n'a pas à être contenue " +"dans le monde. Les augmenter pour « zoomer » dans les détails de la fractale." +"\n" +"Le valeur par défaut est pour une forme verticalement écrasée convenant pour " +"une île, définir les 3 nombres égaux pour la forme brute." #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of ridged mountains." @@ -2209,7 +2191,7 @@ msgid "" "Also defines structure of floatland mountain terrain." msgstr "" "Bruit 3D définissant la structure et la hauteur des montagnes.\n" -"Définit également la structure des montagnes flottantes." +"Définit également la structure de terrain flottant type montagne." #: src/settings_translation_file.cpp msgid "" @@ -2218,10 +2200,11 @@ msgid "" "to be adjusted, as floatland tapering functions best when this noise has\n" "a value range of approximately -2.0 to 2.0." msgstr "" -"Bruit 3D pour la structures des îles volantes.\n" +"Bruit 3D pour la structures des terrains flottants.\n" "Si la valeur par défaut est changée, le bruit « d'échelle » (0,7 par défaut) " -"doit peut-être être ajustée, parce que l'effilage des îles volantes " -"fonctionne le mieux quand ce bruit est environ entre -2 et 2." +"peut demander à être ajustée, comme l'effilage des terrains flottants " +"fonctionne mieux quand le bruit à une valeur approximativement comprise " +"entre -2,0 et 2,0." #: src/settings_translation_file.cpp msgid "3D noise defining structure of river canyon walls." @@ -2254,14 +2237,14 @@ msgid "" "Note that the interlaced mode requires shaders to be enabled." msgstr "" "Support 3D.\n" -"Actuellement supporté : \n" -"– aucun : pas de sortie 3D.\n" -"– anaglyphe : couleur 3D bleu turquoise/violet.\n" -"– entrelacé : polarisation basée sur des lignes avec support de l'écran.\n" -"– horizontal : partage haut/bas de l'écran.\n" -"– vertical : séparation côte à côte de l'écran.\n" -"– vue mixte : 3D binoculaire.\n" -"– pageflip : 3D basé sur quadbuffer.\n" +"Actuellement supporté :\n" +"– aucun : pas de sortie 3D.\n" +"– anaglyphe : couleur 3D bleu turquoise/violet.\n" +"– entrelacé : polarisation basée sur des lignes avec support de l'écran.\n" +"– horizontal : partage haut/bas de l'écran.\n" +"– vertical : séparation côte à côte de l'écran.\n" +"– vue mixte : 3D binoculaire.\n" +"– « pageflip » : 3D basé sur « quadbuffer ».\n" "Notez que le mode entrelacé nécessite que les shaders soient activés." #: src/settings_translation_file.cpp @@ -2275,8 +2258,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "A message to be displayed to all clients when the server crashes." -msgstr "" -"Un message qui sera affiché à tous les joueurs quand le serveur s'interrompt." +msgstr "Un message qui sera affiché à tous les joueurs quand le serveur plante." #: src/settings_translation_file.cpp msgid "A message to be displayed to all clients when the server shuts down." @@ -2328,7 +2310,7 @@ msgstr "" "Adresse où se connecter.\n" "Laisser vide pour démarrer un serveur local.\n" "Notez que le champ de l'adresse dans le menu principal passe outre ce " -"réglage." +"paramètre." #: src/settings_translation_file.cpp msgid "Adds particles when digging a node." @@ -2351,12 +2333,12 @@ msgid "" "Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n" "to be sure) creates a solid floatland layer." msgstr "" -"Règle la densité de la couche des îles volantes.\n" +"Règle la densité de la couche de terrain flottant.\n" "Augmenter la valeur pour augmenter la densité. Peut être positive ou " "négative.\n" -"Valeur = 0,0 : 50 % du volume est île volante.\n" +"Valeur = 0,0 : 50 % du volume est terrain flottant.\n" "Valeur = 2,0 (peut être plus élevée selon « mgv7_np_floatland », toujours " -"vérifier pour être sûr) crée une couche d'île volante solide." +"vérifier pour être sûr) créée une couche de terrain flottant solide." #: src/settings_translation_file.cpp msgid "Advanced" @@ -2374,8 +2356,8 @@ msgstr "" "Des valeurs plus élevées rendent les niveaux de lumière moyens et inférieurs " "plus lumineux.\n" "La valeur « 1,0 » laisse la courbe de lumière intacte.\n" -"Cela n'a d'effet significatif que sur la lumière du jour et les\n" -"la lumière, et elle a très peu d'effet sur la lumière naturelle de la nuit." +"Cela n'a un effet significatif que sur la lumière du jour et la lumière " +"artificielle, elle a très peu d'effet sur la lumière naturelle nocturne." #: src/settings_translation_file.cpp msgid "Always fly and fast" @@ -2383,7 +2365,7 @@ msgstr "Toujours voler et être rapide" #: src/settings_translation_file.cpp msgid "Ambient occlusion gamma" -msgstr "Occlusion gamma ambiente" +msgstr "Occlusion gamma ambiante" #: src/settings_translation_file.cpp msgid "Amount of messages a player may send per 10 seconds." @@ -2403,7 +2385,7 @@ msgstr "Annoncer le serveur" #: src/settings_translation_file.cpp msgid "Announce to this serverlist." -msgstr "Annoncer le serveur publiquement." +msgstr "Annoncer à cette liste de serveurs." #: src/settings_translation_file.cpp msgid "Append item name" @@ -2411,7 +2393,7 @@ msgstr "Ajouter un nom d'objet" #: src/settings_translation_file.cpp msgid "Append item name to tooltip." -msgstr "Ajouter un nom d'objet à l'info-bulle." +msgstr "Ajouter un nom d'objet à l'infobulle." #: src/settings_translation_file.cpp msgid "Apple trees noise" @@ -2453,7 +2435,7 @@ msgstr "" "mais peut provoquer l'apparition de problèmes de rendu visibles (certains " "blocs ne seront pas affichés sous l'eau ou dans les cavernes, ou parfois sur " "terre).\n" -"Une valeur supérieure à max_block_send_distance désactive cette " +"Une valeur supérieure à « max_block_send_distance » désactive cette " "optimisation.\n" "Définie en mapblocks (16 nœuds)." @@ -2467,7 +2449,7 @@ msgstr "Saute automatiquement sur les obstacles d'un bloc de haut." #: src/settings_translation_file.cpp msgid "Automatically report to the serverlist." -msgstr "Déclarer automatiquement le serveur à la liste des serveurs publics." +msgstr "Déclarer automatiquement le serveur à la liste des serveurs." #: src/settings_translation_file.cpp msgid "Autosave screen size" @@ -2478,14 +2460,12 @@ msgid "Autoscaling mode" msgstr "Mode d'agrandissement automatique" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key" -msgstr "Sauter" +msgstr "Aux1" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key for climbing/descending" -msgstr "Touche spéciale pour monter/descendre" +msgstr "Touche Aux1 pour monter/descendre" #: src/settings_translation_file.cpp msgid "Backward key" @@ -2566,10 +2546,10 @@ msgid "" "Increasing can reduce artifacting on weaker GPUs.\n" "0.1 = Default, 0.25 = Good value for weaker tablets." msgstr "" -"Distance de la caméra 'près du plan de coupure' dans les nœuds, entre 0 et " +"Distance de la caméra « près du plan de coupure » dans les nœuds, entre 0 et " "0,25\n" -"Ne fonctionne que sur les plateformes GLES. La plupart des utilisateurs " -"n’auront pas besoin de changer cela.\n" +"Ne fonctionne que sur les plateformes GLES. La plupart des utilisateurs n’" +"auront pas besoin de changer cela.\n" "L’augmentation peut réduire les artefacts sur des GPUs plus faibles.\n" "0,1 = Défaut, 0,25 = Bonne valeur pour les tablettes plus faibles." @@ -2611,7 +2591,7 @@ msgstr "Bruit des caves nº 2" #: src/settings_translation_file.cpp msgid "Cavern limit" -msgstr "Limites des cavernes" +msgstr "Limite des cavernes" #: src/settings_translation_file.cpp msgid "Cavern noise" @@ -2619,11 +2599,11 @@ msgstr "Bruit des caves" #: src/settings_translation_file.cpp msgid "Cavern taper" -msgstr "Caillou de caverne" +msgstr "Conicité de la caverne" #: src/settings_translation_file.cpp msgid "Cavern threshold" -msgstr "Limite des cavernes" +msgstr "Seuil des cavernes" #: src/settings_translation_file.cpp msgid "Cavern upper limit" @@ -2639,9 +2619,8 @@ msgstr "" "maximale." #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat command time message threshold" -msgstr "Seuil de messages de discussion avant déconnexion forcée" +msgstr "Seuil du message de temps de commande de tchat" #: src/settings_translation_file.cpp msgid "Chat font size" @@ -2740,9 +2719,8 @@ msgid "Colored fog" msgstr "Brouillard coloré" #: src/settings_translation_file.cpp -#, fuzzy msgid "Colored shadows" -msgstr "Brouillard coloré" +msgstr "Ombres colorées" #: src/settings_translation_file.cpp msgid "" @@ -2844,7 +2822,7 @@ msgid "" "72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged." msgstr "" "Contrôle la durée complet du cycle jour/nuit.\n" -"Exemples : \n" +"Exemples :\n" "72 = 20 minutes, 360 = 4 minutes, 1 = 24 heures, 0 = jour/nuit/n'importe " "quoi éternellement." @@ -2973,6 +2951,9 @@ msgid "" "This simulates the soft shadows effect by applying a PCF or poisson disk\n" "but also uses more resources." msgstr "" +"Définir la qualité du filtrage des ombres. Ceci simule l'effet d'ombres " +"douces en appliquant un disque PCF ou poisson mais utilise également plus de " +"ressources." #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." @@ -3036,8 +3017,7 @@ msgid "" "Delay between mesh updates on the client in ms. Increasing this will slow\n" "down the rate of mesh updates, thus reducing jitter on slower clients." msgstr "" -"Délai entre les mises à jour du maillage sur le client en ms. Augmenter " -"ceci\n" +"Délai entre les mises à jour du maillage sur le client en ms. Augmenter ceci " "ralentit le taux de mise à jour et réduit donc les tremblements sur les " "client lents." @@ -3047,7 +3027,7 @@ msgstr "Retard dans les blocs envoyés après la construction" #: src/settings_translation_file.cpp msgid "Delay showing tooltips, stated in milliseconds." -msgstr "Latence d'apparition des infobulles, établie en millisecondes." +msgstr "Délai d'apparition des infobulles, établie en millisecondes." #: src/settings_translation_file.cpp msgid "Deprecated Lua API handling" @@ -3065,18 +3045,20 @@ msgstr "Profondeur en-dessous duquel se trouvent de grandes caves." msgid "" "Description of server, to be displayed when players join and in the " "serverlist." -msgstr "Description du serveur affichée sur la liste des serveurs." +msgstr "" +"Description du serveur affichée lorsque les joueurs se connectent et sur la " +"liste des serveurs." #: src/settings_translation_file.cpp msgid "Desert noise threshold" -msgstr "Limite de bruit pour le désert" +msgstr "Seuil du bruit pour le désert" #: src/settings_translation_file.cpp msgid "" "Deserts occur when np_biome exceeds this value.\n" "When the 'snowbiomes' flag is enabled, this is ignored." msgstr "" -"Des déserts apparaissent lorsque np_biome dépasse cette valeur.\n" +"Des déserts apparaissent lorsque « np_biome » dépasse cette valeur.\n" "Quand le drapeau « snowbiomes » est activé (avec le nouveau système de " "biomes), ce paramètre est ignoré." @@ -3102,7 +3084,7 @@ msgstr "Refuser les mots de passe vides" #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." -msgstr "Nom de domaine du serveur affichée sur la liste des serveurs publics." +msgstr "Nom de domaine du serveur affichée sur la liste des serveurs." #: src/settings_translation_file.cpp msgid "Double tap jump for fly" @@ -3153,6 +3135,9 @@ msgid "" "Enable colored shadows. \n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" +"Active les ombres colorées.\n" +"Sur les nœuds vraiment transparents, projette des ombres colorées. Ceci est " +"coûteux." #: src/settings_translation_file.cpp msgid "Enable console window" @@ -3184,6 +3169,9 @@ msgid "" "On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " "filtering." msgstr "" +"Active le filtrage par disque de Poisson.\n" +"Si activé, utilise le disque de Poisson pour créer des « ombres douces ». " +"Sinon, utilise le filtrage PCF." #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." @@ -3233,7 +3221,7 @@ msgid "" msgstr "" "Activer l'usage d'un serveur de média distant (si pourvu par le serveur).\n" "Les serveurs de média distants offrent un moyen significativement plus " -"rapide de télécharger des données média (ex. : textures) lors de la " +"rapide de télécharger des données média (ex. : textures) lors de la " "connexion au serveur." #: src/settings_translation_file.cpp @@ -3241,7 +3229,7 @@ msgid "" "Enable vertex buffer objects.\n" "This should greatly improve graphics performance." msgstr "" -"Active les vertex buffer objects.\n" +"Active les « vertex buffer objects ».\n" "Cela devrait grandement augmenter les performances graphiques." #: src/settings_translation_file.cpp @@ -3250,7 +3238,7 @@ msgid "" "For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." msgstr "" "Facteur de mouvement de bras.\n" -"Par exemple : 0 = pas de mouvement, 1 = normal, 2 = double." +"Par exemple : 0 = pas de mouvement, 1 = normal, 2 = double." #: src/settings_translation_file.cpp msgid "" @@ -3259,8 +3247,8 @@ msgid "" "Needs enable_ipv6 to be enabled." msgstr "" "Active/désactive l'usage d'un serveur IPv6.\n" -"Ignoré si bind_address est activé.\n" -"A besoin de enable_ipv6 pour être activé." +"Ignoré si « bind_address » est activé.\n" +"A besoin de « enable_ipv6 » pour être activé." #: src/settings_translation_file.cpp msgid "" @@ -3269,7 +3257,7 @@ msgid "" "appearance of high dynamic range images. Mid-range contrast is slightly\n" "enhanced, highlights and shadows are gradually compressed." msgstr "" -"Active le mappage de tons filmique 'Uncharted 2' de Hable.\n" +"Active le mappage de tons filmique « Uncharted 2 » de Hable.\n" "Simule la courbe des tons du film photographique, ce qui se rapproche de la " "l'apparition d'images à plage dynamique élevée. Le contraste de milieu de " "gamme est légèrement améliorées, les reflets et les ombres sont " @@ -3301,7 +3289,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Engine profiling data print interval" -msgstr "Intervalle d'impression des données du moteur de profil" +msgstr "Intervalle d'impression des données du moteur de profilage" #: src/settings_translation_file.cpp msgid "Entity methods" @@ -3316,12 +3304,14 @@ msgid "" "Values < 1.0 (for example 0.25) create a more defined surface level with\n" "flatter lowlands, suitable for a solid floatland layer." msgstr "" -"Exposant contrôlant la forme du bas des massifs volants.\n" -"Une valeur égale à 1 donne une forme conique.\n" -"Une valeur supérieure à 1 donne une longue base éfilée (concave),\n" -"plus pour des îles volantes comme celles par défaut.\n" -"Une valeur inférieure à 1 (disons 0,25) donne une surface bien\n" -"définie en bas, plus pour une couche solide de massif volant." +"Exposant de l'effilement des terrains flottants. Modifie le comportement de " +"l'effilement.\n" +"Une valeur égale à 1 créée un effilement uniforme et linéaire.\n" +"Une valeur supérieure à 1 créée un effilement lisse adaptée pour les " +"terrains flottants séparés par défaut.\n" +"Une valeur inférieure à 1 (par exemple 0,25) créée une surface plus définie " +"avec des terrains bas plus plats, adaptée pour une couche solide de terrain " +"flottant." #: src/settings_translation_file.cpp msgid "FPS when unfocused or paused" @@ -3360,12 +3350,11 @@ msgid "Fast movement" msgstr "Mouvement rapide" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Fast movement (via the \"Aux1\" key).\n" "This requires the \"fast\" privilege on the server." msgstr "" -"Mouvement rapide (via la touche « spécial »).\n" +"Mouvement rapide (via la touche « Aux1 »).\n" "Nécessite le privilège « fast » sur le serveur." #: src/settings_translation_file.cpp @@ -3382,9 +3371,8 @@ msgid "" "the\n" "Multiplayer Tab." msgstr "" -"Fichier localisé dans client/serverlist/ contenant vos serveurs favoris " -"affichés dans\n" -"l'onglet multijoueur." +"Fichier dans « client/serverlist/ » contenant vos serveurs favoris affichés " +"dans l'onglet « Rejoindre une partie »." #: src/settings_translation_file.cpp msgid "Filler depth" @@ -3399,7 +3387,6 @@ msgid "Filmic tone mapping" msgstr "Mappage de tons filmique" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Filtered textures can blend RGB values with fully-transparent neighbors,\n" "which PNG optimizers usually discard, often resulting in dark or\n" @@ -3408,9 +3395,10 @@ msgid "" msgstr "" "Les textures filtrées peuvent mélanger des valeurs RVB avec des zones " "complètement transparentes, que les optimiseurs PNG ignorent généralement, " -"aboutissant parfois à des bords foncés ou clairs sur les textures " +"aboutissant souvent à des bords foncés ou clairs sur les textures " "transparentes.\n" -"Appliquer ce filtre pour nettoyer cela au chargement de la texture." +"Appliquer ce filtre pour nettoyer cela au chargement de la texture. Ceci est " +"automatiquement activé si le mip-mapping est activé." #: src/settings_translation_file.cpp msgid "Filtering" @@ -3436,31 +3424,31 @@ msgstr "Fixer la manette virtuelle" #: src/settings_translation_file.cpp msgid "Floatland density" -msgstr "Densité des massifs volants" +msgstr "Densité des terrains flottants" #: src/settings_translation_file.cpp msgid "Floatland maximum Y" -msgstr "Maximum Y de massifs volants" +msgstr "Maximum Y des terrains flottants" #: src/settings_translation_file.cpp msgid "Floatland minimum Y" -msgstr "Minimum Y des massifs volants" +msgstr "Minimum Y des terrains flottants" #: src/settings_translation_file.cpp msgid "Floatland noise" -msgstr "Bruit des massifs volants" +msgstr "Bruit des terrains flottants" #: src/settings_translation_file.cpp msgid "Floatland taper exponent" -msgstr "Paramètre de forme des massifs volants" +msgstr "Exposant de l'effilement des terrains flottants" #: src/settings_translation_file.cpp msgid "Floatland tapering distance" -msgstr "Hauteur des bases des massifs volants" +msgstr "Hauteur de la base des terrains flottants" #: src/settings_translation_file.cpp msgid "Floatland water level" -msgstr "Niveau d'eau des massifs volants" +msgstr "Niveau d'eau des terrains flottants" #: src/settings_translation_file.cpp msgid "Fly key" @@ -3524,7 +3512,7 @@ msgid "" "placeholders:\n" "@name, @message, @timestamp (optional)" msgstr "" -"Format des messages de tchat des joueurs. Substituts valides : \n" +"Format des messages de tchat des joueurs. Substituts valides :\n" "@name, @message, @timestamp (facultatif)" #: src/settings_translation_file.cpp @@ -3533,35 +3521,35 @@ msgstr "Format de captures d'écran." #: src/settings_translation_file.cpp msgid "Formspec Default Background Color" -msgstr "Couleur d'arrière plan par défaut des formspec" +msgstr "Couleur de l'arrière-plan par défaut des formspec" #: src/settings_translation_file.cpp msgid "Formspec Default Background Opacity" -msgstr "Opacité par défaut des formspec" +msgstr "Opacité de l'arrière-plan par défaut des formspec" #: src/settings_translation_file.cpp msgid "Formspec Full-Screen Background Color" -msgstr "Couleur d'arrière plan des formspec plein écran" +msgstr "Couleur de l'arrière-plan en plein écran des formspec" #: src/settings_translation_file.cpp msgid "Formspec Full-Screen Background Opacity" -msgstr "Opacité de l'arrière plan des formspec en plein écran" +msgstr "Opacité de l'arrière-plan en plein écran des formspec" #: src/settings_translation_file.cpp msgid "Formspec default background color (R,G,B)." -msgstr "Couleur de fond de la console du jeu (R,V,B)." +msgstr "Couleur de l'arrière-plan par défaut des formspec (R,V,B)." #: src/settings_translation_file.cpp msgid "Formspec default background opacity (between 0 and 255)." -msgstr "Opacité de fond de la console du jeu (entre 0 et 255)." +msgstr "Opacité de l'arrière-plan par défaut des formspec (entre 0 et 255)." #: src/settings_translation_file.cpp msgid "Formspec full-screen background color (R,G,B)." -msgstr "Couleur de fond de la console du jeu (R,V,B)." +msgstr "Couleur de l'arrière-plan en plein écran des formspec (R,V,B)." #: src/settings_translation_file.cpp msgid "Formspec full-screen background opacity (between 0 and 255)." -msgstr "Opacité de fond de la console du jeu (entre 0 et 255)." +msgstr "Opacité de l'arrière-plan en plein écran des formspec (entre 0 et 255)." #: src/settings_translation_file.cpp msgid "Forward key" @@ -3612,10 +3600,10 @@ msgstr "" "Distance maximale à laquelle les clients ont connaissance des objets, " "définie en mapblocks (16 nœuds).\n" "\n" -"Si vous définissez une valeur supérieure à active_block_range, le serveur va " -"maintenir les objets actifs jusqu’à cette distance dans la direction où un " -"joueur regarde (cela peut éviter que des mobs disparaissent soudainement de " -"la vue)." +"Si vous définissez une valeur supérieure à « active_block_range », le " +"serveur va maintenir les objets actifs jusqu’à cette distance dans la " +"direction où un joueur regarde (cela peut éviter que des mobs disparaissent " +"soudainement de la vue)." #: src/settings_translation_file.cpp msgid "Full screen" @@ -3623,7 +3611,9 @@ msgstr "Plein écran" #: src/settings_translation_file.cpp msgid "Fullscreen mode." -msgstr "Mode plein écran." +msgstr "" +"Mode plein écran.\n" +"Un redémarrage est nécessaire après la modification de cette option." #: src/settings_translation_file.cpp msgid "GUI scaling" @@ -3648,9 +3638,9 @@ msgid "" "and junglegrass, in all other mapgens this flag controls all decorations." msgstr "" "Attributs de génération de terrain globaux.\n" -"Dans le générateur de terrain v6, le signal « décorations » contrôle toutes " -"les décorations sauf les arbres et l’herbe de la jungle, dans tous les " -"autres générateurs de terrain, ce signal contrôle toutes les décorations." +"Dans le générateur de terrain v6, le drapeau « décorations » contrôle toutes " +"les décorations sauf les arbres et les herbes de la jungle, dans tous les " +"autres générateurs de terrain, ce drapeau contrôle toutes les décorations." #: src/settings_translation_file.cpp msgid "" @@ -3703,11 +3693,11 @@ msgid "" "- log: mimic and log backtrace of deprecated call (default).\n" "- error: abort on usage of deprecated call (suggested for mod developers)." msgstr "" -"Traitement des appels d'API Lua obsolètes : \n" -"– aucun : N'enregistre pas les appels obsolètes\n" -"– journal : imite et enregistre la trace des appels obsolètes (par défaut en " +"Traitement des appels d'API Lua obsolètes :\n" +"– aucun : n'enregistre pas les appels obsolètes\n" +"– journal : imite et enregistre la trace des appels obsolètes (par défaut en " "mode debug).\n" -"– erreur : s'interrompt lors d'un appel obsolète (recommandé pour les " +"– erreur : s'interrompt lors d'un appel obsolète (recommandé pour les " "développeurs de mods)." #: src/settings_translation_file.cpp @@ -3718,11 +3708,11 @@ msgid "" "call).\n" "* Instrument the sampler being used to update the statistics." msgstr "" -"Auto-instrumentaliser le profileur : \n" -"* Instrumentalise une fonction vide.\n" +"Auto-instrumentaliser le profileur :\n" +"* Instrumentalise une fonction vide.\n" "La surcharge sera évaluée. (l'auto-instrumentalisation ajoute 1 appel de " "fonction à chaque fois).\n" -"* Instrumentalise l’échantillonneur utilisé pour mettre à jour les " +"* Instrumentalise l’échantillonneur utilisé pour mettre à jour les " "statistiques." #: src/settings_translation_file.cpp @@ -3734,10 +3724,11 @@ msgid "Heat noise" msgstr "Bruit de chaleur" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Height component of the initial window size. Ignored in fullscreen mode." -msgstr "Composant de hauteur de la taille initiale de la fenêtre." +msgstr "" +"Composant de hauteur de la taille initiale de la fenêtre. Ignoré en mode " +"plein écran." #: src/settings_translation_file.cpp msgid "Height noise" @@ -3780,24 +3771,24 @@ msgid "" "Horizontal acceleration in air when jumping or falling,\n" "in nodes per second per second." msgstr "" -"Accélération horizontale dans l'air en sautant ou en tombant,\n" -"en nœuds par seconde par seconde." +"Accélération horizontale dans l'air en sautant ou en tombant, en nœuds par " +"seconde par seconde." #: src/settings_translation_file.cpp msgid "" "Horizontal and vertical acceleration in fast mode,\n" "in nodes per second per second." msgstr "" -"Accélération horizontale et verticale en mode rapide,\n" -"en nœuds par seconde par seconde." +"Accélération horizontale et verticale en mode rapide, en nœuds par seconde " +"par seconde." #: src/settings_translation_file.cpp msgid "" "Horizontal and vertical acceleration on ground or when climbing,\n" "in nodes per second per second." msgstr "" -"Accélération horizontale et verticale au sol ou en montée,\n" -"en blocs par seconde." +"Accélération horizontale et verticale au sol ou en montée, en nœuds par " +"seconde." #: src/settings_translation_file.cpp msgid "Hotbar next key" @@ -3966,7 +3957,7 @@ msgstr "Quelle largeur doivent avoir les rivières." #: src/settings_translation_file.cpp msgid "Humidity blend noise" -msgstr "Bruit de fusion d'humidité" +msgstr "Bruit de mélange de l'humidité" #: src/settings_translation_file.cpp msgid "Humidity noise" @@ -3994,13 +3985,12 @@ msgstr "" "pour ne pas gaspiller inutilement les ressources du processeur." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n" "enabled." msgstr "" -"Si désactivé, la touche « spécial » est utilisée pour voler vite si les " -"modes vol et rapide sont activés." +"Si désactivé, la touche « Aux1 » est utilisée pour voler vite si les modes " +"vol et rapide sont activés." #: src/settings_translation_file.cpp msgid "" @@ -4010,11 +4000,11 @@ msgid "" "invisible\n" "so that the utility of noclip mode is reduced." msgstr "" -"Si activé, le serveur n'enverra pas les blocs qui ne sont pas visibles par\n" -"le client en fonction de sa position. Cela peut réduire de 50 % à 80 %\n" -"le nombre de blocs envoyés. Le client ne pourra plus voir ces blocs à moins\n" -"de se déplacer, ce qui réduit l'efficacité des tricheries du style « noclip " -"»." +"Si activé, le serveur effectuera la détermination des blocs de la carte " +"invisibles selon la position des yeux du joueur.\n" +"Cela peut réduire le nombre de blocs envoyés au client de 50 à 80 %.\n" +"Le client ne recevra plus la plupart de blocs invisibles, de sorte que " +"l'utilité du mode « noclip » est réduite." #: src/settings_translation_file.cpp msgid "" @@ -4027,14 +4017,13 @@ msgstr "" "Nécessite le privilège « noclip » sur le serveur." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down " "and\n" "descending." msgstr "" -"Si activé, la touche « spécial » est utilisée à la place de la touche " -"« s’accroupir » pour monter ou descendre." +"Si activé, la touche « Aux1 » est utilisée à la place de la touche « Marcher " +"lentement » pour monter ou descendre." #: src/settings_translation_file.cpp msgid "" @@ -4087,14 +4076,17 @@ msgid "" "limited\n" "to this distance from the player to the node." msgstr "" -"Si la restriction CSM pour la distance des blocs est activé, les appels " -"get_node sont limités à la distance entre le joueur et le bloc." +"Si la restriction « CSM » pour la distance des blocs est activée, les appels " +"« get_node » sont limités à la distance entre le joueur et le bloc." #: src/settings_translation_file.cpp msgid "" "If the execution of a chat command takes longer than this specified time in\n" "seconds, add the time information to the chat command message" msgstr "" +"Si l'exécution d'une commande de chat prend plus de temps que cette durée " +"spécifiée en secondes, ajoute les informations de temps au message de la " +"commande de tchat." #: src/settings_translation_file.cpp msgid "" @@ -4103,11 +4095,10 @@ msgid "" "deleting an older debug.txt.1 if it exists.\n" "debug.txt is only moved if this setting is positive." msgstr "" -"Si la taille du fichier debug.txt dépasse le nombre de mégaoctets spécifié " -"dans\n" -"ce paramètre une fois ouvert, le fisher est déplacé vers debug.txt.1 et\n" -"supprimera un ancien debug.txt.1 s'il existe.\n" -"debug.txt n'est déplacé que si ce paramètre est positif." +"Si la taille du fichier « debug.txt » dépasse le nombre de mégaoctets " +"spécifié par ce paramètre ; une fois ouvert, le fichier est déplacé vers « " +"debug.txt.1 » et supprime l'ancien « debug.txt.1 » s'il existe.\n" +"« debug.tx t» est déplacé seulement si ce paramètre est activé." #: src/settings_translation_file.cpp msgid "If this is set, players will always (re)spawn at the given position." @@ -4123,16 +4114,18 @@ msgstr "Dans le jeu" #: src/settings_translation_file.cpp msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." -msgstr "Opacité de fond de la console du jeu (entre 0 et 255)." +msgstr "" +"Opacité de l'arrière-plan de la console de tchat dans le jeu (entre 0 et " +"255)." #: src/settings_translation_file.cpp msgid "In-game chat console background color (R,G,B)." -msgstr "Couleur de fond de la console du jeu (R,V,B)." +msgstr "Couleur de l'arrière-plan de la console de tchat dans le jeu (R,V,B)." #: src/settings_translation_file.cpp msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)." msgstr "" -"Hauteur de la console de tchat du jeu, entre 0,1 (10 %) et 1,0 (100 %)." +"Hauteur de la console de tchat dans le jeu, entre 0,1 (10 %) et 1,0 (100 %)." #: src/settings_translation_file.cpp msgid "Inc. volume key" @@ -4140,7 +4133,7 @@ msgstr "Touche d'augmentation de volume" #: src/settings_translation_file.cpp msgid "Initial vertical speed when jumping, in nodes per second." -msgstr "Vitesse verticale initiale lors du saut, en blocs par seconde." +msgstr "Vitesse verticale initiale lors du saut, en nœuds par seconde." #: src/settings_translation_file.cpp msgid "" @@ -4422,7 +4415,7 @@ msgid "" "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" "Touche pour faire reculer le joueur.\n" -"Désactive également l’avance auto., lorsqu’elle est active.\n" +"Désactive également l’avance automatique, lorsqu’elle est active.\n" "Voir http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4864,9 +4857,9 @@ msgid "" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Touche pour se faufiler.\n" -"Egalement utilisée pour descendre et plonger dans l'eau si aux1_descends est " -"désactivé.\n" +"Touche pour se déplacer lentement.\n" +"Également utilisée pour descendre et plonger dans l'eau si « aux1_descends » " +"est désactivé.\n" "Voir http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4896,7 +4889,7 @@ msgid "" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Touche d’exécution automatique.\n" +"Touche d'avance automatique.\n" "Voir http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -5027,8 +5020,7 @@ msgid "" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Touche pour afficher/cacher la zone de profilage. Utilisé pour le " -"développement.\n" +"Touche pour afficher/cacher le profileur. Utilisé pour le développement.\n" "Voir http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -5100,11 +5092,11 @@ msgid "" "- Simple: only outer faces, if defined special_tiles are used\n" "- Opaque: disable transparency" msgstr "" -"Apparence des feuilles d’arbres : \n" -"– Détaillée : toutes les faces sont visibles\n" -"– Simple : seulement les faces externes, si des « special_tiles » sont " +"Apparence des feuilles d’arbres :\n" +"– Détaillée : toutes les faces sont visibles\n" +"– Simple : seulement les faces externes, si des « special_tiles » sont " "définies\n" -"– Opaque : désactive la transparence" +"– Opaque : désactive la transparence" #: src/settings_translation_file.cpp msgid "Left key" @@ -5149,7 +5141,7 @@ msgid "" "- info\n" "- verbose" msgstr "" -"Niveau de journalisation à écrire dans debug.txt : \n" +"Niveau de journalisation à écrire dans « debug.txt » :\n" "–  (pas de journalisation)\n" "– aucun (messages sans niveau)\n" "– erreur\n" @@ -5201,10 +5193,10 @@ msgid "" "- Downloads performed by main menu (e.g. mod manager).\n" "Only has an effect if compiled with cURL." msgstr "" -"Nombre limite de requête HTTP en parallèle. Affecte : \n" -"– L'obtention de média si le serveur utilise l'option remote_media.\n" +"Nombre limite de requête HTTP en parallèle. Affecte :\n" +"– L'obtention de média si le serveur utilise le paramètre « remote_media ».\n" "– Le téléchargement de la liste des serveurs et l'annonce du serveur.\n" -"– Les téléchargements effectués par le menu (ex. : gestionnaire de mods).\n" +"– Les téléchargements effectués par le menu (ex. : gestionnaire de mods).\n" "Prend seulement effet si Minetest est compilé avec cURL." #: src/settings_translation_file.cpp @@ -5237,7 +5229,7 @@ msgstr "Intervalle de mise à jour des liquides" #: src/settings_translation_file.cpp msgid "Load the game profiler" -msgstr "Charger le profil de jeu" +msgstr "Charger le profileur du jeu" #: src/settings_translation_file.cpp msgid "" @@ -5245,8 +5237,8 @@ msgid "" "Provides a /profiler command to access the compiled profile.\n" "Useful for mod developers and server operators." msgstr "" -"Charge le profil du jeu pour collecter des données de profil du jeu.\n" -"Fournit une commande /profiler pour accéder au profil compilé.\n" +"Charge le profileur du jeu pour collecter des données de profilage du jeu.\n" +"Fournit une commande « /profiler » pour accéder au profil compilé.\n" "Utile pour les développeurs de mod et les opérateurs de serveurs." #: src/settings_translation_file.cpp @@ -5259,7 +5251,7 @@ msgstr "Limite basse Y des donjons." #: src/settings_translation_file.cpp msgid "Lower Y limit of floatlands." -msgstr "Borne inférieure Y des massifs volants." +msgstr "Limite basse Y des terrains flottants." #: src/settings_translation_file.cpp msgid "Main menu script" @@ -5308,7 +5300,7 @@ msgid "" "ocean, islands and underground." msgstr "" "Attributs spécifiques au générateur de terrain fractal.\n" -"« terrain » active la création de terrain non fractal : océan, îles et " +"« terrain » active la création de terrain non fractal : océan, îles et " "souterrain." #: src/settings_translation_file.cpp @@ -5321,11 +5313,11 @@ msgid "" "'altitude_dry': Reduces humidity with altitude." msgstr "" "Attributs spécifiques au générateur de terrain vallées.\n" -"« altitude_chill » : Réduit la chaleur avec l’altitude.\n" -"« humid_rivers » : Augmente l’humidité autour des rivières.\n" -"« vary_river_dept » : Si activé, une humidité basse et une forte chaleur " -"rendent les rivières moins profondes et parfois asséchées.\n" -"« altitude_dry » : Réduit l’humidité avec l’altitude." +"« altitude_chill » : réduit la chaleur avec l’altitude.\n" +"« humid_rivers » : augmente l’humidité autour des rivières.\n" +"« vary_river_dept » : si activé, une humidité basse et une chaleur élevée " +"rendent les rivières moins profondes et parfois sèches.\n" +"« altitude_dry » : réduit l’humidité avec l’altitude." #: src/settings_translation_file.cpp msgid "Map generation attributes specific to Mapgen v5." @@ -5340,8 +5332,8 @@ msgid "" msgstr "" "Attributs spécifiques au générateur de terrain v6.\n" "Le drapeau « snowbiomes » active le nouveau système à 5 biomes.\n" -"Sous ce nouveau système, la création de jungles est automatique et le " -"drapeau « jungles » est ignoré." +"Lorsque le drapeau « snowbiomes » est activé, les jungles sont " +"automatiquement activées et le drapeau « jungles » est ignoré." #: src/settings_translation_file.cpp msgid "" @@ -5351,9 +5343,10 @@ msgid "" "'caverns': Giant caves deep underground." msgstr "" "Attributs spécifiques au générateur de terrain v7.\n" -"« crêtes » : pour des rivières.\n" -"« massifs volant » : massifs de terres atmosphérique.\n" -"« cavernes » : pour des grottes immenses et profondes." +"« montagnes » : montagnes.\n" +"« crêtes » : rivières.\n" +"« terrains flottants » : vaste terrain flottant dans l'atmosphère.\n" +"« cavernes » : grottes immenses et profondes." #: src/settings_translation_file.cpp msgid "Map generation limit" @@ -5364,9 +5357,8 @@ msgid "Map save interval" msgstr "Intervalle de sauvegarde de la carte" #: src/settings_translation_file.cpp -#, fuzzy msgid "Map update time" -msgstr "Intervalle de mise à jour des liquides" +msgstr "Intervalle de mise à jour de la carte" #: src/settings_translation_file.cpp msgid "Mapblock limit" @@ -5374,15 +5366,15 @@ msgstr "Limite des mapblocks" #: src/settings_translation_file.cpp msgid "Mapblock mesh generation delay" -msgstr "Délai de génération des maillages de MapBlocks" +msgstr "Délai de génération des maillages de mapblocks" #: src/settings_translation_file.cpp msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "Taille du cache de MapBlocks en Mo du générateur de maillage" +msgstr "Taille du cache de mapblocks en Mo du générateur de maillage" #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" -msgstr "Délais d'interruption du déchargement des mapblocks" +msgstr "Délai d'interruption du déchargement des mapblocks" #: src/settings_translation_file.cpp msgid "Mapgen Carpathian" @@ -5462,7 +5454,7 @@ msgstr "Maximum de liquides traités par étape de serveur." #: src/settings_translation_file.cpp msgid "Max. clearobjects extra blocks" -msgstr "Maximum d'extra-mapblocks par clearobjects" +msgstr "Maximum d'extra-mapblocks par « clearobjects »" #: src/settings_translation_file.cpp msgid "Max. packets per iteration" @@ -5480,7 +5472,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Maximum distance to render shadows." -msgstr "" +msgstr "Distance maximale pour le rendu des ombres." #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" @@ -5514,7 +5506,7 @@ msgid "" "max_total = ceil((#clients + max_users) * per_client / 4)" msgstr "" "Le nombre maximal de blocs qui sont envoyés simultanément par client.\n" -"Le compte total maximal est calculé dynamiquement : \n" +"Le compte total maximal est calculé dynamiquement :\n" "max_total = ceil((nbre clients + max_users) × per_client ÷ 4)" #: src/settings_translation_file.cpp @@ -5546,7 +5538,7 @@ msgid "" msgstr "" "Nombre maximal de téléchargements simultanés. Les téléchargements dépassant " "cette limite seront mis en file d'attente.\n" -"Ce nombre doit être inférieur à la limite de curl_parallel_limit." +"Ce nombre doit être inférieur à la limite de « curl_parallel_limit »." #: src/settings_translation_file.cpp msgid "Maximum number of forceloaded mapblocks." @@ -5607,23 +5599,25 @@ msgid "" "Maximum size of the out chat queue.\n" "0 to disable queueing and -1 to make the queue size unlimited." msgstr "" -"Taille maximale de la file d’attente sortante de la discussion.\n" -"0 pour désactiver la file d’attente et -1 pour rendre la taille infinie." +"Taille maximale de la file de sortie de message du tchat.\n" +"0 pour désactiver la file de sortie et -1 pour rendre la taille de la file " +"de sortie illimitée." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum time a file download (e.g. a mod download) may take, stated in " "milliseconds." msgstr "" -"Délais maximaux de téléchargement d'un fichier (ex. : un mod), établi en " -"millisecondes." +"Durée maximale qu'un téléchargement de fichier (ex. : un téléchargement de " +"mod) peut prendre, exprimée en millisecondes." #: src/settings_translation_file.cpp msgid "" "Maximum time an interactive request (e.g. server list fetch) may take, " "stated in milliseconds." msgstr "" +"Durée maximale qu'une requête interactive (ex. : récupération de la liste de " +"serveurs) peut prendre, exprimée en millisecondes." #: src/settings_translation_file.cpp msgid "Maximum users" @@ -5731,7 +5725,7 @@ msgid "" "For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." msgstr "" "Facteur de mouvement de bras en tombant.\n" -"Exemples : 0 = aucun mouvement, 1 = normal, 2 = double." +"Exemples : 0 = aucun mouvement, 1 = normal, 2 = double." #: src/settings_translation_file.cpp msgid "Mute key" @@ -5751,8 +5745,8 @@ msgstr "" "Nom du générateur de terrain qui sera utilisé à la création d’un nouveau " "monde.\n" "Cela sera perdu à la création d'un monde depuis le menu principal.\n" -"Les générateurs de terrain actuellement très instables sont : \n" -"– Les massifs volants du générateur v7 (option inactive par défaut)." +"Les générateurs de terrain actuellement très instables sont :\n" +"– Les terrains flottants optionnels du générateur v7 (désactivé par défaut)." #: src/settings_translation_file.cpp msgid "" @@ -5769,8 +5763,8 @@ msgstr "" msgid "" "Name of the server, to be displayed when players join and in the serverlist." msgstr "" -"Nom du serveur, affiché sur liste des serveurs publics et lorsque les " -"joueurs se connectent." +"Nom du serveur affiché lorsque les joueurs se connectent et sur la liste des " +"serveurs." #: src/settings_translation_file.cpp msgid "Near plane" @@ -5830,16 +5824,16 @@ msgid "" "'on_generated'. For many users the optimum setting may be '1'." msgstr "" "Nombre de processus « emerge » à utiliser.\n" -"Valeur 0 : \n" +"Valeur 0 :\n" "– Sélection automatique. Le nombre de processus sera le\n" "– « nombre de processeurs - 2 », avec un minimum de 1.\n" -"Toute autre valeur : \n" +"Toute autre valeur :\n" "– Spécifie le nombre de processus, avec un minimum de 1.\n" -"ATTENTION : Augmenter le nombre de processus « emerge » accélère bien la\n" +"ATTENTION : augmenter le nombre de processus « emerge » accélère bien la\n" "création de terrain, mais cela peut nuire à la performance du jeu en " "interférant\n" -"avec d’autres processus, en particulier en mode solo et/ou lors de " -"l’exécution de\n" +"avec d’autres processus, en particulier en mode solo et/ou lors de l’" +"exécution de\n" "code Lua en mode « on_generated ». Pour beaucoup, le réglage optimal peut " "être « 1 »." @@ -5849,7 +5843,7 @@ msgid "" "This is a trade-off between sqlite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" -"Nombre d'extra-mapblocks qui peuvent être chargés par /clearobjects dans " +"Nombre d'extra-mapblocks qui peuvent être chargés par « /clearobjects » dans " "l'immédiat.\n" "C'est un compromis entre un transfert SQLite plafonné et la consommation " "mémoire\n" @@ -5876,8 +5870,7 @@ msgid "" "open." msgstr "" "Ouvre le menu pause lorsque la sélection de la fenêtre est perdue. Ne met " -"pas en pause\n" -"si un formspec est ouvert." +"pas en pause si un formspec est ouvert." #: src/settings_translation_file.cpp msgid "" @@ -5888,8 +5881,8 @@ msgid "" "unavailable." msgstr "" "Chemin de la police de repli.\n" -"Si le paramètre « freetype » est activé : doit être une police TrueType.\n" -"Si le paramètre « freetype » est désactivé : doit être une police de " +"Si le paramètre « freetype » est activé : doit être une police TrueType.\n" +"Si le paramètre « freetype » est désactivé : doit être une police de " "vecteurs bitmap ou XML.\n" "Cette police sera utilisée pour certaines langues ou si la police par défaut " "n’est pas disponible." @@ -5924,8 +5917,8 @@ msgid "" "The fallback font will be used if the font cannot be loaded." msgstr "" "Chemin vers la police par défaut.\n" -"Si le paramètre « freetype » est activé : doit être une police TrueType.\n" -"Si le paramètre « freetype » est désactivé : doit être une police de " +"Si le paramètre « freetype » est activé : doit être une police TrueType.\n" +"Si le paramètre « freetype » est désactivé : doit être une police de " "vecteurs bitmap ou XML.\n" "La police de rentrée sera utilisée si la police ne peut pas être chargée." @@ -5937,8 +5930,8 @@ msgid "" "This font is used for e.g. the console and profiler screen." msgstr "" "Chemin vers la police monospace.\n" -"Si le paramètre « freetype » est activé : doit être une police TrueType.\n" -"Si le paramètre « freetype » est désactivé : doit être une police de " +"Si le paramètre « freetype » est activé : doit être une police TrueType.\n" +"Si le paramètre « freetype » est désactivé : doit être une police de " "vecteurs bitmap ou XML.\n" "Cette police est utilisée par exemple pour la console et l’écran du " "profileur." @@ -5996,9 +5989,8 @@ msgid "Player versus player" msgstr "Joueur contre joueur" #: src/settings_translation_file.cpp -#, fuzzy msgid "Poisson filtering" -msgstr "Filtrage bilinéaire" +msgstr "Filtrage de Poisson" #: src/settings_translation_file.cpp msgid "" @@ -6006,14 +5998,15 @@ msgid "" "Note that the port field in the main menu overrides this setting." msgstr "" "Port où se connecter (UDP).\n" -"Notez que le champ de port dans le menu principal passe outre ce réglage." +"Notez que le champ de port dans le menu principal passe outre ce paramètre." #: src/settings_translation_file.cpp msgid "" "Prevent digging and placing from repeating when holding the mouse buttons.\n" "Enable this when you dig or place too often by accident." msgstr "" -"Évitez de répéter lorsque vous maintenez les boutons de la souris.\n" +"Empêche le minage et le placement de se répéter lorsque vous maintenez les " +"boutons de la souris.\n" "Activez cette option lorsque vous creusez ou placez trop souvent par " "accident." @@ -6035,7 +6028,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Privileges that players with basic_privs can grant" msgstr "" -"Les privilèges que les joueurs ayant le privilège basic_privs peuvent " +"Les privilèges que les joueurs avec le privilège « basic_privs » peuvent " "accorder" #: src/settings_translation_file.cpp @@ -6062,8 +6055,8 @@ msgid "" "Metrics can be fetch on http://127.0.0.1:30000/metrics" msgstr "" "Adresse d'écoute pour Prometheus.\n" -"Lorsque Minetest est compilé avec l'option ENABLE_PROMETHEUS,\n" -"cette adresse est utilisée pour l'écoute de données pour Prometheus.\n" +"Lorsque Minetest est compilé avec l'option ENABLE_PROMETHEUS, cette adresse " +"est utilisée pour l'écoute de données pour Prometheus.\n" "Les données sont sur http://127.0.0.1:30000/metrics" #: src/settings_translation_file.cpp @@ -6139,15 +6132,15 @@ msgid "" "READ_PLAYERINFO: 32 (disable get_player_names call client-side)" msgstr "" "Limite l'accès de certaines fonctions côté client sur les serveurs\n" -"Combiner les byteflags ci dessous pour restreindre les fonctionnalités " -"client, ou mettre 0 pour laisser sans restriction : \n" -"LOAD_CLIENT_MODS : 1 (désactive le chargement des mods client)\n" -"CHAT_MESSAGES : 2 (désactive l'appel send_chat_message côté client)\n" -"READ_ITEMDEFS : 4 (désactive l'appel get_item_def côté client)\n" -"READ_NODEDEFS : 8 (désactive l'appel get_node_def côté client)\n" -"LOOKUP_NODES_LIMIT : 16 (limite l'appel get_node côté client à " -"csm_restriction_noderange)\n" -"READ_PLAYERINFO : 32 (désactive l'appel get_player_names côté client)" +"Combiner les « byteflags » ci dessous pour restreindre les fonctionnalités " +"client, ou mettre 0 pour laisser sans restriction :\n" +"LOAD_CLIENT_MODS : 1 (désactive le chargement des mods client)\n" +"CHAT_MESSAGES : 2 (désactive l'appel « send_chat_message côté » client)\n" +"READ_ITEMDEFS : 4 (désactive l'appel « get_item_def côté » client)\n" +"READ_NODEDEFS : 8 (désactive l'appel « get_node_def » côté client)\n" +"LOOKUP_NODES_LIMIT : 16 (limite l'appel « get_node » côté client à « " +"csm_restriction_noderange »)\n" +"READ_PLAYERINFO : 32 (désactive l'appel « get_player_names » côté client)" #: src/settings_translation_file.cpp msgid "Ridge mountain spread noise" @@ -6211,12 +6204,12 @@ msgstr "Mini-carte circulaire" #: src/settings_translation_file.cpp msgid "Safe digging and placing" -msgstr "Placement et minage sécurisés" +msgstr "Minage et placement sécurisés" #: src/settings_translation_file.cpp msgid "Sandy beaches occur when np_beach exceeds this value." msgstr "" -"Des plages de sables apparaissent lorsque np_beach dépasse cette valeur." +"Des plages de sables apparaissent lorsque « np_beach » dépasse cette valeur." #: src/settings_translation_file.cpp msgid "Save the map received by the client on disk." @@ -6239,13 +6232,11 @@ msgid "" "pixels when scaling down, at the cost of blurring some\n" "edge pixels when images are scaled by non-integer sizes." msgstr "" -"Met à l'échelle l'interface par une valeur spécifiée par l'utilisateur,\n" -"à l'aide d'un filtre au plus proche avec anticrénelage.\n" +"Met à l'échelle l'interface par une valeur spécifiée par l'utilisateur, à " +"l'aide d'un filtre au plus proche voisin avec anticrénelage.\n" "Cela va lisser certains bords grossiers, et mélanger les pixels en réduisant " -"l'échelle\n" -"au détriment d'un effet de flou sur des pixels en bordure quand les images " -"sont\n" -"mises à l'échelle par des valeurs fractionnelles." +"l'échelle au détriment d'un effet de flou sur des pixels en bordure quand " +"les images sont mises à l'échelle par des valeurs fractionnelles." #: src/settings_translation_file.cpp msgid "Screen height" @@ -6379,15 +6370,15 @@ msgstr "Port du serveur" #: src/settings_translation_file.cpp msgid "Server side occlusion culling" -msgstr "Tests d'occultation côté serveur" +msgstr "Détermination des blocs invisibles côté serveur" #: src/settings_translation_file.cpp msgid "Serverlist URL" -msgstr "URL de la liste des serveurs publics" +msgstr "URL de la liste des serveurs" #: src/settings_translation_file.cpp msgid "Serverlist file" -msgstr "Fichier des serveurs publics" +msgstr "Fichier de la liste des serveurs" #: src/settings_translation_file.cpp msgid "" @@ -6400,7 +6391,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Set the maximum character length of a chat message sent by clients." msgstr "" -"Définir la longueur maximale de caractères d'un message de discussion envoyé " +"Définit la longueur maximale de caractères d'un message de discussion envoyé " "par les clients." #: src/settings_translation_file.cpp @@ -6408,6 +6399,9 @@ msgid "" "Set the shadow strength.\n" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" +"Définit la force de l'ombre.\n" +"Une valeur plus faible signifie des ombres plus claires, une valeur plus " +"élevée signifie des ombres plus sombres." #: src/settings_translation_file.cpp msgid "" @@ -6416,6 +6410,10 @@ msgid "" "resources.\n" "Minimun value 0.001 seconds max value 0.2 seconds" msgstr "" +"Définit le temps de mise à jour des ombres.\n" +"Une valeur plus faible signifie que les ombres et les mises à jour de la " +"carte sont plus rapides, mais cela consomme plus de ressources.\n" +"Valeur minimale 0,001 seconde et maximale 0,2 seconde." #: src/settings_translation_file.cpp msgid "" @@ -6423,6 +6421,10 @@ msgid "" "Lower values mean sharper shadows bigger values softer.\n" "Minimun value 1.0 and max value 10.0" msgstr "" +"Définit la taille du rayon de l'ombre douce.\n" +"Les valeurs les plus faibles signifient des ombres plus nettes, les valeurs " +"les plus élevées des ombres plus douces.\n" +"Valeur minimale 1,0 et maximale 10,0." #: src/settings_translation_file.cpp msgid "" @@ -6430,14 +6432,16 @@ msgid "" "Value of 0 means no tilt / vertical orbit.\n" "Minimun value 0.0 and max value 60.0" msgstr "" +"Définit l'inclinaison de l'orbite du soleil/lune en degrés.\n" +"La valeur de 0 signifie aucune inclinaison/orbite verticale.\n" +"Valeur minimale 0,0 et maximale 60,0." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable Shadow Mapping.\n" "Requires shaders to be enabled." msgstr "" -"Mettre sur « Activé » active les feuilles ondulantes.\n" +"Mettre sur « Activé » active le « Shadow Mapping ».\n" "Nécessite les shaders pour être activé." #: src/settings_translation_file.cpp @@ -6470,6 +6474,9 @@ msgid "" "On false, 16 bits texture will be used.\n" "This can cause much more artifacts in the shadow." msgstr "" +"Définit la qualité de la texture de l'ombre sur 32 bits.\n" +"Si désactivé, une texture de 16 bits sera utilisée.\n" +"Cela peut causer beaucoup plus d'artefacts sur l'ombre." #: src/settings_translation_file.cpp msgid "Shader path" @@ -6487,22 +6494,21 @@ msgstr "" "Fonctionne seulement avec OpenGL." #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow filter quality" -msgstr "Qualité des captures d'écran" +msgstr "Qualité du filtre d’ombre" #: src/settings_translation_file.cpp msgid "Shadow map max distance in nodes to render shadows" msgstr "" +"Distance maximale de la « shadow map » en nœuds pour le rendu des ombres" #: src/settings_translation_file.cpp msgid "Shadow map texture in 32 bits" -msgstr "" +msgstr "Texture de la « shadow map » en 32 bits" #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow map texture size" -msgstr "Taille minimale des textures" +msgstr "Taille de la texture de la « shadow map »" #: src/settings_translation_file.cpp msgid "" @@ -6514,7 +6520,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Shadow strength" -msgstr "" +msgstr "Force de l'ombre" #: src/settings_translation_file.cpp msgid "Shape of the minimap. Enabled = round, disabled = square." @@ -6553,9 +6559,9 @@ msgid "" "Altering this value is for special usage, leaving it unchanged is\n" "recommended." msgstr "" -"Taille des mapchunks générés à la création de terrain, définie en mapblocks " -"(16 nœuds).\n" -"ATTENTION ! : Il n’y a aucun avantage, et plusieurs dangers, à augmenter " +"Taille des mapchunks générés à la création de terrain, définie en mapblocks (" +"16 nœuds).\n" +"ATTENTION ! : Il n’y a aucun avantage, et plusieurs dangers, à augmenter " "cette valeur au-dessus de 5.\n" "Réduire cette valeur augmente la densité de cavernes et de donjons.\n" "La modification de cette valeur est réservée à un usage spécial. Il est " @@ -6567,13 +6573,13 @@ msgid "" "increase the cache hit %, reducing the data being copied from the main\n" "thread, thus reducing jitter." msgstr "" -"Taille du cache de MapBlocks du générateur de maillage. Augmenter\n" -"ceci augmente le % d'interception du cache et réduit la copie de données\n" -"dans le fil principal, réduisant les tremblements." +"Taille du cache de mapblocks du générateur de maillage. Augmenter ceci " +"augmente le % d'interception du cache et réduit la copie de données dans le " +"fil principal, réduisant les tremblements." #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" -msgstr "" +msgstr "Inclinaison de l'orbite du corps du ciel" #: src/settings_translation_file.cpp msgid "Slice w" @@ -6612,7 +6618,8 @@ msgid "" "Smooths camera when looking around. Also called look or mouse smoothing.\n" "Useful for recording videos." msgstr "" -"Lisse les mouvement de la caméra en se déplaçant et en regardant autour.\n" +"Lisse les mouvements de la caméra en se déplaçant et en regardant autour. " +"Également appelé « look smoothing » ou « mouse smoothing ».\n" "Utile pour enregistrer des vidéos." #: src/settings_translation_file.cpp @@ -6629,16 +6636,15 @@ msgstr "Déplacement lent" #: src/settings_translation_file.cpp msgid "Sneaking speed" -msgstr "Vitesse d'accroupissement" +msgstr "Vitesse de déplacement lent" #: src/settings_translation_file.cpp msgid "Sneaking speed, in nodes per second." -msgstr "Vitesse furtive, en blocs par seconde." +msgstr "Vitesse de déplacement lent, en nœuds par seconde." #: src/settings_translation_file.cpp -#, fuzzy msgid "Soft shadow radius" -msgstr "Opacité de l'ombre de la police" +msgstr "Rayon de l'ombre douce" #: src/settings_translation_file.cpp msgid "Sound" @@ -6706,8 +6712,8 @@ msgid "" "curve that is boosted in brightness." msgstr "" "Niveau d'amplification de la courbure de la lumière.\n" -"Les trois paramètres « d'amplification » définissent un intervalle\n" -"de la courbe de lumière pour lequel la luminosité est amplifiée." +"Les trois paramètres « d'amplification » définissent un intervalle de la " +"courbe de lumière pour lequel la luminosité est amplifiée." #: src/settings_translation_file.cpp msgid "Strict protocol checking" @@ -6715,7 +6721,7 @@ msgstr "Vérification stricte du protocole" #: src/settings_translation_file.cpp msgid "Strip color codes" -msgstr "Echapper les codes de couleur" +msgstr "Supprimer les codes couleurs" #: src/settings_translation_file.cpp msgid "" @@ -6730,18 +6736,18 @@ msgid "" "server-intensive extreme water flow and to avoid vast flooding of the\n" "world surface below." msgstr "" -"Niveau de la surface de l'eau (facultative) placée sur une couche solide de " -"terre suspendue.\n" +"Niveau de la surface de l'eau (facultatif) placée sur une couche solide de " +"terrain flottant.\n" "L'eau est désactivée par défaut et ne sera placée que si cette valeur est " -"fixée à plus de « mgv7_floatland_ymax » - « mgv7_floatland_taper » (début de " -"l’effilage du haut).\n" -"***ATTENTION, DANGER POTENTIEL AU MONDES ET AUX PERFORMANCES DES " -"SERVEURS*** :\n" -"Lorsque le placement de l'eau est activé, les île volantes doivent être " -"configurées avec une couche solide en mettant « mgv7_floatland_density » à " -"2,0 (ou autre valeur dépendante de « mgv7_np_floatland »), pour éviter les " -"chutes d'eaux énormes qui surchargent les serveurs et pourraient inonder les " -"terres en dessous." +"définie à plus de « mgv7_floatland_ymax » - « mgv7_floatland_taper » (début " +"de l’effilage du haut).\n" +"***ATTENTION, DANGER POTENTIEL AU MONDES ET AUX PERFORMANCES DES SERVEURS*** " +":\n" +"Lorsque le placement de l'eau est activé, les terrains flottants doivent " +"être configurés et vérifiés pour être une couche solide en mettant « " +"mgv7_floatland_density » à 2,0 (ou autre valeur dépendante de « " +"mgv7_np_floatland »), pour éviter les chutes d'eaux énormes qui surchargent " +"les serveurs et pourraient inonder les terres en dessous." #: src/settings_translation_file.cpp msgid "Synchronous SQLite" @@ -6805,6 +6811,10 @@ msgid "" "This must be a power of two.\n" "Bigger numbers create better shadowsbut it is also more expensive." msgstr "" +"Taille de la texture pour le rendu de la « shadow map ».\n" +"Il doit s'agir d'une puissance de deux.\n" +"Les nombres plus grands créent de meilleures ombres, mais ils sont aussi " +"plus coûteux." #: src/settings_translation_file.cpp msgid "" @@ -6836,8 +6846,8 @@ msgid "" "The default format in which profiles are being saved,\n" "when calling `/profiler save [format]` without format." msgstr "" -"Le format par défaut dans lequel les profils seront sauvegardés,\n" -"lorsque la commande `/profiler save [format]` est entrée sans format." +"Le format par défaut dans lequel les profils sont enregistrés, lors de " +"l'appel de « /profiler save [format] » sans format." #: src/settings_translation_file.cpp msgid "The depth of dirt or other biome filler node." @@ -6886,7 +6896,7 @@ msgid "" "See /privs in game for a full list on your server and mod configuration." msgstr "" "Les privilèges que les nouveaux joueurs obtiennent automatiquement.\n" -"Entrer /privs dans le jeu pour voir une liste complète des privilèges." +"Entrer « /privs » dans le jeu pour voir une liste complète des privilèges." #: src/settings_translation_file.cpp msgid "" @@ -6900,14 +6910,13 @@ msgid "" msgstr "" "Le rayon du volume de blocs autour de chaque joueur soumis au bloc actif, " "définie en mapblocks (16 nœuds).\n" -"Dans les blocs actifs, les objets sont chargés et les « ABMs » sont " -"exécutés.\n" +"Dans les blocs actifs, les objets sont chargés et les « ABMs » sont exécutés." +"\n" "C'est également la distance minimale dans laquelle les objets actifs (mobs) " "sont conservés.\n" -"Ceci devrait être configuré avec active_object_send_range_blocks." +"Ceci devrait être configuré avec « active_object_send_range_blocks »." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end.\n" "A restart is required after changing this.\n" @@ -6916,9 +6925,9 @@ msgid "" "On other platforms, OpenGL is recommended.\n" "Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)" msgstr "" -"Le moteur de rendu utilisé par Irrlicht.\n" +"Le moteur de rendu.\n" "Un redémarrage est nécessaire après cette modification.\n" -"Remarque : Sur Android, restez avec OGLES1 en cas de doute ! Autrement, " +"Remarque : Sur Android, restez avec OGLES1 en cas de doute ! Autrement, " "l'application peut ne pas démarrer.\n" "Sur les autres plateformes, OpenGL est recommandé.\n" "Les shaders sont pris en charge par OpenGL (ordinateur de bureau uniquement) " @@ -7036,7 +7045,7 @@ msgid "" "This determines how long they are slowed down after placing or removing a " "node." msgstr "" -"Pour réduire le lag, le transfert des blocs est ralenti quand un joueur " +"Pour réduire le décalage, le transfert des blocs est ralenti quand un joueur " "construit quelque chose.\n" "Cela détermine la durée du ralentissement après placement ou destruction " "d'un nœud." @@ -7047,7 +7056,7 @@ msgstr "Basculement en mode caméra" #: src/settings_translation_file.cpp msgid "Tooltip delay" -msgstr "Délais d'apparition des infobulles" +msgstr "Délai d'apparition des infobulles" #: src/settings_translation_file.cpp msgid "Touch screen threshold" @@ -7078,11 +7087,12 @@ msgstr "Mods sécurisés" #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." -msgstr "URL de la liste des serveurs affichée dans l'onglet multijoueur." +msgstr "" +"URL de la liste des serveurs affichée dans l'onglet « Rejoindre une partie »." #: src/settings_translation_file.cpp msgid "Undersampling" -msgstr "Sous-échantillonage" +msgstr "Sous-échantillonnage" #: src/settings_translation_file.cpp msgid "" @@ -7092,11 +7102,11 @@ msgid "" "image.\n" "Higher values result in a less detailed image." msgstr "" -"Le sous-échantillonage ressemble à l'utilisation d'une résolution d'écran " -"inférieure,\n" -"mais il ne s'applique qu'au rendu 3D, gardant l'interface usager intacte.\n" -"Cela peut donner lieu à un bonus de performance conséquent, au détriment de " -"la qualité d'image.\n" +"Le sous-échantillonnage ressemble à l'utilisation d'une résolution d'écran " +"inférieure, mais il ne s'applique qu'au rendu 3D, gardant l'interface " +"intacte.\n" +"Cela doit donner un bonus de performance conséquent, au détriment de la " +"qualité d'image.\n" "Les valeurs plus élevées réduisent la qualité du détail des images." #: src/settings_translation_file.cpp @@ -7113,7 +7123,7 @@ msgstr "Limite haute Y des donjons." #: src/settings_translation_file.cpp msgid "Upper Y limit of floatlands." -msgstr "Limite en Y des îles volantes." +msgstr "Limite haute Y des terrains flottants." #: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." @@ -7140,9 +7150,9 @@ msgid "" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" -"Utilisez le mappage MIP pour mettre à l'échelle les textures. Peut augmenter " -"légèrement les performances, surtout si vous utilisez un pack de textures " -"haute résolution.\n" +"Utilise le mappage MIP pour mettre à l'échelle les textures.\n" +"Peut augmenter légèrement les performances, surtout si vous utilisez un pack " +"de textures haute résolution.\n" "La réduction d'échelle gamma correcte n'est pas prise en charge." #: src/settings_translation_file.cpp @@ -7157,9 +7167,9 @@ msgid "" msgstr "" "Utilise l'anticrénelage multi-échantillons (MSAA) pour lisser les bords des " "blocs.\n" -"Cet algorithme lisse la vue 3D tout en conservant l'image nette,\n" -"mais cela ne concerne pas la partie interne des textures\n" -"(ce qui est particulièrement visible avec des textures transparentes).\n" +"Cet algorithme lisse la vue 3D tout en conservant l'image nette, mais cela " +"ne concerne pas la partie interne des textures (ce qui est particulièrement " +"visible avec des textures transparentes).\n" "Des espaces visibles apparaissent entre les blocs lorsque les shaders sont " "désactivés.\n" "Si définie à 0, MSAA est désactivé.\n" @@ -7267,9 +7277,8 @@ msgid "Viewing range" msgstr "Plage de visualisation" #: src/settings_translation_file.cpp -#, fuzzy msgid "Virtual joystick triggers Aux1 button" -msgstr "Manette virtuelle déclenche le bouton aux" +msgstr "Manette virtuelle déclenche le bouton Aux1" #: src/settings_translation_file.cpp msgid "Volume" @@ -7352,9 +7361,9 @@ msgid "" "filtered in software, but some images are generated directly\n" "to hardware (e.g. render-to-texture for nodes in inventory)." msgstr "" -"Quand gui_scaling_filter est activé, tous les images du GUI sont filtrées " -"par le logiciel, mais certaines sont générées directement par le matériel " -"(ex. : textures des blocs dans l'inventaire)." +"Quand « gui_scaling_filter » est activé, tous les images du GUI sont " +"filtrées par le logiciel, mais certaines sont générées directement par le " +"matériel (ex. : textures des blocs dans l'inventaire)." #: src/settings_translation_file.cpp msgid "" @@ -7363,14 +7372,13 @@ msgid "" "to the old scaling method, for video drivers that don't\n" "properly support downloading textures back from hardware." msgstr "" -"Quand gui_scaling_filter_txr2img est activé, copier les images du matériel " -"au logiciel pour mise à l'échelle.\n" +"Quand « gui_scaling_filter_txr2img » est activé, copier les images du " +"matériel au logiciel pour mise à l'échelle.\n" "Si désactivé, l'ancienne méthode de mise à l'échelle est utilisée, pour les " "pilotes vidéos qui ne supportent pas le chargement des textures depuis le " "matériel." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" "can be blurred, so automatically upscale them with nearest-neighbor\n" @@ -7386,9 +7394,9 @@ msgstr "" "agrandies avec l'interpolation du plus proche voisin pour garder des pixels " "moins floues. Ceci détermine la taille de la texture minimale pour les " "textures agrandies ; les valeurs plus hautes rendent plus détaillées, mais " -"nécessitent plus de mémoire. Les puissances de 2 sont recommandées. Définir " -"une valeur supérieure à 1 peut ne pas avoir d'effet visible sauf si le " -"filtrage bilinéaire/trilinéaire/anisotrope est activé.\n" +"nécessitent plus de mémoire. Les puissances de 2 sont recommandées. Ce " +"paramètre s'applique uniquement si le filtrage bilinéaire/trilinéaire/" +"anisotrope est activé.\n" "Ceci est également utilisée comme taille de texture de nœud par défaut pour " "l'agrandissement des textures basé sur le monde." @@ -7421,7 +7429,7 @@ msgid "" "Deprecated, use the setting player_transfer_distance instead." msgstr "" "Détermine l'exposition illimitée des noms de joueurs aux autres clients.\n" -"Obsolète : utiliser l'option player_transfer_distance à la place." +"Obsolète : utiliser le paramètre « player_transfer_distance » à la place." #: src/settings_translation_file.cpp msgid "Whether to allow players to damage and kill each other." @@ -7456,13 +7464,14 @@ msgstr "" msgid "" "Whether to show the client debug info (has the same effect as hitting F5)." msgstr "" -"Détermine la visibilité des infos de débogage du client (même effet que " -"taper F5)." +"Détermine la visibilité des informations de débogage du client (même effet " +"que taper F5)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Width component of the initial window size. Ignored in fullscreen mode." -msgstr "Composant de largeur de la taille initiale de la fenêtre." +msgstr "" +"Composant de largeur de la taille initiale de la fenêtre. Ignoré en mode " +"plein écran." #: src/settings_translation_file.cpp msgid "Width of the selection box lines around nodes." @@ -7474,9 +7483,9 @@ msgid "" "background.\n" "Contains the same information as the file debug.txt (default name)." msgstr "" -"Systèmes Windows seulement : démarrer Minetest avec la fenêtre de commandes\n" -"en arrière-plan. Contient les mêmes informations que dans debug.txt (nom par " -"défaut)." +"Systèmes Windows seulement : démarrer Minetest avec la fenêtre de ligne de " +"commande en arrière-plan. Contient les mêmes informations que le fichier « " +"debug.txt » (nom par défaut)." #: src/settings_translation_file.cpp msgid "" @@ -7500,15 +7509,12 @@ msgid "" "Warning: This option is EXPERIMENTAL!" msgstr "" "Les textures alignées sur le monde peuvent être mises à l'échelle pour " -"couvrir plusieurs nœuds. Cependant,\n" -"le serveur peut ne pas envoyer l'échelle que vous voulez, surtout si vous " -"utilisez\n" -"un pack de textures spécialement conçu ; avec cette option, le client " -"essaie\n" -"de déterminer l'échelle automatiquement en fonction de la taille de la " -"texture.\n" -"Voir aussi texture_min_size.\n" -"Avertissement : Cette option est EXPÉRIMENTALE !" +"couvrir plusieurs nœuds. Cependant, le serveur peut ne pas envoyer l'échelle " +"que vous voulez, surtout si vous utilisez un pack de textures spécialement " +"conçu ; avec cette option, le client essaie de déterminer l'échelle " +"automatiquement en fonction de la taille de la texture.\n" +"Voir aussi « texture_min_size ».\n" +"Avertissement : cette option est EXPÉRIMENTALE !" #: src/settings_translation_file.cpp msgid "World-aligned textures mode" @@ -7528,8 +7534,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Y of upper limit of large caves." -msgstr "" -"Coordonnée Y de la limite supérieure des grandes grottes pseudo-aléatoires." +msgstr "Limite haute Y des grandes grottes." #: src/settings_translation_file.cpp msgid "Y-distance over which caverns expand to full size." @@ -7542,31 +7547,31 @@ msgid "" "For a solid floatland layer, this controls the height of hills/mountains.\n" "Must be less than or equal to half the distance between the Y limits." msgstr "" -"Hauteur-Y à laquelle les îles volantes commence à rétrécir.\n" +"Hauteur-Y à laquelle les terrains flottants commencent à rétrécir.\n" "L'effilage comment à cette distance de la limite en Y.\n" -"Pour une courche solide de terre suspendue, ceci contrôle la hauteur des " +"Pour une couche solide de terrain flottant, ceci contrôle la hauteur des " "montagnes.\n" "Doit être égale ou moindre à la moitié de la distance entre les limites Y." #: src/settings_translation_file.cpp msgid "Y-level of average terrain surface." -msgstr "Hauteur (Y) moyenne de la surface du terrain." +msgstr "Limite moyenne Y de la surface du terrain." #: src/settings_translation_file.cpp msgid "Y-level of cavern upper limit." -msgstr "Limite haute de génération des cavernes." +msgstr "Limite haute Y de génération des cavernes." #: src/settings_translation_file.cpp msgid "Y-level of higher terrain that creates cliffs." -msgstr "Hauteur Y du plus haut terrain qui crée des falaises." +msgstr "Limite Y du plus haut terrain qui crée des falaises." #: src/settings_translation_file.cpp msgid "Y-level of lower terrain and seabed." -msgstr "Hauteur Y du plus bas terrain et des fonds marins." +msgstr "Limite Y du plus bas terrain et des fonds marins." #: src/settings_translation_file.cpp msgid "Y-level of seabed." -msgstr "Hauteur (Y) du fond marin." +msgstr "Limite Y du fond marin." #: src/settings_translation_file.cpp msgid "" @@ -7602,12 +7607,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "cURL file download timeout" -msgstr "Délais d'interruption de cURL lors d'un téléchargement de fichier" +msgstr "Délai d'interruption de cURL lors d'un téléchargement de fichier" #: src/settings_translation_file.cpp -#, fuzzy msgid "cURL interactive timeout" -msgstr "Délais d'interruption de cURL" +msgstr "Délai d'interruption interactive de cURL" #: src/settings_translation_file.cpp msgid "cURL parallel limit" From 48bb0bb5bbc2bd8af2bf43141d62c75fba51950f Mon Sep 17 00:00:00 2001 From: Yangjun Wang Date: Thu, 17 Jun 2021 23:42:06 +0000 Subject: [PATCH 061/412] Translated using Weblate (Chinese (Simplified)) Currently translated at 91.2% (1274 of 1396 strings) --- po/zh_CN/minetest.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/po/zh_CN/minetest.po b/po/zh_CN/minetest.po index 2aa7edeb4..a2863bd25 100644 --- a/po/zh_CN/minetest.po +++ b/po/zh_CN/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Chinese (Simplified) (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-06-10 14:35+0000\n" -"Last-Translator: Riceball LEE \n" +"PO-Revision-Date: 2021-06-17 23:42+0000\n" +"Last-Translator: Yangjun Wang \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_CN\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.7\n" #: builtin/client/chatcommands.lua #, fuzzy @@ -249,7 +249,7 @@ msgstr "正在下载 $1 ……" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "没有找到需要的依赖项: $1" +msgstr "无法找到$1个依赖项。" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." From e1fbf4795b96814c5cd03569f499703a9ce9a98f Mon Sep 17 00:00:00 2001 From: Riceball LEE Date: Thu, 17 Jun 2021 23:37:37 +0000 Subject: [PATCH 062/412] Translated using Weblate (Chinese (Simplified)) Currently translated at 91.2% (1274 of 1396 strings) --- po/zh_CN/minetest.po | 70 ++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 39 deletions(-) diff --git a/po/zh_CN/minetest.po b/po/zh_CN/minetest.po index a2863bd25..490513f6b 100644 --- a/po/zh_CN/minetest.po +++ b/po/zh_CN/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Chinese (Simplified) (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-06-17 23:42+0000\n" -"Last-Translator: Yangjun Wang \n" +"PO-Revision-Date: 2021-06-21 11:33+0000\n" +"Last-Translator: Riceball LEE \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_CN\n" @@ -15,46 +15,41 @@ msgstr "" "X-Generator: Weblate 4.7\n" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Clear the out chat queue" -msgstr "显示最大聊天记录的行度" +msgstr "清除聊天发送队列" #: builtin/client/chatcommands.lua #, fuzzy msgid "Empty command." -msgstr "聊天命令" +msgstr "空命令." #: builtin/client/chatcommands.lua -#, fuzzy msgid "Exit to main menu" -msgstr "退出至菜单" +msgstr "退出至主菜单" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Invalid command: " -msgstr "本地命令" +msgstr "无效命令 " #: builtin/client/chatcommands.lua msgid "Issued command: " -msgstr "" +msgstr "发送的命令 " #: builtin/client/chatcommands.lua -#, fuzzy msgid "List online players" -msgstr "单人游戏" +msgstr "列出联机玩家" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Online players: " -msgstr "单人游戏" +msgstr "联机游戏: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." -msgstr "" +msgstr "聊天发送队列现在为空。" #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "服务器已禁用该命令." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -65,36 +60,33 @@ msgid "You died" msgstr "您已经死亡" #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." -msgstr "您已经死亡" +msgstr "您已经死亡." #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands:" -msgstr "本地命令" +msgstr "可用命令:" #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands: " -msgstr "本地命令" +msgstr "可用命令: " #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "命令不可用: " #: builtin/common/chatcommands.lua msgid "Get help for commands" -msgstr "" +msgstr "获取命令帮助" #: builtin/common/chatcommands.lua msgid "" "Use '.help ' to get more information, or '.help all' to list everything." -msgstr "" +msgstr "使用 '.help ' 获取该命令的更多信息,或使用 '.help all' 列出所有内容。" #: builtin/common/chatcommands.lua msgid "[all | ]" -msgstr "" +msgstr "[all | <命令>]" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" @@ -110,7 +102,7 @@ msgstr "发生了错误:" #: builtin/fstk/ui.lua msgid "Main menu" -msgstr "主单" +msgstr "主菜单" #: builtin/fstk/ui.lua msgid "Reconnect" @@ -249,7 +241,7 @@ msgstr "正在下载 $1 ……" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "无法找到$1个依赖项。" +msgstr "有$1个依赖项没有找到。" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." @@ -779,16 +771,15 @@ msgstr "请尝试重新启用公共服务器列表并检查您的网络连接。 #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "" +msgstr "关于" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" msgstr "积极贡献者" #: builtin/mainmenu/tab_about.lua -#, fuzzy msgid "Active renderer:" -msgstr "活动目标发送范围" +msgstr "主动渲染器:" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" @@ -803,6 +794,8 @@ msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" +"在文件(资源)管理器中打开含有用户提供的世界,游戏,mods\n" +"和纹理包的目录。" #: builtin/mainmenu/tab_about.lua msgid "Previous Contributors" @@ -954,7 +947,7 @@ msgstr "收藏项" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" -msgstr "" +msgstr "不兼容的服务器" #: builtin/mainmenu/tab_online.lua msgid "Join Game" @@ -971,7 +964,7 @@ msgstr "公开服务器" #: builtin/mainmenu/tab_online.lua msgid "Refresh" -msgstr "" +msgstr "刷新" #: builtin/mainmenu/tab_online.lua #, fuzzy @@ -1019,13 +1012,12 @@ msgid "Connected Glass" msgstr "连通玻璃" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp -#, fuzzy msgid "Dynamic shadows" -msgstr "字体阴影" +msgstr "动态阴影" #: builtin/mainmenu/tab_settings.lua msgid "Dynamic shadows: " -msgstr "" +msgstr "动态阴影: " #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" @@ -1033,15 +1025,15 @@ msgstr "华丽树叶" #: builtin/mainmenu/tab_settings.lua msgid "High" -msgstr "" +msgstr "高" #: builtin/mainmenu/tab_settings.lua msgid "Low" -msgstr "" +msgstr "低" #: builtin/mainmenu/tab_settings.lua msgid "Medium" -msgstr "" +msgstr "中" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" From 891290a79f56bdb9de1ce0e96844893039699ce8 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Thu, 17 Jun 2021 00:33:35 +0000 Subject: [PATCH 063/412] Translated using Weblate (Spanish) Currently translated at 80.6% (1126 of 1396 strings) --- po/es/minetest.po | 171 +++++++++++++++++++--------------------------- 1 file changed, 69 insertions(+), 102 deletions(-) diff --git a/po/es/minetest.po b/po/es/minetest.po index 0551ef808..26318d2ca 100644 --- a/po/es/minetest.po +++ b/po/es/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-06-01 18:49+0000\n" -"Last-Translator: David Leal \n" +"PO-Revision-Date: 2021-06-21 11:33+0000\n" +"Last-Translator: Jordan Irwin \n" "Language-Team: Spanish \n" "Language: es\n" @@ -12,41 +12,35 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.7\n" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Clear the out chat queue" -msgstr "Tamaño máximo de la cola de salida del chat" +msgstr "Vaciar la cola de chat de salida" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Empty command." -msgstr "Comandos de Chat" +msgstr "Comando vacío." #: builtin/client/chatcommands.lua -#, fuzzy msgid "Exit to main menu" -msgstr "Salir al menú" +msgstr "Salir al menú principal" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Invalid command: " -msgstr "Comando local" +msgstr "Comando inválido: " #: builtin/client/chatcommands.lua msgid "Issued command: " -msgstr "" +msgstr "Comando emitido: " #: builtin/client/chatcommands.lua -#, fuzzy msgid "List online players" -msgstr "Un jugador" +msgstr "Listar jugadores conectados" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Online players: " -msgstr "Un jugador" +msgstr "Jugadores conectados: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." @@ -65,27 +59,24 @@ msgid "You died" msgstr "Has muerto" #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." -msgstr "Has muerto" +msgstr "Has muerto." #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands:" -msgstr "Comando local" +msgstr "Comandos disponibles:" #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands: " -msgstr "Comando local" +msgstr "Comandos disponibles: " #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "Comando no disponible: " #: builtin/common/chatcommands.lua msgid "Get help for commands" -msgstr "" +msgstr "Obtener ayuda para los comandos" #: builtin/common/chatcommands.lua msgid "" @@ -791,16 +782,15 @@ msgstr "" #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "" +msgstr "Acerca de" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" msgstr "Colaboradores activos" #: builtin/mainmenu/tab_about.lua -#, fuzzy msgid "Active renderer:" -msgstr "Rango de envío en objetos activos" +msgstr "Renderizador activo:" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" @@ -935,9 +925,8 @@ msgid "Start Game" msgstr "Empezar juego" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Address" -msgstr "- Dirección: " +msgstr "Dirección" #: builtin/mainmenu/tab_online.lua src/client/keycode.cpp msgid "Clear" @@ -953,22 +942,20 @@ msgstr "Modo creativo" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Damage / PvP" -msgstr "Daño" +msgstr "Daño / PvP" #: builtin/mainmenu/tab_online.lua msgid "Del. Favorite" msgstr "Borrar Fav." #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Favorites" -msgstr "Favorito" +msgstr "Favoritos" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" -msgstr "" +msgstr "Servidores Incompatibles" #: builtin/mainmenu/tab_online.lua msgid "Join Game" @@ -979,18 +966,16 @@ msgid "Ping" msgstr "Ping" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Public Servers" -msgstr "Anunciar servidor" +msgstr "Servidores Públicos" #: builtin/mainmenu/tab_online.lua msgid "Refresh" -msgstr "" +msgstr "Actualizar" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Server Description" -msgstr "Descripción del servidor" +msgstr "Descripción del Servidor" #: builtin/mainmenu/tab_settings.lua msgid "2x" @@ -1033,13 +1018,12 @@ msgid "Connected Glass" msgstr "Vidrio conectado" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp -#, fuzzy msgid "Dynamic shadows" -msgstr "Sombra de la fuente" +msgstr "Sombras dinámicas" #: builtin/mainmenu/tab_settings.lua msgid "Dynamic shadows: " -msgstr "" +msgstr "Sombras dinámicas: " #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" @@ -1470,9 +1454,8 @@ msgid "Minimap currently disabled by game or mod" msgstr "El minimapa se encuentra actualmente desactivado por el juego o un mod" #: src/client/game.cpp -#, fuzzy msgid "Multiplayer" -msgstr "Un jugador" +msgstr "Multijugador" #: src/client/game.cpp msgid "Noclip mode disabled" @@ -1908,9 +1891,8 @@ msgid "Proceed" msgstr "Continuar" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "\"Aux1\" = climb down" -msgstr "\"Especial\" = Descender" +msgstr "\"Aux1\" = bajar" #: src/gui/guiKeyChangeMenu.cpp msgid "Autoforward" @@ -1930,7 +1912,7 @@ msgstr "Atrás" #: src/gui/guiKeyChangeMenu.cpp msgid "Block bounds" -msgstr "" +msgstr "Límites de bloque" #: src/gui/guiKeyChangeMenu.cpp msgid "Change camera" @@ -2488,9 +2470,8 @@ msgid "Autoscaling mode" msgstr "Modo de autoescalado" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key" -msgstr "Tecla Saltar" +msgstr "Tecla Aux1" #: src/settings_translation_file.cpp msgid "Aux1 key for climbing/descending" @@ -2748,9 +2729,8 @@ msgid "Colored fog" msgstr "Niebla colorida" #: src/settings_translation_file.cpp -#, fuzzy msgid "Colored shadows" -msgstr "Niebla colorida" +msgstr "Sombras coloridas" #: src/settings_translation_file.cpp msgid "" @@ -3371,12 +3351,11 @@ msgid "Fast movement" msgstr "Movimiento rápido" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Fast movement (via the \"Aux1\" key).\n" "This requires the \"fast\" privilege on the server." msgstr "" -"Movimiento rápido (por medio de tecla de \"Uso\").\n" +"Movimiento rápido (por medio de tecla de \"Aux1\").\n" "Requiere privilegio \"fast\" (rápido) en el servidor." #: src/settings_translation_file.cpp @@ -4002,14 +3981,13 @@ msgstr "" "a fin de no malgastar potencia de CPU sin beneficio." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n" "enabled." msgstr "" -"Si está desactivado, la tecla \"especial\" se utiliza para volar rápido si " -"tanto el modo de vuelo como el modo rápido están\n" -"habilitados." +"Si está desactivado, la tecla \"Aux1\" se utiliza para volar rápido si el " +"modo\n" +"de vuelo y el modo rápido están habilitados." #: src/settings_translation_file.cpp msgid "" @@ -5338,11 +5316,11 @@ msgid "" "to become shallower and occasionally dry.\n" "'altitude_dry': Reduces humidity with altitude." msgstr "" -"Atributos de generación de mapas específicos del generador de mapas " -"Valleys.\n" +"Atributos de generación de mapas específicos del generador de mapas Valleys." +"\n" "'altitude_chill': Reduce el calor con la altitud.\n" "'humid_rivers': Aumenta la humedad alrededor de ríos.\n" -"'vary_river_depth': Si está activo, la baja humedad y alto calor causan que " +"'vary_river_depth': Si está activo, la baja humedad y alto calor causan que\n" "los ríos sean poco profundos y ocasionalmente secos.\n" "'altitude_dry': Reduce la humedad con la altitud." @@ -5351,40 +5329,29 @@ msgid "Map generation attributes specific to Mapgen v5." msgstr "Atributos de generación de mapas específicos al generador de mapas v5." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen v6.\n" "The 'snowbiomes' flag enables the new 5 biome system.\n" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" "the 'jungles' flag is ignored." msgstr "" -"Atributos del generador de mapas globales.\n" -"En el generador de mapas V6 la opción (o marcador) \"decorations\" controla " -"todos los elementos decorativos excepto los árboles y la hierba de la " -"jungla, en todos los otros generadores de mapas esta opción controla todas " -"las decoraciones.\n" -"Las opciones que no son incluidas en el texto con la cadena de opciones no " -"serán modificadas y mantendrán su valor por defecto.\n" -"Las opciones que comienzan con el prefijo \"no\" son utilizadas para " -"inhabilitar esas opciones." +"Atributos específicos para la generación de Mapgen v6.\n" +"La opción 'snowbiomes' activa el nuevo sistema de generación de 5 biomas.\n" +"Cuando la opción 'snowbiomes' está activada, las junglas se activan " +"automáticamente y\n" +"la opción 'jungles' es ignorada." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen v7.\n" "'ridges': Rivers.\n" "'floatlands': Floating land masses in the atmosphere.\n" "'caverns': Giant caves deep underground." msgstr "" -"Atributos del generador de mapas globales.\n" -"En el generador de mapas V6 la opción (o marcador) \"decorations\" controla " -"todos los elementos decorativos excepto los árboles y la hierba de la " -"jungla, en todos los otros generadores de mapas esta opción controla todas " -"las decoraciones.\n" -"Las opciones que no son incluidas en el texto con la cadena de opciones no " -"serán modificadas y mantendrán su valor por defecto.\n" -"Las opciones que comienzan con el prefijo \"no\" son utilizadas para " -"inhabilitar esas opciones." +"Atributos específicos para la generación de Mapgen v7.\n" +"'ridges': Rios.\n" +"'floatlands': Masas de tierra flotantes en la atmósfera.\n" +"'caverns': Cavernas gigantes subterráneo profundo." #: src/settings_translation_file.cpp msgid "Map generation limit" @@ -5395,9 +5362,8 @@ msgid "Map save interval" msgstr "Intervalo de guardado de mapa" #: src/settings_translation_file.cpp -#, fuzzy msgid "Map update time" -msgstr "Tick de actualización de los líquidos" +msgstr "Tiempo de actualización de mapa" #: src/settings_translation_file.cpp msgid "Mapblock limit" @@ -5512,7 +5478,7 @@ msgstr "FPS máximo cuando el juego está pausado." #: src/settings_translation_file.cpp msgid "Maximum distance to render shadows." -msgstr "" +msgstr "Distancia máxima para renderizar las sombras." #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" @@ -5601,18 +5567,17 @@ msgid "" "try reducing it, but don't reduce it to a number below double of targeted\n" "client number." msgstr "" -"Número máximo de paquetes enviados por paso de envío. Si tiene una conexión " -"lenta, intente reducirlo, pero no lo reduzca a un número menor al doble del " +"Número máximo de paquetes enviados por paso de envío. Si tiene una conexión\n" +"lenta, intente reducirlo, pero no lo reduzca a un número menor al doble del\n" "número de cliente objetivo." #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum number of players that can be connected simultaneously." -msgstr "Cantidad de bloques que flotan simultáneamente por cliente." +msgstr "Número máximo de jugadores que se pueden conectar simultáneamente." #: src/settings_translation_file.cpp msgid "Maximum number of recent chat messages to show" -msgstr "Número máximo de mensajes del chat recientes a mostrar." +msgstr "Número máximo de mensajes del chat recientes a mostrar" #: src/settings_translation_file.cpp msgid "Maximum number of statically stored objects in a block." @@ -5620,7 +5585,7 @@ msgstr "Número máximo de objetos almacenados estáticamente en un bloque." #: src/settings_translation_file.cpp msgid "Maximum objects per block" -msgstr "Objetos máximos por bloque." +msgstr "Objetos máximos por bloque" #: src/settings_translation_file.cpp msgid "" @@ -5650,19 +5615,20 @@ msgstr "" "ilimitado." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum time a file download (e.g. a mod download) may take, stated in " "milliseconds." msgstr "" -"Tiempo máximo en ms que puede demorar una descarga (por ejemplo, la descarga " -"de un mod)." +"Tiempo máximo que puede tardar la descarga de archivo (p.ej. una descarga de " +"mod) en milisegundos." #: src/settings_translation_file.cpp msgid "" "Maximum time an interactive request (e.g. server list fetch) may take, " "stated in milliseconds." msgstr "" +"Tiempo máximo que puede tardar la solicitud interactiva (p.ej. una búsqueda " +"de lista de servidores) en milisegundos." #: src/settings_translation_file.cpp msgid "Maximum users" @@ -5752,7 +5718,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Mountain zero level" -msgstr "" +msgstr "Nivel cero de montañas" #: src/settings_translation_file.cpp msgid "Mouse sensitivity" @@ -5806,7 +5772,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Near plane" -msgstr "" +msgstr "Plano cercano" #: src/settings_translation_file.cpp msgid "Network" @@ -5992,6 +5958,8 @@ msgid "" "Port to connect to (UDP).\n" "Note that the port field in the main menu overrides this setting." msgstr "" +"Puerto de conectarse (UDP).\n" +"Nota que el campo de puerto en el menú principal anula esta configuración." #: src/settings_translation_file.cpp msgid "" @@ -6001,7 +5969,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Prevent mods from doing insecure things like running shell commands." -msgstr "" +msgstr "Evitar que mods hagan cosas inseguras como ejecutar comandos de shell." #: src/settings_translation_file.cpp msgid "" @@ -6015,7 +5983,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Profiler" -msgstr "" +msgstr "Perfilador" #: src/settings_translation_file.cpp msgid "Profiler toggle key" @@ -6054,7 +6022,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Random input" -msgstr "" +msgstr "Entrada aleatoria" #: src/settings_translation_file.cpp msgid "Range select key" @@ -6065,17 +6033,16 @@ msgid "Recent Chat Messages" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Regular font path" -msgstr "Ruta de fuentes" +msgstr "Ruta de fuente regular" #: src/settings_translation_file.cpp msgid "Remote media" -msgstr "" +msgstr "Medios remotos" #: src/settings_translation_file.cpp msgid "Remote port" -msgstr "" +msgstr "Puerto remoto" #: src/settings_translation_file.cpp msgid "" @@ -6085,7 +6052,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Replaces the default main menu with a custom one." -msgstr "" +msgstr "Sustituye el menú principal por defecto con uno personalizado." #: src/settings_translation_file.cpp #, fuzzy From 5f79e9552d5a8b2f1b75048891dae37f4d4b30aa Mon Sep 17 00:00:00 2001 From: Nicolae Crefelean Date: Thu, 17 Jun 2021 21:21:20 +0000 Subject: [PATCH 064/412] Translated using Weblate (Romanian) Currently translated at 47.6% (665 of 1396 strings) --- po/ro/minetest.po | 86 +++++++++++++++++++++-------------------------- 1 file changed, 38 insertions(+), 48 deletions(-) diff --git a/po/ro/minetest.po b/po/ro/minetest.po index 31c7fa9c9..9e5bf6e4d 100644 --- a/po/ro/minetest.po +++ b/po/ro/minetest.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Romanian (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-04-28 01:32+0000\n" +"PO-Revision-Date: 2021-07-25 23:36+0000\n" "Last-Translator: Nicolae Crefelean \n" "Language-Team: Romanian \n" @@ -13,48 +13,43 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " "20)) ? 1 : 2;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.7.2-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" -msgstr "" +msgstr "Golește coada mesajelor de chat" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Empty command." -msgstr "Comenzi de chat" +msgstr "Comenzi de chat." #: builtin/client/chatcommands.lua -#, fuzzy msgid "Exit to main menu" -msgstr "Ieși în Meniu" +msgstr "Ieși în meniul principal" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Invalid command: " -msgstr "Comandă locală" +msgstr "Comandă greșită: " #: builtin/client/chatcommands.lua msgid "Issued command: " -msgstr "" +msgstr "Comanda dată: " #: builtin/client/chatcommands.lua -#, fuzzy msgid "List online players" -msgstr "Jucător singur" +msgstr "Arată jucătorii conectați" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Online players: " -msgstr "Jucător singur" +msgstr "Jucători conectați: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." -msgstr "" +msgstr "Coada mesajelor de chat a fost golită." #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "Această comandă este dezactivată de server." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -65,36 +60,35 @@ msgid "You died" msgstr "Ai murit" #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." -msgstr "Ai murit" +msgstr "Ai murit." #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands:" -msgstr "Comandă locală" +msgstr "Comenzi disponibile:" #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands: " -msgstr "Comandă locală" +msgstr "Comenzi disponibile: " #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "Comandă indisponibilă: " #: builtin/common/chatcommands.lua msgid "Get help for commands" -msgstr "" +msgstr "Obține ajutor pentru comenzi" #: builtin/common/chatcommands.lua msgid "" "Use '.help ' to get more information, or '.help all' to list everything." msgstr "" +"Folosește „.help ” pentru detalii sau „.help all” pentru informații " +"complete." #: builtin/common/chatcommands.lua msgid "[all | ]" -msgstr "" +msgstr "[all | ]" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" @@ -235,7 +229,7 @@ msgstr "Dependențele $1 și $2 vor fi instalate." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" -msgstr "" +msgstr "$1, de $2" #: builtin/mainmenu/dlg_contentstore.lua msgid "" @@ -349,11 +343,11 @@ msgstr "Actualizare" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update All [$1]" -msgstr "" +msgstr "Actualizează tot [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "Vezi detalii într-un navigator web" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" @@ -788,16 +782,15 @@ msgstr "" #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "" +msgstr "Despre" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" msgstr "Contribuitori activi" #: builtin/mainmenu/tab_about.lua -#, fuzzy msgid "Active renderer:" -msgstr "Interval de trimitere obiect e activ" +msgstr "Tipul curent de randare:" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" @@ -812,6 +805,8 @@ msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" +"Deschide într-un manager de fișiere directorul care conține lumile,\n" +"jocurile, modificările și texturile furnizate de utilizator." #: builtin/mainmenu/tab_about.lua msgid "Previous Contributors" @@ -891,7 +886,7 @@ msgstr "Instalarea jocurilor din ContentDB" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua msgid "Name" -msgstr "" +msgstr "Nume" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -930,9 +925,8 @@ msgid "Start Game" msgstr "Începe Jocul" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Address" -msgstr "- Adresa: " +msgstr "Adresă" #: builtin/mainmenu/tab_online.lua src/client/keycode.cpp msgid "Clear" @@ -948,22 +942,20 @@ msgstr "Modul Creativ" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Damage / PvP" -msgstr "Daune" +msgstr "Daune / PvP" #: builtin/mainmenu/tab_online.lua msgid "Del. Favorite" msgstr "Şterge Favorit" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Favorites" -msgstr "Favorit" +msgstr "Favorite" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" -msgstr "" +msgstr "Servere incompatibile" #: builtin/mainmenu/tab_online.lua msgid "Join Game" @@ -974,16 +966,14 @@ msgid "Ping" msgstr "Ping" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Public Servers" -msgstr "Anunțare server" +msgstr "Servere publice" #: builtin/mainmenu/tab_online.lua msgid "Refresh" -msgstr "" +msgstr "Actualizează" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Server Description" msgstr "Descrierea serverului" @@ -1029,15 +1019,15 @@ msgstr "Sticlă conectată" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Dynamic shadows" -msgstr "" +msgstr "Umbre dinamice" #: builtin/mainmenu/tab_settings.lua msgid "Dynamic shadows: " -msgstr "" +msgstr "Umbre dinamice: " #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" -msgstr "Frunze luxsoase" +msgstr "Frunze detaliate" #: builtin/mainmenu/tab_settings.lua msgid "High" @@ -2785,7 +2775,7 @@ msgstr "Se conectează la server media extern" #: src/settings_translation_file.cpp msgid "Connects glass if supported by node." -msgstr "" +msgstr "Unește sticla dacă nodul permite asta." #: src/settings_translation_file.cpp msgid "Console alpha" @@ -2805,7 +2795,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "ContentDB Max Concurrent Downloads" -msgstr "" +msgstr "Maximul de descărcări simultane din ContentDB" #: src/settings_translation_file.cpp msgid "ContentDB URL" From 28851ca9b299537209fb96ad014156078158b15a Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Mon, 21 Jun 2021 15:04:11 +0000 Subject: [PATCH 065/412] Translated using Weblate (German) Currently translated at 100.0% (1396 of 1396 strings) --- po/de/minetest.po | 235 +++++++++++++++++++++++----------------------- 1 file changed, 117 insertions(+), 118 deletions(-) diff --git a/po/de/minetest.po b/po/de/minetest.po index b8362beb2..f2947b2dd 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: German (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-03-02 15:50+0000\n" +"PO-Revision-Date: 2021-06-21 15:38+0000\n" "Last-Translator: Wuzzy \n" "Language-Team: German \n" @@ -12,49 +12,43 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.5\n" +"X-Generator: Weblate 4.7\n" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Clear the out chat queue" -msgstr "Maximale Größe der ausgehenden Chatwarteschlange" +msgstr "Die ausgehende Chatwarteschlange leeren" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Empty command." -msgstr "Chatbefehle" +msgstr "Leerer Befehl." #: builtin/client/chatcommands.lua -#, fuzzy msgid "Exit to main menu" -msgstr "Hauptmenü" +msgstr "Zum Hauptmenü verlassen" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Invalid command: " -msgstr "Lokaler Befehl" +msgstr "Ungültiger Befehl: " #: builtin/client/chatcommands.lua msgid "Issued command: " -msgstr "" +msgstr "Befehl erteilt: " #: builtin/client/chatcommands.lua -#, fuzzy msgid "List online players" -msgstr "Einzelspieler" +msgstr "Online spielende Spieler auflisten" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Online players: " -msgstr "Einzelspieler" +msgstr "Online-Spieler: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." -msgstr "" +msgstr "Die ausgehende Chatwarteschlange ist nun leer." #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "Dieser Befehl ist vom Server deaktiviert." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -65,36 +59,35 @@ msgid "You died" msgstr "Sie sind gestorben" #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." -msgstr "Sie sind gestorben" +msgstr "Sie sind gestorben." #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands:" -msgstr "Lokaler Befehl" +msgstr "Verfügbare Befehle:" #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands: " -msgstr "Lokaler Befehl" +msgstr "Verfügbare Befehle: " #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "Befehl nicht verfügbar: " #: builtin/common/chatcommands.lua msgid "Get help for commands" -msgstr "" +msgstr "Hilfe für Befehle erhalten" #: builtin/common/chatcommands.lua msgid "" "Use '.help ' to get more information, or '.help all' to list everything." msgstr "" +"„.help “ benutzen, um mehr Informationen zu erhalten, oder „.help " +"all“ benutzen, um alles aufzulisten." #: builtin/common/chatcommands.lua msgid "[all | ]" -msgstr "" +msgstr "[all | ]" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" @@ -792,16 +785,15 @@ msgstr "" #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "" +msgstr "Über" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" msgstr "Aktive Mitwirkende" #: builtin/mainmenu/tab_about.lua -#, fuzzy msgid "Active renderer:" -msgstr "Reichweite aktiver Objekte" +msgstr "Aktiver Renderer:" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" @@ -936,9 +928,8 @@ msgid "Start Game" msgstr "Spiel starten" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Address" -msgstr "- Adresse: " +msgstr "Adresse" #: builtin/mainmenu/tab_online.lua src/client/keycode.cpp msgid "Clear" @@ -954,22 +945,20 @@ msgstr "Kreativmodus" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Damage / PvP" -msgstr "Schaden" +msgstr "Schaden / PvP" #: builtin/mainmenu/tab_online.lua msgid "Del. Favorite" msgstr "Favorit löschen" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Favorites" -msgstr "Favorit" +msgstr "Favoriten" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" -msgstr "" +msgstr "Inkompatible Server" #: builtin/mainmenu/tab_online.lua msgid "Join Game" @@ -980,16 +969,14 @@ msgid "Ping" msgstr "Latenz" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Public Servers" -msgstr "Server veröffentlichen" +msgstr "Öffentliche Server" #: builtin/mainmenu/tab_online.lua msgid "Refresh" -msgstr "" +msgstr "Neu laden" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Server Description" msgstr "Serverbeschreibung" @@ -1034,13 +1021,12 @@ msgid "Connected Glass" msgstr "Verbundenes Glas" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp -#, fuzzy msgid "Dynamic shadows" -msgstr "Schriftschatten" +msgstr "Dynamische Schatten" #: builtin/mainmenu/tab_settings.lua msgid "Dynamic shadows: " -msgstr "" +msgstr "Dynamische Schatten: " #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" @@ -1048,15 +1034,15 @@ msgstr "Schöne Blätter" #: builtin/mainmenu/tab_settings.lua msgid "High" -msgstr "" +msgstr "Hoch" #: builtin/mainmenu/tab_settings.lua msgid "Low" -msgstr "" +msgstr "Niedrig" #: builtin/mainmenu/tab_settings.lua msgid "Medium" -msgstr "" +msgstr "Mittel" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" @@ -1148,11 +1134,11 @@ msgstr "Trilinearer Filter" #: builtin/mainmenu/tab_settings.lua msgid "Ultra High" -msgstr "" +msgstr "Sehr hoch" #: builtin/mainmenu/tab_settings.lua msgid "Very Low" -msgstr "" +msgstr "Sehr niedrig" #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" @@ -1176,7 +1162,7 @@ msgstr "Fertig!" #: src/client/client.cpp msgid "Initializing nodes" -msgstr "Initialisiere Blöcke" +msgstr "Blöcke initialisieren" #: src/client/client.cpp msgid "Initializing nodes..." @@ -1188,7 +1174,7 @@ msgstr "Lade Texturen …" #: src/client/client.cpp msgid "Rebuilding shaders..." -msgstr "Shader wiederherstellen …" +msgstr "Shader erneuern…" #: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" @@ -1301,7 +1287,7 @@ msgstr "Clientseitige Skripte sind deaktiviert" #: src/client/game.cpp msgid "Connecting to server..." -msgstr "Verbinde mit Server …" +msgstr "Mit Server verbinden …" #: src/client/game.cpp msgid "Continue" @@ -1414,7 +1400,7 @@ msgstr "Schnellmodus aktiviert" #: src/client/game.cpp msgid "Fast mode enabled (note: no 'fast' privilege)" -msgstr "Schnellmodus aktiviert (Achtung: Kein „fast“-Privileg)" +msgstr "Schnellmodus aktiviert (Hinweis: Kein „fast“-Privileg)" #: src/client/game.cpp msgid "Fly mode disabled" @@ -1426,7 +1412,7 @@ msgstr "Flugmodus aktiviert" #: src/client/game.cpp msgid "Fly mode enabled (note: no 'fly' privilege)" -msgstr "Flugmodus aktiviert (Achtung: Kein „fly“-Privileg)" +msgstr "Flugmodus aktiviert (Hinweis: Kein „fly“-Privileg)" #: src/client/game.cpp msgid "Fog disabled" @@ -1469,9 +1455,8 @@ msgid "Minimap currently disabled by game or mod" msgstr "Übersichtskarte momentan von Spiel oder Mod deaktiviert" #: src/client/game.cpp -#, fuzzy msgid "Multiplayer" -msgstr "Einzelspieler" +msgstr "Mehrspieler" #: src/client/game.cpp msgid "Noclip mode disabled" @@ -1483,7 +1468,7 @@ msgstr "Geistmodus aktiviert" #: src/client/game.cpp msgid "Noclip mode enabled (note: no 'noclip' privilege)" -msgstr "Geistmodus aktiviert (Achtung: Kein „noclip“-Privileg)" +msgstr "Geistmodus aktiviert (Hinweis: Kein „noclip“-Privileg)" #: src/client/game.cpp msgid "Node definitions..." @@ -1909,9 +1894,8 @@ msgid "Proceed" msgstr "Fortsetzen" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "\"Aux1\" = climb down" -msgstr "„Spezial“ = runter" +msgstr "„Aux1“ = runter" #: src/gui/guiKeyChangeMenu.cpp msgid "Autoforward" @@ -1923,7 +1907,7 @@ msgstr "Auto-Springen" #: src/gui/guiKeyChangeMenu.cpp msgid "Aux1" -msgstr "" +msgstr "Aux1" #: src/gui/guiKeyChangeMenu.cpp msgid "Backward" @@ -1931,7 +1915,7 @@ msgstr "Rückwärts" #: src/gui/guiKeyChangeMenu.cpp msgid "Block bounds" -msgstr "" +msgstr "Blockgrenzen" #: src/gui/guiKeyChangeMenu.cpp msgid "Change camera" @@ -2110,15 +2094,14 @@ msgstr "" "zentriert." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "(Android) Use virtual joystick to trigger \"Aux1\" button.\n" "If enabled, virtual joystick will also tap \"Aux1\" button when out of main " "circle." msgstr "" -"(Android) Den virtuellen Joystick benutzen, um die „Aux“-Taste zu " -"betätigen.\n" -"Falls aktiviert, wird der virtuelle Joystick außerdem die „Aux“-Taste " +"(Android) Den virtuellen Joystick benutzen, um die „Aux1“-Taste zu betätigen." +"\n" +"Falls aktiviert, wird der virtuelle Joystick außerdem die „Aux1“-Taste " "drücken, wenn er sich außerhalb des Hauptkreises befindet." #: src/settings_translation_file.cpp @@ -2493,14 +2476,12 @@ msgid "Autoscaling mode" msgstr "Autoskalierungsmodus" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key" -msgstr "Sprungtaste" +msgstr "Aux1-Taste" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key for climbing/descending" -msgstr "Spezialtaste zum Klettern/Sinken" +msgstr "Aux1-Taste zum Klettern/Sinken" #: src/settings_translation_file.cpp msgid "Backward key" @@ -2653,9 +2634,8 @@ msgstr "" "Wobei 0.0 die minimale Lichtstufe und 1.0 die höchste Lichtstufe ist." #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat command time message threshold" -msgstr "Chatnachrichten-Kick-Schwellwert" +msgstr "Chatbefehlzeitnachrichtenschwellwert" #: src/settings_translation_file.cpp msgid "Chat font size" @@ -2754,9 +2734,8 @@ msgid "Colored fog" msgstr "Gefärbter Nebel" #: src/settings_translation_file.cpp -#, fuzzy msgid "Colored shadows" -msgstr "Gefärbter Nebel" +msgstr "Gefärbte Schatten" #: src/settings_translation_file.cpp msgid "" @@ -2991,6 +2970,10 @@ msgid "" "This simulates the soft shadows effect by applying a PCF or poisson disk\n" "but also uses more resources." msgstr "" +"Definiert die Schattenfilterqualität\n" +"Dies simuliert den weichen Schatteneffekt, indem eine PCF- oder Poisson-" +"Scheibe angewendet wird,\n" +"aber dies verbraucht auch mehr Ressourcen." #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." @@ -3172,6 +3155,9 @@ msgid "" "Enable colored shadows. \n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" +"Aktiviert gefärbte Schatten. \n" +"Falls aktiv, werden transluzente Blöcke gefärbte Schatten werden. Dies ist " +"rechenintensiv." #: src/settings_translation_file.cpp msgid "Enable console window" @@ -3203,6 +3189,9 @@ msgid "" "On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " "filtering." msgstr "" +"Aktiviert eine Poisson-Scheibenfilterung.\n" +"Falls aktiv, werden Poisson-Scheiben verwendet, um „weiche Schatten“ zu " +"erzeugen. Ansonsten wird die PCF-Filterung benutzt." #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." @@ -3388,12 +3377,11 @@ msgid "Fast movement" msgstr "Schnell bewegen" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Fast movement (via the \"Aux1\" key).\n" "This requires the \"fast\" privilege on the server." msgstr "" -"Schnelle Bewegung (mit der „Spezial“-Taste).\n" +"Schnelle Bewegung (mit der „Aux1“-Taste).\n" "Dazu wird das „fast“-Privileg auf dem Server benötigt." #: src/settings_translation_file.cpp @@ -3426,18 +3414,18 @@ msgid "Filmic tone mapping" msgstr "Filmische Dynamikkompression" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Filtered textures can blend RGB values with fully-transparent neighbors,\n" "which PNG optimizers usually discard, often resulting in dark or\n" "light edges to transparent textures. Apply a filter to clean that up\n" "at texture load time. This is automatically enabled if mipmapping is enabled." msgstr "" -"Gefilterte Texturen können RGB-Werte mit 100% transparenten Nachbarn,\n" +"Gefilterte Texturen können RGB-Werte mit voll transparenten Nachbarn,\n" "die PNG-Optimierer üblicherweise verwerfen, mischen. Manchmal\n" "resultiert dies in einer dunklen oder hellen Kante bei transparenten\n" -"Texturen. Aktivieren Sie diesen Filter, um dies beim Laden der\n" -"Texturen aufzuräumen." +"Texturen. Aktivieren Sie einen Filter, um dies beim Laden der\n" +"Texturen aufzuräumen. Dies wird automatisch aktiviert, falls Mipmapping " +"aktiviert ist." #: src/settings_translation_file.cpp msgid "Filtering" @@ -3771,10 +3759,10 @@ msgid "Heat noise" msgstr "Hitzenrauschen" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Height component of the initial window size. Ignored in fullscreen mode." -msgstr "Höhenkomponente der anfänglichen Fenstergröße." +msgstr "" +"Höhenkomponente der anfänglichen Fenstergröße. Im Vollbildmodus ignoriert." #: src/settings_translation_file.cpp msgid "Height noise" @@ -4029,12 +4017,11 @@ msgstr "" "unnötig zu belasten." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n" "enabled." msgstr "" -"Falls deaktiviert, wird die „Spezial“-Taste benutzt, um schnell zu fliegen,\n" +"Falls deaktiviert, wird die „Aux1“-Taste benutzt, um schnell zu fliegen,\n" "wenn sowohl Flug- als auch Schnellmodus aktiviert sind." #: src/settings_translation_file.cpp @@ -4063,13 +4050,12 @@ msgstr "" "Dafür wird das „noclip“-Privileg auf dem Server benötigt." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down " "and\n" "descending." msgstr "" -"Falls aktiviert, wird die „Spezial“-Taste statt der „Schleichen“-Taste zum\n" +"Falls aktiviert, wird die „Aux1“-Taste statt der „Schleichen“-Taste zum\n" "Herunterklettern und Sinken benutzt." #: src/settings_translation_file.cpp @@ -4134,6 +4120,9 @@ msgid "" "If the execution of a chat command takes longer than this specified time in\n" "seconds, add the time information to the chat command message" msgstr "" +"Falls die Ausführung eines Chatbefehls länger als diese angegebene Zeit in\n" +"Sekunden braucht, wird die Zeitinformation an die Chatbefehlsnachricht " +"angehängt" #: src/settings_translation_file.cpp msgid "" @@ -5412,9 +5401,8 @@ msgid "Map save interval" msgstr "Speicherintervall der Karte" #: src/settings_translation_file.cpp -#, fuzzy msgid "Map update time" -msgstr "Flüssigkeitsaktualisierungstakt" +msgstr "Kartenupdatezeit" #: src/settings_translation_file.cpp msgid "Mapblock limit" @@ -5528,7 +5516,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Maximum distance to render shadows." -msgstr "" +msgstr "Maximale Distanz zum Rendern von Schatten." #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" @@ -5666,19 +5654,20 @@ msgstr "" "zu begrenzen." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum time a file download (e.g. a mod download) may take, stated in " "milliseconds." msgstr "" -"Maximale Zeit in ms, die das Herunterladen einer Datei (z.B. einer Mod) " -"dauern darf." +"Maximale Zeit in Millisekunden, die das Herunterladen einer Datei (z.B. " +"einer Mod) dauern darf." #: src/settings_translation_file.cpp msgid "" "Maximum time an interactive request (e.g. server list fetch) may take, " "stated in milliseconds." msgstr "" +"Maximale Zeit in Millisekunden, die eine interaktive Anfrage (z.B. " +"Serverlistenanfrage) brauchen darf." #: src/settings_translation_file.cpp msgid "Maximum users" @@ -6054,9 +6043,8 @@ msgid "Player versus player" msgstr "Spielerkampf" #: src/settings_translation_file.cpp -#, fuzzy msgid "Poisson filtering" -msgstr "Bilinearer Filter" +msgstr "Poissonfilter" #: src/settings_translation_file.cpp msgid "" @@ -6461,6 +6449,9 @@ msgid "" "Set the shadow strength.\n" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" +"Setzt die Schattenstärke.\n" +"Ein niedrigerer Wert führt zu schwächeren Schatten, ein höherer Wert führt " +"zu dunkleren Schatten." #: src/settings_translation_file.cpp msgid "" @@ -6469,6 +6460,11 @@ msgid "" "resources.\n" "Minimun value 0.001 seconds max value 0.2 seconds" msgstr "" +"Setzt die Schattenupdatezeit.\n" +"Ein niedrigerer Wert bedeutet, dass Schatten und die Karte schneller " +"aktualisiert werden, aber dies verbraucht mehr Ressourcen.\n" +"Minimalwert: 0.001 Sekunden. Maximalwert: 0.2 Sekunden.\n" +"(Beachten Sie die englische Notation mit Punkt als Dezimaltrennzeichen.)" #: src/settings_translation_file.cpp msgid "" @@ -6476,6 +6472,10 @@ msgid "" "Lower values mean sharper shadows bigger values softer.\n" "Minimun value 1.0 and max value 10.0" msgstr "" +"Setzt den Radius von weichen Schatten.\n" +"Niedrigere Werte führen zu schärferen Schatten, größere Werte führen zu " +"weicheren Schatten.\n" +"Minimalwert: 1.0; Maximalwert: 10.0" #: src/settings_translation_file.cpp msgid "" @@ -6483,14 +6483,16 @@ msgid "" "Value of 0 means no tilt / vertical orbit.\n" "Minimun value 0.0 and max value 60.0" msgstr "" +"Setzt die Neigung vom Sonnen-/Mondorbit in Grad.\n" +"0 = keine Neigung / vertikaler Orbit.\n" +"Minimalwert: 0.0. Maximalwert: 60.0" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable Shadow Mapping.\n" "Requires shaders to be enabled." msgstr "" -"Auf „wahr“ setzen, um wehende Blätter zu aktivieren.\n" +"Auf „wahr“ setzen, um Shadow-Mapping zu aktivieren.\n" "Dafür müssen Shader aktiviert sein." #: src/settings_translation_file.cpp @@ -6523,6 +6525,9 @@ msgid "" "On false, 16 bits texture will be used.\n" "This can cause much more artifacts in the shadow." msgstr "" +"Setzt die Schattentexturqualität auf 32 Bits.\n" +"Falls aktiviert, werden 16-Bit-Texturen benutzt.\n" +"Dies kann zu viel mehr Artefakten im Schatten führen." #: src/settings_translation_file.cpp msgid "Shader path" @@ -6541,22 +6546,20 @@ msgstr "" "Das funktioniert nur mit dem OpenGL-Grafik-Backend." #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow filter quality" -msgstr "Bildschirmfotoqualität" +msgstr "Schattenfilterqualität" #: src/settings_translation_file.cpp msgid "Shadow map max distance in nodes to render shadows" -msgstr "" +msgstr "Maximale Schattenrenderdistanz von Schattenkarten in Blöcken" #: src/settings_translation_file.cpp msgid "Shadow map texture in 32 bits" -msgstr "" +msgstr "Schattenkartentextur in 32 Bits" #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow map texture size" -msgstr "Minimale Texturengröße" +msgstr "Schattenkartentexturengröße" #: src/settings_translation_file.cpp msgid "" @@ -6568,7 +6571,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Shadow strength" -msgstr "" +msgstr "Schattenstärke" #: src/settings_translation_file.cpp msgid "Shape of the minimap. Enabled = round, disabled = square." @@ -6592,7 +6595,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Show nametag backgrounds by default" -msgstr "Namensschildhintergründe standardmäßig anzeigen" +msgstr "Standardmäßig Hintergründe für Namensschilder anzeigen" #: src/settings_translation_file.cpp msgid "Shutdown message" @@ -6629,7 +6632,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" -msgstr "" +msgstr "Himmelskörperorbitneigung" #: src/settings_translation_file.cpp msgid "Slice w" @@ -6690,9 +6693,8 @@ msgid "Sneaking speed, in nodes per second." msgstr "Schleichgeschwindigkeit, in Blöcken pro Sekunde." #: src/settings_translation_file.cpp -#, fuzzy msgid "Soft shadow radius" -msgstr "Schriftschatten-Undurchsichtigkeit" +msgstr "Weicher-Schatten-Radius" #: src/settings_translation_file.cpp msgid "Sound" @@ -6859,6 +6861,9 @@ msgid "" "This must be a power of two.\n" "Bigger numbers create better shadowsbut it is also more expensive." msgstr "" +"Texturengröße zum Rendern der Schattenkarte.\n" +"Dies muss eine Zweierpotenz sein.\n" +"Größere Werte erzeugen bessere Schatten, aber dies ist auch rechenintensiver." #: src/settings_translation_file.cpp msgid "" @@ -6961,7 +6966,6 @@ msgstr "" "konfiguriert werden." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end.\n" "A restart is required after changing this.\n" @@ -6970,7 +6974,7 @@ msgid "" "On other platforms, OpenGL is recommended.\n" "Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)" msgstr "" -"Das Renderer-Backend für Irrlicht.\n" +"Das Renderer-Backend.\n" "Ein Neustart ist erforderlich, wenn dies geändert wird.\n" "Anmerkung: Auf Android belassen Sie dies bei OGLES1, wenn Sie sich unsicher " "sind.\n" @@ -7324,9 +7328,8 @@ msgid "Viewing range" msgstr "Sichtweite" #: src/settings_translation_file.cpp -#, fuzzy msgid "Virtual joystick triggers Aux1 button" -msgstr "Virtueller Joystick löst Aux-Taste aus" +msgstr "Virtueller Joystick löst Aux1-Taste aus" #: src/settings_translation_file.cpp msgid "Volume" @@ -7430,7 +7433,6 @@ msgstr "" "korrekt unterstützen." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" "can be blurred, so automatically upscale them with nearest-neighbor\n" @@ -7447,10 +7449,8 @@ msgstr "" "die\n" "minimale Texturengröße für die vergrößerten Texturen; höhere Werte führen\n" "zu einem schärferen Aussehen, aber erfordern mehr Speicher. Zweierpotenzen\n" -"werden empfohlen. Ein Wert größer als 1 könnte keinen sichtbaren Effekt\n" -"hervorbringen, es sei denn, der bilineare, trilineare oder anisotropische " -"Filter\n" -"ist aktiviert.\n" +"werden empfohlen. Diese Einstellung trifft NUR dann in Kraft, falls\n" +"der bilineare/trilineare/anisotrope Filter aktiviert ist.\n" "Dies wird außerdem verwendet als die Basisblocktexturengröße für\n" "welt-ausgerichtete automatische Texturenskalierung." @@ -7526,9 +7526,9 @@ msgstr "" "Drücken von F5)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Width component of the initial window size. Ignored in fullscreen mode." -msgstr "Breiten-Komponente der anfänglichen Fenstergröße." +msgstr "" +"Breiten-Komponente der anfänglichen Fenstergröße. Im Vollbildmodus ignoriert." #: src/settings_translation_file.cpp msgid "Width of the selection box lines around nodes." @@ -7667,9 +7667,8 @@ msgid "cURL file download timeout" msgstr "cURL-Dateidownload-Zeitüberschreitung" #: src/settings_translation_file.cpp -#, fuzzy msgid "cURL interactive timeout" -msgstr "cURL-Zeitüberschreitung" +msgstr "cURL-Interaktiv-Zeitüberschreitung" #: src/settings_translation_file.cpp msgid "cURL parallel limit" From 5929c8f5ca2ff890d45b3c6e8b011d0cb6df6e62 Mon Sep 17 00:00:00 2001 From: Janar Leas Date: Mon, 28 Jun 2021 10:10:20 +0000 Subject: [PATCH 066/412] Translated using Weblate (Estonian) Currently translated at 44.1% (616 of 1396 strings) --- po/et/minetest.po | 217 +++++++++++++++++++++------------------------- 1 file changed, 99 insertions(+), 118 deletions(-) diff --git a/po/et/minetest.po b/po/et/minetest.po index 90801e319..e7291e874 100644 --- a/po/et/minetest.po +++ b/po/et/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Estonian (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-03-02 15:50+0000\n" -"Last-Translator: Ayes \n" +"PO-Revision-Date: 2021-06-29 10:33+0000\n" +"Last-Translator: Janar Leas \n" "Language-Team: Estonian \n" "Language: et\n" @@ -12,40 +12,35 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.5\n" +"X-Generator: Weblate 4.7.1-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" msgstr "" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Empty command." -msgstr "Käsklused" +msgstr "Tühi käsk." #: builtin/client/chatcommands.lua -#, fuzzy msgid "Exit to main menu" msgstr "Välju menüüsse" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Invalid command: " -msgstr "Kohalik käsk" +msgstr "Väär käsk: " #: builtin/client/chatcommands.lua msgid "Issued command: " -msgstr "" +msgstr "Anti käsklus: " #: builtin/client/chatcommands.lua -#, fuzzy msgid "List online players" -msgstr "Üksikmäng" +msgstr "Võrgus mängijate loend" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Online players: " -msgstr "Üksikmäng" +msgstr "Mängijaid võrgus: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." @@ -53,7 +48,7 @@ msgstr "" #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "Võõrustaja piiras selle käsu kasutuse." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -64,36 +59,33 @@ msgid "You died" msgstr "Said surma" #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." -msgstr "Said surma" +msgstr "Said otsa." #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands:" -msgstr "Kohalik käsk" +msgstr "Võimalikud käsud:" #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands: " -msgstr "Kohalik käsk" +msgstr "Võimalikud käsud: " #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "Käsk pole saadaval: " #: builtin/common/chatcommands.lua msgid "Get help for commands" -msgstr "" +msgstr "Leia abi käskude kohta" #: builtin/common/chatcommands.lua msgid "" "Use '.help ' to get more information, or '.help all' to list everything." -msgstr "" +msgstr "'.help ' jagab rohkem teadmisi, ning '.help all' loetleb kõik." #: builtin/common/chatcommands.lua msgid "[all | ]" -msgstr "" +msgstr "[all | ]" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" @@ -230,17 +222,19 @@ msgstr "\"$1\" on juba olemas. Kas sa tahad seda üle kirjutada?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." -msgstr "" +msgstr "Paigaldatakse sõltuvused $1 ja $2." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" -msgstr "" +msgstr "$1 $2 poolt" #: builtin/mainmenu/dlg_contentstore.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" +"$1 allalaadimisel,\n" +"$2 ootel" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 downloading..." @@ -248,7 +242,7 @@ msgstr "$1 allalaadimine..." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "" +msgstr "$1 vajaliku sõltuvust polnud leida." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." @@ -296,9 +290,8 @@ msgid "Install $1" msgstr "Paigalda $1" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install missing dependencies" -msgstr "Paigalda valikulised sõltuvused" +msgstr "Paigalda puuduvad sõltuvused" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -318,7 +311,6 @@ msgid "No updates" msgstr "Värskendusi pole" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Not found" msgstr "Ei leitud" @@ -332,7 +324,7 @@ msgstr "Palun tee kindlaks et põhi mäng on õige." #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" -msgstr "" +msgstr "Ootel" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" @@ -785,7 +777,7 @@ msgstr "" #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "" +msgstr "Teavet" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" @@ -808,6 +800,8 @@ msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" +"Kasutaja poolsete maailmate, mängude, mod-de ning tekstuuri pakide\n" +"kausta avamine faili-halduris." #: builtin/mainmenu/tab_about.lua msgid "Previous Contributors" @@ -898,9 +892,8 @@ msgid "No world created or selected!" msgstr "Pole valitud ega loodud ühtegi maailma!" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Password" -msgstr "Uus parool" +msgstr "Salasõna" #: builtin/mainmenu/tab_local.lua msgid "Play Game" @@ -927,9 +920,8 @@ msgid "Start Game" msgstr "Alusta mängu" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Address" -msgstr "- Aadress: " +msgstr "Aadress" #: builtin/mainmenu/tab_online.lua src/client/keycode.cpp msgid "Clear" @@ -945,22 +937,20 @@ msgstr "Looja" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Damage / PvP" -msgstr "Vigastused" +msgstr "Vigastused mängijatelt" #: builtin/mainmenu/tab_online.lua msgid "Del. Favorite" msgstr "Pole lemmik" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Favorites" -msgstr "On lemmik" +msgstr "Lemmikud" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" -msgstr "" +msgstr "Ühildumatud Võõrustajad" #: builtin/mainmenu/tab_online.lua msgid "Join Game" @@ -971,18 +961,16 @@ msgid "Ping" msgstr "Viivitus" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Public Servers" -msgstr "Võõrustamise kuulutamine" +msgstr "Avalikud võõrustajad" #: builtin/mainmenu/tab_online.lua msgid "Refresh" -msgstr "" +msgstr "Värskenda" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Server Description" -msgstr "Võõrustaja kanal" +msgstr "Võõrustaja kirjeldus" #: builtin/mainmenu/tab_settings.lua msgid "2x" @@ -1026,11 +1014,11 @@ msgstr "Ühendatud klaas" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Dynamic shadows" -msgstr "" +msgstr "Elavad varjud" #: builtin/mainmenu/tab_settings.lua msgid "Dynamic shadows: " -msgstr "" +msgstr "Elavad varjud: " #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" @@ -1038,15 +1026,15 @@ msgstr "Uhked lehed" #: builtin/mainmenu/tab_settings.lua msgid "High" -msgstr "" +msgstr "Kõrge" #: builtin/mainmenu/tab_settings.lua msgid "Low" -msgstr "" +msgstr "Madal" #: builtin/mainmenu/tab_settings.lua msgid "Medium" -msgstr "" +msgstr "Keskmine" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" @@ -1101,9 +1089,8 @@ msgid "Shaders" msgstr "Varjutajad" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Shaders (experimental)" -msgstr "Shaderid (eksperimentaalsed)" +msgstr "Shaderid (katselised)" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" @@ -1139,11 +1126,11 @@ msgstr "Tri-lineaar filtreerimine" #: builtin/mainmenu/tab_settings.lua msgid "Ultra High" -msgstr "" +msgstr "Ülikõrge" #: builtin/mainmenu/tab_settings.lua msgid "Very Low" -msgstr "" +msgstr "Vägamadal" #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" @@ -1444,7 +1431,6 @@ msgid "Item definitions..." msgstr "Esemete määratlused..." #: src/client/game.cpp -#, fuzzy msgid "KiB/s" msgstr "KiB/s" @@ -1453,7 +1439,6 @@ msgid "Media..." msgstr "Meedia..." #: src/client/game.cpp -#, fuzzy msgid "MiB/s" msgstr "MiB/s" @@ -1462,9 +1447,8 @@ msgid "Minimap currently disabled by game or mod" msgstr "Pisikaardi keelab hetkel mäng või MOD" #: src/client/game.cpp -#, fuzzy msgid "Multiplayer" -msgstr "Üksikmäng" +msgstr "Hulgimängija" #: src/client/game.cpp msgid "Noclip mode disabled" @@ -1500,7 +1484,7 @@ msgstr "" #: src/client/game.cpp msgid "Profiler graph shown" -msgstr "" +msgstr "Koormushinnangu kuvamine" #: src/client/game.cpp msgid "Remote server" @@ -1554,13 +1538,13 @@ msgid "Viewing range is at minimum: %d" msgstr "Vaate kaugus on vähim võimalik: %d" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Volume changed to %d%%" -msgstr "helitugevus muutetud %d%%-ks" +msgstr "Helitugevus muutus %d%%" #: src/client/game.cpp msgid "Wireframe shown" -msgstr "" +msgstr "Raamvõrgustiku paljastus" #: src/client/game.cpp msgid "Zoom currently disabled by game or mod" @@ -1576,24 +1560,24 @@ msgstr "Vestlus peidetud" #: src/client/gameui.cpp msgid "Chat shown" -msgstr "" +msgstr "Vestluse näitamine" #: src/client/gameui.cpp msgid "HUD hidden" -msgstr "" +msgstr "Liidese peitmine" #: src/client/gameui.cpp msgid "HUD shown" -msgstr "" +msgstr "Liidese näitamine" #: src/client/gameui.cpp msgid "Profiler hidden" -msgstr "" +msgstr "Koormushindaja peitmine" #: src/client/gameui.cpp #, c-format msgid "Profiler shown (page %d of %d)" -msgstr "" +msgstr "Koormushinnang (%d leht %d-st)" #: src/client/keycode.cpp msgid "Apps" @@ -1762,11 +1746,11 @@ msgstr "OEM Tühi" #: src/client/keycode.cpp msgid "Page down" -msgstr "" +msgstr "Lehekülg alla" #: src/client/keycode.cpp msgid "Page up" -msgstr "" +msgstr "Lehekülg üles" #: src/client/keycode.cpp msgid "Pause" @@ -1869,9 +1853,8 @@ msgid "Minimap in surface mode, Zoom x%d" msgstr "Pinnakaart, Suurendus ×%d" #: src/client/minimap.cpp -#, fuzzy msgid "Minimap in texture mode" -msgstr "Pinnakaart, Suurendus ×1" +msgstr "Pisikaart tekstuur-laadis" #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" @@ -1890,15 +1873,19 @@ msgid "" "Please retype your password and click 'Register and Join' to confirm account " "creation, or click 'Cancel' to abort." msgstr "" +"Oled esmakordselt liitumas selle võõrustajaga, kandes nime \"%s\".\n" +"Kui jätkad, siis luuakse sellele võõrustajale uus konto sinu volitus " +"andmetega.\n" +"Trüki salasõna uuesti ning klõpsa 'Registreeru ja ühine' konto loomisega " +"nõustumiseks, või 'Loobu' keeldumiseks." #: src/gui/guiFormSpecMenu.cpp msgid "Proceed" msgstr "Jätka" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "\"Aux1\" = climb down" -msgstr "\"Eriline\" = roni alla" +msgstr "\"Aux1\" = roni alla" #: src/gui/guiKeyChangeMenu.cpp msgid "Autoforward" @@ -1910,7 +1897,7 @@ msgstr "Automaatne hüppamine" #: src/gui/guiKeyChangeMenu.cpp msgid "Aux1" -msgstr "" +msgstr "Aux1" #: src/gui/guiKeyChangeMenu.cpp msgid "Backward" @@ -1918,7 +1905,7 @@ msgstr "Tagasi" #: src/gui/guiKeyChangeMenu.cpp msgid "Block bounds" -msgstr "" +msgstr "Klotsi piirid" #: src/gui/guiKeyChangeMenu.cpp msgid "Change camera" @@ -1938,11 +1925,11 @@ msgstr "Konsool" #: src/gui/guiKeyChangeMenu.cpp msgid "Dec. range" -msgstr "" +msgstr "Vähenda ulatust" #: src/gui/guiKeyChangeMenu.cpp msgid "Dec. volume" -msgstr "" +msgstr "Vähenda valjust" #: src/gui/guiKeyChangeMenu.cpp msgid "Double tap \"jump\" to toggle fly" @@ -1958,7 +1945,7 @@ msgstr "Edasi" #: src/gui/guiKeyChangeMenu.cpp msgid "Inc. range" -msgstr "" +msgstr "Suurenda ulatust" #: src/gui/guiKeyChangeMenu.cpp msgid "Inc. volume" @@ -1987,16 +1974,14 @@ msgid "Local command" msgstr "Kohalik käsk" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Mute" -msgstr "Summuta" +msgstr "Vaigista" #: src/gui/guiKeyChangeMenu.cpp msgid "Next item" msgstr "Järgmine üksus" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Prev. item" msgstr "Eelmine asi" @@ -2079,7 +2064,6 @@ msgstr "Hääle Volüüm: " #. ~ Imperative, as in "Enter/type in text". #. Don't forget the space. #: src/gui/modalMenu.cpp -#, fuzzy msgid "Enter " msgstr "Sisesta " @@ -2095,6 +2079,8 @@ msgid "" "(Android) Fixes the position of virtual joystick.\n" "If disabled, virtual joystick will center to first-touch's position." msgstr "" +"(Android) Parendab virtuaalse juhtkangi asukohta.\n" +"Kui keelatud, siis juhtkangi kese asub esmapuute kohal." #: src/settings_translation_file.cpp msgid "" @@ -2102,6 +2088,8 @@ msgid "" "If enabled, virtual joystick will also tap \"Aux1\" button when out of main " "circle." msgstr "" +"(Android) Virtuaal-juhtkangi kasutamine \"Aux1\" nupu päästmiseks.\n" +"Kui lubatud, juhtkang päästab ka \"Aux1\" nupu kui läheb väljapoole pearingi." #: src/settings_translation_file.cpp msgid "" @@ -2128,31 +2116,31 @@ msgstr "" #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of ridged mountains." -msgstr "" +msgstr "Kahemõõtmeline müra mis määrab seljandike kuju/suuruse." #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of rolling hills." -msgstr "" +msgstr "Kahemõõtmeline müra mis määrab vooremaa kuju/suuruse." #: src/settings_translation_file.cpp msgid "2D noise that controls the shape/size of step mountains." -msgstr "" +msgstr "Kahemõõtmeline müra mis määrab astmikkõrgustike kuju/suuruse." #: src/settings_translation_file.cpp msgid "2D noise that controls the size/occurrence of ridged mountain ranges." -msgstr "" +msgstr "Kahemõõtmeline müra mis määrab seljandike ala suuruse/ilmingu." #: src/settings_translation_file.cpp msgid "2D noise that controls the size/occurrence of rolling hills." -msgstr "" +msgstr "Kahemõõtmeline müra mis määrab vooremaa ala suuruse/ilmingu." #: src/settings_translation_file.cpp msgid "2D noise that controls the size/occurrence of step mountain ranges." -msgstr "" +msgstr "Kahemõõtmeline müra mis määrab astmikkõrgendike ala suuruse/ilmingu." #: src/settings_translation_file.cpp msgid "2D noise that locates the river valleys and channels." -msgstr "" +msgstr "Kahemõõtmeline müra mis paigutab jõeorud ja kanalid." #: src/settings_translation_file.cpp msgid "3D clouds" @@ -2168,7 +2156,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." -msgstr "" +msgstr "Üüratuid koopasaale määratlev kolmemõõtmeline müra." #: src/settings_translation_file.cpp msgid "" @@ -2186,19 +2174,20 @@ msgstr "" #: src/settings_translation_file.cpp msgid "3D noise defining structure of river canyon walls." -msgstr "" +msgstr "Kanjonjõe järsakkaldaid määratlev kolmemõõtmeline müra." #: src/settings_translation_file.cpp msgid "3D noise defining terrain." -msgstr "" +msgstr "Maastiku määratlev kolmemõõtmeline müra." #: src/settings_translation_file.cpp msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations." msgstr "" +"Kolmemõõtmeline müra kaljudele, eenditele, jms. Tavaliselt väikesed erisused." #: src/settings_translation_file.cpp msgid "3D noise that determines number of dungeons per mapchunk." -msgstr "" +msgstr "Kolmemõõtmeline müra, mis määratleb kambristike sageduse kaardijaos." #: src/settings_translation_file.cpp msgid "" @@ -2222,27 +2211,27 @@ msgstr "" #: src/settings_translation_file.cpp msgid "A message to be displayed to all clients when the server crashes." -msgstr "" +msgstr "Teade kõigile külalistele, kui võõrustaja kooleb." #: src/settings_translation_file.cpp msgid "A message to be displayed to all clients when the server shuts down." -msgstr "" +msgstr "Teade kõigile külalistele, kui server kinni läheb." #: src/settings_translation_file.cpp msgid "ABM interval" -msgstr "" +msgstr "ABM sagedus" #: src/settings_translation_file.cpp msgid "ABM time budget" -msgstr "" +msgstr "ABM-i ajakava" #: src/settings_translation_file.cpp msgid "Absolute limit of queued blocks to emerge" -msgstr "" +msgstr "Kõrgeim piirang ilmumist ootavatele klotsiedele" #: src/settings_translation_file.cpp msgid "Acceleration in air" -msgstr "" +msgstr "Kiirendus õhus" #: src/settings_translation_file.cpp msgid "Acceleration of gravity, in nodes per second per second." @@ -2394,9 +2383,8 @@ msgid "Autoscaling mode" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key" -msgstr "Hüppa" +msgstr "Aux1 võti" #: src/settings_translation_file.cpp msgid "Aux1 key for climbing/descending" @@ -2545,9 +2533,8 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat command time message threshold" -msgstr "Vestlus sõnumi väljaviskamis lävi" +msgstr "Vestluskäskluse ajalise sõnumi lävi" #: src/settings_translation_file.cpp msgid "Chat font size" @@ -2950,9 +2937,8 @@ msgid "Desynchronize block animation" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dig key" -msgstr "Parem klahv" +msgstr "Kaevuri klahv" #: src/settings_translation_file.cpp msgid "Digging particles" @@ -3441,10 +3427,9 @@ msgid "" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" "and junglegrass, in all other mapgens this flag controls all decorations." msgstr "" -"Üldised maailma-loome omadused.\n" -"Maailma loome v6 puhul lipp 'Ilmestused' ei avalda mõju puudele ja \n" -"tihniku rohule, kõigi teiste versioonide puhul mõjutab see lipp \n" -"kõiki ilmestusi (nt: lilled, seened, vetikad, korallid, jne)." +"Üldised maailma loome omadused.\n" +"Maailma loome v6 puhul lipp 'ilmestused' ei avalda mõju puudele ja \n" +"tihniku rohule, kõigi teistega mõjutab see lipp kõiki ilmestusi." #: src/settings_translation_file.cpp msgid "" @@ -5308,9 +5293,8 @@ msgid "Pitch move mode" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Place key" -msgstr "Kõrvale astumise klahv" +msgstr "Asetamis klahv" #: src/settings_translation_file.cpp msgid "Place repetition interval" @@ -5335,9 +5319,8 @@ msgid "Player versus player" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Poisson filtering" -msgstr "Bilineaarne filtreerimine" +msgstr "Poissoni filtreerimine" #: src/settings_translation_file.cpp msgid "" @@ -5745,9 +5728,8 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow filter quality" -msgstr "Kuvapildi tase" +msgstr "Varju filtreerimis aste" #: src/settings_translation_file.cpp msgid "Shadow map max distance in nodes to render shadows" @@ -6623,9 +6605,8 @@ msgid "cURL file download timeout" msgstr "cURL faili allalaadimine aegus" #: src/settings_translation_file.cpp -#, fuzzy msgid "cURL interactive timeout" -msgstr "cURL aegus" +msgstr "cURL-i interaktiivne aegumine" #: src/settings_translation_file.cpp msgid "cURL parallel limit" From 60d6be1329df761b651279295874ac1f8a0c246d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D1=82=D0=B0=D0=B1=D1=81?= Date: Sun, 27 Jun 2021 09:57:17 +0000 Subject: [PATCH 067/412] Translated using Weblate (Russian) Currently translated at 95.4% (1333 of 1396 strings) --- po/ru/minetest.po | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/po/ru/minetest.po b/po/ru/minetest.po index cb00d28ef..db6b1324b 100644 --- a/po/ru/minetest.po +++ b/po/ru/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Russian (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-05-03 07:32+0000\n" -"Last-Translator: Andrei Stepanov \n" +"PO-Revision-Date: 2021-06-29 10:33+0000\n" +"Last-Translator: Чтабс \n" "Language-Team: Russian \n" "Language: ru\n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.7.1-dev\n" #: builtin/client/chatcommands.lua #, fuzzy @@ -21,9 +21,8 @@ msgid "Clear the out chat queue" msgstr "Максимальный размер очереди исходящих сообщений" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Empty command." -msgstr "Команды в чате" +msgstr "Пустая команда." #: builtin/client/chatcommands.lua #, fuzzy @@ -31,23 +30,20 @@ msgid "Exit to main menu" msgstr "Выход в меню" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Invalid command: " -msgstr "Локальная команда" +msgstr "Неверная команда: " #: builtin/client/chatcommands.lua msgid "Issued command: " msgstr "" #: builtin/client/chatcommands.lua -#, fuzzy msgid "List online players" -msgstr "Одиночная игра" +msgstr "Список онлайн игроков" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Online players: " -msgstr "Одиночная игра" +msgstr "Онлайн игроки: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." @@ -55,7 +51,7 @@ msgstr "" #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "Эта команда отключена сервером." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -66,32 +62,31 @@ msgid "You died" msgstr "Вы умерли" #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." -msgstr "Вы умерли" +msgstr "Ты умер." #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands:" -msgstr "Локальная команда" +msgstr "Доступные команды:" #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands: " -msgstr "Локальная команда" +msgstr "Доступные команды: " #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "Команда недоступна: " #: builtin/common/chatcommands.lua msgid "Get help for commands" -msgstr "" +msgstr "Получить справку по командам" #: builtin/common/chatcommands.lua msgid "" "Use '.help ' to get more information, or '.help all' to list everything." msgstr "" +"Используйте '.help ' для получения дополнительной информации, или " +"'.help all' для перечисления всего списка." #: builtin/common/chatcommands.lua msgid "[all | ]" From 58170e36ef23ece585e07fcbef72ed57fea2a8ec Mon Sep 17 00:00:00 2001 From: ResuUman Date: Tue, 29 Jun 2021 18:22:57 +0000 Subject: [PATCH 068/412] Translated using Weblate (Polish) Currently translated at 68.7% (960 of 1396 strings) --- po/pl/minetest.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/po/pl/minetest.po b/po/pl/minetest.po index 586c83d0c..5b6dcb84a 100644 --- a/po/pl/minetest.po +++ b/po/pl/minetest.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Polish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-03-28 20:29+0000\n" +"PO-Revision-Date: 2021-06-29 18:23+0000\n" "Last-Translator: ResuUman \n" "Language-Team: Polish \n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.6-dev\n" +"X-Generator: Weblate 4.7.1-dev\n" #: builtin/client/chatcommands.lua #, fuzzy @@ -545,7 +545,7 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle, Tundra, Taiga" -msgstr "" +msgstr "Biocenozy klimatu umiakowanego, pustynie, dżungla, taiga i tundra." #: builtin/mainmenu/dlg_create_world.lua #, fuzzy From d3fab295ad11e471f1f55bca5c50d2133ecebf8b Mon Sep 17 00:00:00 2001 From: Mateusz Mendel Date: Tue, 29 Jun 2021 18:22:41 +0000 Subject: [PATCH 069/412] Translated using Weblate (Polish) Currently translated at 68.7% (960 of 1396 strings) --- po/pl/minetest.po | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/po/pl/minetest.po b/po/pl/minetest.po index 5b6dcb84a..efed37ca8 100644 --- a/po/pl/minetest.po +++ b/po/pl/minetest.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" "PO-Revision-Date: 2021-06-29 18:23+0000\n" -"Last-Translator: ResuUman \n" +"Last-Translator: Mateusz Mendel \n" "Language-Team: Polish \n" "Language: pl\n" @@ -36,8 +36,9 @@ msgid "Invalid command: " msgstr "Lokalne polecenie" #: builtin/client/chatcommands.lua +#, fuzzy msgid "Issued command: " -msgstr "" +msgstr "Wydane komenda: " #: builtin/client/chatcommands.lua #, fuzzy @@ -50,12 +51,14 @@ msgid "Online players: " msgstr "Pojedynczy gracz" #: builtin/client/chatcommands.lua +#, fuzzy msgid "The out chat queue is now empty." -msgstr "" +msgstr "Kolejka czatu jest teraz pusta." #: builtin/client/chatcommands.lua +#, fuzzy msgid "This command is disabled by server." -msgstr "" +msgstr "Ta komenda jest dezaktywowana przez serwer." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -81,21 +84,27 @@ msgid "Available commands: " msgstr "Lokalne polecenie" #: builtin/common/chatcommands.lua +#, fuzzy msgid "Command not available: " -msgstr "" +msgstr "Komenda nie jest dostępna: " #: builtin/common/chatcommands.lua +#, fuzzy msgid "Get help for commands" -msgstr "" +msgstr "Uzyskaj pomoc dotyczącą komend" #: builtin/common/chatcommands.lua +#, fuzzy msgid "" "Use '.help ' to get more information, or '.help all' to list everything." msgstr "" +"Użyj '.help ' aby uzyskać więcej informacji lub '.help all' aby " +"wyświetlić wszystko." #: builtin/common/chatcommands.lua +#, fuzzy msgid "[all | ]" -msgstr "" +msgstr "[all | ]" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" @@ -486,8 +495,9 @@ msgid "Mountains" msgstr "Góry" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy msgid "Mud flow" -msgstr "" +msgstr "Strumień błota" #: builtin/mainmenu/dlg_create_world.lua msgid "Network of tunnels and caves" @@ -511,8 +521,9 @@ msgid "Rivers" msgstr "Rozmiar rzeki" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy msgid "Sea level rivers" -msgstr "" +msgstr "Rzeki na poziomie morza" #: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -532,16 +543,19 @@ msgstr "" "dżungli stworzone przez v6)" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy msgid "Structures appearing on the terrain, typically trees and plants" -msgstr "" +msgstr "Struktury pojawiające się na terenie, zazwyczaj drzewa i rośliny" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy msgid "Temperate, Desert" -msgstr "" +msgstr "Umiarkowany, pustynny" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy msgid "Temperate, Desert, Jungle" -msgstr "" +msgstr "Umiarkowany, pustynny, dżunglowy" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle, Tundra, Taiga" From c0b977bf32cc96fe619153ddd8e0b093ddb8b739 Mon Sep 17 00:00:00 2001 From: ResuUman Date: Tue, 29 Jun 2021 18:24:19 +0000 Subject: [PATCH 070/412] Translated using Weblate (Polish) Currently translated at 68.7% (960 of 1396 strings) --- po/pl/minetest.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/po/pl/minetest.po b/po/pl/minetest.po index efed37ca8..8eb3f0323 100644 --- a/po/pl/minetest.po +++ b/po/pl/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Polish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-06-29 18:23+0000\n" -"Last-Translator: Mateusz Mendel \n" +"PO-Revision-Date: 2021-06-29 18:24+0000\n" +"Last-Translator: ResuUman \n" "Language-Team: Polish \n" "Language: pl\n" @@ -568,7 +568,7 @@ msgstr "Szum podłoża" #: builtin/mainmenu/dlg_create_world.lua msgid "Trees and jungle grass" -msgstr "" +msgstr "Drzewa i trawa w dżungli." #: builtin/mainmenu/dlg_create_world.lua #, fuzzy From 0fc3684613ee8b65f3c0dab3ffc2c35be074cc4d Mon Sep 17 00:00:00 2001 From: Mateusz Mendel Date: Tue, 29 Jun 2021 18:24:02 +0000 Subject: [PATCH 071/412] Translated using Weblate (Polish) Currently translated at 68.7% (960 of 1396 strings) --- po/pl/minetest.po | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/po/pl/minetest.po b/po/pl/minetest.po index 8eb3f0323..bc880caa6 100644 --- a/po/pl/minetest.po +++ b/po/pl/minetest.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" "PO-Revision-Date: 2021-06-29 18:24+0000\n" -"Last-Translator: ResuUman \n" +"Last-Translator: Mateusz Mendel \n" "Language-Team: Polish \n" "Language: pl\n" @@ -550,16 +550,17 @@ msgstr "Struktury pojawiające się na terenie, zazwyczaj drzewa i rośliny" #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Temperate, Desert" -msgstr "Umiarkowany, pustynny" +msgstr "Biocenozy klimatu umiarkowanego, pustynie" #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Temperate, Desert, Jungle" -msgstr "Umiarkowany, pustynny, dżunglowy" +msgstr "Biocenozy klimatu umiarkowanego, pustynie i dżungle" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy msgid "Temperate, Desert, Jungle, Tundra, Taiga" -msgstr "Biocenozy klimatu umiakowanego, pustynie, dżungla, taiga i tundra." +msgstr "Biocenozy klimatu umiarkowanego, pustynie, dżungla, tajga i tundra" #: builtin/mainmenu/dlg_create_world.lua #, fuzzy From 9da60be08e37039b3afe49aa9413edb3c65e4f43 Mon Sep 17 00:00:00 2001 From: ResuUman Date: Tue, 29 Jun 2021 18:24:33 +0000 Subject: [PATCH 072/412] Translated using Weblate (Polish) Currently translated at 68.7% (960 of 1396 strings) --- po/pl/minetest.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/pl/minetest.po b/po/pl/minetest.po index bc880caa6..6680ab86a 100644 --- a/po/pl/minetest.po +++ b/po/pl/minetest.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" "PO-Revision-Date: 2021-06-29 18:24+0000\n" -"Last-Translator: Mateusz Mendel \n" +"Last-Translator: ResuUman \n" "Language-Team: Polish \n" "Language: pl\n" @@ -578,7 +578,7 @@ msgstr "Głębokość rzeki" #: builtin/mainmenu/dlg_create_world.lua msgid "Very large caverns deep in the underground" -msgstr "" +msgstr "Ogromne jaskinie na dużych głębokościach." #: builtin/mainmenu/dlg_create_world.lua #, fuzzy From 8ac17b877ae2657d447d9b7e45a55b4fa89e795e Mon Sep 17 00:00:00 2001 From: Mateusz Mendel Date: Tue, 29 Jun 2021 18:24:27 +0000 Subject: [PATCH 073/412] Translated using Weblate (Polish) Currently translated at 68.7% (960 of 1396 strings) --- po/pl/minetest.po | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/po/pl/minetest.po b/po/pl/minetest.po index 6680ab86a..aae4f0499 100644 --- a/po/pl/minetest.po +++ b/po/pl/minetest.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" "PO-Revision-Date: 2021-06-29 18:24+0000\n" -"Last-Translator: ResuUman \n" +"Last-Translator: Mateusz Mendel \n" "Language-Team: Polish \n" "Language: pl\n" @@ -568,8 +568,9 @@ msgid "Terrain surface erosion" msgstr "Szum podłoża" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy msgid "Trees and jungle grass" -msgstr "Drzewa i trawa w dżungli." +msgstr "Drzewa i trawa w dżungli" #: builtin/mainmenu/dlg_create_world.lua #, fuzzy From f5ab059c0f9e4ac5661dbdedc860673a4cb81d58 Mon Sep 17 00:00:00 2001 From: ResuUman Date: Wed, 30 Jun 2021 17:24:15 +0000 Subject: [PATCH 074/412] Translated using Weblate (Polish) Currently translated at 70.3% (982 of 1396 strings) --- po/pl/minetest.po | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/po/pl/minetest.po b/po/pl/minetest.po index aae4f0499..23d0e5069 100644 --- a/po/pl/minetest.po +++ b/po/pl/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Polish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-06-29 18:24+0000\n" -"Last-Translator: Mateusz Mendel \n" +"PO-Revision-Date: 2021-06-30 17:24+0000\n" +"Last-Translator: ResuUman \n" "Language-Team: Polish \n" "Language: pl\n" @@ -563,9 +563,8 @@ msgid "Temperate, Desert, Jungle, Tundra, Taiga" msgstr "Biocenozy klimatu umiarkowanego, pustynie, dżungla, tajga i tundra" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Terrain surface erosion" -msgstr "Szum podłoża" +msgstr "Erozja powierzchni terenu." #: builtin/mainmenu/dlg_create_world.lua #, fuzzy From 1556e7eb09a96324912644709ed647ca7d81f495 Mon Sep 17 00:00:00 2001 From: Mateusz Mendel Date: Wed, 30 Jun 2021 17:23:12 +0000 Subject: [PATCH 075/412] Translated using Weblate (Polish) Currently translated at 70.3% (982 of 1396 strings) --- po/pl/minetest.po | 189 +++++++++++++++++++++++++++++----------------- 1 file changed, 121 insertions(+), 68 deletions(-) diff --git a/po/pl/minetest.po b/po/pl/minetest.po index 23d0e5069..867e9953f 100644 --- a/po/pl/minetest.po +++ b/po/pl/minetest.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" "PO-Revision-Date: 2021-06-30 17:24+0000\n" -"Last-Translator: ResuUman \n" +"Last-Translator: Mateusz Mendel \n" "Language-Team: Polish \n" "Language: pl\n" @@ -18,40 +18,36 @@ msgstr "" #: builtin/client/chatcommands.lua #, fuzzy msgid "Clear the out chat queue" -msgstr "Maksymalny rozmiar kolejki wiadomości czatu" +msgstr "Wyczyść kolejkę wiadomości czatu" #: builtin/client/chatcommands.lua #, fuzzy msgid "Empty command." -msgstr "Komenda" +msgstr "Puste komenda." #: builtin/client/chatcommands.lua -#, fuzzy msgid "Exit to main menu" msgstr "Wyjście do menu" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Invalid command: " -msgstr "Lokalne polecenie" +msgstr "Błędna komenda: " #: builtin/client/chatcommands.lua -#, fuzzy msgid "Issued command: " -msgstr "Wydane komenda: " +msgstr "Wydana komenda: " #: builtin/client/chatcommands.lua #, fuzzy msgid "List online players" -msgstr "Pojedynczy gracz" +msgstr "Lista graczy sieciowych" #: builtin/client/chatcommands.lua #, fuzzy msgid "Online players: " -msgstr "Pojedynczy gracz" +msgstr "Gracze sieciowi: " #: builtin/client/chatcommands.lua -#, fuzzy msgid "The out chat queue is now empty." msgstr "Kolejka czatu jest teraz pusta." @@ -69,19 +65,18 @@ msgid "You died" msgstr "Umarłeś" #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." -msgstr "Umarłeś" +msgstr "Umarłeś." #: builtin/common/chatcommands.lua #, fuzzy msgid "Available commands:" -msgstr "Lokalne polecenie" +msgstr "Dostępne komendy:" #: builtin/common/chatcommands.lua #, fuzzy msgid "Available commands: " -msgstr "Lokalne polecenie" +msgstr "Dostępne komendy: " #: builtin/common/chatcommands.lua #, fuzzy @@ -260,14 +255,12 @@ msgstr "" "$2 w kolejce" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 downloading..." -msgstr "Ładowanie..." +msgstr "Pobieranie $1..." #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 required dependencies could not be found." -msgstr "$1 wymaga zależności, których nie można znaleźć." +msgstr "$1 wymaga zależności, które nie zostały znalezione." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." @@ -278,9 +271,8 @@ msgid "All packages" msgstr "Wszystkie zasoby" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Already installed" -msgstr "Klawisz już zdefiniowany" +msgstr "Już zainstalowany" #: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" @@ -295,9 +287,8 @@ msgid "ContentDB is not available when Minetest was compiled without cURL" msgstr "ContentDB nie jest dostępne gdy Minetest był zbudowany bez cURL" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Downloading..." -msgstr "Ładowanie..." +msgstr "Pobieranie..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -313,9 +304,8 @@ msgid "Install" msgstr "Instaluj" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install $1" -msgstr "Instaluj" +msgstr "Zainstaluj $1" #: builtin/mainmenu/dlg_contentstore.lua msgid "Install missing dependencies" @@ -335,14 +325,12 @@ msgid "No results" msgstr "Brak Wyników" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "No updates" -msgstr "Aktualizacja" +msgstr "Brak aktualizacji" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Not found" -msgstr "Wycisz dźwięk" +msgstr "Nie znaleziono" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" @@ -385,7 +373,6 @@ msgid "Additional terrain" msgstr "Dodatkowy teren" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp -#, fuzzy msgid "Altitude chill" msgstr "Wysokość mrozu" @@ -394,24 +381,20 @@ msgid "Altitude dry" msgstr "Wysokość suchości" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Biome blending" -msgstr "Szum biomu" +msgstr "Mieszanie biomów" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Biomes" -msgstr "Szum biomu" +msgstr "Biomy" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Caverns" -msgstr "Szum jaskini #1" +msgstr "jaskinie" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Caves" -msgstr "Oktawy" +msgstr "Jaskinie" #: builtin/mainmenu/dlg_create_world.lua msgid "Create" @@ -438,9 +421,8 @@ msgid "Flat terrain" msgstr "Płaski teren" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Floating landmasses in the sky" -msgstr "Gęstość gór na latających wyspach" +msgstr "Masywy lądowe unoszące się na niebie" #: builtin/mainmenu/dlg_create_world.lua msgid "Floatlands (experimental)" @@ -459,9 +441,8 @@ msgid "Hills" msgstr "Wzgórza" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Humid rivers" -msgstr "Sterownik graficzny" +msgstr "Wilgotne rzeki" #: builtin/mainmenu/dlg_create_world.lua msgid "Increases humidity around rivers" @@ -486,9 +467,8 @@ msgid "Mapgen flags" msgstr "Flagi generatora mapy" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Mapgen-specific flags" -msgstr "Generator mapy flat flagi" +msgstr "Flagi specyficzne dla Mapgena" #: builtin/mainmenu/dlg_create_world.lua msgid "Mountains" @@ -516,12 +496,10 @@ msgid "Reduces humidity with altitude" msgstr "Spadek wilgotności wraz ze wzrostem wysokości" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Rivers" -msgstr "Rozmiar rzeki" +msgstr "Rzeki" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Sea level rivers" msgstr "Rzeki na poziomie morza" @@ -577,8 +555,9 @@ msgid "Vary river depth" msgstr "Głębokość rzeki" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy msgid "Very large caverns deep in the underground" -msgstr "Ogromne jaskinie na dużych głębokościach." +msgstr "Ogromne jaskinie na dużych głębokościach" #: builtin/mainmenu/dlg_create_world.lua #, fuzzy @@ -828,8 +807,9 @@ msgstr "" "z siecią Internet." #: builtin/mainmenu/tab_about.lua +#, fuzzy msgid "About" -msgstr "" +msgstr "O grze" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" @@ -850,10 +830,14 @@ msgid "Open User Data Directory" msgstr "Wybierz katalog" #: builtin/mainmenu/tab_about.lua +#, fuzzy msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" +"Otwiera katalog, który zawiera światy, gry, mody i tekstury dostarczone " +"przez użytkownika \n" +"oraz pakiety tekstur w menedżerze plików / eksploratorze." #: builtin/mainmenu/tab_about.lua msgid "Previous Contributors" @@ -928,12 +912,14 @@ msgid "Host Server" msgstr "Udostępnij serwer" #: builtin/mainmenu/tab_local.lua +#, fuzzy msgid "Install games from ContentDB" -msgstr "" +msgstr "Instaluj gry z ContentDB" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua +#, fuzzy msgid "Name" -msgstr "" +msgstr "Nazwa" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -1005,8 +991,9 @@ msgid "Favorites" msgstr "Ulubione" #: builtin/mainmenu/tab_online.lua +#, fuzzy msgid "Incompatible Servers" -msgstr "" +msgstr "Niekompatybilne serwery" #: builtin/mainmenu/tab_online.lua msgid "Join Game" @@ -1022,8 +1009,9 @@ msgid "Public Servers" msgstr "Rozgłoś serwer" #: builtin/mainmenu/tab_online.lua +#, fuzzy msgid "Refresh" -msgstr "" +msgstr "Odśwież" #: builtin/mainmenu/tab_online.lua #, fuzzy @@ -1076,24 +1064,28 @@ msgid "Dynamic shadows" msgstr "Cień czcionki" #: builtin/mainmenu/tab_settings.lua +#, fuzzy msgid "Dynamic shadows: " -msgstr "" +msgstr "Cienie dynamiczne: " #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" msgstr "Ozdobne liście" #: builtin/mainmenu/tab_settings.lua +#, fuzzy msgid "High" -msgstr "" +msgstr "Wysokie" #: builtin/mainmenu/tab_settings.lua +#, fuzzy msgid "Low" -msgstr "" +msgstr "Niskie" #: builtin/mainmenu/tab_settings.lua +#, fuzzy msgid "Medium" -msgstr "" +msgstr "Średnie" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" @@ -1185,12 +1177,14 @@ msgid "Trilinear Filter" msgstr "Filtrowanie trójliniowe" #: builtin/mainmenu/tab_settings.lua +#, fuzzy msgid "Ultra High" -msgstr "" +msgstr "Bardzo wysokie" #: builtin/mainmenu/tab_settings.lua +#, fuzzy msgid "Very Low" -msgstr "" +msgstr "Bardzo niskie" #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" @@ -1572,12 +1566,14 @@ msgid "Sound muted" msgstr "Głośność wyciszona" #: src/client/game.cpp +#, fuzzy msgid "Sound system is disabled" -msgstr "" +msgstr "System dźwiękowy jest wyłączony" #: src/client/game.cpp +#, fuzzy msgid "Sound system is not supported on this build" -msgstr "" +msgstr "System dźwiękowy nie jest obsługiwany w tej kompilacji" #: src/client/game.cpp msgid "Sound unmuted" @@ -1959,16 +1955,18 @@ msgid "Automatic jumping" msgstr "Automatyczne skoki" #: src/gui/guiKeyChangeMenu.cpp +#, fuzzy msgid "Aux1" -msgstr "" +msgstr "Aux1" #: src/gui/guiKeyChangeMenu.cpp msgid "Backward" msgstr "Tył" #: src/gui/guiKeyChangeMenu.cpp +#, fuzzy msgid "Block bounds" -msgstr "" +msgstr "Granice bloków" #: src/gui/guiKeyChangeMenu.cpp msgid "Change camera" @@ -2251,12 +2249,18 @@ msgstr "" "Określa również strukturę wznoszącego się terenu górzystego." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "3D noise defining structure of floatlands.\n" "If altered from the default, the noise 'scale' (0.7 by default) may need\n" "to be adjusted, as floatland tapering functions best when this noise has\n" "a value range of approximately -2.0 to 2.0." msgstr "" +"Szum 3D określający strukturę terenów pływających.\n" +"Jeśli wartość domyślna zostanie zmieniona, konieczne będzie dostosowanie " +"\"skali\" szumu (domyślnie 0,7), \n" +"ponieważ zwężanie terenów pływających działa najlepiej, \n" +"gdy wartość szumu jest z zakresu od około -2,0 do 2,0." #: src/settings_translation_file.cpp msgid "3D noise defining structure of river canyon walls." @@ -2324,8 +2328,9 @@ msgid "ABM interval" msgstr "Interwał zapisu mapy" #: src/settings_translation_file.cpp +#, fuzzy msgid "ABM time budget" -msgstr "" +msgstr "Budżet czasowy ABM" #: src/settings_translation_file.cpp #, fuzzy @@ -2379,7 +2384,7 @@ msgstr "" "ekranów 4k." #: src/settings_translation_file.cpp -#, c-format +#, c-format, fuzzy msgid "" "Adjusts the density of the floatland layer.\n" "Increase value to increase density. Can be positive or negative.\n" @@ -2387,6 +2392,12 @@ msgid "" "Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n" "to be sure) creates a solid floatland layer." msgstr "" +"Dostosowuje gęstość warstwy pływających wysp.\n" +"Aby zwiększyć gęstość, ustaw wyższą wartość. Może być dodatnia lub ujemna.\n" +"Wartość = 0,0: 50% objętości to pływająca wyspa.\n" +"Wartość = 2,0 (może być wyższa w zależności od 'mgv7_np_floatland', aby mieć " +"pewność,\n" +"zawsze sprawdzaj) tworzy stałą warstwę pływającej wyspy." #: src/settings_translation_file.cpp msgid "Advanced" @@ -2665,10 +2676,13 @@ msgid "Cavern upper limit" msgstr "Szerokość jaskini" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Center of light curve boost range.\n" "Where 0.0 is minimum light level, 1.0 is maximum light level." msgstr "" +"Środek zakresu wzmocnienia krzywej światła.\n" +"0,0 to minimalny poziom światła, 1,0 to maksymalny poziom światła." #: src/settings_translation_file.cpp #, fuzzy @@ -2783,6 +2797,7 @@ msgid "Colored shadows" msgstr "Kolorowa mgła" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Comma-separated list of flags to hide in the content repository.\n" "\"nonfree\" can be used to hide packages which do not qualify as 'free " @@ -2792,6 +2807,13 @@ msgid "" "These flags are independent from Minetest versions,\n" "so see a full list at https://content.minetest.net/help/content_flags/" msgstr "" +"Oddzielona przecinkami lista flag do ukrycia w repozytorium zawartości.\n" +"\"nonfree\" mogą być używane do ukrywania pakietów, które nie kwalifikują " +"się jako \"wolne oprogramowanie\",\n" +"zgodnie z definicją Fundacji Wolnego Oprogramowania.\n" +"Można również określić klasyfikacje zawartości.\n" +"Flagi te są niezależne od wersji Minetesta zobacz, więc pełną listę na " +"stronie https://content.minetest.net/help/content_flags/" #: src/settings_translation_file.cpp msgid "" @@ -2842,8 +2864,9 @@ msgid "ContentDB Flag Blacklist" msgstr "Flaga czarnej listy ContentDB" #: src/settings_translation_file.cpp +#, fuzzy msgid "ContentDB Max Concurrent Downloads" -msgstr "" +msgstr "Maksymalna liczba jednoczesnych pobrań ContentDB" #: src/settings_translation_file.cpp #, fuzzy @@ -2892,11 +2915,15 @@ msgid "Controls steepness/height of hills." msgstr "Kontroluje stromość/wysokość gór." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Controls width of tunnels, a smaller value creates wider tunnels.\n" "Value >= 10.0 completely disables generation of tunnels and avoids the\n" "intensive noise calculations." msgstr "" +"Wpływa na szerokość tuneli, mniejsza wartość tworzy szersze tunele.\n" +"Wartość >= 10,0 całkowicie wyłącza tworzenie tuneli i pozwala na uniknięcie\n" +"intensywnych obliczeń hałasu." #: src/settings_translation_file.cpp msgid "Crash message" @@ -2924,10 +2951,13 @@ msgid "Crosshair color" msgstr "Kolor celownika" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Crosshair color (R,G,B).\n" "Also controls the object crosshair color" msgstr "" +"Kolor celownika (R, G,B).\n" +"Wpływa również na kolor celownika" #: src/settings_translation_file.cpp msgid "DPI" @@ -2997,11 +3027,15 @@ msgid "Default stack size" msgstr "Domyślna gra" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Define shadow filtering quality\n" "This simulates the soft shadows effect by applying a PCF or poisson disk\n" "but also uses more resources." msgstr "" +"Określa jakość filtrowania cieni\n" +"Symuluje to efekt miękkich cieni, stosując dysk PCF lub poisson\n" +"ale także zużywa więcej zasobów." #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." @@ -3034,8 +3068,9 @@ msgid "Defines location and terrain of optional hills and lakes." msgstr "Określa położenie oraz teren z dodatkowymi górami i jeziorami." #: src/settings_translation_file.cpp +#, fuzzy msgid "Defines the base ground level." -msgstr "" +msgstr "Określa podstawowy poziom podłoża." #: src/settings_translation_file.cpp #, fuzzy @@ -3162,8 +3197,9 @@ msgid "Dungeon minimum Y" msgstr "Minimalna wartość Y lochu" #: src/settings_translation_file.cpp +#, fuzzy msgid "Dungeon noise" -msgstr "" +msgstr "Hałas lochu" #: src/settings_translation_file.cpp msgid "" @@ -3182,10 +3218,14 @@ msgstr "" "To wsparcie jest eksperymentalne i API może ulec zmianie." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Enable colored shadows. \n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" +"Włącza kolorowe cienie. \n" +"Na rzeczywistych półprzezroczystych węzłach rzuca kolorowe cienie. To " +"kosztowne." #: src/settings_translation_file.cpp msgid "Enable console window" @@ -3213,11 +3253,15 @@ msgid "Enable players getting damage and dying." msgstr "Włącz obrażenia i umieranie graczy." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Enable poisson disk filtering.\n" "On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " "filtering." msgstr "" +"Włącz filtrowanie dysku poisson.\n" +"Jeśli włączone, to używa dysku poisson do \"miękkich cieni\". W przeciwnym " +"razie używa filtrowania PCF." #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." @@ -3229,10 +3273,13 @@ msgid "Enable register confirmation" msgstr "Włącz potwierdzanie rejestracji" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Enable register confirmation when connecting to server.\n" "If disabled, new account will be registered automatically." msgstr "" +"Włącz potwierdzanie rejestracji podczas łączenia się z serwerem.\n" +"Jeśli wyłączone, to nowe konto zostanie zarejestrowane automatycznie." #: src/settings_translation_file.cpp msgid "" @@ -3317,12 +3364,18 @@ msgid "Enables minimap." msgstr "Włącz minimapę." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Enables the sound system.\n" "If disabled, this completely disables all sounds everywhere and the in-game\n" "sound controls will be non-functional.\n" "Changing this setting requires a restart." msgstr "" +"Włącza dźwięk.\n" +"Jeśli wyłączone, całkowicie wyłącza wszystkie dźwięki wszędzie oraz " +"sterowanie dźwiękiem \n" +"w grze nie będzie działać.\n" +"Zmiana tego ustawienia wymaga ponownego uruchomienia." #: src/settings_translation_file.cpp msgid "Engine profiling data print interval" From 9ca08800e160a4ea6563faa2f34610bf10cc50de Mon Sep 17 00:00:00 2001 From: ResuUman Date: Wed, 30 Jun 2021 17:24:43 +0000 Subject: [PATCH 076/412] Translated using Weblate (Polish) Currently translated at 70.3% (982 of 1396 strings) --- po/pl/minetest.po | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/po/pl/minetest.po b/po/pl/minetest.po index 867e9953f..403fa7f39 100644 --- a/po/pl/minetest.po +++ b/po/pl/minetest.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" "PO-Revision-Date: 2021-06-30 17:24+0000\n" -"Last-Translator: Mateusz Mendel \n" +"Last-Translator: ResuUman \n" "Language-Team: Polish \n" "Language: pl\n" @@ -550,9 +550,8 @@ msgid "Trees and jungle grass" msgstr "Drzewa i trawa w dżungli" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Vary river depth" -msgstr "Głębokość rzeki" +msgstr "Zmienna głębokość rzeki." #: builtin/mainmenu/dlg_create_world.lua #, fuzzy From 3dbf52a871b3af19bc3f4d1d376e872888d70269 Mon Sep 17 00:00:00 2001 From: Mateusz Mendel Date: Wed, 30 Jun 2021 17:24:22 +0000 Subject: [PATCH 077/412] Translated using Weblate (Polish) Currently translated at 70.3% (982 of 1396 strings) --- po/pl/minetest.po | 190 ++++++++++++++++++++++------------------------ 1 file changed, 90 insertions(+), 100 deletions(-) diff --git a/po/pl/minetest.po b/po/pl/minetest.po index 403fa7f39..6e3b8f3b8 100644 --- a/po/pl/minetest.po +++ b/po/pl/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Polish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-06-30 17:24+0000\n" -"Last-Translator: ResuUman \n" +"PO-Revision-Date: 2021-07-01 18:33+0000\n" +"Last-Translator: Mateusz Mendel \n" "Language-Team: Polish \n" "Language: pl\n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.7.1-dev\n" +"X-Generator: Weblate 4.8-dev\n" #: builtin/client/chatcommands.lua #, fuzzy @@ -541,8 +541,9 @@ msgid "Temperate, Desert, Jungle, Tundra, Taiga" msgstr "Biocenozy klimatu umiarkowanego, pustynie, dżungla, tajga i tundra" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy msgid "Terrain surface erosion" -msgstr "Erozja powierzchni terenu." +msgstr "Erozja powierzchni terenu" #: builtin/mainmenu/dlg_create_world.lua #, fuzzy @@ -550,8 +551,9 @@ msgid "Trees and jungle grass" msgstr "Drzewa i trawa w dżungli" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy msgid "Vary river depth" -msgstr "Zmienna głębokość rzeki." +msgstr "Zmienna głębokość rzeki" #: builtin/mainmenu/dlg_create_world.lua #, fuzzy @@ -561,8 +563,7 @@ msgstr "Ogromne jaskinie na dużych głębokościach" #: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Warning: The Development Test is meant for developers." -msgstr "" -"Uwaga: Minimal development test jest przeznaczony tylko dla developerów." +msgstr "Ostrzeżenie: test rozwojowy jest przeznaczony dla programistów." #: builtin/mainmenu/dlg_create_world.lua msgid "World name" @@ -797,7 +798,7 @@ msgstr "Ładowanie..." #: builtin/mainmenu/serverlistmgr.lua #, fuzzy msgid "Public server list is disabled" -msgstr "Skryptowanie po stronie klienta jest wyłączone" +msgstr "Lista serwerów publicznych jest wyłączona" #: builtin/mainmenu/serverlistmgr.lua msgid "Try reenabling public serverlist and check your internet connection." @@ -817,7 +818,7 @@ msgstr "Aktywni współautorzy" #: builtin/mainmenu/tab_about.lua #, fuzzy msgid "Active renderer:" -msgstr "Zasięg wysyłania aktywnego obiektu" +msgstr "Aktywny moduł renderowania:" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" @@ -826,7 +827,7 @@ msgstr "Twórcy" #: builtin/mainmenu/tab_about.lua #, fuzzy msgid "Open User Data Directory" -msgstr "Wybierz katalog" +msgstr "Otwórz katalog danych użytkownika" #: builtin/mainmenu/tab_about.lua #, fuzzy @@ -835,7 +836,7 @@ msgid "" "and texture packs in a file manager / explorer." msgstr "" "Otwiera katalog, który zawiera światy, gry, mody i tekstury dostarczone " -"przez użytkownika \n" +"przez użytkownika\n" "oraz pakiety tekstur w menedżerze plików / eksploratorze." #: builtin/mainmenu/tab_about.lua @@ -931,7 +932,7 @@ msgstr "Nie wybrano bądź nie utworzono świata!" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua #, fuzzy msgid "Password" -msgstr "Nowe hasło" +msgstr "Hasło" #: builtin/mainmenu/tab_local.lua msgid "Play Game" @@ -958,9 +959,8 @@ msgid "Start Game" msgstr "Rozpocznij grę" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Address" -msgstr "Adres " +msgstr "Adres" #: builtin/mainmenu/tab_online.lua src/client/keycode.cpp msgid "Clear" @@ -978,7 +978,7 @@ msgstr "Tryb kreatywny" #: builtin/mainmenu/tab_online.lua #, fuzzy msgid "Damage / PvP" -msgstr "Włącz obrażenia" +msgstr "Włącz obrażenia/ PvP" #: builtin/mainmenu/tab_online.lua msgid "Del. Favorite" @@ -1005,7 +1005,7 @@ msgstr "Ping" #: builtin/mainmenu/tab_online.lua #, fuzzy msgid "Public Servers" -msgstr "Rozgłoś serwer" +msgstr "Publiczne serwery" #: builtin/mainmenu/tab_online.lua #, fuzzy @@ -1013,7 +1013,6 @@ msgid "Refresh" msgstr "Odśwież" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Server Description" msgstr "Opis serwera" @@ -1060,7 +1059,7 @@ msgstr "Szkło połączone" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp #, fuzzy msgid "Dynamic shadows" -msgstr "Cień czcionki" +msgstr "Cienie dynamiczne" #: builtin/mainmenu/tab_settings.lua #, fuzzy @@ -1141,7 +1140,7 @@ msgstr "Shadery" #: builtin/mainmenu/tab_settings.lua #, fuzzy msgid "Shaders (experimental)" -msgstr "Latające wyspy (eksperymentalne)" +msgstr "Shadery (eksperymentalne)" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" @@ -1366,8 +1365,6 @@ msgstr "" "- %s: upuść przedmiot↵\n" "- %s: otwórz ekwipunek↵\n" "- Mysz: obróć się/patrz↵\n" -"- Lewy przycisk myszy: kop/uderz↵\n" -"- Prawy przycisk myszy: postaw/użyj↵\n" "- Rolka myszy: wybierz przedmiot↵\n" "- %s: czatuj↵\n" @@ -1502,7 +1499,7 @@ msgstr "Minimapa aktualnie wyłączona przez grę lub mod" #: src/client/game.cpp #, fuzzy msgid "Multiplayer" -msgstr "Pojedynczy gracz" +msgstr "Gra wieloosobowa" #: src/client/game.cpp msgid "Noclip mode disabled" @@ -1911,7 +1908,7 @@ msgstr "Minimapa w trybie powierzchniowym, powiększenie x%d" #: src/client/minimap.cpp #, fuzzy msgid "Minimap in texture mode" -msgstr "Minimalna wielkość tekstury dla filtrów" +msgstr "Minimapa w trybie teksturowym" #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" @@ -1943,7 +1940,7 @@ msgstr "Kontynuuj" #: src/gui/guiKeyChangeMenu.cpp #, fuzzy msgid "\"Aux1\" = climb down" -msgstr "\"Specjalny\" = wspinaj się" +msgstr "\"Specjalny\" = schodź" #: src/gui/guiKeyChangeMenu.cpp msgid "Autoforward" @@ -2088,7 +2085,7 @@ msgstr "Przełącz tryb noclip" #: src/gui/guiKeyChangeMenu.cpp #, fuzzy msgid "Toggle pitchmove" -msgstr "Przełącz historię czatu" +msgstr "Przełączanie przemieszczania" #: src/gui/guiKeyChangeMenu.cpp msgid "press key" @@ -2151,8 +2148,8 @@ msgid "" "If enabled, virtual joystick will also tap \"Aux1\" button when out of main " "circle." msgstr "" -"(Android) Użyj wirtualnego joysticka, aby zaaktywować przycisk \"aux\".\n" -"Gdy włączone, wirtualny joystick również naciśnie przycisk \"aux\", gdy " +"(Android) Użyj wirtualnego joysticka, aby aktywować przycisk \"aux\".\n" +"Gdy włączone to wirtualny joystick również naciśnie przycisk \"aux\", gdy " "znajduje się poza głównym okręgiem." #: src/settings_translation_file.cpp @@ -2220,7 +2217,7 @@ msgstr "Szum 2D, który wpływa na rozmiar/ występowanie stepów górskich." #: src/settings_translation_file.cpp #, fuzzy msgid "2D noise that locates the river valleys and channels." -msgstr "Szum 2D, który wpływa na kształt/rozmiar zaokrąglonych wzgórz." +msgstr "Szum 2D, który wpływa na doliny i kanały rzeczne." #: src/settings_translation_file.cpp msgid "3D clouds" @@ -2233,7 +2230,7 @@ msgstr "Modele 3D" #: src/settings_translation_file.cpp #, fuzzy msgid "3D mode parallax strength" -msgstr "Siła map normlanych" +msgstr "Siła paralaksy w trybie 3D" #: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." @@ -2324,7 +2321,7 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy msgid "ABM interval" -msgstr "Interwał zapisu mapy" +msgstr "Interwał ABM" #: src/settings_translation_file.cpp #, fuzzy @@ -2334,7 +2331,7 @@ msgstr "Budżet czasowy ABM" #: src/settings_translation_file.cpp #, fuzzy msgid "Absolute limit of queued blocks to emerge" -msgstr "Bezwzględny limit kolejki" +msgstr "Bezwzględny limit kolejki pojawiających się bloków" #: src/settings_translation_file.cpp msgid "Acceleration in air" @@ -2498,7 +2495,6 @@ msgstr "" "Zapisane w blokach mapy (16 bloków)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Automatic forward key" msgstr "Klawisz automatycznego poruszania się do przodu" @@ -2521,12 +2517,12 @@ msgstr "Tryb automatycznego skalowania" #: src/settings_translation_file.cpp #, fuzzy msgid "Aux1 key" -msgstr "Skok" +msgstr "Klawisz Aux1" #: src/settings_translation_file.cpp #, fuzzy msgid "Aux1 key for climbing/descending" -msgstr "Klawisz używany do wspinania" +msgstr "Klawisz Aux1 używany do wspinania/schodzenia" #: src/settings_translation_file.cpp msgid "Backward key" @@ -2579,12 +2575,12 @@ msgstr "Dystans optymalizacji wysyłanych bloków" #: src/settings_translation_file.cpp #, fuzzy msgid "Bold and italic font path" -msgstr "Ścieżka czcionki typu Monospace" +msgstr "Ścieżka pogrubionej czcionki oraz kursywy" #: src/settings_translation_file.cpp #, fuzzy msgid "Bold and italic monospace font path" -msgstr "Ścieżka czcionki typu Monospace" +msgstr "Ścieżka pogrubionej czcionki oraz kursywy typu Monospace" #: src/settings_translation_file.cpp msgid "Bold font path" @@ -2672,7 +2668,7 @@ msgstr "Próg groty" #: src/settings_translation_file.cpp #, fuzzy msgid "Cavern upper limit" -msgstr "Szerokość jaskini" +msgstr "Górna granica jaskiń" #: src/settings_translation_file.cpp #, fuzzy @@ -2686,10 +2682,9 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy msgid "Chat command time message threshold" -msgstr "Próg wiadomości wyrzucenia z czatu" +msgstr "Limit czasu komendy czatu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat font size" msgstr "Rozmiar czcionki" @@ -2700,17 +2695,17 @@ msgstr "Klawisz czatu" #: src/settings_translation_file.cpp #, fuzzy msgid "Chat log level" -msgstr "Poziom logowania debugowania" +msgstr "Poziom dziennika czatu" #: src/settings_translation_file.cpp #, fuzzy msgid "Chat message count limit" -msgstr "Komunikat o stanie połączenia" +msgstr "Limit liczby wiadomości na czacie" #: src/settings_translation_file.cpp #, fuzzy msgid "Chat message format" -msgstr "Maksymalna długość wiadomości na czacie" +msgstr "Format wiadomości czatu" #: src/settings_translation_file.cpp msgid "Chat message kick threshold" @@ -2759,7 +2754,7 @@ msgstr "Modyfikacja klienta" #: src/settings_translation_file.cpp #, fuzzy msgid "Client side modding restrictions" -msgstr "Modyfikacja klienta" +msgstr "Ograniczenia modowania po stronie klienta" #: src/settings_translation_file.cpp #, fuzzy @@ -2793,7 +2788,7 @@ msgstr "Kolorowa mgła" #: src/settings_translation_file.cpp #, fuzzy msgid "Colored shadows" -msgstr "Kolorowa mgła" +msgstr "Kolorowe cienie" #: src/settings_translation_file.cpp #, fuzzy @@ -2870,7 +2865,7 @@ msgstr "Maksymalna liczba jednoczesnych pobrań ContentDB" #: src/settings_translation_file.cpp #, fuzzy msgid "ContentDB URL" -msgstr "Zawartość" +msgstr "Adres URL ContentDB" #: src/settings_translation_file.cpp msgid "Continuous forward" @@ -2897,9 +2892,9 @@ msgid "" "Examples:\n" "72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged." msgstr "" -"Kontrola długości cyklu dnia i nocy.\n" -"Przykłady: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = dzień/noc/cokolwiek " -"zostaje niezmienione." +"Reguluje długość cyklu dzień/noc.\n" +"Przykłady:\n" +"72 = 20min, 360 = 4min, 1 = 24h, 0 = dzień/noc/wszystko pozostaje bez zmian." #: src/settings_translation_file.cpp msgid "Controls sinking speed in liquid." @@ -2973,7 +2968,7 @@ msgstr "Klawisz przełączania informacji debugowania" #: src/settings_translation_file.cpp #, fuzzy msgid "Debug log file size threshold" -msgstr "Próg szumu pustyni" +msgstr "Próg rozmiaru pliku dziennika debugowania" #: src/settings_translation_file.cpp msgid "Debug log level" @@ -2984,7 +2979,6 @@ msgid "Dec. volume key" msgstr "Klawisz zmniejszania głośności" #: src/settings_translation_file.cpp -#, fuzzy msgid "Decrease this to increase liquid resistance to movement." msgstr "Zmniejsz wartość, aby zwiększyć opór ruchu w cieczy." @@ -3023,7 +3017,7 @@ msgstr "Domyślny format raportu" #: src/settings_translation_file.cpp #, fuzzy msgid "Default stack size" -msgstr "Domyślna gra" +msgstr "Domyślny rozmiar stosu" #: src/settings_translation_file.cpp #, fuzzy @@ -3047,12 +3041,12 @@ msgstr "Określa obszary z piaszczystymi plażami." #: src/settings_translation_file.cpp #, fuzzy msgid "Defines distribution of higher terrain and steepness of cliffs." -msgstr "Określa obszary wyższych terenów oraz wpływa na stromość klifów." +msgstr "Określa rozmieszczenie wyższego terenu i stromość klifów." #: src/settings_translation_file.cpp #, fuzzy msgid "Defines distribution of higher terrain." -msgstr "Określa obszary 'terrain_higher' (szczyt wzgórza)." +msgstr "Określa rozmieszczenie wyższych terenów." #: src/settings_translation_file.cpp msgid "Defines full size of caverns, smaller values create larger caverns." @@ -3074,7 +3068,7 @@ msgstr "Określa podstawowy poziom podłoża." #: src/settings_translation_file.cpp #, fuzzy msgid "Defines the depth of the river channel." -msgstr "Określa głębokość rzek." +msgstr "Określa głębokość kanałów rzecznych." #: src/settings_translation_file.cpp msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." @@ -3085,10 +3079,9 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy msgid "Defines the width of the river channel." -msgstr "Określa strukturę kanałów rzecznych." +msgstr "Określa szerokość kanałów rzecznych." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines the width of the river valley." msgstr "Określa szerokość doliny rzecznej." @@ -3144,7 +3137,7 @@ msgid "" "When the 'snowbiomes' flag is enabled, this is ignored." msgstr "" "Pustynie pojawią się gdy np_biome przekroczy tą wartość.\n" -"Kiedy nowy system biomu jest odblokowany, ta wartość jest ignorowana." +"Kiedy flaga 'snowbiomes' jest włączona, ta wartość jest ignorowana." #: src/settings_translation_file.cpp msgid "Desynchronize block animation" @@ -3153,7 +3146,7 @@ msgstr "Odsynchronizuj animację bloków" #: src/settings_translation_file.cpp #, fuzzy msgid "Dig key" -msgstr "W prawo" +msgstr "Klawisz kopania" #: src/settings_translation_file.cpp msgid "Digging particles" @@ -3338,9 +3331,9 @@ msgid "" "Ignored if bind_address is set.\n" "Needs enable_ipv6 to be enabled." msgstr "" -"Przełącza pracę serwera w trybie IPv6. Serwer IPv6 może być ograniczony\n" -"tylko dla klientów IPv6, w zależności od konfiguracji systemu.\n" -"Ignorowane jeżeli bind_address jest ustawiony." +"Włącza/wyłącza uruchamianie serwera IPv6.\n" +"Ignorowane jeśli ustawiony jest bind_address.\n" +"Wymaga włączenia enable_ipv6." #: src/settings_translation_file.cpp msgid "" @@ -3414,7 +3407,7 @@ msgstr "Współczynnik spadku drgań" #: src/settings_translation_file.cpp #, fuzzy msgid "Fallback font path" -msgstr "Zastępcza czcionka" +msgstr "Ścieżka czcionki zastępczej" #: src/settings_translation_file.cpp msgid "Fast key" @@ -3433,7 +3426,6 @@ msgid "Fast movement" msgstr "Szybkie poruszanie" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Fast movement (via the \"Aux1\" key).\n" "This requires the \"fast\" privilege on the server." @@ -3450,14 +3442,13 @@ msgid "Field of view in degrees." msgstr "Pole widzenia w stopniach." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "File in client/serverlist/ that contains your favorite servers displayed in " "the\n" "Multiplayer Tab." msgstr "" -"Plik w kliencie (lista serwerów), który zawiera ulubione serwery " -"wyświetlane \n" +"Plik w kliencie (lista serwerów), który zawiera ulubione serwery wyświetlane " +"\n" "w zakładce Trybu wieloosobowego." #: src/settings_translation_file.cpp @@ -3512,32 +3503,32 @@ msgstr "Ustaw wirtualny joystick" #: src/settings_translation_file.cpp #, fuzzy msgid "Floatland density" -msgstr "Gęstość gór na latających wyspach" +msgstr "Gęstość latających wysp" #: src/settings_translation_file.cpp #, fuzzy msgid "Floatland maximum Y" -msgstr "Maksymalna wartość Y lochu" +msgstr "Maksymalna wartość Y latających wysp" #: src/settings_translation_file.cpp #, fuzzy msgid "Floatland minimum Y" -msgstr "Minimalna wartość Y lochu" +msgstr "Minimalna wartość Y latających wysp" #: src/settings_translation_file.cpp #, fuzzy msgid "Floatland noise" -msgstr "Podstawowy szum wznoszącego się terenu" +msgstr "Szum latających wysp" #: src/settings_translation_file.cpp #, fuzzy msgid "Floatland taper exponent" -msgstr "Gęstość gór na latających wyspach" +msgstr "Wykładnik zbieżności latających wysp" #: src/settings_translation_file.cpp #, fuzzy msgid "Floatland tapering distance" -msgstr "Podstawowy szum wznoszącego się terenu" +msgstr "Odległość zwężania latających wysp" #: src/settings_translation_file.cpp msgid "Floatland water level" @@ -3556,7 +3547,6 @@ msgid "Fog" msgstr "Mgła" #: src/settings_translation_file.cpp -#, fuzzy msgid "Fog start" msgstr "Początek mgły" @@ -3668,7 +3658,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered" msgstr "Część widocznej odległości w której mgła zaczyna się renderować" #: src/settings_translation_file.cpp -#, fuzzy msgid "FreeType fonts" msgstr "Czcionki Freetype" @@ -3765,12 +3754,12 @@ msgstr "Poziom ziemi" #: src/settings_translation_file.cpp #, fuzzy msgid "Ground noise" -msgstr "Szum błota" +msgstr "Szum ziemi" #: src/settings_translation_file.cpp #, fuzzy msgid "HTTP mods" -msgstr "Mody" +msgstr "Adres HTTP modów" #: src/settings_translation_file.cpp msgid "HUD scale factor" @@ -3788,11 +3777,11 @@ msgid "" "- log: mimic and log backtrace of deprecated call (default).\n" "- error: abort on usage of deprecated call (suggested for mod developers)." msgstr "" -"Obsługa przestarzałych wywołań lua api:\n" -"- legacy: (próbuje) naśladuje stare zachowanie (domyślne dla wydań).\n" -"- log: naśladuje i loguje przestarzałe wywołania (domyślne dla wersji " -"debug).\n" -"- error: przerywa kiedy zostanie użyte przestarzałe api (sugerowane dla " +"Obsługa przestarzałych wywołań API Lua:\n" +"- brak: nie rejestruje przestarzałych wywołań\n" +"- log: naśladuje i rejestruje backtrace zdeprecjonowanego wywołania " +"(domyślnie).\n" +"- błąd: przerwij przy użyciu przestarzałego wywołania (sugerowane dla " "twórców modów)." #: src/settings_translation_file.cpp @@ -3820,7 +3809,8 @@ msgstr "Szum gorąca" #, fuzzy msgid "" "Height component of the initial window size. Ignored in fullscreen mode." -msgstr "Wysokość początkowego rozmiaru okna." +msgstr "" +"Wysokość początkowego rozmiaru okna. Ignorowana w trybie pełnoekranowym." #: src/settings_translation_file.cpp msgid "Height noise" @@ -3841,22 +3831,22 @@ msgstr "Granica zbocza" #: src/settings_translation_file.cpp #, fuzzy msgid "Hilliness1 noise" -msgstr "Dźwięk stromości" +msgstr "Hałas górzystości1" #: src/settings_translation_file.cpp #, fuzzy msgid "Hilliness2 noise" -msgstr "Dźwięk stromości" +msgstr "Hałas górzystości2" #: src/settings_translation_file.cpp #, fuzzy msgid "Hilliness3 noise" -msgstr "Dźwięk stromości" +msgstr "Hałas górzystości3" #: src/settings_translation_file.cpp #, fuzzy msgid "Hilliness4 noise" -msgstr "Dźwięk stromości" +msgstr "Hałas górzystości4" #: src/settings_translation_file.cpp msgid "Homepage of server, to be displayed in the serverlist." @@ -3900,72 +3890,72 @@ msgstr "Poprzedni klawisz paska działań" #: src/settings_translation_file.cpp #, fuzzy msgid "Hotbar slot 1 key" -msgstr "Następny klawisz paska działań" +msgstr "Przycisk 1 miejsca paska działań" #: src/settings_translation_file.cpp #, fuzzy msgid "Hotbar slot 10 key" -msgstr "Następny klawisz paska działań" +msgstr "Przycisk 10 miejsca paska działań" #: src/settings_translation_file.cpp #, fuzzy msgid "Hotbar slot 11 key" -msgstr "Następny klawisz paska działań" +msgstr "Przycisk 11 miejsca paska działań" #: src/settings_translation_file.cpp #, fuzzy msgid "Hotbar slot 12 key" -msgstr "Następny klawisz paska działań" +msgstr "Przycisk 12 miejsca paska działań" #: src/settings_translation_file.cpp #, fuzzy msgid "Hotbar slot 13 key" -msgstr "Następny klawisz paska działań" +msgstr "Przycisk 13 miejsca paska działań" #: src/settings_translation_file.cpp #, fuzzy msgid "Hotbar slot 14 key" -msgstr "Następny klawisz paska działań" +msgstr "Przycisk 14 miejsca paska działań" #: src/settings_translation_file.cpp #, fuzzy msgid "Hotbar slot 15 key" -msgstr "Następny klawisz paska działań" +msgstr "Przycisk 15 miejsca paska działań" #: src/settings_translation_file.cpp #, fuzzy msgid "Hotbar slot 16 key" -msgstr "Następny klawisz paska działań" +msgstr "Przycisk 16 miejsca paska działań" #: src/settings_translation_file.cpp #, fuzzy msgid "Hotbar slot 17 key" -msgstr "Następny klawisz paska działań" +msgstr "Przycisk 17 miejsca paska działań" #: src/settings_translation_file.cpp #, fuzzy msgid "Hotbar slot 18 key" -msgstr "Następny klawisz paska działań" +msgstr "Przycisk 18 miejsca paska działań" #: src/settings_translation_file.cpp #, fuzzy msgid "Hotbar slot 19 key" -msgstr "Następny klawisz paska działań" +msgstr "Przycisk 19 miejsca paska działań" #: src/settings_translation_file.cpp #, fuzzy msgid "Hotbar slot 2 key" -msgstr "Następny klawisz paska działań" +msgstr "Przycisk 2 miejsca paska działań" #: src/settings_translation_file.cpp #, fuzzy msgid "Hotbar slot 20 key" -msgstr "Następny klawisz paska działań" +msgstr "Przycisk 20 miejsca paska działań" #: src/settings_translation_file.cpp #, fuzzy msgid "Hotbar slot 21 key" -msgstr "Następny klawisz paska działań" +msgstr "Przycisk 21 miejsca paska działań" #: src/settings_translation_file.cpp #, fuzzy From 5cb9a3691637af600b883dbf10a9a0655fcb5071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81cs=20Zolt=C3=A1n?= Date: Sun, 4 Jul 2021 12:26:42 +0000 Subject: [PATCH 078/412] Translated using Weblate (Hungarian) Currently translated at 81.9% (1144 of 1396 strings) --- po/hu/minetest.po | 488 ++++++++++++++++++---------------------------- 1 file changed, 195 insertions(+), 293 deletions(-) diff --git a/po/hu/minetest.po b/po/hu/minetest.po index dae8e92b7..571d1f62b 100644 --- a/po/hu/minetest.po +++ b/po/hu/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Hungarian (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-03-28 20:29+0000\n" -"Last-Translator: Hatlábú Farkas \n" +"PO-Revision-Date: 2021-07-27 23:16+0000\n" +"Last-Translator: Ács Zoltán \n" "Language-Team: Hungarian \n" "Language: hu\n" @@ -12,40 +12,35 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.6-dev\n" +"X-Generator: Weblate 4.7.2-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" msgstr "" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Empty command." -msgstr "Parancsok" +msgstr "Üres parancs." #: builtin/client/chatcommands.lua -#, fuzzy msgid "Exit to main menu" msgstr "Kilépés a főmenübe" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Invalid command: " -msgstr "Helyi parancs" +msgstr "Érvénytelen parancs: " #: builtin/client/chatcommands.lua msgid "Issued command: " msgstr "" #: builtin/client/chatcommands.lua -#, fuzzy msgid "List online players" -msgstr "Egyjátékos" +msgstr "Online játékosok listázása" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Online players: " -msgstr "Egyjátékos" +msgstr "Online játékosok: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." @@ -64,19 +59,16 @@ msgid "You died" msgstr "Meghaltál" #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." -msgstr "Meghaltál" +msgstr "Meghaltál." #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands:" -msgstr "Helyi parancs" +msgstr "Elérhető parancsok:" #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands: " -msgstr "Helyi parancs" +msgstr "elérhető parancsok: " #: builtin/common/chatcommands.lua msgid "Command not available: " @@ -197,7 +189,7 @@ msgstr "Nincs elérhető játékleírás." #: builtin/mainmenu/dlg_config_world.lua msgid "No hard dependencies" -msgstr "Nincsenek függőségek." +msgstr "Nincsenek komolyabb függőségek." #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." @@ -205,7 +197,7 @@ msgstr "Nincs elérhető modcsomag-leírás." #: builtin/mainmenu/dlg_config_world.lua msgid "No optional dependencies" -msgstr "Nincsenek választható függőségek. " +msgstr "Nincsenek választható függőségek" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Optional dependencies:" @@ -230,11 +222,11 @@ msgstr "\"$1\" már létezik. Szeretné felülírni?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." -msgstr "" +msgstr "$1 és $2 függőségek telepítve lesznek." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" -msgstr "" +msgstr "$1 az $2-ből" #: builtin/mainmenu/dlg_contentstore.lua msgid "" @@ -250,11 +242,11 @@ msgstr "$1 Letöltése…" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "" +msgstr "Ehhez szükséges függőségek nem találhatók: $1." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" +msgstr "$1 telepítve lesz, és $2 függőségek ki lesznek hagyva." #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" @@ -412,11 +404,11 @@ msgstr "Lapos terep" #: builtin/mainmenu/dlg_create_world.lua msgid "Floating landmasses in the sky" -msgstr "Lebegő földdarabok az égben" +msgstr "Lebegő földtömegek az égben" #: builtin/mainmenu/dlg_create_world.lua msgid "Floatlands (experimental)" -msgstr "Lebegő földek" +msgstr "Lebegő földek (kísérleti)" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" @@ -794,9 +786,8 @@ msgid "Active Contributors" msgstr "Aktív közreműködők" #: builtin/mainmenu/tab_about.lua -#, fuzzy msgid "Active renderer:" -msgstr "Aktív objektum küldés hatótávolsága" +msgstr "Aktív renderelő:" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" @@ -932,9 +923,8 @@ msgid "Start Game" msgstr "Indítás" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Address" -msgstr "- Cím: " +msgstr "Cím" #: builtin/mainmenu/tab_online.lua src/client/keycode.cpp msgid "Clear" @@ -950,18 +940,16 @@ msgstr "Kreatív mód" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Damage / PvP" -msgstr "Sérülés" +msgstr "Sérülés / PvP" #: builtin/mainmenu/tab_online.lua msgid "Del. Favorite" msgstr "Kedvenc törlése" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Favorites" -msgstr "Kedvenc" +msgstr "Kedvencek" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" @@ -976,18 +964,16 @@ msgid "Ping" msgstr "Ping" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Public Servers" -msgstr "Szerver nyilvánossá tétele" +msgstr "Nyilvános szerverek" #: builtin/mainmenu/tab_online.lua msgid "Refresh" msgstr "" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Server Description" -msgstr "Szerver leírása" +msgstr "Szerver leírás" #: builtin/mainmenu/tab_settings.lua msgid "2x" @@ -1030,9 +1016,8 @@ msgid "Connected Glass" msgstr "Csatlakozó üveg" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp -#, fuzzy msgid "Dynamic shadows" -msgstr "Betűtípus árnyéka" +msgstr "Dinamikus árnyékok" #: builtin/mainmenu/tab_settings.lua msgid "Dynamic shadows: " @@ -1304,7 +1289,7 @@ msgid "Continue" msgstr "Folytatás" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "" "Controls:\n" "- %s: move forwards\n" @@ -1327,13 +1312,12 @@ msgstr "" "- %s: mozgás balra\n" "- %s: mozgás jobbra\n" "- %s: ugrás/mászás\n" +"- %s: ásás/ütés\n" "- %s: lopakodás/lefelé mászás\n" "- %s: tárgy eldobása\n" "- %s: eszköztár\n" "- Egér: forgás/nézelődés\n" -"- Bal-egér: ásás/ütés\n" -"- Jobb-egér: elhelyezés/használat\n" -"- Egér görgő: tárgy választása\n" +"- Egérgörgő: tárgy kiválasztása\n" "- %s: csevegés\n" #: src/client/game.cpp @@ -1465,9 +1449,8 @@ msgid "Minimap currently disabled by game or mod" msgstr "A kistérkép letiltva (szerver, vagy mod által)" #: src/client/game.cpp -#, fuzzy msgid "Multiplayer" -msgstr "Egyjátékos" +msgstr "Többjátékos" #: src/client/game.cpp msgid "Noclip mode disabled" @@ -1596,7 +1579,7 @@ msgstr "Profiler elrejtése" #: src/client/gameui.cpp #, c-format msgid "Profiler shown (page %d of %d)" -msgstr "Profiler megjelenítése (lap: %d1 ennyiből : %d2)" +msgstr "Profiler megjelenítése (lap: %d1 ennyiből: %d2)" #: src/client/keycode.cpp msgid "Apps" @@ -1869,7 +1852,7 @@ msgstr "Minimap radar módban, Nagyítás x%d" #: src/client/minimap.cpp #, c-format msgid "Minimap in surface mode, Zoom x%d" -msgstr "kistérkép terület módban x%d" +msgstr "kistérkép terület módban x%d" #: src/client/minimap.cpp msgid "Minimap in texture mode" @@ -1892,7 +1875,7 @@ msgid "" "Please retype your password and click 'Register and Join' to confirm account " "creation, or click 'Cancel' to abort." msgstr "" -"Te most %1$s szerverre csatlakozol \"%2$s\" névvel először.\n" +"Te most először csatlakozol a(z) %$ szerverre, \"%$\" névvel.\n" "Ha folytatod, akkor egy új fiók lesz létrehozva a hitelesítő adatokkal a " "szerveren.\n" "Kérlek írd be újra a jelszavad, kattints Regisztrációra majd " @@ -1904,9 +1887,8 @@ msgid "Proceed" msgstr "Folytatás" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "\"Aux1\" = climb down" -msgstr "különleges = lemászás" +msgstr "\"Aux1\" = lemászás" #: src/gui/guiKeyChangeMenu.cpp msgid "Autoforward" @@ -2105,14 +2087,13 @@ msgstr "" "kattintás' pozícióban." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "(Android) Use virtual joystick to trigger \"Aux1\" button.\n" "If enabled, virtual joystick will also tap \"Aux1\" button when out of main " "circle." msgstr "" -"(Android) Használd a virtuális joystick-ot az \"aux\" gomb kapcsolásához.\n" -"Ha ez engedélyezve van, akkor a virtuális joystick is aktiválja az aux " +"(Android) Használd a virtuális joystick-ot az \"Aux1\" gomb kapcsolásához.\n" +"Ha ez engedélyezve van, akkor a virtuális joystick is aktiválja az \"Aux1\" " "gombot ha kint van a fő körből." #: src/settings_translation_file.cpp @@ -2190,7 +2171,7 @@ msgid "" "Also defines structure of floatland mountain terrain." msgstr "" "A hegyek szerkezetét és magasságát meghatározó 3D zaj.\n" -"A lebegő tájak hegyeit is meghatározza." +"A lebegő földek hegyeit is meghatározza." #: src/settings_translation_file.cpp msgid "" @@ -2218,7 +2199,6 @@ msgid "3D noise that determines number of dungeons per mapchunk." msgstr "3D-s zaj, amely meghatározza a tömlöcök számát egy térképdarabkánként." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "3D support.\n" "Currently supported:\n" @@ -2235,10 +2215,11 @@ msgstr "" "Jelenleg támogatott:\n" "- none: nincs 3d kimenet.\n" "- anaglyph: cián/magenta színű 3d.\n" -"- interlaced: odd/even line based polarisation screen support.\n" +"- interlaced: páros/páratlan soralapú polarizációs képernyő támogatás.\n" "- topbottom: osztott képernyő fent/lent.\n" "- sidebyside: osztott képernyő kétoldalt.\n" -"- pageflip: quadbuffer based 3d." +"- pageflip: quadbuffer alapú 3d.\n" +"Ne feledje, hogy az interlaced üzemmód, igényli az árnyékolók használatát." #: src/settings_translation_file.cpp msgid "" @@ -2258,15 +2239,15 @@ msgstr "Az összes kliensen megjelenített üzenet a szerver leállításakor." #: src/settings_translation_file.cpp msgid "ABM interval" -msgstr "" +msgstr "ABM intervallum" #: src/settings_translation_file.cpp msgid "ABM time budget" -msgstr "" +msgstr "ABM időgazdálkodás" #: src/settings_translation_file.cpp msgid "Absolute limit of queued blocks to emerge" -msgstr "" +msgstr "A várakozó blokkok felbukkanásának határa" #: src/settings_translation_file.cpp msgid "Acceleration in air" @@ -2387,7 +2368,6 @@ msgid "" "the arm when the camera moves." msgstr "" "A kar tehetetlensége reálisabb mozgást biztosít\n" -"a karnak, amikor a kamera mozog.\n" "a karnak, amikor a kamera mozog." #: src/settings_translation_file.cpp @@ -2408,14 +2388,14 @@ msgid "" "optimization.\n" "Stated in mapblocks (16 nodes)." msgstr "" -"Ennél a távolságnál a szerver agresszívan optimalizálja, melyik blokkokat " -"küldje a klienseknek.\n" +"Ennél a távolságnál a szerver agresszívan optimalizálja, hogy melyik " +"blokkokat küldje a klienseknek.\n" "Kis értékek valószínűleg sokat javítanak a teljesítményen, látható " "megjelenítési hibák árán.\n" "(Néhány víz alatti és barlangokban lévő blokk nem jelenik meg, néha a " "felszínen lévők sem.)\n" "Ha nagyobb, mint a \"max_block_send_distance\", akkor nincs optimalizáció.\n" -"A távolság blokkokban értendő (16 node)" +"A távolság blokkokban értendő (16 node)." #: src/settings_translation_file.cpp msgid "Automatic forward key" @@ -2438,14 +2418,12 @@ msgid "Autoscaling mode" msgstr "Automatikus méretezés mód" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key" -msgstr "Ugrás gomb" +msgstr "Aux1 gomb" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key for climbing/descending" -msgstr "Különleges gomb a mászáshoz/ereszkedéshez" +msgstr "Aux1 gomb a mászáshoz/ereszkedéshez" #: src/settings_translation_file.cpp msgid "Backward key" @@ -2592,7 +2570,7 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy msgid "Chat command time message threshold" -msgstr "Sivatag zajának küszöbe" +msgstr "Csevegésparancs üzeneteinek küszöbe" #: src/settings_translation_file.cpp msgid "Chat font size" @@ -2611,9 +2589,8 @@ msgid "Chat message count limit" msgstr "Csevegőüzenetek számának korlátozása" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat message format" -msgstr "Üzenet összeomláskor" +msgstr "Üzenet formátum" #: src/settings_translation_file.cpp msgid "Chat message kick threshold" @@ -2692,9 +2669,8 @@ msgid "Colored fog" msgstr "Színezett köd" #: src/settings_translation_file.cpp -#, fuzzy msgid "Colored shadows" -msgstr "Színezett köd" +msgstr "Színezett árnyékok" #: src/settings_translation_file.cpp msgid "" @@ -2775,6 +2751,9 @@ msgid "" "Continuous forward movement, toggled by autoforward key.\n" "Press the autoforward key again or the backwards movement to disable." msgstr "" +"Folyamatos előre mozgás, az \"autoforward\" gomb segítségével.\n" +"Nyomja meg az \"autoforward\" gombot, vagy a hátrafelé gombot a " +"kikapcsoláshoz." #: src/settings_translation_file.cpp msgid "Controls" @@ -2786,12 +2765,11 @@ msgid "" "Examples:\n" "72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged." msgstr "" -"Nappal/éjjel ciklus hossza.\n" +"Nappal/éjjel ciklus hosszát határozza meg.\n" "Példák: 72 = 20 perc, 360 = 4 perc, 1 = 24 óra, 0 = nappal/éjjel/bármelyik " "változatlan marad." #: src/settings_translation_file.cpp -#, fuzzy msgid "Controls sinking speed in liquid." msgstr "Folyadékban a süllyedési sebességet szabályozza." @@ -2809,6 +2787,10 @@ msgid "" "Value >= 10.0 completely disables generation of tunnels and avoids the\n" "intensive noise calculations." msgstr "" +"A csatornák szélességét irányítja, a kisebb érték szélesebb csatornát hoz " +"létre.\n" +"Érték >= 10.0 teljesen kikapcsolja a csatornák generálását és elkerüli az\n" +"intenzív zajszámítást." #: src/settings_translation_file.cpp msgid "Crash message" @@ -2823,11 +2805,12 @@ msgid "Crosshair alpha" msgstr "Célkereszt átlátszóság" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" "Also controls the object crosshair color" -msgstr "Célkereszt átlátszóság (0 és 255 között)." +msgstr "" +"Célkereszt átlátszóság (0 és 255 között).\n" +"Az objektum célkereszt színét is meghatározza" #: src/settings_translation_file.cpp msgid "Crosshair color" @@ -2838,6 +2821,8 @@ msgid "" "Crosshair color (R,G,B).\n" "Also controls the object crosshair color" msgstr "" +"Célkereszt szín (R,G,B).\n" +"Az objektum célkereszt színét is állítja" #: src/settings_translation_file.cpp msgid "DPI" @@ -2852,9 +2837,8 @@ msgid "Debug info toggle key" msgstr "Hibakereső információra váltás gomb" #: src/settings_translation_file.cpp -#, fuzzy msgid "Debug log file size threshold" -msgstr "Sivatag zajának küszöbszintje" +msgstr "Hibakeresési naplófájl méretküszöbe" #: src/settings_translation_file.cpp msgid "Debug log level" @@ -2903,7 +2887,7 @@ msgstr "Alapértelmezett jelentésformátum" #: src/settings_translation_file.cpp #, fuzzy msgid "Default stack size" -msgstr "Alapértelmezett játék" +msgstr "Alapértelmezett kötegméret" #: src/settings_translation_file.cpp msgid "" @@ -2922,20 +2906,17 @@ msgstr "A homokos tengerpartok területeit határozza meg." #: src/settings_translation_file.cpp msgid "Defines distribution of higher terrain and steepness of cliffs." -msgstr "" -"A magasabb terep (hegytetők) területeit szabja meg és a szirtek\n" -"meredekségére is hatással van." +msgstr "A magasabb terep eloszlását, a szirtek meredekségét szabályozza." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines distribution of higher terrain." -msgstr "A \"terrain_higher\" területeit határozza meg (hegytetők terepe)." +msgstr "A magasabb területek eloszlását határozza meg." #: src/settings_translation_file.cpp msgid "Defines full size of caverns, smaller values create larger caverns." msgstr "" -"Az üregek teljes méretét adja meg. Kisebb értékek nagyobb\n" -"üregeket képeznek." +"Az üregek teljes méretét adja meg, a kisebb értékek nagyobb üregeket " +"képeznek." #: src/settings_translation_file.cpp msgid "Defines large-scale river channel structure." @@ -2956,8 +2937,7 @@ msgstr "A folyómedrek mélységét határozza meg." #: src/settings_translation_file.cpp msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." msgstr "" -"A maximális távolság, aminél a játékosok látják egymást,\n" -"blokkokban megadva (0 = korlátlan)." +"A maximális játékos küldési távolság blokkokban megadva (0 = korlátlan)." #: src/settings_translation_file.cpp msgid "Defines the width of the river channel." @@ -3024,9 +3004,8 @@ msgid "Desynchronize block animation" msgstr "Blokkanimáció deszinkronizálása" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dig key" -msgstr "Jobb gomb" +msgstr "Ásás gomb" #: src/settings_translation_file.cpp msgid "Digging particles" @@ -3061,12 +3040,10 @@ msgid "Dump the mapgen debug information." msgstr "A térképgenerátor hibakeresési információinak kiírása." #: src/settings_translation_file.cpp -#, fuzzy msgid "Dungeon maximum Y" -msgstr "Tömlöc maximális Y magassága" +msgstr "Tömlöc maximális Y magassága" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dungeon minimum Y" msgstr "Tömlöc minimális Y magassága" @@ -3079,6 +3056,8 @@ msgid "" "Enable IPv6 support (for both client and server).\n" "Required for IPv6 connections to work at all." msgstr "" +"IPv6 támogatás engedélyezése (a kliens és a szerver számára is).\n" +"Szükséges, hogy az IPv6 kapcsolatok egyáltalán működjenek." #: src/settings_translation_file.cpp msgid "" @@ -3099,12 +3078,10 @@ msgid "Enable console window" msgstr "Konzolablak engedélyezése" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable creative mode for all players" -msgstr "Kreatív mód engedélyezése az újonnan létrehozott térképekhez." +msgstr "Kreatív mód engedélyezése az összes játékos számára" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable joysticks" msgstr "Joystick engedélyezése" @@ -3134,9 +3111,8 @@ msgstr "" "használható)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable register confirmation" -msgstr "Regisztermegerősítés engedélyezése" +msgstr "Regisztráció megerősítés engedélyezése" #: src/settings_translation_file.cpp #, fuzzy @@ -3185,6 +3161,8 @@ msgid "" "Enable vertex buffer objects.\n" "This should greatly improve graphics performance." msgstr "" +"Vertex buffer objektumok engedélyezése.\n" +"Ez nagyban javíthatja a grafikus teljesítményt." #: src/settings_translation_file.cpp msgid "" @@ -3196,16 +3174,14 @@ msgstr "" "fejmozgás van" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Enable/disable running an IPv6 server.\n" "Ignored if bind_address is set.\n" "Needs enable_ipv6 to be enabled." msgstr "" -"IPv6 szerver futtatásának engedélyezése/letiltása. Egy IPv6 szerver " -"lehetséges, hogy\n" -"IPv6 kliensekre van korlátozva, a rendszer konfigurációtól függően.\n" -"Nincs figyelembe véve, ha bind_address van beállítva." +"IPv6 szerver futtatásának engedélyezése/letiltása.\n" +"Nincs figyelembe véve, ha bind_address van beállítva.\n" +"Szükséges hozzá, hogy az ipv6 engedélyezve legyen." #: src/settings_translation_file.cpp msgid "" @@ -3222,7 +3198,7 @@ msgstr "Az eszköztárelemek animációjának engedélyezése." #: src/settings_translation_file.cpp #, fuzzy msgid "Enables caching of facedir rotated meshes." -msgstr "Engedélyezi az elforgatott rácsvonalak gyorsítótárazását." +msgstr "Engedélyezi az elforgatott hálók gyorsítótárazását." #: src/settings_translation_file.cpp msgid "Enables minimap." @@ -3235,15 +3211,18 @@ msgid "" "sound controls will be non-functional.\n" "Changing this setting requires a restart." msgstr "" +"Engedélyezi a hangrendszert.\n" +"Ha ki van kapcsolva teljesen kikapcsol minden hangot és a játék hangvezérlői " +"nem fognak működni.\n" +"Ennek a beállításnak a megváltoztatása a játék újraindítását igényli." #: src/settings_translation_file.cpp msgid "Engine profiling data print interval" msgstr "Játékmotor profiler adatok kiírási időköze" #: src/settings_translation_file.cpp -#, fuzzy msgid "Entity methods" -msgstr "Egység módszerek" +msgstr "Egység metódusok" #: src/settings_translation_file.cpp msgid "" @@ -3256,27 +3235,24 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "FPS when unfocused or paused" -msgstr "Maximum FPS a játék szüneteltetésekor." +msgstr "FPS, amikor a játék meg van állítva, vagy nincs fókuszban" #: src/settings_translation_file.cpp msgid "FSAA" msgstr "FSAA" #: src/settings_translation_file.cpp -#, fuzzy msgid "Factor noise" msgstr "Tényezőzaj" #: src/settings_translation_file.cpp msgid "Fall bobbing factor" -msgstr "" +msgstr "Leesési bólintási tényező" #: src/settings_translation_file.cpp -#, fuzzy msgid "Fallback font path" -msgstr "Tartalék betűtípus" +msgstr "Tartalék betűtípus útvonala" #: src/settings_translation_file.cpp msgid "Fast key" @@ -3295,12 +3271,11 @@ msgid "Fast movement" msgstr "Gyors mozgás" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Fast movement (via the \"Aux1\" key).\n" "This requires the \"fast\" privilege on the server." msgstr "" -"Gyors mozgás (a használat gombbal).\n" +"Gyors mozgás (az \"Aux1\" gombbal).\n" "Szükséges hozzá a gyors mód jogosultság a szerveren." #: src/settings_translation_file.cpp @@ -3312,14 +3287,14 @@ msgid "Field of view in degrees." msgstr "Látóterület fokokban." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "File in client/serverlist/ that contains your favorite servers displayed in " "the\n" "Multiplayer Tab." msgstr "" "A client/serverlist/ mappában lévő fájl, ami tartalmazza a kedvenc " -"szervereket, amik a Többjátékos fül alatt jelennek meg." +"szervereidet,\n" +"amik a Többjátékos fül alatt jelennek meg." #: src/settings_translation_file.cpp msgid "Filler depth" @@ -3358,7 +3333,6 @@ msgid "Fixed map seed" msgstr "Fix térkép seed" #: src/settings_translation_file.cpp -#, fuzzy msgid "Fixed virtual joystick" msgstr "Rögzített virtuális joystick" @@ -3376,16 +3350,15 @@ msgstr "Lebegő földek minimális Y magassága" #: src/settings_translation_file.cpp msgid "Floatland noise" -msgstr "Lebegőföldek zaja" +msgstr "Lebegő földek zaja" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland taper exponent" -msgstr "A lebegő hegyek alapzaja" +msgstr "A lebegő földek kúpkitevője" #: src/settings_translation_file.cpp msgid "Floatland tapering distance" -msgstr "A lebegő földek hegyeinek távolsága" +msgstr "A lebegő földek kúpjainak távolsága" #: src/settings_translation_file.cpp msgid "Floatland water level" @@ -3433,7 +3406,7 @@ msgstr "Betűtípus mérete" #: src/settings_translation_file.cpp msgid "Font size of the default font in point (pt)." -msgstr "" +msgstr "Az alapértelmezett betűtípus mérete képpontban (pt)." #: src/settings_translation_file.cpp msgid "Font size of the monospace font in point (pt)." @@ -3446,7 +3419,6 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Format of player chat messages. The following strings are valid " "placeholders:\n" @@ -3454,7 +3426,7 @@ msgid "" msgstr "" "A játékos csevegési üzeneteinek formátuma. A következő karakterláncok " "érvényesek:\n" -"@ név, @ üzenet, @ időbélyeg (opcionális)" +"@név, @üzenet, @időbélyeg (opcionális)" #: src/settings_translation_file.cpp msgid "Format of screenshots." @@ -3477,9 +3449,8 @@ msgid "Formspec Full-Screen Background Opacity" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Formspec default background color (R,G,B)." -msgstr "Játékon belüli csevegő konzol hátterének színe (R,G,B)." +msgstr "" #: src/settings_translation_file.cpp #, fuzzy @@ -3563,24 +3534,19 @@ msgid "GUI scaling filter txr2img" msgstr "Felhasználói felület méretarány szűrő txr2img" #: src/settings_translation_file.cpp -#, fuzzy msgid "Global callbacks" -msgstr "Globális visszahívások" +msgstr "Globális visszatérések" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" "and junglegrass, in all other mapgens this flag controls all decorations." msgstr "" -"Térkép generálási jellemzők csak a Flat (lapos) térképgenerátor esetében.\n" -"Esetenkénti tavak és dombok generálása a lapos világba.\n" -"The default flags set in the engine are: none\n" -"The flags string modifies the engine defaults.\n" -"Flags that are not specified in the flag string are not modified from the " -"default.\n" -"Flags starting with \"no\" are used to explicitly disable them." +"Globális térképgenerálási jellemzők.\n" +"A v6 térképgenerátorban a 'decorations' zászló szabályozza az összes\n" +"dekorációt, kivéve a fákat és a dzsungelfüvet, a többi térképgenerátornál " +"pedig az összeset." #: src/settings_translation_file.cpp msgid "" @@ -3611,7 +3577,6 @@ msgid "Ground noise" msgstr "Talaj zaj" #: src/settings_translation_file.cpp -#, fuzzy msgid "HTTP mods" msgstr "HTTP Modok" @@ -3624,19 +3589,17 @@ msgid "HUD toggle key" msgstr "HUD váltás gomb" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Handling for deprecated Lua API calls:\n" "- none: Do not log deprecated calls\n" "- log: mimic and log backtrace of deprecated call (default).\n" "- error: abort on usage of deprecated call (suggested for mod developers)." msgstr "" -"Az elavult lua API hívások kezelése:\n" -"-örökölt: (próbálja meg) a régi viselkedést utánozni (alapértelmezett).\n" -"-log: elavult hívás visszakövetése és naplózása (hibakereséshez " -"alapértelmezett).\n" -"-error: Megszakítja az elavult hívás használatát (javasolt a mod " -"fejlesztőknek)." +"Az elavult Lua API hívások kezelése:\n" +"-none: ne naplózza az elavult hívásokat\n" +"-log: elavult hívás utánozása és naplózása (alapértelmezett).\n" +"-error: megszakítja az elavult hívás használatát (javasolt a " +"modfejlesztőknek)." #: src/settings_translation_file.cpp msgid "" @@ -3698,39 +3661,36 @@ msgid "Homepage of server, to be displayed in the serverlist." msgstr "A szerver honlapja, ami a szerverlistában megjelenik." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Horizontal acceleration in air when jumping or falling,\n" "in nodes per second per second." msgstr "" "Vízszintes gyorsulás a levegőben ugráskor vagy leeséskor,\n" -"blokk/másodpercben" +"node/másodperc/másodpercben." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Horizontal and vertical acceleration in fast mode,\n" "in nodes per second per second." msgstr "" "Vízszintes és függőleges gyorsulás gyors módban,\n" -"blokk/másodpercben." +"node/másodpercben/másodpercben." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Horizontal and vertical acceleration on ground or when climbing,\n" "in nodes per second per second." -msgstr "Vízszintes és függőleges gyorsulás a földön, blokk/másodpercben." +msgstr "" +"Vízszintes és függőleges gyorsulás a földön, vagy mászáskor,\n" +"node/másodpercben." #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar next key" -msgstr "Gyorsgomb következő gomb" +msgstr "Gyorssáv következő gomb" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar previous key" -msgstr "Gyorsgomb előző gomb" +msgstr "Gyorssáv előző gomb" #: src/settings_translation_file.cpp msgid "Hotbar slot 1 key" @@ -3889,9 +3849,8 @@ msgid "Humidity blend noise" msgstr "Páratartalom keverés zaj" #: src/settings_translation_file.cpp -#, fuzzy msgid "Humidity noise" -msgstr "Páratartalomzaj" +msgstr "Páratartalom zaj" #: src/settings_translation_file.cpp msgid "Humidity variation for biomes." @@ -3914,13 +3873,11 @@ msgstr "" "hogy ne pazaroljon CPU erőforrást feleslegesen." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n" "enabled." msgstr "" -"Ha le van tiltva, a használat (use) gomb lesz használatban a gyors " -"repüléshez,\n" +"Ha le van tiltva, az \"Aux1\" gomb lesz használatban a gyors repüléshez,\n" "ha a repülés és a gyors mód is engedélyezve van." #: src/settings_translation_file.cpp @@ -3942,23 +3899,21 @@ msgstr "" "node-okon. Szükséges hozzá a noclip jogosultság a szerveren." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down " "and\n" "descending." msgstr "" -"Ha engedélyezve van, a \"használat\" (use) gomb lesz használatban a " -"\"lopakodás\" (sneak) helyett lefelé mászáskor, vagy ereszkedéskor." +"Ha engedélyezve van, az \"Aux1\"gomb lesz használatban a \"lopakodás\" " +"(sneak) helyett lefelé mászáskor, vagy ereszkedéskor." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If enabled, actions are recorded for rollback.\n" "This option is only read when server starts." msgstr "" -"Ha engedélyezve van, akkor a műveleteket rögzíti a visszagörgetéshez.\n" -"Ez az opció csak akkor olvasható, amikor a szerver elindul." +"Ha engedélyezve van, akkor a műveletek rögzülnek a visszagörgetéshez.\n" +"Ez az opció csak akkor van beolvasva, amikor a szerver elindul." #: src/settings_translation_file.cpp msgid "If enabled, disable cheat prevention in multiplayer." @@ -4120,12 +4075,10 @@ msgid "Italic monospace font path" msgstr "Dőlt monspace betűtípus útvonal" #: src/settings_translation_file.cpp -#, fuzzy msgid "Item entity TTL" msgstr "Elem entitás TTL" #: src/settings_translation_file.cpp -#, fuzzy msgid "Iterations" msgstr "Ismétlések" @@ -4151,9 +4104,8 @@ msgid "Joystick button repetition interval" msgstr "Joystick gomb ismétlési időköz" #: src/settings_translation_file.cpp -#, fuzzy msgid "Joystick deadzone" -msgstr "Joystick típus" +msgstr "Joystick holtzóna" #: src/settings_translation_file.cpp msgid "Joystick frustum sensitivity" @@ -4202,15 +4154,14 @@ msgstr "" "Tartomány nagyjából -2 és 2 között." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Julia set only.\n" "Z component of hypercomplex constant.\n" "Alters the shape of the fractal.\n" "Range roughly -2 to 2." msgstr "" -"Julia-halmaz.\n" -"Z komponens hiperkomplex konstans.\n" +"Csak Julia-halmaz.\n" +"Hiperkomplex állandó Z összetevője.\n" "Megváltoztatja a fraktál alakját.\n" "Tartomány nagyjából -2 és 2 között." @@ -4259,13 +4210,12 @@ msgstr "" "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for digging.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az ugráshoz.\n" +"Gomb az ásáshoz.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4338,7 +4288,7 @@ msgid "" "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" "Gomb a játékos előre mozgásához.\n" -"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." +"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp @@ -4412,13 +4362,12 @@ msgstr "" "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for placing.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Gomb az ugráshoz.\n" +"Gomb az elhelyezéshez.\n" "Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -5028,7 +4977,6 @@ msgstr "" "A hullámzó folyadékok engedélyezése szükséges hozzá." #: src/settings_translation_file.cpp -#, fuzzy msgid "Length of time between Active Block Modifier (ABM) execution cycles" msgstr "Az Aktív Blokk módosító (ABM) végrehajtási ciklusok közötti időtartam" @@ -5085,11 +5033,15 @@ msgid "Light curve low gradient" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n" "Only mapchunks completely within the mapgen limit are generated.\n" "Value is stored per-world." msgstr "" +"A térképgenerálás határa, node-okban, mind a 6 irányban a (0, 0, 0) " +"pozíciótól kezdve.\n" +"Csak a teljesen a határon belül lévő térképdarabkák generálódnak le." #: src/settings_translation_file.cpp msgid "" @@ -5117,12 +5069,10 @@ msgid "Liquid queue purge time" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Liquid sinking" msgstr "Folyadék süllyedés" #: src/settings_translation_file.cpp -#, fuzzy msgid "Liquid update interval in seconds." msgstr "A folyadékok frissítési időköze másodpercben." @@ -5146,7 +5096,6 @@ msgid "Loading Block Modifiers" msgstr "Blokk módosítók betöltése" #: src/settings_translation_file.cpp -#, fuzzy msgid "Lower Y limit of dungeons." msgstr "A tömlöcök alsó Y határa." @@ -5166,7 +5115,6 @@ msgstr "" "látószögtől." #: src/settings_translation_file.cpp -#, fuzzy msgid "Makes all liquids opaque" msgstr "Az összes folyadékot átlátszatlanná teszi" @@ -5183,37 +5131,27 @@ msgid "Map directory" msgstr "Térkép mappája" #: src/settings_translation_file.cpp +#, fuzzy msgid "Map generation attributes specific to Mapgen Carpathian." -msgstr "" +msgstr "A Kárpát térképgenerátor sajátos tulajdonságai." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen Flat.\n" "Occasional lakes and hills can be added to the flat world." msgstr "" -"Térkép generálási jellemzők csak a Flat (lapos) térképgenerátor esetében.\n" -"Esetenkénti tavak és dombok generálása a lapos világba.\n" -"The default flags set in the engine are: none\n" -"The flags string modifies the engine defaults.\n" -"Flags that are not specified in the flag string are not modified from the " -"default.\n" -"Flags starting with \"no\" are used to explicitly disable them." +"A Lapos térképgenerátor sajátos tulajdonságai.\n" +"Alkalmanként tavak és dombok hozzáadódhatnak a lapos világhoz." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen Fractal.\n" "'terrain' enables the generation of non-fractal terrain:\n" "ocean, islands and underground." msgstr "" -"Térkép generálási jellemzők csak a Flat (lapos) térképgenerátor esetében.\n" -"Esetenkénti tavak és dombok generálása a lapos világba.\n" -"The default flags set in the engine are: none\n" -"The flags string modifies the engine defaults.\n" -"Flags that are not specified in the flag string are not modified from the " -"default.\n" -"Flags starting with \"no\" are used to explicitly disable them." +"A Fraktál térképgenerátor sajátos jellemzői.\n" +"A 'terrain' engedélyezi a nem-fraktál terep generálását,\n" +"mint az óceán, szigetek és a földalatti részek." #: src/settings_translation_file.cpp msgid "" @@ -5224,43 +5162,42 @@ msgid "" "to become shallower and occasionally dry.\n" "'altitude_dry': Reduces humidity with altitude." msgstr "" +"A Völgyek térképgenerátor sajátos jellemzői.\n" +"'altitude_chill': csökkenti a hőmérsékletet a magassággal.\n" +"'humid_rivers': megnöveli a páratartalmat a folyók körül.\n" +"'vary_river_depth': ha engedélyezve van, az alacsony páratalom és a magas\n" +"hőmérséklet hatására a folyók sekélyebbé válnak, és lehet, hogy kiszáradnak." +"\n" +"'altitude_dry': csökkenti a páratartalmat a magassággal." #: src/settings_translation_file.cpp msgid "Map generation attributes specific to Mapgen v5." -msgstr "" +msgstr "A v5 térképgenerátor sajátos tulajdonságai." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen v6.\n" "The 'snowbiomes' flag enables the new 5 biome system.\n" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" "the 'jungles' flag is ignored." msgstr "" -"Térképgenerálási jellemzők csak a v6 térképgenerátor esetében.\n" -"When snowbiomes are enabled jungles are enabled and the jungles flag is " -"ignored.\n" -"The default flags set in the engine are: biomeblend, mudflow\n" -"The flags string modifies the engine defaults.\n" -"Flags that are not specified in the flag string are not modified from the " -"default.\n" -"Flags starting with \"no\" are used to explicitly disable them." +"A v6 térképgenerátor sajátos jellemzői.\n" +"A 'snowbiomes' zászló engedélyezi az új 5 biomos rendszert.\n" +"Amikor a 'snowbiomes' zászló engedélyezett a dzsungelek automatikusan " +"engedélyezve vannak\n" +"és a 'jungles' zászló figyelmen kívül van hagyva." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen v7.\n" "'ridges': Rivers.\n" "'floatlands': Floating land masses in the atmosphere.\n" "'caverns': Giant caves deep underground." msgstr "" -"Térkép generálási jellemzők csak a Flat (lapos) térképgenerátor esetében.\n" -"Esetenkénti tavak és dombok generálása a lapos világba.\n" -"The default flags set in the engine are: none\n" -"The flags string modifies the engine defaults.\n" -"Flags that are not specified in the flag string are not modified from the " -"default.\n" -"Flags starting with \"no\" are used to explicitly disable them." +"Térkép generálási jellemzők csak a v7 térképgenerátor esetében.\n" +"'ridges': folyók.\n" +"'floatlands': lebegő földtömegek a légkörben.\n" +"'caverns': óriási barlangok mélyen a föld alatt." #: src/settings_translation_file.cpp msgid "Map generation limit" @@ -5271,23 +5208,21 @@ msgid "Map save interval" msgstr "Térkép mentésének időköze" #: src/settings_translation_file.cpp -#, fuzzy msgid "Map update time" -msgstr "Folyadékfrissítés tick" +msgstr "Térkép frissítési idő" #: src/settings_translation_file.cpp msgid "Mapblock limit" msgstr "Térképblokk korlát" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapblock mesh generation delay" -msgstr "Térkép generálási korlát" +msgstr "Térképblokk háló generálási késleltetés" #: src/settings_translation_file.cpp #, fuzzy msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "Térkép generálási korlát" +msgstr "Térképblokk hálógenerátor gyorsítótár mérete MB-ban" #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" @@ -5374,18 +5309,16 @@ msgid "Max. clearobjects extra blocks" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Max. packets per iteration" -msgstr "Max csomag ismétlésenként" +msgstr "Maximum csomagok ismétlésenként" #: src/settings_translation_file.cpp msgid "Maximum FPS" msgstr "Maximum FPS (képkocka/mp)" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum FPS when the window is not focused, or when the game is paused." -msgstr "Maximum FPS a játék szüneteltetésekor." +msgstr "Maximum FPS, amikor a játék szüneteltetve van, vagy nincs fókuszban." #: src/settings_translation_file.cpp msgid "Maximum distance to render shadows." @@ -5426,22 +5359,20 @@ msgid "Maximum number of blocks that can be queued for loading." msgstr "Maximum blokkok száma, amik sorban állhatnak betöltésre." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be generated.\n" "This limit is enforced per player." msgstr "" "Maximum blokkok száma, amik sorban állhatnak generálásra.\n" -"Hagyd üresen, hogy automatikusan legyen kiválasztva a megfelelő mennyiség." +"Ez a korlát játékosonként van kényszerítve." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum number of blocks to be queued that are to be loaded from file.\n" "This limit is enforced per player." msgstr "" "Maximum blokkok száma, amik sorban állhatnak egy fájlból való betöltésre.\n" -"Hagyd üresen, hogy automatikusan legyen kiválasztva a megfelelő mennyiség." +"Ez a korlát játékosonként van kényszerítve." #: src/settings_translation_file.cpp msgid "" @@ -5470,7 +5401,6 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum number of players that can be connected simultaneously." msgstr "Az egy időben csatlakozó játékosok maximális száma." @@ -5483,9 +5413,8 @@ msgid "Maximum number of statically stored objects in a block." msgstr "Statikusan tárolt objektumok maximális száma egy térképblokkban." #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum objects per block" -msgstr "Maximum objektum térképblokkonként" +msgstr "Maximum objektumok térképblokkonként" #: src/settings_translation_file.cpp msgid "" @@ -5496,7 +5425,6 @@ msgstr "" "Hasznos, ha valamit el kell helyezni a hotbar jobb, vagy bal oldalán." #: src/settings_translation_file.cpp -#, fuzzy msgid "Maximum simultaneous block sends per client" msgstr "Az egyidejűleg a kliensenként küldött térképblokkok maximális száma" @@ -5511,7 +5439,6 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum time a file download (e.g. a mod download) may take, stated in " "milliseconds." @@ -5568,7 +5495,9 @@ msgstr "Kistérkép letapogatási magasság" #: src/settings_translation_file.cpp #, fuzzy msgid "Minimum limit of random number of large caves per mapchunk." -msgstr "3D-s zaj, amely meghatározza a tömlöcök számát egy mapchunkonként." +msgstr "" +"Nagy barlangok térképblokkonként való véletlenszerű számának minimum " +"korlátja." #: src/settings_translation_file.cpp msgid "Minimum limit of random number of small caves per mapchunk." @@ -5579,9 +5508,8 @@ msgid "Minimum texture size" msgstr "Minimum textúra méret" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mipmapping" -msgstr "Mip-mapping" +msgstr "Mipmapping" #: src/settings_translation_file.cpp msgid "Mod channels" @@ -5815,14 +5743,12 @@ msgid "Pitch move mode" msgstr "Pályamozgás mód" #: src/settings_translation_file.cpp -#, fuzzy msgid "Place key" -msgstr "Repülés gomb" +msgstr "Elhelyezés gomb" #: src/settings_translation_file.cpp -#, fuzzy msgid "Place repetition interval" -msgstr "Jobb kattintás ismétlési időköz" +msgstr "Elhelyezés ismétlési időköz" #: src/settings_translation_file.cpp msgid "" @@ -5845,9 +5771,8 @@ msgid "Player versus player" msgstr "Játékos játékos ellen" #: src/settings_translation_file.cpp -#, fuzzy msgid "Poisson filtering" -msgstr "Bilineáris szűrés" +msgstr "Poisson szűrés" #: src/settings_translation_file.cpp msgid "" @@ -5934,9 +5859,8 @@ msgid "Recent Chat Messages" msgstr "Legutóbbi csevegésüzenetek" #: src/settings_translation_file.cpp -#, fuzzy msgid "Regular font path" -msgstr "Betűtípus helye" +msgstr "Betűtípus útvonala" #: src/settings_translation_file.cpp msgid "Remote media" @@ -6069,7 +5993,7 @@ msgstr "" "A legközelebbi-szomszéd-élsimítás szűrőt használja a GUI méretezésére.\n" "Ez elsimít néhány durva élt, és elhajlítja a pixeleket a méretezés " "csökkentésekor,\n" -"de ennek az az ára, hogy elhomályosít néhány szélső pixelt, ha a képek nem\n" +"de ennek az ára, hogy elhomályosít néhány szélső pixelt, ha a képek nem\n" "egész számok alapján vannak méretezve." #: src/settings_translation_file.cpp @@ -6119,7 +6043,6 @@ msgid "Security" msgstr "Biztonság" #: src/settings_translation_file.cpp -#, fuzzy msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" msgstr "Lásd: http://www.sqlite.org/pragma.html#pragma_synchronous" @@ -6260,7 +6183,7 @@ msgid "" "Set to true to enable Shadow Mapping.\n" "Requires shaders to be enabled." msgstr "" -"A \"true\" beállítás engedélyezi a levelek hullámzását.\n" +"Az igazra állítása engedélyezi az árnyáktérképezést.\n" "Az árnyalók engedélyezése szükséges hozzá." #: src/settings_translation_file.cpp @@ -6310,9 +6233,8 @@ msgstr "" "Csak OpenGL-el működnek." #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow filter quality" -msgstr "Képernyőkép minőség" +msgstr "Árnyék szűrő minőség" #: src/settings_translation_file.cpp msgid "Shadow map max distance in nodes to render shadows" @@ -6323,9 +6245,8 @@ msgid "Shadow map texture in 32 bits" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow map texture size" -msgstr "Minimum textúra méret" +msgstr "Árnyéktérkép textúra méret" #: src/settings_translation_file.cpp msgid "" @@ -6352,18 +6273,16 @@ msgid "Show entity selection boxes" msgstr "Entitások kijelölő dobozának megjelenítése" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Show entity selection boxes\n" "A restart is required after changing this." msgstr "" -"Nyelv beállítása. Hagyd üresen a rendszer nyelvének használatához.\n" +"Entitás hitboxok megjelenítése.\n" "A változtatás után a játék újraindítása szükséges." #: src/settings_translation_file.cpp -#, fuzzy msgid "Show nametag backgrounds by default" -msgstr "Félkövér betűtípus alapértelmezetten" +msgstr "Névcímke hátterek megjelenítése alapértelmezetten" #: src/settings_translation_file.cpp msgid "Shutdown message" @@ -6419,13 +6338,13 @@ msgid "Smooth lighting" msgstr "Simított megvilágítás" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Smooths camera when looking around. Also called look or mouse smoothing.\n" "Useful for recording videos." msgstr "" -"Kamera mozgásának simítása mozgáskor és körbenézéskor.\n" -"Videófelvételekhez hasznos." +"Kamera mozgásának simítása körbenézéskor. Körbenézés és egérsimításnak is " +"hívják.\n" +"Hasznos videók felvételénél." #: src/settings_translation_file.cpp msgid "Smooths rotation of camera in cinematic mode. 0 to disable." @@ -6448,9 +6367,8 @@ msgid "Sneaking speed, in nodes per second." msgstr "Lopakodás sebessége node/másodpercben" #: src/settings_translation_file.cpp -#, fuzzy msgid "Soft shadow radius" -msgstr "Betűtípus árnyék átlátszósága" +msgstr "Lágy árnyék sugara" #: src/settings_translation_file.cpp msgid "Sound" @@ -6496,9 +6414,8 @@ msgid "Step mountain spread noise" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Strength of 3D mode parallax." -msgstr "Generált normálfelületek erőssége." +msgstr "" #: src/settings_translation_file.cpp msgid "" @@ -6546,7 +6463,6 @@ msgid "Terrain base noise" msgstr "Terep alapzaj" #: src/settings_translation_file.cpp -#, fuzzy msgid "Terrain height" msgstr "Terep magasság" @@ -6602,9 +6518,8 @@ msgid "The URL for the content repository" msgstr "Az URL a tartalomtárhoz" #: src/settings_translation_file.cpp -#, fuzzy msgid "The deadzone of the joystick" -msgstr "A használni kívánt joystick azonosítója" +msgstr "A joystick holtzónája" #: src/settings_translation_file.cpp msgid "" @@ -6700,21 +6615,19 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The time in seconds it takes between repeated events\n" "when holding down a joystick button combination." msgstr "" -"Ennyi másodperc szükséges az ismételt jobb kattintáshoz a jobb egérgomb " +"Ennyi másodperc szükséges az ismételt jobb kattintáshoz a joystick gomb " "nyomva tartásakor." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The time in seconds it takes between repeated node placements when holding\n" "the place button." msgstr "" -"Ennyi másodperc szükséges az ismételt jobb kattintáshoz a jobb egérgomb " +"Ennyi másodperc szükséges az ismételt node elhelyezéshez az elhelyezés gomb " "nyomva tartásakor." #: src/settings_translation_file.cpp @@ -6789,7 +6702,6 @@ msgid "Trilinear filtering" msgstr "Trilineáris szűrés" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "True = 256\n" "False = 128\n" @@ -6808,9 +6720,8 @@ msgid "URL to the server list displayed in the Multiplayer Tab." msgstr "A Többjátékos fül alatt megjelenített szerverlista URL-je." #: src/settings_translation_file.cpp -#, fuzzy msgid "Undersampling" -msgstr "Renderelés:" +msgstr "" #: src/settings_translation_file.cpp msgid "" @@ -6822,7 +6733,6 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Unlimited player transfer distance" msgstr "Korlátlan játékosátviteli távolság" @@ -6835,9 +6745,8 @@ msgid "Upper Y limit of dungeons." msgstr "A tömlöcök felső Y határa." #: src/settings_translation_file.cpp -#, fuzzy msgid "Upper Y limit of floatlands." -msgstr "A tömlöcök felső Y határa." +msgstr "A lebegő földek felső Y határa." #: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." @@ -6886,7 +6795,6 @@ msgid "VSync" msgstr "Függőleges szinkron" #: src/settings_translation_file.cpp -#, fuzzy msgid "Valley depth" msgstr "Völgyek mélysége" @@ -6895,9 +6803,8 @@ msgid "Valley fill" msgstr "Völgyek kitöltése" #: src/settings_translation_file.cpp -#, fuzzy msgid "Valley profile" -msgstr "Völgyek meredeksége" +msgstr "Völgyek profilja" #: src/settings_translation_file.cpp #, fuzzy @@ -6981,13 +6888,10 @@ msgid "Volume" msgstr "Hangerő" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Volume of all sounds.\n" "Requires the sound system to be enabled." msgstr "" -"Parallax occlusion mapping bekapcsolása.\n" -"A shaderek engedélyezve kell legyenek." #: src/settings_translation_file.cpp msgid "" @@ -7074,14 +6978,15 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Whether FreeType fonts are used, requires FreeType support to be compiled " "in.\n" "If disabled, bitmap and XML vectors fonts are used instead." msgstr "" -"Használatban vannak-e freetype betűtípusok. Szükséges a beépített freetype " -"támogatás." +"Használhatók-e FreeType betűtípusok. Szükséges a beépített FreeType " +"támogatás.\n" +"Ha ki van kapcsolva, bittérképes és XML vektoros betűtípusok lesznek " +"használva helyette." #: src/settings_translation_file.cpp msgid "" @@ -7130,9 +7035,8 @@ msgstr "" "A hibakereső információ megjelenítése (ugyanaz a hatás, ha F5-öt nyomunk)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Width component of the initial window size. Ignored in fullscreen mode." -msgstr "Kezdeti ablak szélessége." +msgstr "" #: src/settings_translation_file.cpp msgid "Width of the selection box lines around nodes." @@ -7157,7 +7061,6 @@ msgstr "" "Ez nem szükséges, ha a főmenüből indítják." #: src/settings_translation_file.cpp -#, fuzzy msgid "World start time" msgstr "Világ-kezdőidő" @@ -7244,9 +7147,8 @@ msgid "cURL file download timeout" msgstr "cURL fájlletöltés időkorlát" #: src/settings_translation_file.cpp -#, fuzzy msgid "cURL interactive timeout" -msgstr "cURL időkorlát" +msgstr "cURL interaktív időtúllépés" #: src/settings_translation_file.cpp msgid "cURL parallel limit" From 7445a72f76f7f741af5362ce0b245d619c8d5733 Mon Sep 17 00:00:00 2001 From: Er2 Date: Fri, 2 Jul 2021 19:24:32 +0000 Subject: [PATCH 079/412] Translated using Weblate (Russian) Currently translated at 100.0% (1396 of 1396 strings) --- po/ru/minetest.po | 402 ++++++++++++++++++++++++---------------------- 1 file changed, 208 insertions(+), 194 deletions(-) diff --git a/po/ru/minetest.po b/po/ru/minetest.po index db6b1324b..dcd4de7aa 100644 --- a/po/ru/minetest.po +++ b/po/ru/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Russian (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-06-29 10:33+0000\n" -"Last-Translator: Чтабс \n" +"PO-Revision-Date: 2021-07-04 15:44+0000\n" +"Last-Translator: Er2 \n" "Language-Team: Russian \n" "Language: ru\n" @@ -13,21 +13,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.7.1-dev\n" +"X-Generator: Weblate 4.8-dev\n" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Clear the out chat queue" -msgstr "Максимальный размер очереди исходящих сообщений" +msgstr "Очистить очередь чата" #: builtin/client/chatcommands.lua msgid "Empty command." msgstr "Пустая команда." #: builtin/client/chatcommands.lua -#, fuzzy msgid "Exit to main menu" -msgstr "Выход в меню" +msgstr "Выход в главное меню" #: builtin/client/chatcommands.lua msgid "Invalid command: " @@ -35,7 +33,7 @@ msgstr "Неверная команда: " #: builtin/client/chatcommands.lua msgid "Issued command: " -msgstr "" +msgstr "Выданная команда: " #: builtin/client/chatcommands.lua msgid "List online players" @@ -47,7 +45,7 @@ msgstr "Онлайн игроки: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." -msgstr "" +msgstr "Очередь в чате теперь пуста." #: builtin/client/chatcommands.lua msgid "This command is disabled by server." @@ -90,7 +88,7 @@ msgstr "" #: builtin/common/chatcommands.lua msgid "[all | ]" -msgstr "" +msgstr "[all | <команда>]" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" @@ -584,8 +582,8 @@ msgid "" "This modpack has an explicit name given in its modpack.conf which will " "override any renaming here." msgstr "" -"Этот пакет модов имеет имя, явно указанное в modpack.conf, которое не " -"изменится от переименования здесь." +"Этот пакет модов имеет имя, явно указанное в modpack.conf, которое изменится " +"от переименования здесь." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "(No description of setting given)" @@ -641,7 +639,7 @@ msgstr "Пожалуйста, введите допустимое число." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Restore Default" -msgstr "Восстановить стандартные настройки" +msgstr "Сбросить значения" #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp msgid "Scale" @@ -784,16 +782,15 @@ msgstr "" #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "" +msgstr "Об этом" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" msgstr "Активные участники" #: builtin/mainmenu/tab_about.lua -#, fuzzy msgid "Active renderer:" -msgstr "Дальность отправляемого активного объекта" +msgstr "Активный визуализатор:" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" @@ -817,7 +814,7 @@ msgstr "Прошлые участники" #: builtin/mainmenu/tab_about.lua msgid "Previous Core Developers" -msgstr "Прошлые разработчики" +msgstr "Прошлые основные разработчики" #: builtin/mainmenu/tab_content.lua msgid "Browse online content" @@ -865,7 +862,7 @@ msgstr "Публичный сервер" #: builtin/mainmenu/tab_local.lua msgid "Bind Address" -msgstr "Адрес привязки" +msgstr "Привязать Адрес" #: builtin/mainmenu/tab_local.lua msgid "Creative Mode" @@ -928,9 +925,8 @@ msgid "Start Game" msgstr "Начать игру" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Address" -msgstr "- Адрес: " +msgstr "Адрес" #: builtin/mainmenu/tab_online.lua src/client/keycode.cpp msgid "Clear" @@ -946,22 +942,20 @@ msgstr "Режим творчества" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Damage / PvP" -msgstr "Урон" +msgstr "Урон / PvP" #: builtin/mainmenu/tab_online.lua msgid "Del. Favorite" msgstr "Убрать из избранного" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Favorites" -msgstr "В избранные" +msgstr "Избранное" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" -msgstr "" +msgstr "Несовместимые серверы" #: builtin/mainmenu/tab_online.lua msgid "Join Game" @@ -972,16 +966,14 @@ msgid "Ping" msgstr "Пинг" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Public Servers" -msgstr "Публичный сервер" +msgstr "Публичные серверы" #: builtin/mainmenu/tab_online.lua msgid "Refresh" -msgstr "" +msgstr "Обновить" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Server Description" msgstr "Описание сервера" @@ -1026,13 +1018,12 @@ msgid "Connected Glass" msgstr "Стёкла без швов" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp -#, fuzzy msgid "Dynamic shadows" -msgstr "Тень шрифта" +msgstr "Динамические тени" #: builtin/mainmenu/tab_settings.lua msgid "Dynamic shadows: " -msgstr "" +msgstr "Динамические тени: " #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" @@ -1040,15 +1031,15 @@ msgstr "Красивая листва" #: builtin/mainmenu/tab_settings.lua msgid "High" -msgstr "" +msgstr "Высокое" #: builtin/mainmenu/tab_settings.lua msgid "Low" -msgstr "" +msgstr "Низкое" #: builtin/mainmenu/tab_settings.lua msgid "Medium" -msgstr "" +msgstr "Среднее" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" @@ -1140,11 +1131,11 @@ msgstr "Трилинейная фильтрация" #: builtin/mainmenu/tab_settings.lua msgid "Ultra High" -msgstr "" +msgstr "Ультравысокое" #: builtin/mainmenu/tab_settings.lua msgid "Very Low" -msgstr "" +msgstr "Очень низкое" #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" @@ -1462,9 +1453,8 @@ msgid "Minimap currently disabled by game or mod" msgstr "Миникарта сейчас отключена игрой или модом" #: src/client/game.cpp -#, fuzzy msgid "Multiplayer" -msgstr "Одиночная игра" +msgstr "Мультиплеер" #: src/client/game.cpp msgid "Noclip mode disabled" @@ -1710,7 +1700,7 @@ msgstr "Доп. клав. -" #: src/client/keycode.cpp msgid "Numpad ." -msgstr "Цифр. клав. '.'" +msgstr "Цифр. кл. ." #: src/client/keycode.cpp msgid "Numpad /" @@ -1901,9 +1891,8 @@ msgid "Proceed" msgstr "Продолжить" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "\"Aux1\" = climb down" -msgstr "Использовать = спуск" +msgstr "\"Aux1\" = спуск" #: src/gui/guiKeyChangeMenu.cpp msgid "Autoforward" @@ -1915,7 +1904,7 @@ msgstr "Автопрыжок" #: src/gui/guiKeyChangeMenu.cpp msgid "Aux1" -msgstr "" +msgstr "Aux1" #: src/gui/guiKeyChangeMenu.cpp msgid "Backward" @@ -1923,11 +1912,11 @@ msgstr "Назад" #: src/gui/guiKeyChangeMenu.cpp msgid "Block bounds" -msgstr "" +msgstr "Границы блока" #: src/gui/guiKeyChangeMenu.cpp msgid "Change camera" -msgstr "Изменить камеру" +msgstr "Сменить ракурс" #: src/gui/guiKeyChangeMenu.cpp msgid "Chat" @@ -2021,7 +2010,7 @@ msgstr "Вкл/выкл игровой интерфейс" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle chat log" -msgstr "Вкл/выкл историю чата" +msgstr "Включить лог чата" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle fast" @@ -2049,7 +2038,7 @@ msgstr "По наклону взгляда" #: src/gui/guiKeyChangeMenu.cpp msgid "press key" -msgstr "нажмите ..." +msgstr "нажмите клавишу" #: src/gui/guiPasswordChange.cpp msgid "Change" @@ -2102,14 +2091,13 @@ msgstr "" "касания." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "(Android) Use virtual joystick to trigger \"Aux1\" button.\n" "If enabled, virtual joystick will also tap \"Aux1\" button when out of main " "circle." msgstr "" -"(Android) Использовать виртуальный джойстик для активации кнопки \"aux\".\n" -"Если включено, виртуальный джойстик также будет нажимать кнопку \"aux\", " +"(Android) Использовать виртуальный джойстик для активации кнопки \"Aux1\".\n" +"Если включено, виртуальный джойстик также будет нажимать кнопку \"Aux1\", " "когда будет находиться за пределами основного колеса." #: src/settings_translation_file.cpp @@ -2250,14 +2238,13 @@ msgid "" msgstr "" "Поддержка 3D.\n" "Сейчас поддерживаются:\n" -"- none: 3D-режим отключён.\n" -"- anaglyph: голубой/пурпурный цвет в 3D.\n" -"- interlaced: чётные/нечётные линии отображают два разных кадра для " -"экранов, поддерживающих поляризацию.\n" -"- topbottom: Разделение экрана верх/низ.\n" -"- sidebyside: Разделение экрана право/лево.\n" +"- none: Нет.\n" +"- anaglyph: Анаглифные очки.\n" +"- interlaced: Поляризационные 3d-очки.\n" +"- topbottom: Разделение экрана по горизонтали.\n" +"- sidebyside: Разделение экрана по диагонали.\n" "- crossview: 3D на основе автостереограммы.\n" -"- pageflip: 3D на основе четырёхкратной буферизации.\n" +"- pageflip: Четырёхкратная буферизация.\n" "Примечание: в режиме interlaced шейдеры должны быть включены." #: src/settings_translation_file.cpp @@ -2282,7 +2269,7 @@ msgstr "ABM интервал" #: src/settings_translation_file.cpp msgid "ABM time budget" -msgstr "Бюджет времени ABM" +msgstr "Лимит времени ABM" #: src/settings_translation_file.cpp msgid "Absolute limit of queued blocks to emerge" @@ -2363,11 +2350,11 @@ msgid "" "This only has significant effect on daylight and artificial\n" "light, it has very little effect on natural night light." msgstr "" -"Изменяет кривую света, применяя к ней \"гамма-коррекцию\".\n" -"Более высокие значения делают средний и слабый свет ярче.\n" -"Значение \"1.0\" оставляет кривую света без изменений.\n" -"Значительный эффект виден только на дневном и искусственном\n" -"освещении, почти не влияет на естественный ночной свет." +"Изменяет кривую света, применяя к ней гамма-коррекцию.\n" +"Более высокие значения делают средние и низкие уровни света более яркими.\n" +"Значение 1.0 оставляет кривую света без изменений.\n" +"Это значительно влияет только на дневной и искусственный\n" +"свет, но имеет очень слабый эффект на естественный ночной свет." #: src/settings_translation_file.cpp msgid "Always fly and fast" @@ -2397,7 +2384,7 @@ msgstr "О сервере" #: src/settings_translation_file.cpp msgid "Announce to this serverlist." -msgstr "Анонсировать на этот список серверов." +msgstr "Оповещение в этот сервер-лист." #: src/settings_translation_file.cpp msgid "Append item name" @@ -2471,14 +2458,12 @@ msgid "Autoscaling mode" msgstr "Режим автоматического масштабирования" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key" -msgstr "Кнопка прыжка" +msgstr "Клавиша Aux1" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key for climbing/descending" -msgstr "Клавиша «Использовать» для спуска" +msgstr "Клавиша Aux1 для подъема/спуска" #: src/settings_translation_file.cpp msgid "Backward key" @@ -2631,9 +2616,8 @@ msgstr "" "где 0.0 — минимальный уровень света, а 1.0 — максимальный." #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat command time message threshold" -msgstr "Максимальное количество сообщений в чате (для отключения)" +msgstr "Порог cообщения команды чата" #: src/settings_translation_file.cpp msgid "Chat font size" @@ -2732,9 +2716,8 @@ msgid "Colored fog" msgstr "Цветной туман" #: src/settings_translation_file.cpp -#, fuzzy msgid "Colored shadows" -msgstr "Цветной туман" +msgstr "Цветные тени" #: src/settings_translation_file.cpp msgid "" @@ -2769,8 +2752,8 @@ msgid "" "functions even when mod security is on (via request_insecure_environment())." msgstr "" "Разделённый запятыми список доверенных модов, которым разрешён\n" -"доступ к небезопасным функциям, даже когда включена защита модов\n" -"(через request_insecure_environment())." +"доступ к небезопасным функциям, даже когда включена защита модов (через " +"request_insecure_environment())." #: src/settings_translation_file.cpp msgid "Command key" @@ -2964,6 +2947,9 @@ msgid "" "This simulates the soft shadows effect by applying a PCF or poisson disk\n" "but also uses more resources." msgstr "" +"Определите качество фильтрации теней\n" +"Это имитирует эффект мягких теней, применяя PCF или пуассоновский диск\n" +"но также использует больше ресурсов." #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." @@ -3130,7 +3116,7 @@ msgid "" "Required for IPv6 connections to work at all." msgstr "" "Включить поддержку IPv6 (для клиента и сервера).\n" -"Необходимо для работы IPv6-соединений." +"Требуется для того, чтобы вообще соединяться по IPv6." #: src/settings_translation_file.cpp msgid "" @@ -3145,6 +3131,8 @@ msgid "" "Enable colored shadows. \n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" +"Включить цветные тени.\n" +"На истинно полупрозрачных узлах отбрасываются цветные тени. Это дорого." #: src/settings_translation_file.cpp msgid "Enable console window" @@ -3176,6 +3164,9 @@ msgid "" "On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " "filtering." msgstr "" +"Включить фильтрацию диска Пуассона.\n" +"По истине использует диск Пуассона для создания \"мягких теней\". Иначе " +"используется фильтрация PCF." #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." @@ -3351,12 +3342,11 @@ msgid "Fast movement" msgstr "Быстрое перемещение" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Fast movement (via the \"Aux1\" key).\n" "This requires the \"fast\" privilege on the server." msgstr "" -"Быстрое перемещение (с помощью клавиши «Использовать»).\n" +"Быстрое перемещение (с помощью клавиши \"Aux1\").\n" "Это требует привилегию 'fast' на сервере." #: src/settings_translation_file.cpp @@ -3389,17 +3379,19 @@ msgid "Filmic tone mapping" msgstr "Кинематографическое тональное отображение" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Filtered textures can blend RGB values with fully-transparent neighbors,\n" "which PNG optimizers usually discard, often resulting in dark or\n" "light edges to transparent textures. Apply a filter to clean that up\n" "at texture load time. This is automatically enabled if mipmapping is enabled." msgstr "" -"Отфильтрованные текстуры могут смешивать значения RGB с полностью\n" -"прозрачными соседними, которые оптимизаторы PNG обычно отбрасывают.\n" -"Иногда это может привести к тёмным или светлым краям полупрозрачных\n" -"текстур. Примените этот фильтр, чтобы исправить текстуру во время загрузки." +"Фильтрованные текстуры могут смешивать значения RGB с полностью прозрачными " +"соседними,\n" +"которые оптимизаторы PNG обычно отбрасывают, что часто приводит к темным " +"или\n" +"светлым краям прозрачных текстур. Примените фильтр для очистки\n" +"во время загрузки текстуры. Это автоматически включается, если включен " +"mipmapping." #: src/settings_translation_file.cpp msgid "Filtering" @@ -3664,7 +3656,7 @@ msgstr "Уровень земли" #: src/settings_translation_file.cpp msgid "Ground noise" -msgstr "Шум грунта" +msgstr "Шум земли" #: src/settings_translation_file.cpp msgid "HTTP mods" @@ -3714,10 +3706,11 @@ msgid "Heat noise" msgstr "Шум теплоты" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Height component of the initial window size. Ignored in fullscreen mode." -msgstr "Высота окна при запуске." +msgstr "" +"Компонент высоты начального размера окна. Игнорируется в полноэкранном " +"режиме." #: src/settings_translation_file.cpp msgid "Height noise" @@ -3789,135 +3782,135 @@ msgstr "Предыдущий предмет на горячей панели" #: src/settings_translation_file.cpp msgid "Hotbar slot 1 key" -msgstr "Предмет 1 на горячей панели" +msgstr "Быстрая кнопка 1" #: src/settings_translation_file.cpp msgid "Hotbar slot 10 key" -msgstr "Предмет 10 на горячей панели" +msgstr "Быстрая кнопка 10" #: src/settings_translation_file.cpp msgid "Hotbar slot 11 key" -msgstr "Предмет 11 на горячей панели" +msgstr "Быстрая кнопка 11" #: src/settings_translation_file.cpp msgid "Hotbar slot 12 key" -msgstr "Предмет 12 на горячей панели" +msgstr "Быстрая кнопка 12" #: src/settings_translation_file.cpp msgid "Hotbar slot 13 key" -msgstr "Предмет 13 на горячей панели" +msgstr "Быстрая кнопка 13" #: src/settings_translation_file.cpp msgid "Hotbar slot 14 key" -msgstr "Предмет 14 на горячей панели" +msgstr "Быстрая кнопка 14" #: src/settings_translation_file.cpp msgid "Hotbar slot 15 key" -msgstr "Предмет 15 на горячей панели" +msgstr "Быстрая кнопка 15" #: src/settings_translation_file.cpp msgid "Hotbar slot 16 key" -msgstr "Предмет 16 на горячей панели" +msgstr "Быстрая кнопка 16" #: src/settings_translation_file.cpp msgid "Hotbar slot 17 key" -msgstr "Предмет 17 на горячей панели" +msgstr "Быстрая кнопка 17" #: src/settings_translation_file.cpp msgid "Hotbar slot 18 key" -msgstr "Предмет 18 на горячей панели" +msgstr "Быстрая кнопка 18" #: src/settings_translation_file.cpp msgid "Hotbar slot 19 key" -msgstr "Предмет 19 на горячей панели" +msgstr "Быстрая кнопка 19" #: src/settings_translation_file.cpp msgid "Hotbar slot 2 key" -msgstr "Предмет 2 на горячей панели" +msgstr "Быстрая кнопка 2" #: src/settings_translation_file.cpp msgid "Hotbar slot 20 key" -msgstr "Предмет 20 на горячей панели" +msgstr "Быстрая кнопка 20" #: src/settings_translation_file.cpp msgid "Hotbar slot 21 key" -msgstr "Предмет 21 на горячей панели" +msgstr "Быстрая кнопка 21" #: src/settings_translation_file.cpp msgid "Hotbar slot 22 key" -msgstr "Предмет 22 на горячей панели" +msgstr "Быстрая кнопка 22" #: src/settings_translation_file.cpp msgid "Hotbar slot 23 key" -msgstr "Предмет 23 на горячей панели" +msgstr "Быстрая кнопка 23" #: src/settings_translation_file.cpp msgid "Hotbar slot 24 key" -msgstr "Предмет 24 на горячей панели" +msgstr "Быстрая кнопка 24" #: src/settings_translation_file.cpp msgid "Hotbar slot 25 key" -msgstr "Предмет 25 на горячей панели" +msgstr "Быстрая кнопка 25" #: src/settings_translation_file.cpp msgid "Hotbar slot 26 key" -msgstr "Предмет 26 на горячей панели" +msgstr "Быстрая кнопка 26" #: src/settings_translation_file.cpp msgid "Hotbar slot 27 key" -msgstr "Предмет 27 на горячей панели" +msgstr "Быстрая кнопка 27" #: src/settings_translation_file.cpp msgid "Hotbar slot 28 key" -msgstr "Предмет 28 на горячей панели" +msgstr "Быстрая кнопка 28" #: src/settings_translation_file.cpp msgid "Hotbar slot 29 key" -msgstr "Предмет 29 на горячей панели" +msgstr "Быстрая кнопка 29" #: src/settings_translation_file.cpp msgid "Hotbar slot 3 key" -msgstr "Предмет 3 на горячей панели" +msgstr "Быстрая кнопка 3" #: src/settings_translation_file.cpp msgid "Hotbar slot 30 key" -msgstr "Предмет 30 на горячей панели" +msgstr "Быстрая кнопка 30" #: src/settings_translation_file.cpp msgid "Hotbar slot 31 key" -msgstr "Предмет 31 на горячей панели" +msgstr "Быстрая кнопка 31" #: src/settings_translation_file.cpp msgid "Hotbar slot 32 key" -msgstr "Предмет 32 на горячей панели" +msgstr "Быстрая кнопка 32" #: src/settings_translation_file.cpp msgid "Hotbar slot 4 key" -msgstr "Предмет 4 на горячей панели" +msgstr "Быстрая кнопка 4" #: src/settings_translation_file.cpp msgid "Hotbar slot 5 key" -msgstr "Предмет 5 на горячей панели" +msgstr "Быстрая кнопка 5" #: src/settings_translation_file.cpp msgid "Hotbar slot 6 key" -msgstr "Предмет 6 на горячей панели" +msgstr "Быстрая кнопка 6" #: src/settings_translation_file.cpp msgid "Hotbar slot 7 key" -msgstr "Предмет 7 на горячей панели" +msgstr "Быстрая кнопка 7" #: src/settings_translation_file.cpp msgid "Hotbar slot 8 key" -msgstr "Предмет 8 на горячей панели" +msgstr "Быстрая кнопка 8" #: src/settings_translation_file.cpp msgid "Hotbar slot 9 key" -msgstr "Предмет 9 на горячей панели" +msgstr "Быстрая кнопка 9" #: src/settings_translation_file.cpp msgid "How deep to make rivers." -msgstr "Как глубоко делать реки." +msgstr "Насколько глубоко делать реки." #: src/settings_translation_file.cpp msgid "" @@ -3939,7 +3932,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "How wide to make rivers." -msgstr "Насколько широкими делать реки." +msgstr "Насколько широко делать реки." #: src/settings_translation_file.cpp msgid "Humidity blend noise" @@ -3970,13 +3963,13 @@ msgstr "" "чтобы не тратить мощность процессора впустую." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n" "enabled." msgstr "" -"Если отключено, кнопка «Использовать» активирует быстрый полёт, если " -"одновременно включены режим быстрого перемещения и режим полёта." +"Если отключено, кнопка \"Aux1\" используется для быстрого полета, если режим " +"полёта и быстрый режим\n" +"включены." #: src/settings_translation_file.cpp msgid "" @@ -4002,14 +3995,14 @@ msgstr "" "Требует наличие привилегии «noclip» на сервере." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down " "and\n" "descending." msgstr "" -"Если включено, то для спуска (в воде или при полёте) будет задействована " -"клавиша «Использовать», а не «Красться»." +"Если включено, клавиша \"Aux1\" вместо клавиши \"Sneak\" используется для " +"подъема вниз и\n" +"спуска." #: src/settings_translation_file.cpp msgid "" @@ -4067,6 +4060,8 @@ msgid "" "If the execution of a chat command takes longer than this specified time in\n" "seconds, add the time information to the chat command message" msgstr "" +"Если выполнение команды чата занимает больше указанного времени в\n" +"секундах, добавьте информацию о времени в сообщение команды чата" #: src/settings_translation_file.cpp msgid "" @@ -5326,9 +5321,8 @@ msgid "Map save interval" msgstr "Интервал сохранения карты" #: src/settings_translation_file.cpp -#, fuzzy msgid "Map update time" -msgstr "Интервал обновления жидкостей" +msgstr "Время обновления карты" #: src/settings_translation_file.cpp msgid "Mapblock limit" @@ -5441,7 +5435,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Maximum distance to render shadows." -msgstr "" +msgstr "Максимальное расстояние для отрисовки теней." #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" @@ -5532,7 +5526,7 @@ msgid "" msgstr "" "Максимальное количество пакетов, отправляемых за шаг. Если у вас медленное " "подключение,\n" -"попробуйте уменьшить его, но не устанавливайте ниже значения клиента, " +"попробуйте уменьшить его, но не устанавливайте ниже значения клиента,\n" "умноженного на два." #: src/settings_translation_file.cpp @@ -5576,19 +5570,20 @@ msgstr "" "0 для отключения очереди и -1 для неограниченного размера." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum time a file download (e.g. a mod download) may take, stated in " "milliseconds." msgstr "" -"Максимум времени (в миллисекундах), которое может занять загрузка (например, " -"мода)." +"Максимальное время загрузки файла (например, загрузки мода), указанное в " +"миллисекундах." #: src/settings_translation_file.cpp msgid "" "Maximum time an interactive request (e.g. server list fetch) may take, " "stated in milliseconds." msgstr "" +"Максимальное время, которое может занять интерактивный запрос (например, " +"получение списка серверов), указывается в миллисекундах." #: src/settings_translation_file.cpp msgid "Maximum users" @@ -5826,7 +5821,7 @@ msgstr "Непрозрачные жидкости" #: src/settings_translation_file.cpp msgid "" "Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." -msgstr "Непрозрачность (альфа) тени позади шрифта по умолчанию, между 0 и 255." +msgstr "Прозрачность тени сзади стандартного шрифта, между 0 и 255." #: src/settings_translation_file.cpp msgid "" @@ -5871,7 +5866,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Path to texture directory. All textures are first searched from here." msgstr "" -"Путь до каталога с текстурами. Все текстуры в первую очередь берутся от сюда." +"Путь к директории с текстурами. Все текстуры в первую очередь берутся отсюда." #: src/settings_translation_file.cpp msgid "" @@ -5925,7 +5920,7 @@ msgstr "Режим движения вниз/вверх по направлен #: src/settings_translation_file.cpp msgid "Place key" -msgstr "Клавиша «Разместить»" +msgstr "Клавиша положить" #: src/settings_translation_file.cpp msgid "Place repetition interval" @@ -5952,9 +5947,8 @@ msgid "Player versus player" msgstr "Режим «Игрок против игрока» (PvP)" #: src/settings_translation_file.cpp -#, fuzzy msgid "Poisson filtering" -msgstr "Билинейная фильтрация" +msgstr "Пуассоновская фильтрация" #: src/settings_translation_file.cpp msgid "" @@ -6051,7 +6045,7 @@ msgstr "Недавние сообщения чата" #: src/settings_translation_file.cpp msgid "Regular font path" -msgstr "Стандартный путь шрифта" +msgstr "Путь к обычному шрифту" #: src/settings_translation_file.cpp msgid "Remote media" @@ -6192,9 +6186,9 @@ msgstr "" "Масштабировать интерфейс, используя заданное пользователем значение.\n" "Использовать метод ближайшего соседа и антиалиасинг, чтобы масштабировать " "интерфейс.\n" -"Это сгладит некоторые острые углы и смешает пиксели при уменьшении масштаба " -"за счёт\n" -"размывания пикселей на гранях при масштабировании на нецелые размеры." +"Это сгладит некоторые острые углы и смешает\n" +"пиксели при уменьшении масштаба за счёт размывания\n" +"пикселей на гранях при масштабировании на нецелые размеры." #: src/settings_translation_file.cpp msgid "Screen height" @@ -6357,6 +6351,9 @@ msgid "" "Set the shadow strength.\n" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" +"Установите силу тени.\n" +"Меньшее значение означает более светлые тени, большее значение означает " +"более тёмные тени." #: src/settings_translation_file.cpp msgid "" @@ -6365,6 +6362,10 @@ msgid "" "resources.\n" "Minimun value 0.001 seconds max value 0.2 seconds" msgstr "" +"Установить время обновления теней.\n" +"Меньшее значение означает, что тени и карта обновляются быстрее, но это " +"потребляет больше ресурсов.\n" +"Минимальное значение 0,001 секунды, максимальное 0,2 секунды" #: src/settings_translation_file.cpp msgid "" @@ -6372,6 +6373,9 @@ msgid "" "Lower values mean sharper shadows bigger values softer.\n" "Minimun value 1.0 and max value 10.0" msgstr "" +"Установить размер радиуса мягкой тени.\n" +"Меньшие значения означают более резкие тени, большие значения более мягкие.\n" +"Минимальное значение 1,0 и максимальное 10,0" #: src/settings_translation_file.cpp msgid "" @@ -6379,9 +6383,11 @@ msgid "" "Value of 0 means no tilt / vertical orbit.\n" "Minimun value 0.0 and max value 60.0" msgstr "" +"Установка наклона орбиты Солнца/Луны в градусах.\n" +"Значение 0 означает отсутствие наклона / вертикальную орбиту.\n" +"Минимальное значение 0.0 и максимальное значение 60.0" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable Shadow Mapping.\n" "Requires shaders to be enabled." @@ -6419,6 +6425,9 @@ msgid "" "On false, 16 bits texture will be used.\n" "This can cause much more artifacts in the shadow." msgstr "" +"Устанавливает качество текстуры тени в 32 бита.\n" +"При значении false будет использоваться 16-битная текстура.\n" +"Это может вызвать гораздо больше артефактов в тени." #: src/settings_translation_file.cpp msgid "Shader path" @@ -6432,26 +6441,25 @@ msgid "" "This only works with the OpenGL video backend." msgstr "" "Шейдеры позволяют использовать дополнительные визуальные эффекты и могут " -"увеличить производительность на некоторых видеокартах.\n" +"увеличить\n" +"производительность на некоторых видеокартах.\n" "Работают только с видео-бэкендом OpenGL." #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow filter quality" -msgstr "Качество скриншота" +msgstr "Качество теневого фильтра" #: src/settings_translation_file.cpp msgid "Shadow map max distance in nodes to render shadows" -msgstr "" +msgstr "Максимальное расстояние карты теней в узлах для рендеринга теней" #: src/settings_translation_file.cpp msgid "Shadow map texture in 32 bits" -msgstr "" +msgstr "Текстура карты теней в 32 битах" #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow map texture size" -msgstr "Минимальный размер текстуры" +msgstr "Размер текстуры карты теней" #: src/settings_translation_file.cpp msgid "" @@ -6463,7 +6471,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Shadow strength" -msgstr "" +msgstr "Сила тени" #: src/settings_translation_file.cpp msgid "Shape of the minimap. Enabled = round, disabled = square." @@ -6524,7 +6532,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" -msgstr "" +msgstr "Наклон орбиты небесного тела" #: src/settings_translation_file.cpp msgid "Slice w" @@ -6585,9 +6593,8 @@ msgid "Sneaking speed, in nodes per second." msgstr "Скорость ходьбы украдкой в нодах в секунду." #: src/settings_translation_file.cpp -#, fuzzy msgid "Soft shadow radius" -msgstr "Прозрачность тени шрифта" +msgstr "Радиус мягкой тени" #: src/settings_translation_file.cpp msgid "Sound" @@ -6755,6 +6762,9 @@ msgid "" "This must be a power of two.\n" "Bigger numbers create better shadowsbut it is also more expensive." msgstr "" +"Размер текстуры для рендеринга карты теней.\n" +"Это должно быть число, кратное двум.\n" +"Большие числа создают более качественные тени, но они и более дорогие." #: src/settings_translation_file.cpp msgid "" @@ -6857,7 +6867,6 @@ msgstr "" "Это должно быть настроено вместе с active_object_send_range_blocks." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end.\n" "A restart is required after changing this.\n" @@ -6866,12 +6875,13 @@ msgid "" "On other platforms, OpenGL is recommended.\n" "Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)" msgstr "" -"Программный интерфейс визуализации для Irrlicht.\n" -"После изменения этого параметра потребуется перезапуск.\n" -"Примечание: Если не уверены, используйте OGLES1 для Android, иначе\n" -"приложение может не запуститься. На других платформах рекомендуется\n" -"OpenGL. Шейдеры поддерживаются OpenGL (только на десктопах) и OGLES2 " -"(экспериментально)" +"Бэкэнд рендеринга.\n" +"После изменения этого параметра требуется перезагрузка.\n" +"Примечание: На Android, если вы не уверены, используйте OGLES1! В противном " +"случае приложение может не запуститься.\n" +"На других платформах рекомендуется использовать OpenGL.\n" +"Шейдеры поддерживаются OpenGL (только для настольных компьютеров) и OGLES2 " +"(экспериментальный)" #: src/settings_translation_file.cpp msgid "" @@ -6926,7 +6936,7 @@ msgid "" "the place button." msgstr "" "Задержка перед повторным размещением блока в секундах\n" -"при удержании клавиши размещения" +"при удержании клавиши размещения." #: src/settings_translation_file.cpp msgid "The type of joystick" @@ -7083,9 +7093,9 @@ msgid "" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" -"Использовать MIP-текстурирование для масштабирования текстур.\n" -"Может немного увеличить производительность, особенно при\n" -"использовании пакета текстур высокого разрешения.\n" +"Использовать MIP-текстурирование для масштабирования текстур. Может немного " +"увеличить производительность,\n" +"особенно при использовании пакета текстур высокого разрешения.\n" "Гамма-коррекция при уменьшении масштаба не поддерживается." #: src/settings_translation_file.cpp @@ -7209,9 +7219,8 @@ msgid "Viewing range" msgstr "Дистанция отрисовки" #: src/settings_translation_file.cpp -#, fuzzy msgid "Virtual joystick triggers Aux1 button" -msgstr "Дополнительная кнопка триггеров виртуального джойстика" +msgstr "Виртуальный джойстик нажимает кнопку Aux1" #: src/settings_translation_file.cpp msgid "Volume" @@ -7223,7 +7232,7 @@ msgid "" "Requires the sound system to be enabled." msgstr "" "Громкость всех звуков.\n" -"Требуется включить звуковую систему." +"Требует включенной звуковой системы." #: src/settings_translation_file.cpp msgid "" @@ -7283,7 +7292,7 @@ msgstr "Скорость волн волнистых жидкостей" #: src/settings_translation_file.cpp msgid "Waving liquids wavelength" -msgstr "Длина волн волнистых жидкостей" +msgstr "Длина волн на воде" #: src/settings_translation_file.cpp msgid "Waving plants" @@ -7314,7 +7323,6 @@ msgstr "" "правильно поддерживают загрузку текстур с аппаратного обеспечения." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" "can be blurred, so automatically upscale them with nearest-neighbor\n" @@ -7325,16 +7333,20 @@ msgid "" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." msgstr "" -"При использовании билинейного, трилинейного или анизотропного фильтра\n" -"текстуры с низким разрешением могут быть размыты, поэтому происходит\n" -"автоматическое масштабирование их с интерполяцией по ближайшим соседям,\n" -"чтобы сохранить чёткие пиксели. Этот параметр определяет минимальный\n" -"размер для увеличенных текстур. При высоких значениях отображение более\n" -"чёткое, но требует больше памяти. Рекомендуется значение 2. Установка этого\n" -"значения выше 1 может не иметь видимого эффекта, если не включена \n" -"билинейная, трилинейная или анизотропная фильтрация.\n" -"Также используется как размер базовой текстуры ноды для мирового\n" -"автомасштабирования текстур." +"При использовании билинейных/трилинейных/анизотропных фильтров текстуры с " +"низким разрешением\n" +"могут быть размыты, поэтому автоматически повышайте их масштаб с помощью " +"ближайших соседей\n" +"интерполяцией, чтобы сохранить чёткие пиксели. Здесь задается минимальный " +"размер текстуры\n" +"для увеличенных текстур; более высокие значения выглядят более чёткими, но " +"требуют больше\n" +"памяти. Рекомендуется использовать значения, кратные 2. Эта настройка " +"применяется ТОЛЬКО в том случае, если\n" +"включена билинейная/трилинейная/анизотропная фильтрация.\n" +"Это значение также используется в качестве базового размера текстуры узла " +"для автомасштабирования текстур с выравниванием по миру\n" +"автомасштабирования текстуры." #: src/settings_translation_file.cpp msgid "" @@ -7391,10 +7403,11 @@ msgid "" "In-game, you can toggle the mute state with the mute key or by using the\n" "pause menu." msgstr "" -"Отключить ли звуки. Вы можете включить звуки в любое время, если \n" -"звуковая система не отключена (enable_sound=false). \n" -"В игре, вы можете отключить их с помощью клавиши mute\n" -"или вызывая меню паузы." +"Нужно ли выключить звуки? Вы можете включить звуки в любое время, если\n" +"звуковая система не отключена (enable_sound=false).\n" +"Внутри игры, вы можете включить режим отключения звуков, нажав на клавишу " +"отключения звуков или используя\n" +"меню паузы." #: src/settings_translation_file.cpp msgid "" @@ -7402,9 +7415,10 @@ msgid "" msgstr "Показывать данные отладки (аналогично нажатию F5)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Width component of the initial window size. Ignored in fullscreen mode." -msgstr "Ширина компонента начального размера окна." +msgstr "" +"Компонент ширины начального размера окна. Игнорируется в полноэкранном " +"режиме." #: src/settings_translation_file.cpp msgid "Width of the selection box lines around nodes." @@ -7441,13 +7455,14 @@ msgid "" "See also texture_min_size.\n" "Warning: This option is EXPERIMENTAL!" msgstr "" -"Выровненные по миру текстуры можно масштабировать так, чтобы они\n" -"охватывали несколько нод. Но сервер может не отправить нужный\n" -"масштаб, особенно если вы используете специально разработанный\n" -"пакет текстур; с этим параметром клиент пытается определить масштаб\n" -"автоматически на основании размера текстуры.\n" -"Смотрите также texture_min_size.\n" -"Внимание: Этот параметр ЭКСПЕРИМЕНТАЛЬНЫЙ!" +"Текстуры с выравниванием по миру могут быть масштабированы так, чтобы " +"охватить несколько узлов. Однако,\n" +"сервер может не передать нужный масштаб, особенно если вы используете\n" +"специально разработанный пакет текстур; при использовании этой опции клиент " +"пытается\n" +"определить масштаб автоматически, основываясь на размере текстуры.\n" +"См. также texture_min_size.\n" +"Предупреждение: Эта опция является ЭКСПЕРИМЕНТАЛЬНОЙ!" #: src/settings_translation_file.cpp msgid "World-aligned textures mode" @@ -7539,9 +7554,8 @@ msgid "cURL file download timeout" msgstr "Тайм-аут загрузки файла с помощью cURL" #: src/settings_translation_file.cpp -#, fuzzy msgid "cURL interactive timeout" -msgstr "cURL тайм-аут" +msgstr "Интерактивный таймаут cURL" #: src/settings_translation_file.cpp msgid "cURL parallel limit" From 0ce549f49ec607cffc5fcc50063c7ddb36c897b1 Mon Sep 17 00:00:00 2001 From: Liet Kynes Date: Tue, 6 Jul 2021 08:26:02 +0000 Subject: [PATCH 080/412] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 55.4% (774 of 1396 strings) --- po/nb/minetest.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/po/nb/minetest.po b/po/nb/minetest.po index 2497e570c..bfa16f8d1 100644 --- a/po/nb/minetest.po +++ b/po/nb/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Norwegian Bokmål (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-05-09 08:57+0000\n" -"Last-Translator: Allan Nordhøy \n" +"PO-Revision-Date: 2021-07-06 08:26+0000\n" +"Last-Translator: Liet Kynes \n" "Language-Team: Norwegian Bokmål \n" "Language: nb\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.8-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -1356,7 +1356,7 @@ msgstr "Viser feilsøkingsinfo" #: src/client/game.cpp msgid "Debug info, profiler graph, and wireframe hidden" -msgstr "" +msgstr "Skjuler problemsøkerinfo, profilerinsgraf og 3D-gitter" #: src/client/game.cpp msgid "" From a8745948c4655930c3e85a7ab6a5404dd9a9bcc8 Mon Sep 17 00:00:00 2001 From: Petter Reinholdtsen Date: Tue, 6 Jul 2021 08:24:07 +0000 Subject: [PATCH 081/412] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 55.4% (774 of 1396 strings) --- po/nb/minetest.po | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/po/nb/minetest.po b/po/nb/minetest.po index bfa16f8d1..6eadaf0af 100644 --- a/po/nb/minetest.po +++ b/po/nb/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Norwegian Bokmål (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-07-06 08:26+0000\n" -"Last-Translator: Liet Kynes \n" +"PO-Revision-Date: 2021-07-07 09:35+0000\n" +"Last-Translator: Petter Reinholdtsen \n" "Language-Team: Norwegian Bokmål \n" "Language: nb\n" @@ -19,9 +19,8 @@ msgid "Clear the out chat queue" msgstr "" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Empty command." -msgstr "Sludrekommandoer" +msgstr "Tom kommando." #: builtin/client/chatcommands.lua #, fuzzy @@ -35,7 +34,7 @@ msgstr "Lokal kommando" #: builtin/client/chatcommands.lua msgid "Issued command: " -msgstr "" +msgstr "Avgitt kommando: " #: builtin/client/chatcommands.lua #, fuzzy @@ -53,7 +52,7 @@ msgstr "" #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "Denne kommandoen er utkoblet av tjeneren." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -64,9 +63,8 @@ msgid "You died" msgstr "Du døde" #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." -msgstr "Du døde" +msgstr "Du døde." #: builtin/common/chatcommands.lua #, fuzzy @@ -80,7 +78,7 @@ msgstr "Lokal kommando" #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "Ikke tilgjengelig kommando: " #: builtin/common/chatcommands.lua msgid "Get help for commands" @@ -1114,7 +1112,7 @@ msgstr "Flytlandene (eksperimentelt)" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" -msgstr "Skyggelegging (ikke tilgjenglig)" +msgstr "Skyggelegging (ikke tilgjengelig)" #: builtin/mainmenu/tab_settings.lua msgid "Simple Leaves" @@ -1130,7 +1128,7 @@ msgstr "Teksturering:" #: builtin/mainmenu/tab_settings.lua msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "For å skru på skyggeleging, må man bruke OpenGL-driveren." +msgstr "OpenGL-driveren må brukes for å aktivere skyggelegging." #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" @@ -1348,7 +1346,7 @@ msgstr "Oppretter tjener…" #: src/client/game.cpp msgid "Debug info and profiler graph hidden" -msgstr "Skjuler feilsøkingsinfo og profilgraf" +msgstr "Skjuler feilsøkingsinfo og profileringsgraf" #: src/client/game.cpp msgid "Debug info shown" @@ -1356,7 +1354,7 @@ msgstr "Viser feilsøkingsinfo" #: src/client/game.cpp msgid "Debug info, profiler graph, and wireframe hidden" -msgstr "Skjuler problemsøkerinfo, profilerinsgraf og 3D-gitter" +msgstr "Skjuler feilsøkingsinfo, profileringsgraf og 3D-gitter" #: src/client/game.cpp msgid "" @@ -2863,11 +2861,12 @@ msgid "Crosshair alpha" msgstr "Trådkors-alpha" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" "Also controls the object crosshair color" -msgstr "Trådkors-alpha (ugjennomsiktighet, mellom 0 og 255)." +msgstr "" +"Trådkors-alpha (ugjennomsiktighet, mellom 0 og 255).\n" +"Kontrollerer også objektets trådkorsfarge" #: src/settings_translation_file.cpp msgid "Crosshair color" @@ -3121,9 +3120,8 @@ msgid "Enable console window" msgstr "Skru på konsollvindu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable creative mode for all players" -msgstr "Skru på kreativt modusfor nye opprettede kart." +msgstr "Aktiver kreativt modus for alle spillere" #: src/settings_translation_file.cpp msgid "Enable joysticks" @@ -3253,9 +3251,8 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "FPS when unfocused or paused" -msgstr "Maks FPS når spillet står i pause." +msgstr "Maks FPS når spillet ikke har fokus eller er pauset" #: src/settings_translation_file.cpp msgid "FSAA" From 756261bafe7f5620bd4b7ffe79c1d0b6e2796e80 Mon Sep 17 00:00:00 2001 From: Liet Kynes Date: Tue, 6 Jul 2021 08:27:40 +0000 Subject: [PATCH 082/412] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 56.0% (783 of 1396 strings) --- po/nb/minetest.po | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/po/nb/minetest.po b/po/nb/minetest.po index 6eadaf0af..fc0c0ed5c 100644 --- a/po/nb/minetest.po +++ b/po/nb/minetest.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" "PO-Revision-Date: 2021-07-07 09:35+0000\n" -"Last-Translator: Petter Reinholdtsen \n" +"Last-Translator: Liet Kynes \n" "Language-Team: Norwegian Bokmål \n" "Language: nb\n" @@ -5913,6 +5913,25 @@ msgid "" "17 = 4D \"Mandelbulb\" Mandelbrot set.\n" "18 = 4D \"Mandelbulb\" Julia set." msgstr "" +"Velger en av 18 fraktaltyper.\n" +"1 = 4D «Rund» Mandelbrot-mengde.\n" +"2 = 4D «Rund» Julia-mengde.\n" +"3 = 4D «Firkantet» Mandelbrot-mengde.\n" +"4 = 4D «Firkantet» Julia-mengde.\n" +"5 = 4D «Mandy Cousin» Mandelbrot-mengde.\n" +"6 = 4D «Mandy Cousin» Julia-mengde.\n" +"7 = 4D «Variasjon» Mandelbrot-mengde.\n" +"8 = 4D «Variasjon» Julia-mengde.\n" +"9 = 3D «Mandelbrot/Mandelbar» Mandelbrot-mengde.\n" +"10 = 3D «Mandelbrot/Mandelbar» Julia-mengde.\n" +"11 = 3D «Juletre» Mandelbrot-mengde.\n" +"12 = 3D «Juletre» Julia-mengde.\n" +"13 = 3D «Mandelbulb» Mandelbrot-mengde.\n" +"14 = 3D «Mandelbulb» Julia-mengde.\n" +"15 = 3D «Cosine Mandelbulb» Mandelbrot-mengde.\n" +"16 = 3D «Cosine Mandelbulb» Julia-mengde.\n" +"17 = 4D «Mandelbulb» Mandelbrot-mengde.\n" +"18 = 4D «Mandelbulb» Julia-mengde." #: src/settings_translation_file.cpp msgid "Server / Singleplayer" From 82f8e24d835008488316adeaa909f97aaf584a70 Mon Sep 17 00:00:00 2001 From: Lin Happy 666 Date: Fri, 9 Jul 2021 08:45:12 +0000 Subject: [PATCH 083/412] Translated using Weblate (Chinese (Simplified)) Currently translated at 92.3% (1289 of 1396 strings) --- po/zh_CN/minetest.po | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/po/zh_CN/minetest.po b/po/zh_CN/minetest.po index 490513f6b..8177610c0 100644 --- a/po/zh_CN/minetest.po +++ b/po/zh_CN/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Chinese (Simplified) (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-06-21 11:33+0000\n" -"Last-Translator: Riceball LEE \n" +"PO-Revision-Date: 2021-07-10 09:32+0000\n" +"Last-Translator: Lin Happy 666 \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_CN\n" @@ -12,16 +12,15 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.7\n" +"X-Generator: Weblate 4.8-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" msgstr "清除聊天发送队列" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Empty command." -msgstr "空命令." +msgstr "空命令。" #: builtin/client/chatcommands.lua msgid "Exit to main menu" @@ -224,8 +223,9 @@ msgid "$1 and $2 dependencies will be installed." msgstr "$1 和 $2 依赖项将被安装." #: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy msgid "$1 by $2" -msgstr "" +msgstr "$1 比 $2" #: builtin/mainmenu/dlg_contentstore.lua msgid "" @@ -914,9 +914,8 @@ msgid "Start Game" msgstr "启动游戏" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Address" -msgstr "- 地址: " +msgstr "地址" #: builtin/mainmenu/tab_online.lua src/client/keycode.cpp msgid "Clear" @@ -932,9 +931,8 @@ msgstr "创造模式" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Damage / PvP" -msgstr "伤害" +msgstr "伤害 / PvP" #: builtin/mainmenu/tab_online.lua msgid "Del. Favorite" @@ -1125,11 +1123,11 @@ msgstr "三线性过滤" #: builtin/mainmenu/tab_settings.lua msgid "Ultra High" -msgstr "" +msgstr "超出高度限制" #: builtin/mainmenu/tab_settings.lua msgid "Very Low" -msgstr "" +msgstr "过于低" #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" From 19d5a5066cd7083008e7a6f17f1be47c67c8db63 Mon Sep 17 00:00:00 2001 From: BreadW Date: Fri, 16 Jul 2021 15:18:32 +0000 Subject: [PATCH 084/412] Translated using Weblate (Japanese) Currently translated at 99.4% (1389 of 1396 strings) --- po/ja/minetest.po | 357 ++++++++++++++++++++++------------------------ 1 file changed, 170 insertions(+), 187 deletions(-) diff --git a/po/ja/minetest.po b/po/ja/minetest.po index 541aea659..a5844c7b1 100644 --- a/po/ja/minetest.po +++ b/po/ja/minetest.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Japanese (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-04-08 18:26+0000\n" +"PO-Revision-Date: 2021-07-17 13:33+0000\n" "Last-Translator: BreadW \n" "Language-Team: Japanese \n" @@ -12,49 +12,43 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.6-dev\n" +"X-Generator: Weblate 4.7.2-dev\n" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Clear the out chat queue" -msgstr "アウトチャットキューの最大サイズ" +msgstr "アウト チャット キューをクリアする" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Empty command." -msgstr "チャットコマンド" +msgstr "空のコマンドです。" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Exit to main menu" -msgstr "メインメニュー" +msgstr "メインメニューに戻る" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Invalid command: " -msgstr "ローカルコマンド" +msgstr "無効なコマンド: " #: builtin/client/chatcommands.lua msgid "Issued command: " -msgstr "" +msgstr "発行されたコマンド: " #: builtin/client/chatcommands.lua -#, fuzzy msgid "List online players" -msgstr "シングルプレイヤー" +msgstr "オンラインプレーヤーを一覧表示する" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Online players: " -msgstr "シングルプレイヤー" +msgstr "オンラインプレイヤー: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." -msgstr "" +msgstr "アウトチャットキューは空になりました。" #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "このコマンドはサーバによって無効にされています。" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -65,36 +59,33 @@ msgid "You died" msgstr "死んでしまった" #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." -msgstr "死んでしまった" +msgstr "あなたは死にました。" #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands:" -msgstr "ローカルコマンド" +msgstr "使用可能なコマンド:" #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands: " -msgstr "ローカルコマンド" +msgstr "使用可能なコマンド: " #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "コマンドは使用できません: " #: builtin/common/chatcommands.lua msgid "Get help for commands" -msgstr "" +msgstr "コマンドのヘルプを表示する" #: builtin/common/chatcommands.lua msgid "" "Use '.help ' to get more information, or '.help all' to list everything." -msgstr "" +msgstr "'.help ' を使用して詳細情報を取得するか、または '.help all' を使用してすべてを一覧表示します。" #: builtin/common/chatcommands.lua msgid "[all | ]" -msgstr "" +msgstr "[all | ]" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" @@ -118,7 +109,7 @@ msgstr "再接続" #: builtin/fstk/ui.lua msgid "The server has requested a reconnect:" -msgstr "サーバが再接続を要求しました:" +msgstr "サーバーが再接続を要求しました:" #: builtin/mainmenu/common.lua msgid "Protocol version mismatch. " @@ -126,11 +117,11 @@ msgstr "プロトコルのバージョンが一致していません。 " #: builtin/mainmenu/common.lua msgid "Server enforces protocol version $1. " -msgstr "サーバはバージョン$1のプロトコルを強制しています。 " +msgstr "サーバーはバージョン$1のプロトコルを強制しています。 " #: builtin/mainmenu/common.lua msgid "Server supports protocol versions between $1 and $2. " -msgstr "サーバは$1から$2までのプロトコルのバージョンをサポートしています。 " +msgstr "サーバーは$1から$2までのプロトコルのバージョンをサポートしています。 " #: builtin/mainmenu/common.lua msgid "We only support protocol version $1." @@ -774,24 +765,23 @@ msgstr "読み込み中..." #: builtin/mainmenu/serverlistmgr.lua msgid "Public server list is disabled" -msgstr "公開サーバ一覧は無効" +msgstr "公開サーバー一覧は無効" #: builtin/mainmenu/serverlistmgr.lua msgid "Try reenabling public serverlist and check your internet connection." -msgstr "インターネット接続を確認し、公開サーバ一覧を再有効化してください。" +msgstr "インターネット接続を確認し、公開サーバー一覧を再有効化してください。" #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "" +msgstr "About" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" msgstr "活動中の貢献者" #: builtin/mainmenu/tab_about.lua -#, fuzzy msgid "Active renderer:" -msgstr "アクティブなオブジェクトの送信範囲" +msgstr "アクティブなレンダラー:" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" @@ -859,7 +849,7 @@ msgstr "テクスチャパック使用" #: builtin/mainmenu/tab_local.lua msgid "Announce Server" -msgstr "公開サーバ" +msgstr "公開サーバー" #: builtin/mainmenu/tab_local.lua msgid "Bind Address" @@ -879,7 +869,7 @@ msgstr "ゲームホスト" #: builtin/mainmenu/tab_local.lua msgid "Host Server" -msgstr "ホストサーバ" +msgstr "ホストサーバー" #: builtin/mainmenu/tab_local.lua msgid "Install games from ContentDB" @@ -919,16 +909,15 @@ msgstr "ワールドを選択:" #: builtin/mainmenu/tab_local.lua msgid "Server Port" -msgstr "サーバのポート" +msgstr "サーバーのポート" #: builtin/mainmenu/tab_local.lua msgid "Start Game" msgstr "ゲームスタート" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Address" -msgstr "- アドレス: " +msgstr "アドレス" #: builtin/mainmenu/tab_online.lua src/client/keycode.cpp msgid "Clear" @@ -944,22 +933,20 @@ msgstr "クリエイティブモード" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Damage / PvP" -msgstr "ダメージ" +msgstr "ダメージ / PvP" #: builtin/mainmenu/tab_online.lua msgid "Del. Favorite" msgstr "お気に入り削除" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Favorites" msgstr "お気に入り" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" -msgstr "" +msgstr "互換性のないサーバ" #: builtin/mainmenu/tab_online.lua msgid "Join Game" @@ -970,18 +957,16 @@ msgid "Ping" msgstr "応答速度" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Public Servers" -msgstr "公開サーバ" +msgstr "公開サーバー" #: builtin/mainmenu/tab_online.lua msgid "Refresh" -msgstr "" +msgstr "再読込" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Server Description" -msgstr "サーバ説明" +msgstr "サーバーの説明" #: builtin/mainmenu/tab_settings.lua msgid "2x" @@ -1024,13 +1009,12 @@ msgid "Connected Glass" msgstr "ガラスを繋げる" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp -#, fuzzy msgid "Dynamic shadows" -msgstr "フォントの影" +msgstr "動的な影" #: builtin/mainmenu/tab_settings.lua msgid "Dynamic shadows: " -msgstr "" +msgstr "動的な影: " #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" @@ -1038,15 +1022,15 @@ msgstr "綺麗な葉" #: builtin/mainmenu/tab_settings.lua msgid "High" -msgstr "" +msgstr "強め" #: builtin/mainmenu/tab_settings.lua msgid "Low" -msgstr "" +msgstr "弱め" #: builtin/mainmenu/tab_settings.lua msgid "Medium" -msgstr "" +msgstr "普通" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" @@ -1138,11 +1122,11 @@ msgstr "トライリニアフィルタ" #: builtin/mainmenu/tab_settings.lua msgid "Ultra High" -msgstr "" +msgstr "超強く" #: builtin/mainmenu/tab_settings.lua msgid "Very Low" -msgstr "" +msgstr "とても弱く" #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" @@ -1246,7 +1230,7 @@ msgstr "- ポート: " #: src/client/game.cpp msgid "- Public: " -msgstr "- 公開サーバ: " +msgstr "- 公開サーバー: " #. ~ PvP = Player versus Player #: src/client/game.cpp @@ -1255,7 +1239,7 @@ msgstr "- PvP: " #: src/client/game.cpp msgid "- Server Name: " -msgstr "- サーバ名: " +msgstr "- サーバー名: " #: src/client/game.cpp msgid "Automatic forward disabled" @@ -1291,7 +1275,7 @@ msgstr "クライアント側のスクリプトは無効" #: src/client/game.cpp msgid "Connecting to server..." -msgstr "サーバに接続中..." +msgstr "サーバーに接続中..." #: src/client/game.cpp msgid "Continue" @@ -1336,7 +1320,7 @@ msgstr "クライアントを作成中..." #: src/client/game.cpp msgid "Creating server..." -msgstr "サーバを作成中..." +msgstr "サーバーを作成中..." #: src/client/game.cpp msgid "Debug info and profiler graph hidden" @@ -1436,7 +1420,7 @@ msgstr "ポーズメニュー" #: src/client/game.cpp msgid "Hosting server" -msgstr "ホスティングサーバ" +msgstr "ホスティングサーバー" #: src/client/game.cpp msgid "Item definitions..." @@ -1459,9 +1443,8 @@ msgid "Minimap currently disabled by game or mod" msgstr "ミニマップは現在ゲームまたはModにより無効" #: src/client/game.cpp -#, fuzzy msgid "Multiplayer" -msgstr "シングルプレイヤー" +msgstr "マルチプレイヤー" #: src/client/game.cpp msgid "Noclip mode disabled" @@ -1501,7 +1484,7 @@ msgstr "観測記録グラフ 表示" #: src/client/game.cpp msgid "Remote server" -msgstr "リモートサーバ" +msgstr "リモートサーバー" #: src/client/game.cpp msgid "Resolving address..." @@ -1886,11 +1869,9 @@ msgid "" "Please retype your password and click 'Register and Join' to confirm account " "creation, or click 'Cancel' to abort." msgstr "" -"あなたはこのサーバ に名前 \"%s\" で初めて参加しようとしています。\n" -"続行する場合、あなたの情報が新しいアカウントとしてこのサーバに作成されま" -"す。\n" -"あなたのパスワードを再入力してから '参加登録' をクリックしてアカウント作成す" -"るか、\n" +"あなたはこのサーバ ーに名前 \"%s\" ではじめて参加しようとしています。\n" +"続行する場合、あなたの情報が新しいアカウントとしてこのサーバーに作成されます。\n" +"あなたのパスワードを再入力してから '参加登録' をクリックしてアカウント作成するか、\n" "キャンセルをクリックして中断してください。" #: src/gui/guiFormSpecMenu.cpp @@ -1898,7 +1879,6 @@ msgid "Proceed" msgstr "決定" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "\"Aux1\" = climb down" msgstr "\"スペシャル\" = 降りる" @@ -1912,7 +1892,7 @@ msgstr "自動ジャンプ" #: src/gui/guiKeyChangeMenu.cpp msgid "Aux1" -msgstr "" +msgstr "Aux1" #: src/gui/guiKeyChangeMenu.cpp msgid "Backward" @@ -1920,7 +1900,7 @@ msgstr "後退" #: src/gui/guiKeyChangeMenu.cpp msgid "Block bounds" -msgstr "" +msgstr "ブロック境界線表示切替" #: src/gui/guiKeyChangeMenu.cpp msgid "Change camera" @@ -2098,15 +2078,14 @@ msgstr "" "無効にした場合、最初に触れた位置がバーチャルパッドの中心になります。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "(Android) Use virtual joystick to trigger \"Aux1\" button.\n" "If enabled, virtual joystick will also tap \"Aux1\" button when out of main " "circle." msgstr "" -"(Android) バーチャルパッドを使用して\"aux\"ボタンを起動します。\n" +"(Android) バーチャルパッドを使用して\"Aux1\"ボタンを起動します。\n" "有効にした場合、バーチャルパッドはメインサークルから外れたときにも\n" -"\"aux\"ボタンをタップします。" +"\"Aux1\"ボタンをタップします。" #: src/settings_translation_file.cpp msgid "" @@ -2259,11 +2238,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "A message to be displayed to all clients when the server crashes." -msgstr "サーバクラッシュ時に全てのクライアントへ表示するメッセージ。" +msgstr "サーバークラッシュ時にすべてのクライアントへ表示するメッセージ。" #: src/settings_translation_file.cpp msgid "A message to be displayed to all clients when the server shuts down." -msgstr "サーバ終了時に全てのクライアントへ表示するメッセージ。" +msgstr "サーバー終了時にすべてのクライアントへ表示するメッセージ。" #: src/settings_translation_file.cpp msgid "ABM interval" @@ -2308,7 +2287,7 @@ msgid "" "Note that the address field in the main menu overrides this setting." msgstr "" "接続先のアドレスです。\n" -"ローカルサーバを起動する際は空白に設定してください。\n" +"ローカルサーバーを起動する際は空白に設定してください。\n" "メインメニューのアドレス欄はこの設定を上書きすることに注意してください。" #: src/settings_translation_file.cpp @@ -2377,11 +2356,11 @@ msgstr "異方性フィルタリング" #: src/settings_translation_file.cpp msgid "Announce server" -msgstr "サーバを公開" +msgstr "サーバーを公開" #: src/settings_translation_file.cpp msgid "Announce to this serverlist." -msgstr "このサーバ一覧に告知します。" +msgstr "このサーバー一覧に告知します。" #: src/settings_translation_file.cpp msgid "Append item name" @@ -2425,11 +2404,11 @@ msgid "" "optimization.\n" "Stated in mapblocks (16 nodes)." msgstr "" -"この距離でサーバはどのブロックをクライアントへ送信するかを積極的に\n" +"この距離でサーバーはどのブロックをクライアントへ送信するかを積極的に\n" "最適化します。\n" -"小さい値に設定すると、レンダリングの視覚的な不具合を犠牲にして、\n" +"小さい値に設定すると、描画の視覚的な不具合を犠牲にして、\n" "パフォーマンスが大幅に向上する可能性があります(いくつかのブロックは\n" -"水中や洞窟、時には陸の上でもレンダリングされません)。\n" +"水中や洞窟、時には陸の上でも描画されません)。\n" "max_block_send_distance より大きい値に設定すると、この最適化は\n" "無効になります。 \n" "マップブロック(16ノード)で表記。" @@ -2444,7 +2423,7 @@ msgstr "自動的に1ノードの障害物をジャンプします。" #: src/settings_translation_file.cpp msgid "Automatically report to the serverlist." -msgstr "サーバ一覧に自動的に報告します。" +msgstr "サーバー一覧に自動的に報告します。" #: src/settings_translation_file.cpp msgid "Autosave screen size" @@ -2455,14 +2434,12 @@ msgid "Autoscaling mode" msgstr "自動拡大縮小モード" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key" -msgstr "ジャンプキー" +msgstr "Aux1キー" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key for climbing/descending" -msgstr "降りるためのスペシャルキー" +msgstr "昇降用のAux1キー" #: src/settings_translation_file.cpp msgid "Backward key" @@ -2614,9 +2591,8 @@ msgstr "" "0.0は最小光レベル、1.0は最大光レベルです。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat command time message threshold" -msgstr "チャットメッセージキックのしきい値" +msgstr "チャットコマンド時間切れメッセージのしきい値" #: src/settings_translation_file.cpp msgid "Chat font size" @@ -2676,7 +2652,7 @@ msgstr "クライアント" #: src/settings_translation_file.cpp msgid "Client and Server" -msgstr "クライアントとサーバ" +msgstr "クライアントとサーバー" #: src/settings_translation_file.cpp msgid "Client modding" @@ -2715,9 +2691,8 @@ msgid "Colored fog" msgstr "色つきの霧" #: src/settings_translation_file.cpp -#, fuzzy msgid "Colored shadows" -msgstr "色つきの霧" +msgstr "色つきの影" #: src/settings_translation_file.cpp msgid "" @@ -2764,7 +2739,7 @@ msgstr "ガラスを繋げる" #: src/settings_translation_file.cpp msgid "Connect to external media server" -msgstr "外部メディアサーバに接続" +msgstr "外部メディアサーバーに接続" #: src/settings_translation_file.cpp msgid "Connects glass if supported by node." @@ -2904,7 +2879,7 @@ msgstr "この値を小さくすると、移動時の液体抵抗が増加しま #: src/settings_translation_file.cpp msgid "Dedicated server step" -msgstr "専用サーバステップ" +msgstr "専用サーバーステップ" #: src/settings_translation_file.cpp msgid "Default acceleration" @@ -2944,6 +2919,9 @@ msgid "" "This simulates the soft shadows effect by applying a PCF or poisson disk\n" "but also uses more resources." msgstr "" +"影のフィルタリング品質定義\n" +"これは、PCFまたはポアソンディスクを適用することで、やわらない影効果をシミュレートするものです。\n" +"しかし、より多くのリソースを消費します。" #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." @@ -3029,7 +3007,7 @@ msgstr "これ以下の深さで大きな洞窟が見つかります。" msgid "" "Description of server, to be displayed when players join and in the " "serverlist." -msgstr "サーバの説明。プレイヤーが参加したときとサーバ一覧に表示されます。" +msgstr "サーバーの説明。プレイヤーが参加したときとサーバー一覧に表示されます。" #: src/settings_translation_file.cpp msgid "Desert noise threshold" @@ -3065,7 +3043,7 @@ msgstr "空のパスワードを許可しない" #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." -msgstr "サーバ一覧に表示されるサーバのドメイン名。" +msgstr "サーバー一覧に表示されるサーバーのドメイン名。" #: src/settings_translation_file.cpp msgid "Double tap jump for fly" @@ -3116,6 +3094,8 @@ msgid "" "Enable colored shadows. \n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" +"色つきの影を有効にします。\n" +"真の半透明ノードでは、色つきの影を落とします。これは負荷が大きいです。" #: src/settings_translation_file.cpp msgid "Enable console window" @@ -3147,6 +3127,8 @@ msgid "" "On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " "filtering." msgstr "" +"ポアソンディスクによるフィルタリングを有効にします。\n" +"true の場合、ポアソンディスクを使用して「やわらない影」を作ります。それ以外の場合は、PCFフィルタリングを使用します。" #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." @@ -3161,7 +3143,7 @@ msgid "" "Enable register confirmation when connecting to server.\n" "If disabled, new account will be registered automatically." msgstr "" -"サーバへの接続時に登録確認を有効にします。\n" +"サーバーへの接続時に登録確認を有効にします。\n" "無効にすると、新しいアカウントが自動的に登録されます。" #: src/settings_translation_file.cpp @@ -3181,7 +3163,7 @@ msgid "" "expecting." msgstr "" "古いクライアントが接続できないようにします。\n" -"古いクライアントは新しいサーバに接続してもクラッシュしないという\n" +"古いクライアントは新しいサーバーに接続してもクラッシュしないという\n" "意味で互換性がありますが、期待しているすべての新機能をサポート\n" "しているわけではありません。" @@ -3192,9 +3174,9 @@ msgid "" "textures)\n" "when connecting to the server." msgstr "" -"リモートメディアサーバの使用を有効にします (サーバによって提供\n" +"リモートメディアサーバーの使用を有効にします (サーバーによって提供\n" "されている場合)。\n" -"リモートサーバはサーバに接続するときにメディア (例えば、テクスチャ) を\n" +"リモートサーバはサーバーに接続するときにメディア (例えば、テクスチャ) を\n" "ダウンロードするための非常に高速な方法を提供します。" #: src/settings_translation_file.cpp @@ -3320,13 +3302,12 @@ msgid "Fast movement" msgstr "高速移動モード" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Fast movement (via the \"Aux1\" key).\n" "This requires the \"fast\" privilege on the server." msgstr "" -"高速移動 (\"スペシャル\"キーによる)。\n" -"これにはサーバ上に \"fast\" 特権が必要です。" +"高速移動 (\"Aux1\"キーによる)。\n" +"これにはサーバー上に \"fast\" 特権が必要です。" #: src/settings_translation_file.cpp msgid "Field of view" @@ -3343,7 +3324,7 @@ msgid "" "Multiplayer Tab." msgstr "" "client/serverlist/ フォルダ内のファイルで、ゲームに参加タブで表示されている\n" -"お気に入りのサーバが含まれています。" +"お気に入りのサーバーが含まれています。" #: src/settings_translation_file.cpp msgid "Filler depth" @@ -3358,17 +3339,17 @@ msgid "Filmic tone mapping" msgstr "フィルム調トーンマッピング" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Filtered textures can blend RGB values with fully-transparent neighbors,\n" "which PNG optimizers usually discard, often resulting in dark or\n" "light edges to transparent textures. Apply a filter to clean that up\n" "at texture load time. This is automatically enabled if mipmapping is enabled." msgstr "" -"フィルタ処理されたテクスチャはRGB値と完全に透明な隣り合うものと混ぜる\n" -"ことができます。PNGオプティマイザは通常これを破棄します。その結果、\n" -"透明なテクスチャに対して暗いまたは明るいエッジが生じることがあります。\n" -"このフィルタを適用してテクスチャ読み込み時にそれをきれいにします。" +"フィルタ処理されたテクスチャは、RGB値を完全に透明な隣り合うものと\n" +"混ぜることができます。これはPNGオプティマイザーが通常廃棄するもので、\n" +"透過テクスチャの端が暗くなったり明るくなったりすることがよくあります。\n" +"テクスチャの読み込み時にフィルタを適用してそれをきれいにします。\n" +"これはミップマッピングが有効な場合に自動的に有効になります。" #: src/settings_translation_file.cpp msgid "Filtering" @@ -3534,7 +3515,7 @@ msgstr "フラクタルの種類" #: src/settings_translation_file.cpp msgid "Fraction of the visible distance at which fog starts to be rendered" -msgstr "霧がレンダリングされ始める可視距離の割合" +msgstr "霧が描画され始める可視距離の割合" #: src/settings_translation_file.cpp msgid "FreeType fonts" @@ -3566,7 +3547,7 @@ msgstr "" "クライアントがどれくらいの距離のオブジェクトを知っているか、\n" "マップブロック(16ノード)で定めます。\n" "\n" -"これを active_block_range よりも大きく設定すると、サーバは\n" +"これを active_block_range よりも大きく設定すると、サーバーは\n" "この距離までプレーヤーが見ている方向に\n" "アクティブなオブジェクトを維持します。(これによりモブが突然\n" "視野から消えるのを避けることができます)" @@ -3685,10 +3666,9 @@ msgid "Heat noise" msgstr "熱ノイズ" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Height component of the initial window size. Ignored in fullscreen mode." -msgstr "ウィンドウ高さの初期値。" +msgstr "初期ウィンドウサイズの高さ。フルスクリーンモードでは無視されます。" #: src/settings_translation_file.cpp msgid "Height noise" @@ -3724,7 +3704,7 @@ msgstr "丘陵性4ノイズ" #: src/settings_translation_file.cpp msgid "Homepage of server, to be displayed in the serverlist." -msgstr "サーバ一覧に表示されるサーバのホームページ。" +msgstr "サーバー一覧に表示されるサーバのホームページ。" #: src/settings_translation_file.cpp msgid "" @@ -3905,7 +3885,7 @@ msgid "" "How much the server will wait before unloading unused mapblocks.\n" "Higher value is smoother, but will use more RAM." msgstr "" -"未使用のマップブロックをアンロードするまでにサーバが待機する量。\n" +"未使用のマップブロックを破棄するまでにサーバーが待機する量。\n" "値が大きいほど滑らかになりますが、より多くのRAMが使用されます。" #: src/settings_translation_file.cpp @@ -3930,7 +3910,7 @@ msgstr "IPv6" #: src/settings_translation_file.cpp msgid "IPv6 server" -msgstr "IPv6 サーバ" +msgstr "IPv6 サーバー" #: src/settings_translation_file.cpp msgid "" @@ -3941,13 +3921,12 @@ msgstr "" "スリープ状態で制限します。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n" "enabled." msgstr "" "無効になっている場合、飛行モードと高速移動モードの両方が有効になって\n" -"いると、\"スペシャル\"キーを使用して高速で飛行することができます。" +"いると、\"Aux1\"キーを使用して高速で飛行できます。" #: src/settings_translation_file.cpp msgid "" @@ -3957,7 +3936,7 @@ msgid "" "invisible\n" "so that the utility of noclip mode is reduced." msgstr "" -"有効にすると、サーバはプレーヤーの目の位置に基づいてマップブロック\n" +"有効にすると、サーバーはプレーヤーの目の位置に基づいてマップブロック\n" "オクルージョンカリングを実行します。これによりクライアントに送信される\n" "ブロック数を50〜80%減らすことができます。すり抜けモードの有用性が\n" "減るように、クライアントはもはや目に見えないものを受け取りません。" @@ -3973,14 +3952,13 @@ msgstr "" "これにはサーバー上に \"noclip\" 特権が必要です。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down " "and\n" "descending." msgstr "" -"有効にすると、降りるときや水中を潜るとき \"スニーク\" キーの代りに \n" -"\"スペシャル\" キーが使用されます。" +"有効にすると、降りるとき \"スニーク\" キーの代りに \n" +"\"Aux1\" キーが使用されます。" #: src/settings_translation_file.cpp msgid "" @@ -3988,7 +3966,7 @@ msgid "" "This option is only read when server starts." msgstr "" "有効にした場合、ロールバックのために行動が記録されます。\n" -"このオプションはサーバ起動時にのみ読み込まれます。" +"このオプションはサーバー起動時にのみ読み込まれます。" #: src/settings_translation_file.cpp msgid "If enabled, disable cheat prevention in multiplayer." @@ -3999,7 +3977,7 @@ msgid "" "If enabled, invalid world data won't cause the server to shut down.\n" "Only enable this if you know what you are doing." msgstr "" -"有効にした場合、無効なワールドデータによってサーバがシャットダウン\n" +"有効にした場合、無効なワールドデータによってサーバーがシャットダウン\n" "することはありません。\n" "自分がしていることがわかっている場合のみこれを有効にします。" @@ -4039,6 +4017,8 @@ msgid "" "If the execution of a chat command takes longer than this specified time in\n" "seconds, add the time information to the chat command message" msgstr "" +"チャットコマンドの実行が、この指定された時間(秒)よりも長くかかる場合は\n" +"チャットコマンドのメッセージに時間の情報を追加します。" #: src/settings_translation_file.cpp msgid "" @@ -5049,7 +5029,7 @@ msgid "" "Length of a server tick and the interval at which objects are generally " "updated over\n" "network." -msgstr "サーバの間隔の長さとオブジェクトが通常ネットワーク上で更新される間隔。" +msgstr "サーバーが時を刻む間隔とオブジェクトが通常ネットワーク上で更新される間隔。" #: src/settings_translation_file.cpp msgid "" @@ -5134,8 +5114,8 @@ msgid "" "Only has an effect if compiled with cURL." msgstr "" "並列HTTPリクエストの数を制限します。影響:\n" -"- サーバが remote_media 設定を使用している場合はメディアの取得。\n" -"- サーバ一覧のダウンロードとサーバの公開。\n" +"- サーバーが remote_media 設定を使用している場合はメディアの取得。\n" +"- サーバー一覧のダウンロードとサーバの公開。\n" "- メインメニューで実行されたダウンロード(例えば、コンテンツ)。\n" "cURLでコンパイルされた場合にのみ効果があります。" @@ -5179,7 +5159,7 @@ msgid "" msgstr "" "ゲームの観測記録を読み込んで、ゲームの観測データを収集します。\n" "集められた観測記録にアクセスするための /profiler コマンドを提供します。\n" -"Mod開発者やサーバオペレーターに役立ちます。" +"Mod開発者やサーバーオペレーターに役立ちます。" #: src/settings_translation_file.cpp msgid "Loading Block Modifiers" @@ -5293,9 +5273,8 @@ msgid "Map save interval" msgstr "マップ保存間隔" #: src/settings_translation_file.cpp -#, fuzzy msgid "Map update time" -msgstr "液体の更新間隔" +msgstr "マップの更新間隔" #: src/settings_translation_file.cpp msgid "Mapblock limit" @@ -5311,7 +5290,7 @@ msgstr "メッシュ生成のマップブロックキャッシュサイズ(MB)" #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" -msgstr "マップブロックアンロードタイムアウト" +msgstr "マップブロック破棄タイムアウト" #: src/settings_translation_file.cpp msgid "Mapgen Carpathian" @@ -5409,7 +5388,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Maximum distance to render shadows." -msgstr "" +msgstr "影を描画する最大距離。" #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" @@ -5536,17 +5515,16 @@ msgstr "" "キューを無効にするには 0、サイズを無制限にするには -1 を指定します。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum time a file download (e.g. a mod download) may take, stated in " "milliseconds." -msgstr "ファイルダウンロード (例: Modのダウンロード)の最大経過時間。" +msgstr "ファイルダウンロード(Modのダウンロードなど)にかかる最大時間をミリ秒単位で指定します。" #: src/settings_translation_file.cpp msgid "" "Maximum time an interactive request (e.g. server list fetch) may take, " "stated in milliseconds." -msgstr "" +msgstr "インタラクティブリクエスト(サーバー一覧の取得など)にかかる最大時間をミリ秒単位で指定します。" #: src/settings_translation_file.cpp msgid "Maximum users" @@ -5683,14 +5661,14 @@ msgid "" "When starting from the main menu, this is overridden." msgstr "" "プレイヤーの名前。\n" -"サーバを実行している場合、この名前で接続しているクライアントは管理者\n" +"サーバーを実行している場合、この名前で接続しているクライアントは管理者\n" "です。\n" "メインメニューから起動すると、これは上書きされます。" #: src/settings_translation_file.cpp msgid "" "Name of the server, to be displayed when players join and in the serverlist." -msgstr "プレイヤーが参加したときにサーバ一覧に表示されるサーバの名前。" +msgstr "プレイヤーが参加したときにサーバー一覧に表示されるサーバーの名前。" #: src/settings_translation_file.cpp msgid "Near plane" @@ -5912,9 +5890,8 @@ msgid "Player versus player" msgstr "プレイヤー対プレイヤー" #: src/settings_translation_file.cpp -#, fuzzy msgid "Poisson filtering" -msgstr "バイリニアフィルタリング" +msgstr "ポアソンフィルタリング" #: src/settings_translation_file.cpp msgid "" @@ -6048,7 +6025,7 @@ msgid "" "csm_restriction_noderange)\n" "READ_PLAYERINFO: 32 (disable get_player_names call client-side)" msgstr "" -"サーバで特定のクライアント側機能へのアクセスを制限します。\n" +"サーバーで特定のクライアント側機能へのアクセスを制限します。\n" "以下の byteflags を合わせてクライアント側の機能を制限するか、制限なしの\n" "場合は 0 に設定します。\n" "LOAD_CLIENT_MODS: 1 (クライアント提供のModの読み込みを無効)\n" @@ -6137,7 +6114,7 @@ msgstr "ウィンドウサイズ変更時に自動的に保存します。" #: src/settings_translation_file.cpp msgid "Saving map received from server" -msgstr "サーバから受信したマップ保存" +msgstr "サーバーから受信したマップ保存" #: src/settings_translation_file.cpp msgid "" @@ -6259,39 +6236,39 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Server / Singleplayer" -msgstr "サーバ / シングルプレイヤー" +msgstr "サーバー / シングルプレイヤー" #: src/settings_translation_file.cpp msgid "Server URL" -msgstr "サーバURL" +msgstr "サーバーURL" #: src/settings_translation_file.cpp msgid "Server address" -msgstr "サーバアドレス" +msgstr "サーバーアドレス" #: src/settings_translation_file.cpp msgid "Server description" -msgstr "サーバ説明" +msgstr "サーバー説明" #: src/settings_translation_file.cpp msgid "Server name" -msgstr "サーバ名" +msgstr "サーバー名" #: src/settings_translation_file.cpp msgid "Server port" -msgstr "サーバポート" +msgstr "サーバーポート" #: src/settings_translation_file.cpp msgid "Server side occlusion culling" -msgstr "サーバ側のオクルージョンカリング" +msgstr "サーバー側のオクルージョンカリング" #: src/settings_translation_file.cpp msgid "Serverlist URL" -msgstr "サーバ一覧URL" +msgstr "サーバー一覧URL" #: src/settings_translation_file.cpp msgid "Serverlist file" -msgstr "サーバ一覧ファイル" +msgstr "サーバー一覧ファイル" #: src/settings_translation_file.cpp msgid "" @@ -6310,6 +6287,8 @@ msgid "" "Set the shadow strength.\n" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" +"影の強さを設定します。\n" +"値が小さいほど影が薄く、値が大きいほど影が濃くなります。" #: src/settings_translation_file.cpp msgid "" @@ -6318,6 +6297,9 @@ msgid "" "resources.\n" "Minimun value 0.001 seconds max value 0.2 seconds" msgstr "" +"影の更新時間を設定します。\n" +"値が小さいほど影やマップの更新が速くなりますが、リソースを多く消費します。\n" +"最小値0.001秒、最大値0.2秒" #: src/settings_translation_file.cpp msgid "" @@ -6325,6 +6307,9 @@ msgid "" "Lower values mean sharper shadows bigger values softer.\n" "Minimun value 1.0 and max value 10.0" msgstr "" +"やわらない影の半径サイズを設定します。\n" +"値が小さいほどシャープな影、大きいほどやわらない影になります。\n" +"最小値1.0、最大値10.0" #: src/settings_translation_file.cpp msgid "" @@ -6332,14 +6317,16 @@ msgid "" "Value of 0 means no tilt / vertical orbit.\n" "Minimun value 0.0 and max value 60.0" msgstr "" +"太陽/月の軌道の傾きを度数で設定する\n" +"0 は傾きのない垂直な軌道を意味します。\n" +"最小値 0.0、最大値 60.0" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable Shadow Mapping.\n" "Requires shaders to be enabled." msgstr "" -"有効にすると葉が揺れます。\n" +"有効にすると影を映します。\n" "シェーダーが有効である必要があります。" #: src/settings_translation_file.cpp @@ -6372,6 +6359,9 @@ msgid "" "On false, 16 bits texture will be used.\n" "This can cause much more artifacts in the shadow." msgstr "" +"影のテクスチャの品質を 32 ビットに設定します。\n" +"false の場合、16ビットのテクスチャが使用されます。\n" +"これは、影がさら不自然になる可能性があります。" #: src/settings_translation_file.cpp msgid "Shader path" @@ -6389,22 +6379,20 @@ msgstr "" "これはOpenGLビデオバックエンドでのみ機能します。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow filter quality" -msgstr "スクリーンショットの品質" +msgstr "影フィルタの品質" #: src/settings_translation_file.cpp msgid "Shadow map max distance in nodes to render shadows" -msgstr "" +msgstr "影を描画するためのノードの最大距離" #: src/settings_translation_file.cpp msgid "Shadow map texture in 32 bits" -msgstr "" +msgstr "32ビットの影投影テクスチャ" #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow map texture size" -msgstr "最小テクスチャサイズ" +msgstr "影投影テクスチャサイズ" #: src/settings_translation_file.cpp msgid "" @@ -6416,7 +6404,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Shadow strength" -msgstr "" +msgstr "影の強さ" #: src/settings_translation_file.cpp msgid "Shape of the minimap. Enabled = round, disabled = square." @@ -6444,7 +6432,7 @@ msgstr "既定でネームタグの背景を表示" #: src/settings_translation_file.cpp msgid "Shutdown message" -msgstr "サーバ終了時のメッセージ" +msgstr "サーバー終了時のメッセージ" #: src/settings_translation_file.cpp msgid "" @@ -6474,7 +6462,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" -msgstr "" +msgstr "天体の軌道傾斜角" #: src/settings_translation_file.cpp msgid "Slice w" @@ -6534,9 +6522,8 @@ msgid "Sneaking speed, in nodes per second." msgstr "スニーク時の速度、1秒あたりのノード数です。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Soft shadow radius" -msgstr "フォントの影の透過" +msgstr "やわらない影半径" #: src/settings_translation_file.cpp msgid "Sound" @@ -6698,6 +6685,9 @@ msgid "" "This must be a power of two.\n" "Bigger numbers create better shadowsbut it is also more expensive." msgstr "" +"影投影を描画するためのテクスチャサイズです。\n" +"これは2の累乗でなければなりません。\n" +"数字が大きいほど良い影ができますが、負荷も高くなります。" #: src/settings_translation_file.cpp msgid "" @@ -6712,7 +6702,7 @@ msgstr "" "ことができます。\n" "前者のモードは、機械、家具などのようなものに適していますが、\n" "後者のモードは階段やマイクロブロックを周囲の環境に合わせやすくします。\n" -"しかし、この機能は新しく、古いサーバでは使用できない可能性があります。\n" +"しかし、この機能は新しく、古いサーバーでは使用できない可能性があります。\n" "このオプションを使用すると特定のノードタイプに適用できます。ただし、\n" "これは実験的なものであり、正しく機能しない可能性があります。" @@ -6765,7 +6755,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "The network interface that the server listens on." -msgstr "サーバが待機しているネットワークインターフェース。" +msgstr "サーバがー待機しているネットワークインターフェース。" #: src/settings_translation_file.cpp msgid "" @@ -6773,7 +6763,7 @@ msgid "" "See /privs in game for a full list on your server and mod configuration." msgstr "" "新規ユーザーが自動的に取得する特権。\n" -"サーバとModの構成の完全なリストについては、ゲーム内の /privs を参照\n" +"サーバーとModの構成の完全なリストについては、ゲーム内の /privs を参照\n" "してください。" #: src/settings_translation_file.cpp @@ -6793,7 +6783,6 @@ msgstr "" "これは active_object_send_range_blocks と一緒に設定する必要があります。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end.\n" "A restart is required after changing this.\n" @@ -6802,12 +6791,11 @@ msgid "" "On other platforms, OpenGL is recommended.\n" "Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)" msgstr "" -"Irrlichtのレンダリングバックエンド。\n" +"レンダリングのバックエンドです。\n" "変更後は再起動が必要です。\n" -"注意:Android の場合、よくわからない場合は OGLES1 を使用してください!\n" -"そうしないとアプリの起動に失敗することがあります。\n" -"その他のプラットフォームでは、OpenGL が推奨されています。\n" -"シェーダーは OpenGL(デスクトップのみ)と OGLES2(実験的)でサポート" +"注:Androidでは、不明な場合はOGRES1を使用してください!そうしないとアプリの起動に失敗することがあります。\n" +"その他のプラットフォームでは、OpenGLを推奨します。\n" +"シェーダーは、OpenGL(デスクトップのみ)とOGRES2(実験的)でサポートされています。" #: src/settings_translation_file.cpp msgid "" @@ -6947,7 +6935,7 @@ msgstr "信頼するMod" #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." -msgstr "ゲームに参加タブで表示されるサーバ一覧へのURL。" +msgstr "ゲームに参加タブで表示されるサーバー一覧へのURL。" #: src/settings_translation_file.cpp msgid "Undersampling" @@ -6972,7 +6960,7 @@ msgstr "無制限のプレーヤー転送距離" #: src/settings_translation_file.cpp msgid "Unload unused server data" -msgstr "未使用のサーバデータをアンロード" +msgstr "未使用のサーバーデータを破棄" #: src/settings_translation_file.cpp msgid "Upper Y limit of dungeons." @@ -7129,9 +7117,8 @@ msgid "Viewing range" msgstr "視野" #: src/settings_translation_file.cpp -#, fuzzy msgid "Virtual joystick triggers Aux1 button" -msgstr "バーチャルパッドでauxボタン動作" +msgstr "バーチャルパッドで Aux1 ボタン動作" #: src/settings_translation_file.cpp msgid "Volume" @@ -7231,7 +7218,6 @@ msgstr "" "ビデオドライバのときは、古い拡大縮小方法に戻ります。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" "can be blurred, so automatically upscale them with nearest-neighbor\n" @@ -7247,9 +7233,8 @@ msgstr "" "最近傍補間を使用して自動的にそれらを拡大します。\n" "これは拡大されたテクスチャのための最小テクスチャサイズを設定します。\n" "より高い値はよりシャープに見えますが、より多くのメモリを必要とします。\n" -"2のべき乗が推奨されます。これを1より高く設定すると、\n" -"バイリニア/トライリニア/異方性フィルタリングが有効になっていない限り、\n" -"目に見える効果がない場合があります。\n" +"2のべき乗が推奨されます。この設定は、\n" +"バイリニア/トライリニア/異方性フィルタリングが有効の場合にのみ適用されます。\n" "これは整列テクスチャの自動スケーリング用の基準ノードテクスチャサイズと\n" "しても使用されます。" @@ -7297,7 +7282,7 @@ msgid "" msgstr "" "(Luaが)クラッシュした際にクライアントに再接続を要求するかどうかの\n" "設定です。\n" -"サーバが自動で再起動されるように設定されているならば true に設定\n" +"サーバーが自動で再起動されるように設定されているならば true に設定\n" "してください。" #: src/settings_translation_file.cpp @@ -7324,9 +7309,8 @@ msgstr "" "(F5を押すのと同じ効果)。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Width component of the initial window size. Ignored in fullscreen mode." -msgstr "ウィンドウ幅の初期値。" +msgstr "初期ウィンドウサイズの幅。フルスクリーンモードでは無視されます。" #: src/settings_translation_file.cpp msgid "Width of the selection box lines around nodes." @@ -7460,9 +7444,8 @@ msgid "cURL file download timeout" msgstr "cURLファイルダウンロードタイムアウト" #: src/settings_translation_file.cpp -#, fuzzy msgid "cURL interactive timeout" -msgstr "cURLタイムアウト" +msgstr "cURL インタラクティブタイムアウト" #: src/settings_translation_file.cpp msgid "cURL parallel limit" From c264e47ee7743f71e4e2e161a5372e0a4fcf4bc6 Mon Sep 17 00:00:00 2001 From: Stefan Vukanovic Date: Mon, 19 Jul 2021 13:45:55 +0000 Subject: [PATCH 085/412] Translated using Weblate (Serbian (cyrillic)) Currently translated at 30.4% (425 of 1396 strings) --- po/sr_Cyrl/minetest.po | 241 ++++++++++++++++++----------------------- 1 file changed, 108 insertions(+), 133 deletions(-) diff --git a/po/sr_Cyrl/minetest.po b/po/sr_Cyrl/minetest.po index 9ce81bbae..86ab30434 100644 --- a/po/sr_Cyrl/minetest.po +++ b/po/sr_Cyrl/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Serbian (cyrillic) (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2020-07-08 20:47+0000\n" -"Last-Translator: sfan5 \n" +"PO-Revision-Date: 2021-07-20 14:34+0000\n" +"Last-Translator: Stefan Vukanovic \n" "Language-Team: Serbian (cyrillic) \n" "Language: sr_Cyrl\n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.2-dev\n" +"X-Generator: Weblate 4.7.2-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -32,29 +32,28 @@ msgstr "Изађи у мени" #: builtin/client/chatcommands.lua #, fuzzy msgid "Invalid command: " -msgstr "Локална команда" +msgstr "Неважећа команда: " #: builtin/client/chatcommands.lua +#, fuzzy msgid "Issued command: " -msgstr "" +msgstr "Издата команда: " #: builtin/client/chatcommands.lua -#, fuzzy msgid "List online players" -msgstr "Један играч" +msgstr "Излистај мрежне играче" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Online players: " -msgstr "Један играч" +msgstr "Мрежни играчи: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." -msgstr "" +msgstr "Излазни ред са ћаскање је сада празан." #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "Ова команда није дозвољена од стране сервера." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -66,45 +65,43 @@ msgid "You died" msgstr "Умро/ла си." #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." msgstr "Умро/ла си." #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands:" -msgstr "Локална команда" +msgstr "Доступне команде:" #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands: " -msgstr "Локална команда" +msgstr "Доступне команде: " #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "Команда није доступна: " #: builtin/common/chatcommands.lua msgid "Get help for commands" -msgstr "" +msgstr "Нађите помоћ за команде" #: builtin/common/chatcommands.lua msgid "" "Use '.help ' to get more information, or '.help all' to list everything." msgstr "" +"Користите '.help ' да бисте добили више информација или '.help all' " +"да бисте све набројали." #: builtin/common/chatcommands.lua msgid "[all | ]" -msgstr "" +msgstr "[all | <команда>]" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" -msgstr "" +msgstr "У реду" #: builtin/fstk/ui.lua -#, fuzzy msgid "An error occurred in a Lua script:" -msgstr "Догодила се грешка у Lua скрипти, у моду:" +msgstr "Догодила се грешка у Lua скрипти:" #: builtin/fstk/ui.lua #, fuzzy @@ -156,7 +153,6 @@ msgstr "Прекини" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Dependencies:" msgstr "Зависи од:" @@ -165,21 +161,18 @@ msgid "Disable all" msgstr "Онемогући све" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "Disable modpack" -msgstr "Онемогућено" +msgstr "Онемогући групу модова" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Укључи све" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "Enable modpack" -msgstr "Преименуј мод-паковање:" +msgstr "Укључи групу модова:" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "" "Failed to enable mod \"$1\" as it contains disallowed characters. Only " "characters [a-z0-9_] are allowed." @@ -189,36 +182,31 @@ msgstr "" #: builtin/mainmenu/dlg_config_world.lua msgid "Find More Mods" -msgstr "" +msgstr "Нађи још модова" #: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Мод:" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No (optional) dependencies" -msgstr "Необавезне зависности:" +msgstr "Нема (необавезних) зависности" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No game description provided." -msgstr "Није доступан опис мода" +msgstr "Није пружен опис мода." #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No hard dependencies" -msgstr "Нема зависности." +msgstr "Нема обавезних зависности." #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No modpack description provided." -msgstr "Није доступан опис мода" +msgstr "Није пружен опис групе модова." #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No optional dependencies" -msgstr "Необавезне зависности:" +msgstr "Нема необавезних зависности" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Optional dependencies:" @@ -239,67 +227,64 @@ msgstr "укључено" #: builtin/mainmenu/dlg_contentstore.lua msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" +msgstr "\"$1\" већ постоји. Да ли желите да га препишете?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." -msgstr "" +msgstr "$1 и $2 зависности ће бити инсталиране." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" -msgstr "" +msgstr "$1 од $2" #: builtin/mainmenu/dlg_contentstore.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" +"$1 се преузима,\n" +"$2 чекају преузимање" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 downloading..." -msgstr "Учитавање..." +msgstr "$1 се преузима..." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "" +msgstr "$1 неопходних зависности није могло бити нађено." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" +msgstr "$1 зависности ће бити инсталирано, и $2 зависности ће бити прескочено." #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" -msgstr "" +msgstr "Сви пакети" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Already installed" -msgstr "Дугме се већ користи" +msgstr "Већ инсталирано" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Back to Main Menu" -msgstr "Главни мени" +msgstr "Назад у главни мени" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Base Game:" -msgstr "Направи игру" +msgstr "Основна игра:" #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" msgstr "" +"ContentDB није доступан када је Minetest компајлиран без cURL библиотеке" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Downloading..." -msgstr "Учитавање..." +msgstr "Преузимање..." #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Failed to download $1" -msgstr "Неуспела инсталација $1 у $2" +msgstr "Неуспело преузимање $1" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -311,14 +296,12 @@ msgid "Install" msgstr "Инсталирај" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install $1" -msgstr "Инсталирај" +msgstr "Инсталирај $1" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install missing dependencies" -msgstr "Необавезне зависности:" +msgstr "Инсталирај недостајуће зависности" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -327,53 +310,52 @@ msgstr "Модови" #: builtin/mainmenu/dlg_contentstore.lua msgid "No packages could be retrieved" -msgstr "" +msgstr "Ниједан пакет није било могуће преузети" #: builtin/mainmenu/dlg_contentstore.lua msgid "No results" -msgstr "" +msgstr "Нема резултата" #: builtin/mainmenu/dlg_contentstore.lua msgid "No updates" -msgstr "" +msgstr "Нема ажурирања" #: builtin/mainmenu/dlg_contentstore.lua msgid "Not found" -msgstr "" +msgstr "Није пронађено" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" -msgstr "" +msgstr "Препиши" #: builtin/mainmenu/dlg_contentstore.lua msgid "Please check that the base game is correct." -msgstr "" +msgstr "Молим проверите да ли је основна игра исправна." #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" -msgstr "" +msgstr "На чекању" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Texture packs" msgstr "Сетови текстура" #: builtin/mainmenu/dlg_contentstore.lua #, fuzzy msgid "Uninstall" -msgstr "Инсталирај" +msgstr "Деинсталирај" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update" -msgstr "" +msgstr "Ажурирај" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update All [$1]" -msgstr "" +msgstr "Ажурирај све [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "Погледај још информација у веб претраживачу" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" @@ -381,70 +363,63 @@ msgstr "Свет \"$1\" већ постоји" #: builtin/mainmenu/dlg_create_world.lua msgid "Additional terrain" -msgstr "" +msgstr "Додатни терен" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Altitude chill" -msgstr "" +msgstr "Висинска хладноћа" #: builtin/mainmenu/dlg_create_world.lua msgid "Altitude dry" -msgstr "" +msgstr "Висинска сувоћа" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Biome blending" -msgstr "Семе биома" +msgstr "Склапање биома" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Biomes" -msgstr "Семе биома" +msgstr "Биоми" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Caverns" -msgstr "Семе пећина" +msgstr "Пећине" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Caves" -msgstr "Семе пећина" +msgstr "Јама" #: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Направи" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Decorations" -msgstr "Информације о моду:" +msgstr "Украси" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Download a game, such as Minetest Game, from minetest.net" msgstr "Преузми подигру, као што је minetest_game, са minetest.net" #: builtin/mainmenu/dlg_create_world.lua msgid "Download one from minetest.net" -msgstr "Преузми један са minetest.net" +msgstr "Преузми једну са minetest.net" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Dungeons" -msgstr "Семе пећина" +msgstr "Тамнице" #: builtin/mainmenu/dlg_create_world.lua msgid "Flat terrain" -msgstr "" +msgstr "Раван терен" #: builtin/mainmenu/dlg_create_world.lua msgid "Floating landmasses in the sky" -msgstr "" +msgstr "Плутајуће копнене масе на небу" #: builtin/mainmenu/dlg_create_world.lua msgid "Floatlands (experimental)" -msgstr "" +msgstr "Floatlands (експериментални)" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" @@ -452,27 +427,29 @@ msgstr "Игра" #: builtin/mainmenu/dlg_create_world.lua msgid "Generate non-fractal terrain: Oceans and underground" -msgstr "" +msgstr "Створи нефрактални терен: Океани и подземље" #: builtin/mainmenu/dlg_create_world.lua msgid "Hills" -msgstr "" +msgstr "Брда" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy msgid "Humid rivers" -msgstr "" +msgstr "Влажне реке" #: builtin/mainmenu/dlg_create_world.lua +#, fuzzy msgid "Increases humidity around rivers" -msgstr "" +msgstr "Повећава влажност око река" #: builtin/mainmenu/dlg_create_world.lua msgid "Lakes" -msgstr "" +msgstr "Језера" #: builtin/mainmenu/dlg_create_world.lua msgid "Low humidity and high heat causes shallow or dry rivers" -msgstr "" +msgstr "Ниска влажност и велика врућина узрокују плитке или суве реке" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen" @@ -480,46 +457,43 @@ msgstr "Генератор мапе" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen flags" -msgstr "" +msgstr "Опције генератора мапа" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Mapgen-specific flags" -msgstr "Генератор мапе" +msgstr "Специфичне опције генератора мапа" #: builtin/mainmenu/dlg_create_world.lua msgid "Mountains" -msgstr "" +msgstr "Планине" #: builtin/mainmenu/dlg_create_world.lua msgid "Mud flow" -msgstr "" +msgstr "Проток блата" #: builtin/mainmenu/dlg_create_world.lua msgid "Network of tunnels and caves" -msgstr "" +msgstr "Мрежа тунела и пећина" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "No game selected" -msgstr "Одабир домета" +msgstr "Није одабрана игра" #: builtin/mainmenu/dlg_create_world.lua msgid "Reduces heat with altitude" -msgstr "" +msgstr "Смањује топлоту висином" #: builtin/mainmenu/dlg_create_world.lua msgid "Reduces humidity with altitude" -msgstr "" +msgstr "Смањује влагу висином" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Rivers" -msgstr "Семе пећина" +msgstr "Реке" #: builtin/mainmenu/dlg_create_world.lua msgid "Sea level rivers" -msgstr "" +msgstr "Реке на нивоу мора" #: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -528,48 +502,49 @@ msgstr "Семе" #: builtin/mainmenu/dlg_create_world.lua msgid "Smooth transition between biomes" -msgstr "" +msgstr "Глатка транзиција између биома" #: builtin/mainmenu/dlg_create_world.lua msgid "" "Structures appearing on the terrain (no effect on trees and jungle grass " "created by v6)" msgstr "" +"Структуре које се појављују на терену (нема утицаја на дрвеће и траву џунгле " +"коју је створила v6)" #: builtin/mainmenu/dlg_create_world.lua msgid "Structures appearing on the terrain, typically trees and plants" -msgstr "" +msgstr "Структуре које се појављују на терену, обично дрвеће и биљке" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert" -msgstr "" +msgstr "Умерено, пустиња" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle" -msgstr "" +msgstr "Умерено, пустиња, џунгла" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle, Tundra, Taiga" -msgstr "" +msgstr "Умерено, пустиња, џунгла, тундра, тајга" #: builtin/mainmenu/dlg_create_world.lua msgid "Terrain surface erosion" -msgstr "" +msgstr "Ерозија површине терена" #: builtin/mainmenu/dlg_create_world.lua msgid "Trees and jungle grass" -msgstr "" +msgstr "Дрвеће и трава џунгле" #: builtin/mainmenu/dlg_create_world.lua msgid "Vary river depth" -msgstr "" +msgstr "Варирај дубину реке" #: builtin/mainmenu/dlg_create_world.lua msgid "Very large caverns deep in the underground" -msgstr "" +msgstr "Веома велике пећине дубоко у подземљу" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Warning: The Development Test is meant for developers." msgstr "Упозорење: Минимални развојни тест је намењен развијачима." @@ -593,14 +568,12 @@ msgid "Delete" msgstr "Обриши" #: builtin/mainmenu/dlg_delete_content.lua -#, fuzzy msgid "pkgmgr: failed to delete \"$1\"" -msgstr "Modmgr: неуспело брисање \"$1\"" +msgstr "pkgmgr: неуспело брисање \"$1\"" #: builtin/mainmenu/dlg_delete_content.lua -#, fuzzy msgid "pkgmgr: invalid path \"$1\"" -msgstr "Modmgr: локација мода \"$1\" није валидна" +msgstr "pkgmgr: локација мода \"$1\" није валидна" #: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" @@ -612,13 +585,15 @@ msgstr "Прихвати" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Rename Modpack:" -msgstr "Преименуј мод-паковање:" +msgstr "Преименуј групу модова:" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "" "This modpack has an explicit name given in its modpack.conf which will " "override any renaming here." msgstr "" +"Ова група модова има специфично име дато у свом modpack.conf које ће " +"преписати било које име дато овде." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "(No description of setting given)" @@ -627,7 +602,7 @@ msgstr "(Није дат опис поставке)" #: builtin/mainmenu/dlg_settings_advanced.lua #, fuzzy msgid "2D Noise" -msgstr "Cave2 семе" +msgstr "2D бука" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "< Back to Settings page" @@ -655,15 +630,15 @@ msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Octaves" -msgstr "" +msgstr "Октаве" #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp msgid "Offset" -msgstr "" +msgstr "Помак" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Persistance" -msgstr "" +msgstr "Упорност" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Please enter a valid integer." @@ -675,11 +650,11 @@ msgstr "Молим вас унесите валидан број." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Restore Default" -msgstr "Поврати уобичајено" +msgstr "Поврати подразумевано" #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp msgid "Scale" -msgstr "" +msgstr "Скала" #: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua msgid "Search" From dfb1e62bc3d1d5339e73395ef8e8bc8a61c88966 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A7=D1=82=D0=B0=D0=B1=D1=81?= Date: Tue, 20 Jul 2021 17:21:05 +0000 Subject: [PATCH 086/412] Translated using Weblate (Russian) Currently translated at 100.0% (1396 of 1396 strings) --- po/ru/minetest.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/po/ru/minetest.po b/po/ru/minetest.po index dcd4de7aa..ff9aff663 100644 --- a/po/ru/minetest.po +++ b/po/ru/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Russian (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-07-04 15:44+0000\n" -"Last-Translator: Er2 \n" +"PO-Revision-Date: 2021-07-21 17:34+0000\n" +"Last-Translator: Чтабс \n" "Language-Team: Russian \n" "Language: ru\n" @@ -13,7 +13,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.7.2-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -1814,7 +1814,7 @@ msgstr "Shift" #: src/client/keycode.cpp msgid "Sleep" -msgstr "Sleep" +msgstr "Спать" #: src/client/keycode.cpp msgid "Snapshot" From 2e0780b4373ed4a0c3128bc10ecf106aa9db4e53 Mon Sep 17 00:00:00 2001 From: Yangjun Wang Date: Fri, 23 Jul 2021 23:58:18 +0000 Subject: [PATCH 087/412] Translated using Weblate (Chinese (Simplified)) Currently translated at 92.5% (1292 of 1396 strings) --- po/zh_CN/minetest.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/po/zh_CN/minetest.po b/po/zh_CN/minetest.po index 8177610c0..bd0bf23ef 100644 --- a/po/zh_CN/minetest.po +++ b/po/zh_CN/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Chinese (Simplified) (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-07-10 09:32+0000\n" -"Last-Translator: Lin Happy 666 \n" +"PO-Revision-Date: 2021-07-24 00:47+0000\n" +"Last-Translator: Yangjun Wang \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_CN\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.7.2-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -1846,9 +1846,9 @@ msgid "Minimap in radar mode, Zoom x%d" msgstr "雷达小地图,放大至一倍" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in surface mode, Zoom x%d" -msgstr "地表模式小地图, 放大至一倍" +msgstr "地表模式小地图, 放大至%d倍" #: src/client/minimap.cpp msgid "Minimap in texture mode" From 6328b2274a4c2ebda10b0f30ca1ff2cc355eb1a9 Mon Sep 17 00:00:00 2001 From: Riceball LEE Date: Fri, 23 Jul 2021 23:57:47 +0000 Subject: [PATCH 088/412] Translated using Weblate (Chinese (Simplified)) Currently translated at 92.5% (1292 of 1396 strings) --- po/zh_CN/minetest.po | 101 +++++++++++++++++++------------------------ 1 file changed, 45 insertions(+), 56 deletions(-) diff --git a/po/zh_CN/minetest.po b/po/zh_CN/minetest.po index bd0bf23ef..974627be9 100644 --- a/po/zh_CN/minetest.po +++ b/po/zh_CN/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Chinese (Simplified) (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-07-24 00:47+0000\n" -"Last-Translator: Yangjun Wang \n" +"PO-Revision-Date: 2021-07-27 01:17+0000\n" +"Last-Translator: Riceball LEE \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_CN\n" @@ -40,7 +40,7 @@ msgstr "列出联机玩家" #: builtin/client/chatcommands.lua msgid "Online players: " -msgstr "联机游戏: " +msgstr "在线玩家: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." @@ -223,9 +223,8 @@ msgid "$1 and $2 dependencies will be installed." msgstr "$1 和 $2 依赖项将被安装." #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 by $2" -msgstr "$1 比 $2" +msgstr "$1 作者: $2" #: builtin/mainmenu/dlg_contentstore.lua msgid "" @@ -322,7 +321,6 @@ msgid "Please check that the base game is correct." msgstr "请查看游戏是否正确。" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Queued" msgstr "已加入队列" @@ -939,9 +937,8 @@ msgid "Del. Favorite" msgstr "删除收藏项" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Favorites" -msgstr "收藏项" +msgstr "我的收藏" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" @@ -956,7 +953,6 @@ msgid "Ping" msgstr "应答速度" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Public Servers" msgstr "公开服务器" @@ -965,7 +961,6 @@ msgid "Refresh" msgstr "刷新" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Server Description" msgstr "服务器描述" @@ -1283,7 +1278,7 @@ msgid "Continue" msgstr "继续" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "" "Controls:\n" "- %s: move forwards\n" @@ -1305,13 +1300,13 @@ msgstr "" "- %s:向后移动\n" "- %s:向左移动\n" "- %s:向右移动\n" -"- %s:跳/爬\n" -"- %s:潜行/向下\n" +"- %s:跳/向上(攀爬)\n" +"- %s:挖/打\n" +"- %s:放/使用\n" +"- %s:潜行/向下(攀爬)\n" "- %s:丢弃物品\n" "- %s:物品清单\n" "- 鼠标:转身/环顾\n" -"- 鼠标左键: 挖/打\n" -"- 鼠标右键: 放/使用\n" "- 鼠标滚轮: 选择物品\n" "- %s:聊天\n" @@ -1444,9 +1439,8 @@ msgid "Minimap currently disabled by game or mod" msgstr "小地图被当前子游戏或者 mod 禁用" #: src/client/game.cpp -#, fuzzy msgid "Multiplayer" -msgstr "单人游戏" +msgstr "多人游戏" #: src/client/game.cpp msgid "Noclip mode disabled" @@ -1841,9 +1835,9 @@ msgid "Minimap hidden" msgstr "小地图已隐藏" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in radar mode, Zoom x%d" -msgstr "雷达小地图,放大至一倍" +msgstr "雷达小地图,放大至%d倍" #: src/client/minimap.cpp #, c-format @@ -1880,9 +1874,8 @@ msgid "Proceed" msgstr "继续" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "\"Aux1\" = climb down" -msgstr "“特殊” = 向下爬" +msgstr "“Aux1” = 向下爬" #: src/gui/guiKeyChangeMenu.cpp msgid "Autoforward" @@ -1894,7 +1887,7 @@ msgstr "自动跳跃" #: src/gui/guiKeyChangeMenu.cpp msgid "Aux1" -msgstr "" +msgstr "Aux1" #: src/gui/guiKeyChangeMenu.cpp msgid "Backward" @@ -1902,7 +1895,7 @@ msgstr "向后" #: src/gui/guiKeyChangeMenu.cpp msgid "Block bounds" -msgstr "" +msgstr "地图块边界" #: src/gui/guiKeyChangeMenu.cpp msgid "Change camera" @@ -2078,14 +2071,13 @@ msgstr "" "如果禁用,虚拟操纵杆将居中至第一次触摸的位置。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "(Android) Use virtual joystick to trigger \"Aux1\" button.\n" "If enabled, virtual joystick will also tap \"Aux1\" button when out of main " "circle." msgstr "" -"(安卓)使用虚拟操纵杆触发\"aux\"按钮。\n" -"如果启用,虚拟操纵杆在主圆圈外会点击\"aux\"按钮。" +"(安卓)使用虚拟操纵杆触发\"Aux1\"按钮。\n" +"如果启用,虚拟操纵杆在主圆圈外会点击\"Aux1\"按钮。" #: src/settings_translation_file.cpp msgid "" @@ -2434,14 +2426,12 @@ msgid "Autoscaling mode" msgstr "自动缩放模式" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key" -msgstr "跳跃键" +msgstr "Aux1键" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key for climbing/descending" -msgstr "用于攀登/降落的特殊键" +msgstr "用于攀登/降落的Aux1键" #: src/settings_translation_file.cpp msgid "Backward key" @@ -2509,7 +2499,7 @@ msgstr "粗体等宽字体路径" #: src/settings_translation_file.cpp msgid "Build inside player" -msgstr "在玩家内部搭建" +msgstr "在玩家站着的地方搭建" #: src/settings_translation_file.cpp msgid "Builtin" @@ -2592,9 +2582,8 @@ msgstr "" "0.0为最小值时1.0为最大值。" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat command time message threshold" -msgstr "聊天消息踢出阈值" +msgstr "显示聊天消息执行时间的阀值(秒)" #: src/settings_translation_file.cpp msgid "Chat font size" @@ -2693,9 +2682,8 @@ msgid "Colored fog" msgstr "彩色雾" #: src/settings_translation_file.cpp -#, fuzzy msgid "Colored shadows" -msgstr "彩色雾" +msgstr "彩色阴影" #: src/settings_translation_file.cpp msgid "" @@ -2831,11 +2819,12 @@ msgid "Crosshair alpha" msgstr "准星透明" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" "Also controls the object crosshair color" -msgstr "准星不透明度(0-255)。" +msgstr "" +"准星透明度(0-255)。\n" +"还控制对象准星的颜色" #: src/settings_translation_file.cpp msgid "Crosshair color" @@ -2846,6 +2835,8 @@ msgid "" "Crosshair color (R,G,B).\n" "Also controls the object crosshair color" msgstr "" +"准星颜色(R,G,B).\n" +"还控制对象准星颜色" #: src/settings_translation_file.cpp msgid "DPI" @@ -2917,6 +2908,9 @@ msgid "" "This simulates the soft shadows effect by applying a PCF or poisson disk\n" "but also uses more resources." msgstr "" +"定阴影滤镜的质量\n" +"通过应用 PCF 或 poisson disk来模拟软阴影效果\n" +"但这会使用更多的资源。" #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." @@ -3021,9 +3015,8 @@ msgid "Desynchronize block animation" msgstr "去同步块动画" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dig key" -msgstr "右方向键" +msgstr "挖掘键" #: src/settings_translation_file.cpp msgid "Digging particles" @@ -3090,6 +3083,8 @@ msgid "" "Enable colored shadows. \n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" +"启用彩色阴影。\n" +"在半透明节点上投射彩色阴影。会消耗超多的资源。" #: src/settings_translation_file.cpp msgid "Enable console window" @@ -3121,6 +3116,8 @@ msgid "" "On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " "filtering." msgstr "" +"启用poisson disk滤镜.\n" +"使用poisson disk来产生\"软阴影\",否则将使用PCF 滤镜." #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." @@ -3291,12 +3288,11 @@ msgid "Fast movement" msgstr "快速移动" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Fast movement (via the \"Aux1\" key).\n" "This requires the \"fast\" privilege on the server." msgstr "" -"快速移动(通过“特殊”键)。\n" +"快速移动(通过“Aux1”键)。\n" "这需要服务器的“fast”权限。" #: src/settings_translation_file.cpp @@ -3329,7 +3325,6 @@ msgid "Filmic tone mapping" msgstr "电影色调映射" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Filtered textures can blend RGB values with fully-transparent neighbors,\n" "which PNG optimizers usually discard, often resulting in dark or\n" @@ -3338,8 +3333,8 @@ msgid "" msgstr "" "经过滤的材质会与邻近的全透明材质混合RGB值,\n" "该值通常会被PNG优化器丢弃,某些时候会给透明材质产生暗色或\n" -"亮色的边缘。应用该过滤器将在材质加载时\n" -"移除该效果。" +"亮色的边缘。应用该过滤器将在材质加载时移除该效果。\n" +"该过滤器将在启用mipmapping的时候被自动应用。" #: src/settings_translation_file.cpp msgid "Filtering" @@ -3614,7 +3609,6 @@ msgid "HUD toggle key" msgstr "HUD启用/禁用键" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Handling for deprecated Lua API calls:\n" "- none: Do not log deprecated calls\n" @@ -3622,9 +3616,9 @@ msgid "" "- error: abort on usage of deprecated call (suggested for mod developers)." msgstr "" "处理已弃用的 Lua API 调用:\n" -"- 兼容:(尝试)模拟旧的调用(发布版本的默认值)。\n" -"- 记录:模拟并记录已弃用的调用的回溯(调试的默认值)。\n" -"- 错误:停止使用已弃用的调用(Mod 开发人员推荐)。" +"- none:不记录废弃的调用。\n" +"- log:模拟并记录已弃用的调用的回溯(调试的默认值)。\n" +"- error:停止使用已弃用的调用(Mod 开发人员推荐)。" #: src/settings_translation_file.cpp msgid "" @@ -3648,10 +3642,9 @@ msgid "Heat noise" msgstr "热噪声" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Height component of the initial window size. Ignored in fullscreen mode." -msgstr "初始窗口高度。" +msgstr "初始窗口高度,全屏模式下忽略该值。" #: src/settings_translation_file.cpp msgid "Height noise" @@ -3904,13 +3897,10 @@ msgstr "" "节省无效 CPU 功耗。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n" "enabled." -msgstr "" -"如果禁用,当飞行和快速模式同时启用时“特殊”键用于快速\n" -"飞行。" +msgstr "如果禁用,“Aux1”键将用于快速飞行(飞行和快速模式同时启用)。" #: src/settings_translation_file.cpp msgid "" @@ -3935,13 +3925,12 @@ msgstr "" "这需要服务器的“noclip”权限。" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down " "and\n" "descending." msgstr "" -"如果启用,“特殊”键将代替潜行键的向下攀爬和\n" +"如果启用,“Aux1”键将代替潜行键的向下攀爬和\n" "下降。" #: src/settings_translation_file.cpp From dd23991a19f0715af79bf76ea93c26accb37b617 Mon Sep 17 00:00:00 2001 From: David Leal Date: Sun, 1 Aug 2021 16:31:57 +0000 Subject: [PATCH 089/412] Translated using Weblate (Spanish) Currently translated at 81.2% (1134 of 1396 strings) --- po/es/minetest.po | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/po/es/minetest.po b/po/es/minetest.po index 26318d2ca..bb50c828b 100644 --- a/po/es/minetest.po +++ b/po/es/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-06-21 11:33+0000\n" -"Last-Translator: Jordan Irwin \n" +"PO-Revision-Date: 2021-08-02 16:34+0000\n" +"Last-Translator: David Leal \n" "Language-Team: Spanish \n" "Language: es\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.7\n" +"X-Generator: Weblate 4.8-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -44,11 +44,11 @@ msgstr "Jugadores conectados: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." -msgstr "" +msgstr "La cola de salida del chat está ahora vacía." #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "Este comando está deshabilitado por el servidor." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -82,10 +82,12 @@ msgstr "Obtener ayuda para los comandos" msgid "" "Use '.help ' to get more information, or '.help all' to list everything." msgstr "" +"Usa '.help ' para obtener más información, o '.help all' para mostrar " +"todo." #: builtin/common/chatcommands.lua msgid "[all | ]" -msgstr "" +msgstr "[all | ]" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" @@ -1031,15 +1033,15 @@ msgstr "Hojas elegantes" #: builtin/mainmenu/tab_settings.lua msgid "High" -msgstr "" +msgstr "Alto" #: builtin/mainmenu/tab_settings.lua msgid "Low" -msgstr "" +msgstr "Bajo" #: builtin/mainmenu/tab_settings.lua msgid "Medium" -msgstr "" +msgstr "Medio" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" @@ -1131,7 +1133,7 @@ msgstr "Filtrado trilineal" #: builtin/mainmenu/tab_settings.lua msgid "Ultra High" -msgstr "" +msgstr "Ultra Alto" #: builtin/mainmenu/tab_settings.lua msgid "Very Low" From f8dba7e5cf120d5613a78e1f6813a45aa1327ef1 Mon Sep 17 00:00:00 2001 From: Emily Ellis Date: Sun, 1 Aug 2021 12:41:05 +0000 Subject: [PATCH 090/412] Translated using Weblate (Chinese (Simplified)) Currently translated at 94.4% (1319 of 1396 strings) --- po/zh_CN/minetest.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/po/zh_CN/minetest.po b/po/zh_CN/minetest.po index 974627be9..409f2e939 100644 --- a/po/zh_CN/minetest.po +++ b/po/zh_CN/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Chinese (Simplified) (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-07-27 01:17+0000\n" -"Last-Translator: Riceball LEE \n" +"PO-Revision-Date: 2021-08-02 16:34+0000\n" +"Last-Translator: Emily Ellis \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_CN\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.7.2-dev\n" +"X-Generator: Weblate 4.8-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -5353,7 +5353,7 @@ msgstr "窗口未聚焦或游戏暂停时的最大 FPS。" #: src/settings_translation_file.cpp msgid "Maximum distance to render shadows." -msgstr "" +msgstr "最大渲染阴影距离。" #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" From 3590261c7888254c73e174a11c0b9713271e45b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=C4=9Fuz=20Ersen?= Date: Tue, 3 Aug 2021 06:07:19 +0000 Subject: [PATCH 091/412] Translated using Weblate (Turkish) Currently translated at 100.0% (1396 of 1396 strings) --- po/tr/minetest.po | 258 +++++++++++++++++++++++----------------------- 1 file changed, 128 insertions(+), 130 deletions(-) diff --git a/po/tr/minetest.po b/po/tr/minetest.po index 4e8bc84d9..cb74c20a9 100644 --- a/po/tr/minetest.po +++ b/po/tr/minetest.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: Turkish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-03-07 07:10+0000\n" +"PO-Revision-Date: 2021-08-04 06:32+0000\n" "Last-Translator: Oğuz Ersen \n" "Language-Team: Turkish \n" @@ -12,49 +12,43 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.5.1\n" +"X-Generator: Weblate 4.8-dev\n" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Clear the out chat queue" -msgstr "Dış sohbet kuyruğunun maksimum boyutu" +msgstr "Dış sohbet kuyruğunu temizle" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Empty command." -msgstr "Sohbet komutları" +msgstr "Boş komut." #: builtin/client/chatcommands.lua -#, fuzzy msgid "Exit to main menu" -msgstr "Menüye Çık" +msgstr "Ana menüye çık" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Invalid command: " -msgstr "Yerel komut" +msgstr "Geçersiz komut: " #: builtin/client/chatcommands.lua msgid "Issued command: " -msgstr "" +msgstr "Verilen komut: " #: builtin/client/chatcommands.lua -#, fuzzy msgid "List online players" -msgstr "Tek oyunculu" +msgstr "Çevrim içi oyuncuları listele" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Online players: " -msgstr "Tek oyunculu" +msgstr "Çevrim içi oyuncular: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." -msgstr "" +msgstr "Dış sohbet kuyruğu artık boş." #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "Bu komut sunucu tarafından devre dışı bırakıldı." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -65,36 +59,35 @@ msgid "You died" msgstr "Öldün" #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." -msgstr "Öldün" +msgstr "Öldün." #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands:" -msgstr "Yerel komut" +msgstr "Kullanılabilir komutlar:" #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands: " -msgstr "Yerel komut" +msgstr "Kullanılabilir komutlar: " #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "Komut kullanılamıyor: " #: builtin/common/chatcommands.lua msgid "Get help for commands" -msgstr "" +msgstr "Komutlar için yardım alın" #: builtin/common/chatcommands.lua msgid "" "Use '.help ' to get more information, or '.help all' to list everything." msgstr "" +"Daha fazla bilgi almak için '.help ' veya her şeyi listelemek için " +"'.help all' kullanın." #: builtin/common/chatcommands.lua msgid "[all | ]" -msgstr "" +msgstr "[all | ]" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" @@ -275,7 +268,7 @@ msgstr "Yerel oyun:" #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "Minetest cURL'siz derlediğinde ContentDB kullanılamaz" +msgstr "Minetest cURL olmadan derlendiğinde ContentDB kullanılamaz" #: builtin/mainmenu/dlg_contentstore.lua msgid "Downloading..." @@ -775,26 +768,25 @@ msgstr "Yükleniyor..." #: builtin/mainmenu/serverlistmgr.lua msgid "Public server list is disabled" -msgstr "Açık sunucu listesi devre dışı" +msgstr "Herkese açık sunucu listesi devre dışı" #: builtin/mainmenu/serverlistmgr.lua msgid "Try reenabling public serverlist and check your internet connection." msgstr "" -"Açık sunucu listesini tekrar etkinleştirmeyi deneyin ve internet " -"bağlantınızı doğrulayın." +"Herkese açık sunucu listesini tekrar etkinleştirmeyi deneyin ve internet " +"bağlantınızı gözden geçirin." #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "" +msgstr "Hakkında" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" msgstr "Etkin Katkıda Bulunanlar" #: builtin/mainmenu/tab_about.lua -#, fuzzy msgid "Active renderer:" -msgstr "Etkin nesne gönderme uzaklığı" +msgstr "Etkin işleyici:" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" @@ -929,9 +921,8 @@ msgid "Start Game" msgstr "Oyun Başlat" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Address" -msgstr "- Adres: " +msgstr "Adres" #: builtin/mainmenu/tab_online.lua src/client/keycode.cpp msgid "Clear" @@ -947,22 +938,20 @@ msgstr "Yaratıcı kip" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Damage / PvP" -msgstr "Hasar" +msgstr "Hasar / Savaş (PvP)" #: builtin/mainmenu/tab_online.lua msgid "Del. Favorite" -msgstr "Favoriyi Sil" +msgstr "Sık Kullanılanı Sil" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Favorites" -msgstr "Favori" +msgstr "Sık Kullanılanlar" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" -msgstr "" +msgstr "Uyumsuz Sunucular" #: builtin/mainmenu/tab_online.lua msgid "Join Game" @@ -973,18 +962,16 @@ msgid "Ping" msgstr "Ping" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Public Servers" -msgstr "Sunucuyu Duyur" +msgstr "Herkese Açık Sunucular" #: builtin/mainmenu/tab_online.lua msgid "Refresh" -msgstr "" +msgstr "Yenile" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Server Description" -msgstr "Sunucu açıklaması" +msgstr "Sunucu Açıklaması" #: builtin/mainmenu/tab_settings.lua msgid "2x" @@ -1027,13 +1014,12 @@ msgid "Connected Glass" msgstr "Bitişik Cam" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp -#, fuzzy msgid "Dynamic shadows" -msgstr "Yazı tipi gölgesi" +msgstr "Dinamik gölgeler" #: builtin/mainmenu/tab_settings.lua msgid "Dynamic shadows: " -msgstr "" +msgstr "Dinamik gölgeler: " #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" @@ -1041,15 +1027,15 @@ msgstr "Şık Yapraklar" #: builtin/mainmenu/tab_settings.lua msgid "High" -msgstr "" +msgstr "Yüksek" #: builtin/mainmenu/tab_settings.lua msgid "Low" -msgstr "" +msgstr "Düşük" #: builtin/mainmenu/tab_settings.lua msgid "Medium" -msgstr "" +msgstr "Orta" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" @@ -1141,11 +1127,11 @@ msgstr "Trilineer Filtre" #: builtin/mainmenu/tab_settings.lua msgid "Ultra High" -msgstr "" +msgstr "Çok Yüksek" #: builtin/mainmenu/tab_settings.lua msgid "Very Low" -msgstr "" +msgstr "Çok Düşük" #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" @@ -1249,12 +1235,12 @@ msgstr "- Port: " #: src/client/game.cpp msgid "- Public: " -msgstr "- Herkes: " +msgstr "- Herkese Açık: " #. ~ PvP = Player versus Player #: src/client/game.cpp msgid "- PvP: " -msgstr "- Savaş: " +msgstr "- Savaş (PvP): " #: src/client/game.cpp msgid "- Server Name: " @@ -1462,9 +1448,8 @@ msgid "Minimap currently disabled by game or mod" msgstr "Mini harita şu anda, oyun veya mod tarafından devre dışı" #: src/client/game.cpp -#, fuzzy msgid "Multiplayer" -msgstr "Tek oyunculu" +msgstr "Çok oyunculu" #: src/client/game.cpp msgid "Noclip mode disabled" @@ -1900,9 +1885,8 @@ msgid "Proceed" msgstr "İlerle" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "\"Aux1\" = climb down" -msgstr "\"Özel\" = aşağı in" +msgstr "\"Aux1\" = aşağı in" #: src/gui/guiKeyChangeMenu.cpp msgid "Autoforward" @@ -1914,7 +1898,7 @@ msgstr "Kendiliğinden zıplama" #: src/gui/guiKeyChangeMenu.cpp msgid "Aux1" -msgstr "" +msgstr "Aux1" #: src/gui/guiKeyChangeMenu.cpp msgid "Backward" @@ -1922,7 +1906,7 @@ msgstr "Geri" #: src/gui/guiKeyChangeMenu.cpp msgid "Block bounds" -msgstr "" +msgstr "Blok sınırları" #: src/gui/guiKeyChangeMenu.cpp msgid "Change camera" @@ -2098,14 +2082,13 @@ msgstr "" "Devre dışı bırakılırsa, sanal joystick merkezi, ilk dokunuş konumu olur." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "(Android) Use virtual joystick to trigger \"Aux1\" button.\n" "If enabled, virtual joystick will also tap \"Aux1\" button when out of main " "circle." msgstr "" -"(Android) \"aux\" düğmesini tetiklemek için sanal joystick kullanın.\n" -"Etkinleştirilirse, sanal joystick, ana çemberin dışındayken \"aux\" " +"(Android) \"Aux1\" düğmesini tetiklemek için sanal joystick kullanın.\n" +"Etkinleştirilirse, sanal joystick, ana çemberin dışındayken \"Aux1\" " "düğmesini de dinler." #: src/settings_translation_file.cpp @@ -2461,14 +2444,12 @@ msgid "Autoscaling mode" msgstr "Kendiliğinden boyutlandırma kipi" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key" -msgstr "Zıplama tuşu" +msgstr "Aux1 tuşu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key for climbing/descending" -msgstr "Tırmanma/alçalma için özel tuş" +msgstr "Tırmanma/alçalma için Aux1 tuşu" #: src/settings_translation_file.cpp msgid "Backward key" @@ -2621,9 +2602,8 @@ msgstr "" "0.0 minimum, 1.0 maksimum ışık seviyesidir." #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat command time message threshold" -msgstr "Sohbet iletisi vurma eşiği" +msgstr "Sohbet komutu zaman iletisi eşiği" #: src/settings_translation_file.cpp msgid "Chat font size" @@ -2722,9 +2702,8 @@ msgid "Colored fog" msgstr "Renkli sis" #: src/settings_translation_file.cpp -#, fuzzy msgid "Colored shadows" -msgstr "Renkli sis" +msgstr "Renkli gölgeler" #: src/settings_translation_file.cpp msgid "" @@ -2953,6 +2932,10 @@ msgid "" "This simulates the soft shadows effect by applying a PCF or poisson disk\n" "but also uses more resources." msgstr "" +"Gölge filtreleme kalitesini tanımla.\n" +"Bu, bir PCF veya poisson diski uygulayarak yumuşak gölge efektini taklit " +"eder,\n" +"ancak aynı zamanda daha fazla kaynak kullanır." #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." @@ -3133,6 +3116,9 @@ msgid "" "Enable colored shadows. \n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" +"Renkli gölgeleri etkinleştir. \n" +"Doğru ise yarı saydam düğümlerde renkli gölgeler oluşturur. Bu fazla kaynak " +"kullanır." #: src/settings_translation_file.cpp msgid "Enable console window" @@ -3164,6 +3150,9 @@ msgid "" "On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " "filtering." msgstr "" +"Poisson disk filtrelemeyi etkinleştir.\n" +"Doğru ise \"yumuşak gölgeler\" yapmak için poisson diski kullanır. Değilse " +"PCF filtreleme kullanır." #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." @@ -3246,9 +3235,9 @@ msgid "" "enhanced, highlights and shadows are gradually compressed." msgstr "" "Hable'ın 'Uncharted 2' film ton eşlemesini etkinleştirir.\n" -"Fotoğrafsal film ton eğrisini simüle eder ve bu\n" +"Fotoğrafsal film ton eğrisini taklit eder ve bu\n" "yüksek dinamik aralıklı görüntülerin görünümü yakınlaştırır. Orta-aralık\n" -"kontrast biraz geliştirilir, vurgular ve gölgeler kademeli olarak " +"karşıtlık biraz geliştirilir, vurgular ve gölgeler kademeli olarak " "sıkıştırılır." #: src/settings_translation_file.cpp @@ -3337,12 +3326,11 @@ msgid "Fast movement" msgstr "Hızlı hareket" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Fast movement (via the \"Aux1\" key).\n" "This requires the \"fast\" privilege on the server." msgstr "" -"Hızlı hareket (\"özel\" tuşu ile).\n" +"Hızlı hareket (\"Aux1\" tuşu ile).\n" "Bu, sunucu üzerinde \"hızlı\" yetkisi gerektirir." #: src/settings_translation_file.cpp @@ -3359,8 +3347,8 @@ msgid "" "the\n" "Multiplayer Tab." msgstr "" -"İstemci/sunucu listesi/ içinde Multiplayer Sekmesinde görüntülenen\n" -"favori sunucularızı içeren dosya." +"Çok Oyunculu Sekmesinde görüntülenen sık kullanılan sunucularızı içeren\n" +"istemci/sunucu listesi/ içindeki dosya." #: src/settings_translation_file.cpp msgid "Filler depth" @@ -3375,7 +3363,6 @@ msgid "Filmic tone mapping" msgstr "Filmsel ton eşleme" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Filtered textures can blend RGB values with fully-transparent neighbors,\n" "which PNG optimizers usually discard, often resulting in dark or\n" @@ -3387,7 +3374,8 @@ msgstr "" "şeffaf komşuları ile RGB değerlerini kaynaştırabilir, bazen şeffaf " "dokularda\n" "karanlık veya aydınlık kenarlara neden olabilir. Bunu temizlemek için bu\n" -"filtreyi doku yükleme zamanında uygulayın." +"filtreyi doku yükleme zamanında uygulayın. Bu, mip eşleme etkinleştirilirse\n" +"otomatik olarak etkinleştirilir." #: src/settings_translation_file.cpp msgid "Filtering" @@ -3630,16 +3618,16 @@ msgid "" "Gradient of light curve at maximum light level.\n" "Controls the contrast of the highest light levels." msgstr "" -"Maksimum ışık seviyesinde ışık eğrisinin gradyantı.\n" -"En yüksek ışık düzeylerinin kontrastını denetler." +"Azami ışık seviyesinde ışık eğrisinin gradyantı.\n" +"En yüksek ışık düzeylerinin karşıtlığını denetler." #: src/settings_translation_file.cpp msgid "" "Gradient of light curve at minimum light level.\n" "Controls the contrast of the lowest light levels." msgstr "" -"Minimum ışık seviyesinde ışık eğrisinin gradyantı.\n" -"En düşük ışık düzeylerinin kontrastını kontrol eder." +"Asgari ışık seviyesinde ışık eğrisinin gradyantı.\n" +"En düşük ışık düzeylerinin karşıtlığını denetler." #: src/settings_translation_file.cpp msgid "Graphics" @@ -3705,10 +3693,10 @@ msgid "Heat noise" msgstr "Isı gürültüsü" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Height component of the initial window size. Ignored in fullscreen mode." -msgstr "İlk pencere boyutunun yükseklik bileşeni." +msgstr "" +"İlk pencere boyutunun yükseklik bileşeni. Tam ekran kipinde yok sayılır." #: src/settings_translation_file.cpp msgid "Height noise" @@ -3963,12 +3951,11 @@ msgstr "" "tüketmemek için, uykuya dalarak sınırla." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n" "enabled." msgstr "" -"Devre dışı bırakılırsa \"özel\" tuşu, hem uçma hem de hızlı kipi etkin ise,\n" +"Devre dışı bırakılırsa \"Aux1\" tuşu, hem uçma hem de hızlı kipi etkin ise,\n" "hızlı uçma için kullanılır." #: src/settings_translation_file.cpp @@ -3995,13 +3982,12 @@ msgstr "" "Bu, sunucuda \"hayalet\" yetkisi gerektirir." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down " "and\n" "descending." msgstr "" -"Etkinleştirilirse, \"sızma\" tuşu yerine \"özel\" tuşu aşağı inme ve " +"Etkinleştirilirse, \"sızma\" tuşu yerine \"Aux1\" tuşu aşağı inme ve " "alçalma\n" "için kullanılır." @@ -4015,7 +4001,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "If enabled, disable cheat prevention in multiplayer." -msgstr "Etkinleştirilirse, multiplayer'da hile önleme devre dışı bırakılır." +msgstr "Etkinleştirilirse, çok oyunculuda hile önleme devre dışı bırakılır." #: src/settings_translation_file.cpp msgid "" @@ -4061,6 +4047,9 @@ msgid "" "If the execution of a chat command takes longer than this specified time in\n" "seconds, add the time information to the chat command message" msgstr "" +"Bir sohbet komutunun yürütülmesi, saniye cinsinden bu belirtilen süreden " +"daha\n" +"uzun sürerse, zaman bilgisini sohbet komut iletisine ekle" #: src/settings_translation_file.cpp msgid "" @@ -5320,9 +5309,8 @@ msgid "Map save interval" msgstr "Harita kaydetme aralığı" #: src/settings_translation_file.cpp -#, fuzzy msgid "Map update time" -msgstr "Sıvı güncelleme tıkı" +msgstr "Harita güncelleme zamanı" #: src/settings_translation_file.cpp msgid "Mapblock limit" @@ -5434,7 +5422,7 @@ msgstr "Pencere odaklanmadığında veya oyun duraklatıldığında en yüksek F #: src/settings_translation_file.cpp msgid "Maximum distance to render shadows." -msgstr "" +msgstr "Gölgeleri işlemek için azami mesafe." #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" @@ -5564,19 +5552,20 @@ msgstr "" "Kuyruğa almayı kapamak için 0 ve sınırsız kuyruk boyutu için -1." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum time a file download (e.g. a mod download) may take, stated in " "milliseconds." msgstr "" -"Bir dosya indirmesinin ms cinsinden alabileceği maksimum zaman (ör: mod " -"indirme)." +"Bir dosya indirmesinin (ör: mod indirme) alabileceği azami süre, milisaniye " +"cinsinden belirtilir." #: src/settings_translation_file.cpp msgid "" "Maximum time an interactive request (e.g. server list fetch) may take, " "stated in milliseconds." msgstr "" +"Etkileşimli bir isteğin (ör: sunucu listesi getirme) alabileceği azami süre, " +"milisaniye cinsinden belirtilir." #: src/settings_translation_file.cpp msgid "Maximum users" @@ -5803,7 +5792,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Online Content Repository" -msgstr "Çevrimiçi İçerik Deposu" +msgstr "Çevrim İçi İçerik Deposu" #: src/settings_translation_file.cpp msgid "Opaque liquids" @@ -5936,9 +5925,8 @@ msgid "Player versus player" msgstr "Oyuncu oyuncuya karşı" #: src/settings_translation_file.cpp -#, fuzzy msgid "Poisson filtering" -msgstr "Bilineer filtreleme" +msgstr "Poisson filtreleme" #: src/settings_translation_file.cpp msgid "" @@ -6338,6 +6326,9 @@ msgid "" "Set the shadow strength.\n" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" +"Gölge gücünü ayarla.\n" +"Daha düşük değer daha açık gölgeler, daha yüksek değer daha koyu gölgeler " +"anlamına gelir." #: src/settings_translation_file.cpp msgid "" @@ -6346,6 +6337,10 @@ msgid "" "resources.\n" "Minimun value 0.001 seconds max value 0.2 seconds" msgstr "" +"Gölge güncelleme zamanını ayarla.\n" +"Daha düşük değer, gölgeler ve harita güncellemelerinin daha hızlı olması " +"anlamına gelir, ancak daha fazla kaynak tüketir.\n" +"En düşük değer 0,001 saniye, en yüksek değer 0,2 saniyedir" #: src/settings_translation_file.cpp msgid "" @@ -6353,6 +6348,10 @@ msgid "" "Lower values mean sharper shadows bigger values softer.\n" "Minimun value 1.0 and max value 10.0" msgstr "" +"Yumuşak gölge yarıçapı boyutunu ayarla.\n" +"Daha düşük değerler daha keskin, daha büyük değerler daha yumuşak gölgeler " +"anlamına gelir.\n" +"En düşük değer 1.0 ve en yüksek değer 10.0" #: src/settings_translation_file.cpp msgid "" @@ -6360,15 +6359,17 @@ msgid "" "Value of 0 means no tilt / vertical orbit.\n" "Minimun value 0.0 and max value 60.0" msgstr "" +"Güneş/Ay yörüngesinin eğimini derece olarak ayarla\n" +"0 değeri, eğim / dikey yörünge olmadığı anlamına gelir.\n" +"En düşük değer 0.0 ve en yüksek değer 60.0" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable Shadow Mapping.\n" "Requires shaders to be enabled." msgstr "" -"Dalgalanan yaprakları için doğru'ya ayarlayın.\n" -"Gölgelemeler etkin kılınmalıdır." +"Gölge Eşlemeyi etkinleştirmek için doğru olarak ayarlayın.\n" +"Gölgelemelerin etkinleştirilmesini gerektirir." #: src/settings_translation_file.cpp msgid "" @@ -6400,6 +6401,9 @@ msgid "" "On false, 16 bits texture will be used.\n" "This can cause much more artifacts in the shadow." msgstr "" +"Gölge dokusu kalitesini 32 bit olarak ayarlar.\n" +"Yanlış ise 16 bit doku kullanılacaktır.\n" +"Bu, gölgede çok daha fazla bozulmalara neden olabilir." #: src/settings_translation_file.cpp msgid "Shader path" @@ -6418,22 +6422,20 @@ msgstr "" "Bu yalnızca OpenGL video arka ucu ile çalışır." #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow filter quality" -msgstr "Ekran yakalama kalitesi" +msgstr "Gölge filtresi kalitesi" #: src/settings_translation_file.cpp msgid "Shadow map max distance in nodes to render shadows" -msgstr "" +msgstr "Gölgeleri işlemek için nodlardaki gölge eşleme azami mesafesi" #: src/settings_translation_file.cpp msgid "Shadow map texture in 32 bits" -msgstr "" +msgstr "32 bitte gölge eşleme dokusu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow map texture size" -msgstr "Minimum doku boyutu" +msgstr "Gölge eşleme dokusu boyutu" #: src/settings_translation_file.cpp msgid "" @@ -6444,7 +6446,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Shadow strength" -msgstr "" +msgstr "Gölge gücü" #: src/settings_translation_file.cpp msgid "Shape of the minimap. Enabled = round, disabled = square." @@ -6502,7 +6504,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" -msgstr "" +msgstr "Gökyüzü Gövdesi Yörünge Eğimi" #: src/settings_translation_file.cpp msgid "Slice w" @@ -6562,9 +6564,8 @@ msgid "Sneaking speed, in nodes per second." msgstr "Sızma hızı, saniye başına nod cinsinden." #: src/settings_translation_file.cpp -#, fuzzy msgid "Soft shadow radius" -msgstr "Yazı tipi gölge saydamlığı" +msgstr "Yumuşak gölge yarıçapı" #: src/settings_translation_file.cpp msgid "Sound" @@ -6728,6 +6729,10 @@ msgid "" "This must be a power of two.\n" "Bigger numbers create better shadowsbut it is also more expensive." msgstr "" +"Gölge eşlemenin işleneceği doku boyutu.\n" +"Bu, 2'nin bir kuvveti olmalıdır.\n" +"Daha büyük sayılar daha iyi gölgeler oluşturur ama aynı zamanda daha fazla " +"kaynak kullanır." #: src/settings_translation_file.cpp msgid "" @@ -6825,7 +6830,6 @@ msgstr "" "Bu active_object_send_range_blocks ile birlikte ayarlanmalıdır." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end.\n" "A restart is required after changing this.\n" @@ -6834,7 +6838,7 @@ msgid "" "On other platforms, OpenGL is recommended.\n" "Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)" msgstr "" -"Irrlicht için işleme arka ucu.\n" +"İşleme arka ucu.\n" "Bunu değiştirdikten sonra yeniden başlatma gerekir.\n" "Not: Android'de, emin değilseniz OGLES1 kullanın! Başka türlü, uygulama " "başlayamayabilir.\n" @@ -6993,7 +6997,7 @@ msgstr "Güvenilen modlar" #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." -msgstr "Multiplayer sekmesinde görüntülenen sunucu listesi URL'si." +msgstr "Çok oyunculu sekmesinde görüntülenen sunucu listesinin URL'si." #: src/settings_translation_file.cpp msgid "Undersampling" @@ -7175,9 +7179,8 @@ msgid "Viewing range" msgstr "Görüntüleme uzaklığı" #: src/settings_translation_file.cpp -#, fuzzy msgid "Virtual joystick triggers Aux1 button" -msgstr "Sanal joystick aux düğmesini tetikler" +msgstr "Sanal joystick Aux1 düğmesini tetikler" #: src/settings_translation_file.cpp msgid "Volume" @@ -7277,7 +7280,6 @@ msgstr "" "sürücüleri için, eski boyutlandırma yöntemini kullan." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" "can be blurred, so automatically upscale them with nearest-neighbor\n" @@ -7294,12 +7296,10 @@ msgstr "" "pikselleri\n" "korumak için kendiliğinden büyütme yapılır. Bu minimum doku boyutunu\n" "büyütülmüş dokular için ayarlar; daha yüksek değerler daha net görünür,\n" -"ama daha fazla bellek gerektirir. 2'nin kuvvetleri tavsiye edilir. 1'den " -"daha\n" -"yükseğe ayarlamanın, bilineer/trilineer/anisotropik filtreler etkin " -"değilse,\n" -"görünür bit etkisi olmayabilir.\n" -"Bu, dünya hizalı doku kendilinden boyutlandırmada taban nod doku boyutu\n" +"ama daha fazla bellek gerektirir. 2'nin kuvvetleri tavsiye edilir. Bu ayar " +"YALNIZCA\n" +"bilineer/trilineer/anisotropik filtreler etkinse uygulanır.\n" +"Bu, dünya hizalı doku kendiliğinden boyutlandırmada taban nod doku boyutu\n" "olarak da kullanılır." #: src/settings_translation_file.cpp @@ -7375,9 +7375,8 @@ msgstr "" "ile aynı etkiye sahiptir)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Width component of the initial window size. Ignored in fullscreen mode." -msgstr "İlk pencere boyutunun genişlik bileşeni." +msgstr "İlk pencere boyutunun genişlik bileşeni. Tam ekran kipinde yok sayılır." #: src/settings_translation_file.cpp msgid "Width of the selection box lines around nodes." @@ -7511,9 +7510,8 @@ msgid "cURL file download timeout" msgstr "cURL dosya indirme zaman aşımı" #: src/settings_translation_file.cpp -#, fuzzy msgid "cURL interactive timeout" -msgstr "cURL zaman aşımı" +msgstr "cURL etkileşimli zaman aşımı" #: src/settings_translation_file.cpp msgid "cURL parallel limit" From ecd4fbc0de22d6a71c3543f82320e3c6eb52e0bc Mon Sep 17 00:00:00 2001 From: abidin toumi Date: Fri, 6 Aug 2021 05:30:43 +0000 Subject: [PATCH 092/412] Translated using Weblate (Arabic) Currently translated at 27.1% (379 of 1396 strings) --- po/ar/minetest.po | 80 ++++++++++++++++++++++------------------------- 1 file changed, 37 insertions(+), 43 deletions(-) diff --git a/po/ar/minetest.po b/po/ar/minetest.po index b7e681881..f442efb65 100644 --- a/po/ar/minetest.po +++ b/po/ar/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-03-19 20:18+0000\n" +"PO-Revision-Date: 2021-10-10 21:02+0000\n" "Last-Translator: abidin toumi \n" "Language-Team: Arabic \n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" -"X-Generator: Weblate 4.5.2-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -26,30 +26,27 @@ msgstr "" #: builtin/client/chatcommands.lua msgid "Empty command." -msgstr "" +msgstr "أمر فارغ." #: builtin/client/chatcommands.lua -#, fuzzy msgid "Exit to main menu" -msgstr "اخرج للقائمة" +msgstr "اخرج للقائمة الرئيسة" #: builtin/client/chatcommands.lua msgid "Invalid command: " -msgstr "" +msgstr "أمر غير صالح: " #: builtin/client/chatcommands.lua msgid "Issued command: " msgstr "" #: builtin/client/chatcommands.lua -#, fuzzy msgid "List online players" -msgstr "لاعب منفرد" +msgstr "قائمة اللاعبين المتصلين" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Online players: " -msgstr "لاعب منفرد" +msgstr "اللاعبون المتصلون: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." @@ -57,7 +54,7 @@ msgstr "" #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "هذا الأمر معطل من الخادم." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -68,34 +65,34 @@ msgid "You died" msgstr "مِت" #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." msgstr "مِت" #: builtin/common/chatcommands.lua msgid "Available commands:" -msgstr "" +msgstr "الأوامر المتوفرة:" #: builtin/common/chatcommands.lua msgid "Available commands: " -msgstr "" +msgstr "الأوامر المتاحة: " #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "الأوامر غير المتاحة: " #: builtin/common/chatcommands.lua msgid "Get help for commands" -msgstr "" +msgstr "احصل على تعليمات الأوامر" #: builtin/common/chatcommands.lua msgid "" "Use '.help ' to get more information, or '.help all' to list everything." msgstr "" +"استخدم '.help ' للحصول على مزيد من المعلومات أو '.help all' لعرض كل شيء." #: builtin/common/chatcommands.lua msgid "[all | ]" -msgstr "" +msgstr "[all | ]" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" @@ -236,7 +233,7 @@ msgstr "الاعتماديتان \"$1\" و $2 ستثبتان." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" -msgstr "" +msgstr "$1 بواسطة $2" #: builtin/mainmenu/dlg_contentstore.lua msgid "" @@ -256,7 +253,7 @@ msgstr "يحتاج $1 لكن لم يُعثر عليها." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" +msgstr "$1 سيُثبت، واعتماديات $1 ستُتجاهل." #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" @@ -354,7 +351,7 @@ msgstr "حدِّث الكل [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "اعرض مزيدًا من المعلومات عبر المتصفح" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" @@ -783,7 +780,7 @@ msgstr "جرب إعادة تمكين قائمة الحوادم العامة وت #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "" +msgstr "حول" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" @@ -791,7 +788,7 @@ msgstr "المساهمون النشطون" #: builtin/mainmenu/tab_about.lua msgid "Active renderer:" -msgstr "" +msgstr "محرك التصيير النشط:" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" @@ -954,13 +951,12 @@ msgid "Del. Favorite" msgstr "حذف المفضلة" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Favorites" msgstr "المفضلة" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" -msgstr "" +msgstr "خوادم غير متوافقة" #: builtin/mainmenu/tab_online.lua msgid "Join Game" @@ -971,18 +967,16 @@ msgid "Ping" msgstr "" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Public Servers" -msgstr "أعلن عن الخادوم" +msgstr "خوادم عمومية" #: builtin/mainmenu/tab_online.lua msgid "Refresh" -msgstr "" +msgstr "حدِّث" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Server Description" -msgstr "منفذ الخدوم" +msgstr "وصف الخادم" #: builtin/mainmenu/tab_settings.lua msgid "2x" @@ -1026,11 +1020,11 @@ msgstr "زجاج متصل" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Dynamic shadows" -msgstr "" +msgstr "ظلال ديناميكية" #: builtin/mainmenu/tab_settings.lua msgid "Dynamic shadows: " -msgstr "" +msgstr "ظلال ديناميكية: " #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" @@ -3270,7 +3264,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Filtering" -msgstr "" +msgstr "الترشيح" #: src/settings_translation_file.cpp msgid "First of 4 2D noises that together define hill/mountain range height." @@ -3286,11 +3280,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Fixed virtual joystick" -msgstr "" +msgstr "عصا التحكم الافتراضية ثابتة" #: src/settings_translation_file.cpp msgid "Floatland density" -msgstr "" +msgstr "كثافة الأرض الطافية" #: src/settings_translation_file.cpp msgid "Floatland maximum Y" @@ -3318,7 +3312,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Fly key" -msgstr "" +msgstr "زر الطيران" #: src/settings_translation_file.cpp msgid "Flying" @@ -3326,27 +3320,27 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Fog" -msgstr "" +msgstr "الضباب" #: src/settings_translation_file.cpp msgid "Fog start" -msgstr "" +msgstr "بداية الضباب" #: src/settings_translation_file.cpp msgid "Fog toggle key" -msgstr "" +msgstr "مفتاح تبديل ظهور الضباب" #: src/settings_translation_file.cpp msgid "Font bold by default" -msgstr "" +msgstr "الخط عريض افتراضيًا" #: src/settings_translation_file.cpp msgid "Font italic by default" -msgstr "" +msgstr "الخط مائل افتراضيًا" #: src/settings_translation_file.cpp msgid "Font shadow" -msgstr "" +msgstr "ظل الخط" #: src/settings_translation_file.cpp msgid "Font shadow alpha" @@ -3354,7 +3348,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Font size" -msgstr "" +msgstr "حجم الخط" #: src/settings_translation_file.cpp msgid "Font size of the default font in point (pt)." @@ -4567,7 +4561,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Kick players who sent more than X messages per 10 seconds." -msgstr "" +msgstr "اطرد اللاعبين الذين أرسلوا أكثر من X رسالة في 10 ثوانٍ." #: src/settings_translation_file.cpp msgid "Lake steepness" From efc99a8d427836f44625e641fb5bf2a70ca97db2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Allan=20Nordh=C3=B8y?= Date: Sat, 7 Aug 2021 00:51:19 +0000 Subject: [PATCH 093/412] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 56.0% (783 of 1396 strings) --- po/nb/minetest.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/po/nb/minetest.po b/po/nb/minetest.po index fc0c0ed5c..280bba7e4 100644 --- a/po/nb/minetest.po +++ b/po/nb/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Norwegian Bokmål (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-07-07 09:35+0000\n" -"Last-Translator: Liet Kynes \n" +"PO-Revision-Date: 2021-08-08 01:37+0000\n" +"Last-Translator: Allan Nordhøy \n" "Language-Team: Norwegian Bokmål \n" "Language: nb\n" @@ -1120,7 +1120,7 @@ msgstr "Enkle løv" #: builtin/mainmenu/tab_settings.lua msgid "Smooth Lighting" -msgstr "Gjevn belysning" +msgstr "Jevn belysning" #: builtin/mainmenu/tab_settings.lua msgid "Texturing:" From f57b8f3e8a6a8e7be02a0e1a0d8c33b19f75e7b4 Mon Sep 17 00:00:00 2001 From: phlostically Date: Fri, 6 Aug 2021 12:20:34 +0000 Subject: [PATCH 094/412] Translated using Weblate (Esperanto) Currently translated at 95.2% (1329 of 1396 strings) --- po/eo/minetest.po | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/po/eo/minetest.po b/po/eo/minetest.po index 24cf6ebbc..7b967bcb8 100644 --- a/po/eo/minetest.po +++ b/po/eo/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Esperanto (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-05-31 21:42+0000\n" -"Last-Translator: Tirifto \n" +"PO-Revision-Date: 2021-08-08 01:37+0000\n" +"Last-Translator: phlostically \n" "Language-Team: Esperanto \n" "Language: eo\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.8-dev\n" #: builtin/client/chatcommands.lua #, fuzzy @@ -65,9 +65,8 @@ msgid "You died" msgstr "Vi mortis" #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." -msgstr "Vi mortis" +msgstr "Vi mortis." #: builtin/common/chatcommands.lua #, fuzzy @@ -786,7 +785,7 @@ msgstr "" #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "" +msgstr "Pri" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" @@ -930,9 +929,8 @@ msgid "Start Game" msgstr "Ekigi ludon" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Address" -msgstr "– Adreso: " +msgstr "Adreso" #: builtin/mainmenu/tab_online.lua src/client/keycode.cpp msgid "Clear" @@ -963,7 +961,7 @@ msgstr "Ŝati" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" -msgstr "" +msgstr "Nekongruaj serviloj" #: builtin/mainmenu/tab_online.lua msgid "Join Game" @@ -1028,13 +1026,12 @@ msgid "Connected Glass" msgstr "Ligata vitro" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp -#, fuzzy msgid "Dynamic shadows" -msgstr "Tipara ombro" +msgstr "Dinamikaj ombroj" #: builtin/mainmenu/tab_settings.lua msgid "Dynamic shadows: " -msgstr "" +msgstr "Dinamikaj ombroj: " #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" @@ -5933,9 +5930,8 @@ msgid "Player versus player" msgstr "Ludanto kontraŭ ludanto" #: src/settings_translation_file.cpp -#, fuzzy msgid "Poisson filtering" -msgstr "Dulineara filtrado" +msgstr "Poisson-filtrado" #: src/settings_translation_file.cpp msgid "" From c062daccc9f185b903771346ff5defa95fcf9cac Mon Sep 17 00:00:00 2001 From: Marian Date: Mon, 9 Aug 2021 09:23:41 +0000 Subject: [PATCH 095/412] Translated using Weblate (Slovak) Currently translated at 95.2% (1329 of 1396 strings) --- po/sk/minetest.po | 207 +++++++++++++++++++++++----------------------- 1 file changed, 102 insertions(+), 105 deletions(-) diff --git a/po/sk/minetest.po b/po/sk/minetest.po index a1f9cd9b3..93af9ee63 100644 --- a/po/sk/minetest.po +++ b/po/sk/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-04-21 20:29+0000\n" +"PO-Revision-Date: 2021-08-13 21:34+0000\n" "Last-Translator: Marian \n" "Language-Team: Slovak \n" @@ -17,49 +17,43 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.8-dev\n" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Clear the out chat queue" -msgstr "Maximálna veľkosť výstupnej komunikačnej fronty" +msgstr "Vymaž výstupnú komunikačnú frontu" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Empty command." -msgstr "Komunikačné príkazy" +msgstr "Prázdny príkaz." #: builtin/client/chatcommands.lua -#, fuzzy msgid "Exit to main menu" msgstr "Návrat do menu" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Invalid command: " -msgstr "Lokálny príkaz" +msgstr "Chybný príkaz: " #: builtin/client/chatcommands.lua msgid "Issued command: " -msgstr "" +msgstr "Spustený príkaz: " #: builtin/client/chatcommands.lua -#, fuzzy msgid "List online players" -msgstr "Hra pre jedného hráča" +msgstr "Zoznam online hráčov" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Online players: " -msgstr "Hra pre jedného hráča" +msgstr "Online hráči: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." -msgstr "" +msgstr "Výstupná komunikačná fronty je teraz prázdna." #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "Tento príkaz je zakázaný serverom." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -70,36 +64,35 @@ msgid "You died" msgstr "Zomrel si" #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." -msgstr "Zomrel si" +msgstr "Zomrel si." #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands:" -msgstr "Lokálny príkaz" +msgstr "Dostupné príkazy:" #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands: " -msgstr "Lokálny príkaz" +msgstr "Dostupné príkazy: " #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "Príkaz nie je k dispozícií: " #: builtin/common/chatcommands.lua msgid "Get help for commands" -msgstr "" +msgstr "Zobraz pomoc k príkazom" #: builtin/common/chatcommands.lua msgid "" "Use '.help ' to get more information, or '.help all' to list everything." msgstr "" +"Použi '.help ' aby si získal viac informácií, alebo '.help all' pre " +"zobrazenie všetkého." #: builtin/common/chatcommands.lua msgid "[all | ]" -msgstr "" +msgstr "[all | ]" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" @@ -795,16 +788,15 @@ msgstr "" #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "" +msgstr "O" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" msgstr "Aktívny prispievatelia" #: builtin/mainmenu/tab_about.lua -#, fuzzy msgid "Active renderer:" -msgstr "Zasielaný rozsah aktívnych objektov" +msgstr "Aktívny renderer:" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" @@ -939,9 +931,8 @@ msgid "Start Game" msgstr "Spusti hru" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Address" -msgstr "- Adresa: " +msgstr "Adresa" #: builtin/mainmenu/tab_online.lua src/client/keycode.cpp msgid "Clear" @@ -957,22 +948,20 @@ msgstr "Kreatívny mód" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Damage / PvP" -msgstr "Zranenie" +msgstr "Zranenie / PvP" #: builtin/mainmenu/tab_online.lua msgid "Del. Favorite" msgstr "Zmaž obľúbené" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Favorites" msgstr "Obľúbené" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" -msgstr "" +msgstr "Nekompatibilné servery" #: builtin/mainmenu/tab_online.lua msgid "Join Game" @@ -983,16 +972,14 @@ msgid "Ping" msgstr "Ping" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Public Servers" -msgstr "Zverejni server" +msgstr "Verejné servery" #: builtin/mainmenu/tab_online.lua msgid "Refresh" -msgstr "" +msgstr "Obnov" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Server Description" msgstr "Popis servera" @@ -1037,13 +1024,12 @@ msgid "Connected Glass" msgstr "Prepojené sklo" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp -#, fuzzy msgid "Dynamic shadows" -msgstr "Tieň písma" +msgstr "Dynamické tiene" #: builtin/mainmenu/tab_settings.lua msgid "Dynamic shadows: " -msgstr "" +msgstr "Dynamické tiene: " #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" @@ -1051,15 +1037,15 @@ msgstr "Ozdobné listy" #: builtin/mainmenu/tab_settings.lua msgid "High" -msgstr "" +msgstr "Vysoké" #: builtin/mainmenu/tab_settings.lua msgid "Low" -msgstr "" +msgstr "Nízke" #: builtin/mainmenu/tab_settings.lua msgid "Medium" -msgstr "" +msgstr "Stredné" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" @@ -1151,11 +1137,11 @@ msgstr "Trilineárny filter" #: builtin/mainmenu/tab_settings.lua msgid "Ultra High" -msgstr "" +msgstr "Veľmi vysoké" #: builtin/mainmenu/tab_settings.lua msgid "Very Low" -msgstr "" +msgstr "Veľmi nízke" #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" @@ -1472,9 +1458,8 @@ msgid "Minimap currently disabled by game or mod" msgstr "Minimapa je aktuálne zakázaná hrou, alebo rozšírením" #: src/client/game.cpp -#, fuzzy msgid "Multiplayer" -msgstr "Hra pre jedného hráča" +msgstr "Hra pre viacerých hráčov" #: src/client/game.cpp msgid "Noclip mode disabled" @@ -1911,9 +1896,8 @@ msgid "Proceed" msgstr "Pokračuj" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "\"Aux1\" = climb down" -msgstr "\"Špeciál\"=šplhaj dole" +msgstr "\"Aux1\"=šplhaj dole" #: src/gui/guiKeyChangeMenu.cpp msgid "Autoforward" @@ -1925,7 +1909,7 @@ msgstr "Automatické skákanie" #: src/gui/guiKeyChangeMenu.cpp msgid "Aux1" -msgstr "" +msgstr "Aux1" #: src/gui/guiKeyChangeMenu.cpp msgid "Backward" @@ -1933,7 +1917,7 @@ msgstr "Vzad" #: src/gui/guiKeyChangeMenu.cpp msgid "Block bounds" -msgstr "" +msgstr "Hranice bloku" #: src/gui/guiKeyChangeMenu.cpp msgid "Change camera" @@ -2111,14 +2095,13 @@ msgstr "" "Ak je vypnuté, virtuálny joystick sa vycentruje na pozícií prvého dotyku." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "(Android) Use virtual joystick to trigger \"Aux1\" button.\n" "If enabled, virtual joystick will also tap \"Aux1\" button when out of main " "circle." msgstr "" -"(Android) Použije virtuálny joystick na stlačenie tlačidla \"aux\".\n" -"Ak je aktivované, virtuálny joystick stlačí tlačidlo \"aux\" keď je mimo " +"(Android) Použije virtuálny joystick na stlačenie tlačidla \"Aux1\".\n" +"Ak je aktivované, virtuálny joystick stlačí tlačidlo \"Aux1\" keď je mimo " "hlavný kruh." #: src/settings_translation_file.cpp @@ -2474,14 +2457,12 @@ msgid "Autoscaling mode" msgstr "Režim automatickej zmeny mierky" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key" -msgstr "Tlačidlo Skok" +msgstr "Tlačidlo Aux1" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key for climbing/descending" -msgstr "Špeciálna klávesa pre šplhanie hore/dole" +msgstr "Klávesa Aux1 pre šplhanie hore/dole" #: src/settings_translation_file.cpp msgid "Backward key" @@ -2632,9 +2613,8 @@ msgstr "" "Kde 0.0 je minimálna úroveň, 1.0 je maximálna úroveň ." #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat command time message threshold" -msgstr "Hranica správ pre vylúčenie" +msgstr "Časové obmedzenie príkazu v správe" #: src/settings_translation_file.cpp msgid "Chat font size" @@ -2733,9 +2713,8 @@ msgid "Colored fog" msgstr "Farebná hmla" #: src/settings_translation_file.cpp -#, fuzzy msgid "Colored shadows" -msgstr "Farebná hmla" +msgstr "Farebné tiene" #: src/settings_translation_file.cpp msgid "" @@ -2963,6 +2942,9 @@ msgid "" "This simulates the soft shadows effect by applying a PCF or poisson disk\n" "but also uses more resources." msgstr "" +"Definuje kvalitu filtrovania tieňov\n" +"Toto simuluje efekt jemných tieňov použitím PCF alebo poisson disk\n" +"zároveň ale spotrebováva viac zdrojov." #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." @@ -3139,6 +3121,8 @@ msgid "" "Enable colored shadows. \n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" +"Aktivuj farebné tiene. \n" +"Ak je aktivovaný, tak priesvitné kocky dávajú farebné tiene. Toto je náročné." #: src/settings_translation_file.cpp msgid "Enable console window" @@ -3170,6 +3154,9 @@ msgid "" "On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " "filtering." msgstr "" +"Aktivuj poisson disk filtrovanie.\n" +"Ak je aktivované použije poisson disk pre vytvorenie \"mäkkých tieňov\". V " +"opačnom prípade sa použije PCF filtrovanie." #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." @@ -3343,12 +3330,11 @@ msgid "Fast movement" msgstr "Rýchly pohyb" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Fast movement (via the \"Aux1\" key).\n" "This requires the \"fast\" privilege on the server." msgstr "" -"Rýchly pohyb (cez \"špeciálnu\" klávesu).\n" +"Rýchly pohyb (cez \"Aux1\" klávesu).\n" "Toto si na serveri vyžaduje privilégium \"fast\"." #: src/settings_translation_file.cpp @@ -3381,7 +3367,6 @@ msgid "Filmic tone mapping" msgstr "Filmový tone mapping" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Filtered textures can blend RGB values with fully-transparent neighbors,\n" "which PNG optimizers usually discard, often resulting in dark or\n" @@ -3390,9 +3375,12 @@ msgid "" msgstr "" "Filtrované textúry môžu zmiešať svoje RGB hodnoty s plne priehľadnými " "susedmi,\n" -"s PNG optimizérmi obvykle zmazané, niekdy môžu viesť k tmavým oblastiam\n" -"alebo svetlým rohom na priehľadnej textúre.\n" -"Aplikuj tento filter na ich vyčistenie pri nahrávaní textúry." +"ktoré sú PNG optimizérmi obvykle zmazané, niekdy môžu viesť k tmavým " +"oblastiam\n" +"alebo svetlým rohom na priehľadnej textúre. Aplikuj tento filter na ich " +"vyčistenie\n" +"pri nahrávaní textúry. Toto je automaticky aktivované, ak je aktivovaný " +"mipmapping." #: src/settings_translation_file.cpp msgid "Filtering" @@ -3716,10 +3704,9 @@ msgid "Heat noise" msgstr "Teplotný šum" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Height component of the initial window size. Ignored in fullscreen mode." -msgstr "Výška okna po spustení." +msgstr "Výška okna po spustení. Ignorované v móde plnej obrazovky." #: src/settings_translation_file.cpp msgid "Height noise" @@ -3972,12 +3959,12 @@ msgstr "" "sa bezvýznamne, bez úžitku neplytvalo výkonom CPU." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n" "enabled." msgstr "" -"Ak je aktivované, použije sa \"špeciálna\" klávesa na lietanie, v prípade,\n" +"Ak nie je aktivované, použije sa \"Aux1\" klávesa na rýchle lietanie, v " +"prípade,\n" "že je povolený režim lietania aj rýchlosti." #: src/settings_translation_file.cpp @@ -4005,14 +3992,13 @@ msgstr "" "Toto si na serveri vyžaduje privilégium \"noclip\"." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down " "and\n" "descending." msgstr "" -"Ak je aktivované, použije sa namiesto klávesy pre \"zakrádanie\" \"špeciálnu " -"klávesu\"\n" +"Ak je aktivované, použije sa namiesto klávesy pre \"zakrádanie\" \"Aux1\" " +"klávesu\n" "pre klesanie a šplhanie dole." #: src/settings_translation_file.cpp @@ -4072,6 +4058,8 @@ msgid "" "If the execution of a chat command takes longer than this specified time in\n" "seconds, add the time information to the chat command message" msgstr "" +"Ak vykonanie príkazu trvá dlhšie ako zadaný čas v sekundách,\n" +"tak pridá informáciu o čase do komunikačného správy príkazu" #: src/settings_translation_file.cpp msgid "" @@ -5332,9 +5320,8 @@ msgid "Map save interval" msgstr "Interval ukladania mapy" #: src/settings_translation_file.cpp -#, fuzzy msgid "Map update time" -msgstr "Aktualizačný interval tekutín" +msgstr "Aktualizačný čas mapy" #: src/settings_translation_file.cpp msgid "Mapblock limit" @@ -5447,7 +5434,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Maximum distance to render shadows." -msgstr "" +msgstr "Maximálna vzdialenosť pre renderovanie tieňov." #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" @@ -5578,7 +5565,6 @@ msgstr "" "0 pre zakázanie fronty a -1 pre neobmedzenú frontu." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum time a file download (e.g. a mod download) may take, stated in " "milliseconds." @@ -5591,6 +5577,8 @@ msgid "" "Maximum time an interactive request (e.g. server list fetch) may take, " "stated in milliseconds." msgstr "" +"Maximálny čas v ms, ktorý môže zabrať interaktívna požiadavka (napr. " +"sťahovanie zoznamu serverov)." #: src/settings_translation_file.cpp msgid "Maximum users" @@ -5953,9 +5941,8 @@ msgid "Player versus player" msgstr "Hráč proti hráčovi (PvP)" #: src/settings_translation_file.cpp -#, fuzzy msgid "Poisson filtering" -msgstr "Bilineárne filtrovanie" +msgstr "Poisson filtrovanie" #: src/settings_translation_file.cpp msgid "" @@ -6351,6 +6338,9 @@ msgid "" "Set the shadow strength.\n" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" +"Nastav silu tieňov.\n" +"Nižšia hodnota znamená svetlejšie tiene, vyššia hodnota znamená tmavšie " +"tiene." #: src/settings_translation_file.cpp msgid "" @@ -6359,6 +6349,10 @@ msgid "" "resources.\n" "Minimun value 0.001 seconds max value 0.2 seconds" msgstr "" +"Nastav aktualizačný čas tieňov.\n" +"Nižšia hodnota znamená. že sa mapa a tiene aktualizujú rýchlejšie, ale " +"spotrebuje sa viac zdrojov.\n" +"Minimálna hodnota je 0.001 sekúnd max. hodnota je 0.2 sekundy" #: src/settings_translation_file.cpp msgid "" @@ -6366,6 +6360,9 @@ msgid "" "Lower values mean sharper shadows bigger values softer.\n" "Minimun value 1.0 and max value 10.0" msgstr "" +"Nastav dosah mäkkých tieňov.\n" +"Nižšia hodnota znamená ostrejšie a vyššia jemnejšie tiene.\n" +"Minimálna hodnota je 1.0 a max. hodnota je 10.0" #: src/settings_translation_file.cpp msgid "" @@ -6373,14 +6370,16 @@ msgid "" "Value of 0 means no tilt / vertical orbit.\n" "Minimun value 0.0 and max value 60.0" msgstr "" +"Nastav sklon orbity slnka/mesiaca v stupňoch\n" +"Hodnota 0 znamená bez vertikálneho sklonu orbity.\n" +"Minimálna hodnota je 0.0 a max. hodnota je 60.0" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable Shadow Mapping.\n" "Requires shaders to be enabled." msgstr "" -"Nastav true pre povolenie vlniacich sa listov.\n" +"Nastav true pre povolenie mapovania tieňov.\n" "Požaduje aby boli aktivované shadery." #: src/settings_translation_file.cpp @@ -6413,6 +6412,9 @@ msgid "" "On false, 16 bits texture will be used.\n" "This can cause much more artifacts in the shadow." msgstr "" +"Nastav kvalitu textúr tieňov na 32 bitov.\n" +"Ak je false, použijú sa 16 bitové textúry.\n" +"Toto môže spôsobiť v tieňoch viac artefaktov." #: src/settings_translation_file.cpp msgid "Shader path" @@ -6431,22 +6433,20 @@ msgstr "" "Toto funguje len s OpenGL." #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow filter quality" -msgstr "Kvalita snímok obrazovky" +msgstr "Kvalita filtra pre tiene" #: src/settings_translation_file.cpp msgid "Shadow map max distance in nodes to render shadows" -msgstr "" +msgstr "Maximálna vzdialenosť v kockách, pre mapu tieňov na renderovanie tieňov" #: src/settings_translation_file.cpp msgid "Shadow map texture in 32 bits" -msgstr "" +msgstr "32 bitové textúry pre mapovanie tieňov" #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow map texture size" -msgstr "Minimálna veľkosť textúry" +msgstr "Veľkosť textúry pre mapovanie tieňov" #: src/settings_translation_file.cpp msgid "" @@ -6458,7 +6458,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Shadow strength" -msgstr "" +msgstr "Sila tieňov" #: src/settings_translation_file.cpp msgid "Shape of the minimap. Enabled = round, disabled = square." @@ -6517,7 +6517,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" -msgstr "" +msgstr "Sklon orbity na oblohe" #: src/settings_translation_file.cpp msgid "Slice w" @@ -6577,9 +6577,8 @@ msgid "Sneaking speed, in nodes per second." msgstr "Rýchlosť zakrádania sa, v kockách za sekundu." #: src/settings_translation_file.cpp -#, fuzzy msgid "Soft shadow radius" -msgstr "Priehľadnosť tieňa písma" +msgstr "Dosah mäkkých tieňov" #: src/settings_translation_file.cpp msgid "Sound" @@ -6744,6 +6743,9 @@ msgid "" "This must be a power of two.\n" "Bigger numbers create better shadowsbut it is also more expensive." msgstr "" +"Veľkosť textúry pre renderovanie mapy tieňov.\n" +"Toto musí byť mocnina dvoch.\n" +"Väčšie čísla vytvoria lepšie tiene, ale sú aj naročnejšie." #: src/settings_translation_file.cpp msgid "" @@ -6841,7 +6843,6 @@ msgstr "" "Malo by to byť konfigurované spolu s active_object_send_range_blocks." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end.\n" "A restart is required after changing this.\n" @@ -6850,7 +6851,7 @@ msgid "" "On other platforms, OpenGL is recommended.\n" "Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)" msgstr "" -"Renderovací back-end pre Irrlicht.\n" +"Renderovací back-end.\n" "Po zmene je vyžadovaný reštart.\n" "Poznámka: Na Androide, ak si nie si istý, ponechaj OGLES1! Aplikácia by " "nemusela naštartovať.\n" @@ -7182,9 +7183,8 @@ msgid "Viewing range" msgstr "Vzdialenosť dohľadu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Virtual joystick triggers Aux1 button" -msgstr "Virtuálny joystick stlačí tlačidlo aux" +msgstr "Virtuálny joystick aktivuje tlačidlo Aux1" #: src/settings_translation_file.cpp msgid "Volume" @@ -7284,7 +7284,6 @@ msgstr "" "nepodporujú sťahovanie textúr z hardvéru." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" "can be blurred, so automatically upscale them with nearest-neighbor\n" @@ -7301,8 +7300,8 @@ msgstr "" "s najbližším susedom aby bola zachovaná ostrosť pixelov.\n" "Toto nastaví minimálnu veľkosť pre upravenú textúru;\n" "vyššia hodnota znamená ostrejší vzhľad, ale potrebuje viac pamäti.\n" -"Odporúčané sú mocniny 2. Nastavenie viac než 1 nemusí mať viditeľný efekt,\n" -"kým nie je použité bilineárne/trilineárne/anisotropné filtrovanie.\n" +"Odporúčané sú mocniny 2. Nastavenie sa aplikuje len,\n" +"ak je použité bilineárne/trilineárne/anisotropné filtrovanie.\n" "Toto sa tiež používa ako základná veľkosť textúry kociek pre\n" "\"world-aligned autoscaling\" textúr." @@ -7370,9 +7369,8 @@ msgid "" msgstr "Zobrazenie ladiaceho okna na klientovi (má rovnaký efekt ako F5)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Width component of the initial window size. Ignored in fullscreen mode." -msgstr "Šírka okna po spustení." +msgstr "Šírka okna po spustení. Ignorované v móde celej obrazovky." #: src/settings_translation_file.cpp msgid "Width of the selection box lines around nodes." @@ -7508,9 +7506,8 @@ msgid "cURL file download timeout" msgstr "cURL časový rámec sťahovania súborov" #: src/settings_translation_file.cpp -#, fuzzy msgid "cURL interactive timeout" -msgstr "Časový rámec cURL" +msgstr "Časový rámec interakcie cURL" #: src/settings_translation_file.cpp msgid "cURL parallel limit" From 0eb829f5de61e1b0676c0f640948fabe84e4b9e7 Mon Sep 17 00:00:00 2001 From: Thiago Carmona Monteiro Date: Wed, 11 Aug 2021 07:58:55 +0000 Subject: [PATCH 096/412] Translated using Weblate (Portuguese (Brazil)) Currently translated at 94.4% (1319 of 1396 strings) --- po/pt_BR/minetest.po | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/po/pt_BR/minetest.po b/po/pt_BR/minetest.po index edb8b8324..1302b9836 100644 --- a/po/pt_BR/minetest.po +++ b/po/pt_BR/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Portuguese (Brazil) (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-02-23 15:50+0000\n" -"Last-Translator: Victor Barcelos Lacerda \n" +"PO-Revision-Date: 2021-08-12 08:35+0000\n" +"Last-Translator: Thiago Carmona Monteiro \n" "Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.5\n" +"X-Generator: Weblate 4.8-dev\n" #: builtin/client/chatcommands.lua #, fuzzy @@ -20,9 +20,8 @@ msgid "Clear the out chat queue" msgstr "Tamanho máximo da fila do chat" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Empty command." -msgstr "Comandos de Chat" +msgstr "Comando vazio." #: builtin/client/chatcommands.lua #, fuzzy @@ -98,7 +97,7 @@ msgstr "" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" -msgstr "OK" +msgstr "Ok" #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" @@ -134,7 +133,7 @@ msgstr "O servidor suporta versões de protocolo entre $1 e $2. " #: builtin/mainmenu/common.lua msgid "We only support protocol version $1." -msgstr "Suportamos apenas o protocolo de versão $1." +msgstr "Nós só suportamos a versão do protocolo $1." #: builtin/mainmenu/common.lua msgid "We support protocol versions between version $1 and $2." From cd3a8f96c654017a26e9afda0c3d78f1e6e0985e Mon Sep 17 00:00:00 2001 From: Zhaolin Lau Date: Thu, 12 Aug 2021 21:27:16 +0000 Subject: [PATCH 097/412] Translated using Weblate (Chinese (Simplified)) Currently translated at 95.3% (1331 of 1396 strings) --- po/zh_CN/minetest.po | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/po/zh_CN/minetest.po b/po/zh_CN/minetest.po index 409f2e939..75c2c49cb 100644 --- a/po/zh_CN/minetest.po +++ b/po/zh_CN/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Chinese (Simplified) (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-08-02 16:34+0000\n" -"Last-Translator: Emily Ellis \n" +"PO-Revision-Date: 2021-08-13 21:34+0000\n" +"Last-Translator: Zhaolin Lau \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_CN\n" @@ -3985,7 +3985,7 @@ msgstr "" msgid "" "If the execution of a chat command takes longer than this specified time in\n" "seconds, add the time information to the chat command message" -msgstr "" +msgstr "如果聊天命令的执行时间长于此指定以秒为单位时间,请将时间信息添加到聊天命令消息中。" #: src/settings_translation_file.cpp msgid "" @@ -5414,7 +5414,7 @@ msgid "" "Maximum number of concurrent downloads. Downloads exceeding this limit will " "be queued.\n" "This should be lower than curl_parallel_limit." -msgstr "" +msgstr "最大并发下载数。 超过此限制的下载将排队。 这应该低于 curl_parallel_limit(卷曲平行限制)。" #: src/settings_translation_file.cpp msgid "Maximum number of forceloaded mapblocks." @@ -5489,7 +5489,7 @@ msgstr "单个文件下载(如mod下载)的最大时间。" msgid "" "Maximum time an interactive request (e.g. server list fetch) may take, " "stated in milliseconds." -msgstr "" +msgstr "交互式请求(例如服务器列表获取)可能需要的最长时间,以毫秒为单位。" #: src/settings_translation_file.cpp msgid "Maximum users" @@ -6239,6 +6239,8 @@ msgid "" "Set the shadow strength.\n" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" +"设置阴影强度。\n" +"较低的值表示较亮的阴影,较高的值表示较暗的阴影。" #: src/settings_translation_file.cpp msgid "" @@ -6247,6 +6249,9 @@ msgid "" "resources.\n" "Minimun value 0.001 seconds max value 0.2 seconds" msgstr "" +"设置阴影更新时间。\n" +"较低的值意味着阴影和贴图更新更快,但会消耗更多资源。\n" +"最小值 0.001 秒 最大值 0.2 秒" #: src/settings_translation_file.cpp msgid "" @@ -6254,6 +6259,9 @@ msgid "" "Lower values mean sharper shadows bigger values softer.\n" "Minimun value 1.0 and max value 10.0" msgstr "" +"设置软阴影半径大小。\n" +"较低的值意味着更清晰的阴影更大的值更柔和。\n" +"最小值 1.0 和最大值 10.0" #: src/settings_translation_file.cpp msgid "" @@ -6261,6 +6269,9 @@ msgid "" "Value of 0 means no tilt / vertical orbit.\n" "Minimun value 0.0 and max value 60.0" msgstr "" +"以度为单位设置太阳/月亮轨道的倾斜度\n" +"值 0 表示没有倾斜/垂直轨道。\n" +"最小值 0.0 和最大值 60.0" #: src/settings_translation_file.cpp #, fuzzy @@ -6301,6 +6312,9 @@ msgid "" "On false, 16 bits texture will be used.\n" "This can cause much more artifacts in the shadow." msgstr "" +"将阴影纹理质量设置为 32 位。\n" +"如果为 false(否),将使用 16 位纹理。\n" +"这可能会导致阴影中出现更多阴影。" #: src/settings_translation_file.cpp msgid "Shader path" @@ -6324,11 +6338,11 @@ msgstr "截图品质" #: src/settings_translation_file.cpp msgid "Shadow map max distance in nodes to render shadows" -msgstr "" +msgstr "渲染阴影的节点中的阴影贴图最大距离" #: src/settings_translation_file.cpp msgid "Shadow map texture in 32 bits" -msgstr "" +msgstr "32 位阴影贴图纹理" #: src/settings_translation_file.cpp #, fuzzy @@ -6343,7 +6357,7 @@ msgstr "默认字体阴影偏移(单位为像素),0 表示不绘制阴影 #: src/settings_translation_file.cpp msgid "Shadow strength" -msgstr "" +msgstr "阴影强度" #: src/settings_translation_file.cpp msgid "Shape of the minimap. Enabled = round, disabled = square." @@ -6402,7 +6416,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" -msgstr "" +msgstr "天体轨道倾斜" #: src/settings_translation_file.cpp msgid "Slice w" From 4866e06e6258738db036581e7fe3a08af13546c8 Mon Sep 17 00:00:00 2001 From: GunChleoc Date: Wed, 18 Aug 2021 06:35:25 +0000 Subject: [PATCH 098/412] Translated using Weblate (Gaelic) Currently translated at 17.0% (238 of 1396 strings) --- po/gd/minetest.po | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/po/gd/minetest.po b/po/gd/minetest.po index fb95014bb..88aaa36d9 100644 --- a/po/gd/minetest.po +++ b/po/gd/minetest.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2020-06-22 17:56+0000\n" +"PO-Revision-Date: 2021-08-19 06:36+0000\n" "Last-Translator: GunChleoc \n" "Language-Team: Gaelic \n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " "(n > 2 && n < 20) ? 2 : 3;\n" -"X-Generator: Weblate 4.2-dev\n" +"X-Generator: Weblate 4.8-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -2162,10 +2162,10 @@ msgid "" "a value range of approximately -2.0 to 2.0." msgstr "" "Riasladh 3D a mhìnicheas structar na tìre air fhleòd.\n" -"Mura cleachd thu an luach tùsail, dh’fhaoidte gum fheàirrde thu gleus a chur " -"air “scale” an riaslaidh (0.7 o thùs)\n" -", on a dh’obraicheas foincseanan cinn-chaoil as fheàrr\n" -"nuair a bhios an riasladh seo eadar mu -2.0 agus 2.0." +"Mura cleachd thu an luach bunaiteach, dh’fhaoidte gum b’ fheàirrde thu\n" +"gleus a chur air “scale” an riaslaidh (0.7 a ghnàth) on a dh’obraicheas " +"foincseanan\n" +"cinn-chaoil as fheàrr nuair a bhios an riasladh seo eadar mu -2.0 agus 2.0." #: src/settings_translation_file.cpp msgid "3D noise defining structure of river canyon walls." @@ -2821,7 +2821,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Default privileges" -msgstr "Sochairean tùsail" +msgstr "Sochairean bunaiteach" #: src/settings_translation_file.cpp msgid "Default report format" From dc73d441b52ed44f7f74bda4db0922dc42c62132 Mon Sep 17 00:00:00 2001 From: A M Date: Tue, 24 Aug 2021 16:18:20 +0000 Subject: [PATCH 099/412] Translated using Weblate (Polish) Currently translated at 71.4% (998 of 1396 strings) --- po/pl/minetest.po | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/po/pl/minetest.po b/po/pl/minetest.po index 6e3b8f3b8..7e67d9e75 100644 --- a/po/pl/minetest.po +++ b/po/pl/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Polish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-07-01 18:33+0000\n" -"Last-Translator: Mateusz Mendel \n" +"PO-Revision-Date: 2021-08-25 16:34+0000\n" +"Last-Translator: A M \n" "Language-Team: Polish \n" "Language: pl\n" @@ -13,17 +13,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.8.1-dev\n" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Clear the out chat queue" msgstr "Wyczyść kolejkę wiadomości czatu" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Empty command." -msgstr "Puste komenda." +msgstr "Pusta komenda." #: builtin/client/chatcommands.lua msgid "Exit to main menu" @@ -38,21 +36,18 @@ msgid "Issued command: " msgstr "Wydana komenda: " #: builtin/client/chatcommands.lua -#, fuzzy msgid "List online players" -msgstr "Lista graczy sieciowych" +msgstr "Lista graczy online" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Online players: " -msgstr "Gracze sieciowi: " +msgstr "Gracze online: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." msgstr "Kolejka czatu jest teraz pusta." #: builtin/client/chatcommands.lua -#, fuzzy msgid "This command is disabled by server." msgstr "Ta komenda jest dezaktywowana przez serwer." @@ -69,12 +64,10 @@ msgid "You died." msgstr "Umarłeś." #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands:" msgstr "Dostępne komendy:" #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands: " msgstr "Dostępne komendy: " From 7d2c99e2c27cf2fb66a93a806c17f86093cc6de0 Mon Sep 17 00:00:00 2001 From: Tirifto Date: Tue, 24 Aug 2021 11:22:12 +0000 Subject: [PATCH 100/412] Translated using Weblate (Esperanto) Currently translated at 95.9% (1340 of 1396 strings) --- po/eo/minetest.po | 39 ++++++++++++++++----------------------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/po/eo/minetest.po b/po/eo/minetest.po index 7b967bcb8..9af8f5ec9 100644 --- a/po/eo/minetest.po +++ b/po/eo/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Esperanto (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-08-08 01:37+0000\n" -"Last-Translator: phlostically \n" +"PO-Revision-Date: 2021-08-25 16:34+0000\n" +"Last-Translator: Tirifto \n" "Language-Team: Esperanto \n" "Language: eo\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.8.1-dev\n" #: builtin/client/chatcommands.lua #, fuzzy @@ -20,33 +20,28 @@ msgid "Clear the out chat queue" msgstr "Maksimumo da atendantaj elaj mesaĝoj" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Empty command." -msgstr "Babilaj komandoj" +msgstr "Malplena komando." #: builtin/client/chatcommands.lua -#, fuzzy msgid "Exit to main menu" -msgstr "Eliri al menuo" +msgstr "Eliri al ĉefmenuo" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Invalid command: " -msgstr "Loka komando" +msgstr "Nevalida komando: " #: builtin/client/chatcommands.lua msgid "Issued command: " -msgstr "" +msgstr "Donita komando: " #: builtin/client/chatcommands.lua -#, fuzzy msgid "List online players" -msgstr "Ludo por unu" +msgstr "Listigi enretajn ludantojn" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Online players: " -msgstr "Ludo por unu" +msgstr "Enretaj ludantoj: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." @@ -54,7 +49,7 @@ msgstr "" #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "Ĉi tiun komandon malŝaltis servilo." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -69,22 +64,20 @@ msgid "You died." msgstr "Vi mortis." #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands:" -msgstr "Loka komando" +msgstr "Uzeblaj komandoj:" #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands: " -msgstr "Loka komando" +msgstr "Uzeblaj komandoj: " #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "Komando ne uzeblas: " #: builtin/common/chatcommands.lua msgid "Get help for commands" -msgstr "" +msgstr "Trovu helpon pri komandoj" #: builtin/common/chatcommands.lua msgid "" @@ -961,7 +954,7 @@ msgstr "Ŝati" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" -msgstr "Nekongruaj serviloj" +msgstr "Neakordaj serviloj" #: builtin/mainmenu/tab_online.lua msgid "Join Game" @@ -3193,7 +3186,7 @@ msgid "" "expecting." msgstr "" "Ŝalti por malpermesi konekton de malnovaj klientoj.\n" -"Malnovaj klientoj estas kongruaj tiel, ke ili ne fiaskas konektante al novaj " +"Malnovaj klientoj estas akordaj tiel, ke ili ne fiaskas konektante al novaj " "serviloj,\n" "sed eble ili ne subtenos ĉiujn atendatajn funkciojn." From 62c3c9012037cd4b3928929d27e902e922f3956b Mon Sep 17 00:00:00 2001 From: Heitor Date: Sat, 11 Sep 2021 18:13:26 +0000 Subject: [PATCH 101/412] Translated using Weblate (Portuguese (Brazil)) Currently translated at 97.0% (1355 of 1396 strings) --- po/pt_BR/minetest.po | 293 +++++++++++++++++++++++-------------------- 1 file changed, 156 insertions(+), 137 deletions(-) diff --git a/po/pt_BR/minetest.po b/po/pt_BR/minetest.po index 1302b9836..90064c76e 100644 --- a/po/pt_BR/minetest.po +++ b/po/pt_BR/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Portuguese (Brazil) (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-08-12 08:35+0000\n" -"Last-Translator: Thiago Carmona Monteiro \n" +"PO-Revision-Date: 2021-09-16 16:36+0000\n" +"Last-Translator: Heitor \n" "Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\n" @@ -12,48 +12,43 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Clear the out chat queue" -msgstr "Tamanho máximo da fila do chat" +msgstr "Limpe a fila de espera do chat" #: builtin/client/chatcommands.lua msgid "Empty command." msgstr "Comando vazio." #: builtin/client/chatcommands.lua -#, fuzzy msgid "Exit to main menu" -msgstr "Sair para o menu" +msgstr "Sair para o menu principal" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Invalid command: " -msgstr "Comando local" +msgstr "Comando inválido: " #: builtin/client/chatcommands.lua msgid "Issued command: " -msgstr "" +msgstr "Comando emitido: " #: builtin/client/chatcommands.lua -#, fuzzy msgid "List online players" -msgstr "Um jogador" +msgstr "Liste os jogadores online" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Online players: " -msgstr "Um jogador" +msgstr "Jogadores online: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." -msgstr "" +msgstr "A fila de espera do chat agora está vazia." #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "Este comando está desabilitado pelo servidor." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -64,36 +59,35 @@ msgid "You died" msgstr "Você morreu" #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." -msgstr "Você morreu" +msgstr "Você morreu." #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands:" -msgstr "Comando local" +msgstr "Comandos disponíveis:" #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands: " -msgstr "Comando local" +msgstr "Comandos disponíveis: " #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "Comando não disponível: " #: builtin/common/chatcommands.lua msgid "Get help for commands" -msgstr "" +msgstr "Obtenha ajuda para comandos" #: builtin/common/chatcommands.lua msgid "" "Use '.help ' to get more information, or '.help all' to list everything." msgstr "" +"Use '.help ' para conseguir mais informação, ou '.help all' para listar " +"tudo." #: builtin/common/chatcommands.lua msgid "[all | ]" -msgstr "" +msgstr "[all| ]" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" @@ -776,9 +770,8 @@ msgid "Loading..." msgstr "Carregando..." #: builtin/mainmenu/serverlistmgr.lua -#, fuzzy msgid "Public server list is disabled" -msgstr "Scripting de cliente está desabilitado" +msgstr "A lista de servidores públicos está desabilitada" #: builtin/mainmenu/serverlistmgr.lua msgid "Try reenabling public serverlist and check your internet connection." @@ -788,16 +781,15 @@ msgstr "" #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "" +msgstr "Sobre" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" msgstr "Colaboradores Ativos" #: builtin/mainmenu/tab_about.lua -#, fuzzy msgid "Active renderer:" -msgstr "Alcance para envio de objetos ativos" +msgstr "Renderizador ativo:" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" @@ -932,9 +924,8 @@ msgid "Start Game" msgstr "Iniciar Jogo" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Address" -msgstr "- Endereço: " +msgstr "Endereço" #: builtin/mainmenu/tab_online.lua src/client/keycode.cpp msgid "Clear" @@ -950,22 +941,20 @@ msgstr "Modo criativo" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Damage / PvP" -msgstr "Dano" +msgstr "Dano / PvP" #: builtin/mainmenu/tab_online.lua msgid "Del. Favorite" msgstr "Rem. Favorito" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Favorites" -msgstr "Favorito" +msgstr "Favoritos" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" -msgstr "" +msgstr "Servidores incompatíveis" #: builtin/mainmenu/tab_online.lua msgid "Join Game" @@ -976,13 +965,12 @@ msgid "Ping" msgstr "Ping" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Public Servers" -msgstr "Anunciar Servidor" +msgstr "Servidores Públicos" #: builtin/mainmenu/tab_online.lua msgid "Refresh" -msgstr "" +msgstr "Atualizar" #: builtin/mainmenu/tab_online.lua #, fuzzy @@ -1030,13 +1018,12 @@ msgid "Connected Glass" msgstr "Vidro conectado" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp -#, fuzzy msgid "Dynamic shadows" -msgstr "Fonte de sombra" +msgstr "Sombras dinâmicas" #: builtin/mainmenu/tab_settings.lua msgid "Dynamic shadows: " -msgstr "" +msgstr "Sombras dinâmicas: " #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" @@ -1044,15 +1031,15 @@ msgstr "Folhas com transparência" #: builtin/mainmenu/tab_settings.lua msgid "High" -msgstr "" +msgstr "Alto" #: builtin/mainmenu/tab_settings.lua msgid "Low" -msgstr "" +msgstr "Baixo" #: builtin/mainmenu/tab_settings.lua msgid "Medium" -msgstr "" +msgstr "Médio" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" @@ -1144,11 +1131,11 @@ msgstr "Filtragem tri-linear" #: builtin/mainmenu/tab_settings.lua msgid "Ultra High" -msgstr "" +msgstr "Muito Alto" #: builtin/mainmenu/tab_settings.lua msgid "Very Low" -msgstr "" +msgstr "Muito Baixo" #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" @@ -1466,9 +1453,8 @@ msgid "Minimap currently disabled by game or mod" msgstr "Minipapa atualmente desabilitado por jogo ou mod" #: src/client/game.cpp -#, fuzzy msgid "Multiplayer" -msgstr "Um jogador" +msgstr "Multi-jogador" #: src/client/game.cpp msgid "Noclip mode disabled" @@ -1919,7 +1905,7 @@ msgstr "Pulo automático" #: src/gui/guiKeyChangeMenu.cpp msgid "Aux1" -msgstr "" +msgstr "Especial" #: src/gui/guiKeyChangeMenu.cpp msgid "Backward" @@ -1927,7 +1913,7 @@ msgstr "Voltar" #: src/gui/guiKeyChangeMenu.cpp msgid "Block bounds" -msgstr "" +msgstr "Limites de bloco" #: src/gui/guiKeyChangeMenu.cpp msgid "Change camera" @@ -2106,15 +2092,14 @@ msgstr "" "toque." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "(Android) Use virtual joystick to trigger \"Aux1\" button.\n" "If enabled, virtual joystick will also tap \"Aux1\" button when out of main " "circle." msgstr "" -"(Android) Use joystick virtual para ativar botão \"aux\".\n" -"Se habilitado, o joystick virtual vai também clicar no botão \"aux\" quando " -"estiver fora do circulo principal." +"(Android) Use joystick virtual para ativar botão \"especial\".\n" +"Se habilitado, o joystick virtual vai também clicar no botão \"especial\" " +"quando estiver fora do circulo principal." #: src/settings_translation_file.cpp msgid "" @@ -2483,9 +2468,8 @@ msgid "Autoscaling mode" msgstr "Modo de alto escalamento" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key" -msgstr "Tecla para Pular" +msgstr "Tecla especial" #: src/settings_translation_file.cpp #, fuzzy @@ -2642,9 +2626,8 @@ msgstr "" "Onde 0.0 é o nível mínimo de luz, 1.0 é o nível máximo de luz." #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat command time message threshold" -msgstr "Limite da mensagem de expulsão" +msgstr "Limite de mensagem de tempo de comando de bate-papo" #: src/settings_translation_file.cpp msgid "Chat font size" @@ -2760,10 +2743,11 @@ msgstr "" "Lista de flags separadas por vírgula para esconder no repositório de " "conteúdos.\n" "\"não livre\" pode ser usada para esconder pacotes que não se qualificam " -"como software livre, como definido pela fundação do software livre.\n" +"como software livre,\n" +"como definido pela fundação do software livre.\n" "Você também pode especificar classificação de conteúdo.\n" -"Essas flags são independentes das versões do minetest, veja a lista completa " -"em https://content.minetest.net/help/content_flags/" +"Essas flags são independentes das versões do minetest,\n" +"veja a lista completa em https://content.minetest.net/help/content_flags/" #: src/settings_translation_file.cpp msgid "" @@ -2974,6 +2958,9 @@ msgid "" "This simulates the soft shadows effect by applying a PCF or poisson disk\n" "but also uses more resources." msgstr "" +"Define a qualidade de filtragem de sombreamento\n" +"Isso simula um efeito de sombras suaves aplicando um PCF ou um poisson disk\n" +"mas também usa mais recursos." #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." @@ -3037,9 +3024,9 @@ msgid "" "Delay between mesh updates on the client in ms. Increasing this will slow\n" "down the rate of mesh updates, thus reducing jitter on slower clients." msgstr "" -"Tempo entre atualizações das malhas 3D no cliente em milissegundos. Aumentar " -"isso vai retardar a taxa de atualização das malhas, sendo assim, reduzindo " -"travamentos em clientes lentos." +"Tempo entre atualizações das malhas 3D no cliente em milissegundos.\n" +"Aumentar isso vai retardar a taxa de atualização das malhas, sendo assim, " +"reduzindo travamentos em clientes lentos." #: src/settings_translation_file.cpp msgid "Delay in sending blocks after building" @@ -3154,15 +3141,17 @@ msgid "" "Enable colored shadows. \n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" +"Ativa sombras coloridas.\n" +"Quando em true nodes translúcidos podem projetar sombras coloridas. Isso é " +"caro." #: src/settings_translation_file.cpp msgid "Enable console window" msgstr "Habilitar janela de console" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable creative mode for all players" -msgstr "Habilitar modo criativo para mundos novos." +msgstr "Habilitar modo criativo para todos os jogadores." #: src/settings_translation_file.cpp msgid "Enable joysticks" @@ -3186,6 +3175,9 @@ msgid "" "On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " "filtering." msgstr "" +"Ativa filtragem de poisson disk.\n" +"Quando em true usa o poisson disk para fazer \"sombras suaves\". Caso " +"contrário usa filtragem PCF." #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." @@ -3222,8 +3214,8 @@ msgstr "" "Habilitar recurso de não permitir que jogadores usando versões antigas do " "cliente possam se conectar.\n" "Essas versões são compatíveis no sentido de não travar quando conectam a " -"servidores com versões mais atuais, porém eles podem não suportar todos os " -"recursos que você está esperando." +"servidores com versões mais atuais,\n" +"porém eles podem não suportar todos os recursos que você está esperando." #: src/settings_translation_file.cpp msgid "" @@ -3387,7 +3379,8 @@ msgid "" "Multiplayer Tab." msgstr "" "Arquivo na pasta client/serverlist/ que contém seus servidores favoritos, " -"que são mostrados na aba Multijogador." +"que são mostrados na\n" +"aba Multijogador." #: src/settings_translation_file.cpp msgid "Filler depth" @@ -3610,11 +3603,12 @@ msgid "" "to maintain active objects up to this distance in the direction the\n" "player is looking. (This can avoid mobs suddenly disappearing from view)" msgstr "" -"De quão longe clientes sabem sobre objetos declarados em mapblocks (16 " -"nós).\n" -" Configurando isto maior do que o alcançe de bloco ativo vai fazer com que o " -"sevidor mantenha objetos ativos na distancia que o jogador está olhando." -"(Isso pode evitar que mobs desapareçam da visão de repente)" +"De quão longe clientes sabem sobre objetos declarados em mapblocks (16 nós)." +"\n" +"\n" +"Configurando isto maior do que o alcançe de bloco ativo vai fazer com que o " +"sevidor mantenha objetos ativos na distancia que o jogador está olhando.(" +"Isso pode evitar que mobs desapareçam da visão de repente)" #: src/settings_translation_file.cpp msgid "Full screen" @@ -3732,10 +3726,11 @@ msgid "Heat noise" msgstr "Ruído nas cavernas #1" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Height component of the initial window size. Ignored in fullscreen mode." -msgstr "Altura da janela inicial." +msgstr "" +"Componente de altura do tamanho da janela inicial. Ignorado em modo de tela " +"cheia." #: src/settings_translation_file.cpp msgid "Height noise" @@ -3988,13 +3983,13 @@ msgstr "" "para não gastar a potência da CPU desnecessariamente." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n" "enabled." msgstr "" -"Se estiver desabilitado, a tecla \"especial será usada para voar rápido se " -"modo voo e rápido estiverem habilitados." +"Se estiver desabilitado, a tecla \"especial\" será usada para voar rápido se " +"modo voo e rápido estiverem\n" +"habilitados." #: src/settings_translation_file.cpp msgid "" @@ -4005,9 +4000,10 @@ msgid "" "so that the utility of noclip mode is reduced." msgstr "" "Se habilitado, o servidor executará a seleção de oclusão de bloco de mapa " -"com base na posição do olho do jogador. Isso pode reduzir o número de blocos " -"enviados ao cliente de 50 a 80%. O cliente não será mais mais invisível, de " -"modo que a utilidade do modo \"noclip\" (modo intangível) será reduzida." +"com base\n" +"na posição do olho do jogador. Isso pode reduzir o número de blocos\n" +"enviados ao cliente de 50 a 80%. O cliente não receberá mais invisível\n" +"para que a utilidade do modo noclip é reduzida." #: src/settings_translation_file.cpp msgid "" @@ -4020,14 +4016,13 @@ msgstr "" "Isso requer o privilégio \"noclip\" no servidor." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down " "and\n" "descending." msgstr "" -"Se habilitado, a tecla \"especial\" em vez de \"esgueirar\" servirá para " -"usada descer." +"Se habilitado, a tecla \"especial\" em vez de \"esgueirar\" servirá para\n" +"descer." #: src/settings_translation_file.cpp msgid "" @@ -4078,13 +4073,17 @@ msgid "" "to this distance from the player to the node." msgstr "" "Se a restrição de CSM para alcançe de nós está habilitado, chamadas get_node " -"são limitadas a está distancia do player até o nó." +"são limitadas\n" +"a esta distancia do player até o node." #: src/settings_translation_file.cpp msgid "" "If the execution of a chat command takes longer than this specified time in\n" "seconds, add the time information to the chat command message" msgstr "" +"Se a execução de um comando de chat demorar mais do que o tempo especificado " +"em\n" +"segundos, adicione a informação do tempo na mensagem-comando" #: src/settings_translation_file.cpp msgid "" @@ -4228,8 +4227,8 @@ msgid "" "At iterations = 20 this mapgen has a similar load to mapgen V7." msgstr "" "Iterações da função recursiva.\n" -"Aumentando isso aumenta a quantidade de detalhes, mas também aumenta o tempo " -"de processamento.\n" +"Aumentando isso aumenta a quantidade de detalhes, mas também\n" +"aumenta o tempo de processamento.\n" "Com iterações = 20, esse gerador de mapa tem um tempo de carregamento " "similar ao gerador V7." @@ -4262,7 +4261,8 @@ msgid "" "Range roughly -2 to 2." msgstr "" "Apenas para a configuração de Julia.\n" -"Componente W da constante hipercomplexa determinando o formato do fractal.\n" +"Componente W da constante hipercomplexa.\n" +"Altera o formato do fractal.\n" "Não tem nenhum efeito em fractais 3D.\n" "varia aproximadamente entre -2 e 2." @@ -4287,6 +4287,7 @@ msgid "" msgstr "" "Apenas para configuração de Julia.\n" "Componente Y da constante hipercomplexa.\n" +"Altera o formato do fractal.\n" "Varia aproximadamente entre -2 e 2." #: src/settings_translation_file.cpp @@ -5106,7 +5107,8 @@ msgid "" "network." msgstr "" "Comprimento do tick do servidor e o intervalo no qual os objetos são " -"geralmente atualizados em rede." +"geralmente atualizados em\n" +"rede." #: src/settings_translation_file.cpp msgid "" @@ -5178,9 +5180,9 @@ msgid "" "Only mapchunks completely within the mapgen limit are generated.\n" "Value is stored per-world." msgstr "" -"Limite de geração de mapas, em nós, em todas as 6 direções de (0, 0, 0). " -"Apenas áreas completas de mapa dentro do limite do mapgen são gerados. O " -"valor é armazenado por mundo." +"Limite de geração de mapas, em nós, em todas as 6 direções de (0, 0, 0).\n" +"Apenas áreas completas de mapa dentro do limite do mapgen são gerados.\n" +"O valor é armazenado por mundo." #: src/settings_translation_file.cpp msgid "" @@ -5313,7 +5315,8 @@ msgstr "" "'altitude_chill':Reduz o calor com a altitude.\n" "'humid_rivers':Aumenta a umidade em volta dos rios.\n" "'profundidade_variada_rios': Se habilitado, baixa umidade e alto calor faz " -"com que rios se tornem mais rasos e eventualmente sumam.\n" +"com que rios\n" +"se tornem mais rasos e eventualmente sumam.\n" "'altitude_dry': Reduz a umidade com a altitude." #: src/settings_translation_file.cpp @@ -5354,9 +5357,8 @@ msgid "Map save interval" msgstr "Intervalo de salvamento de mapa" #: src/settings_translation_file.cpp -#, fuzzy msgid "Map update time" -msgstr "Período de atualização dos Líquidos" +msgstr "Tempo de atualização do mapa" #: src/settings_translation_file.cpp msgid "Mapblock limit" @@ -5471,7 +5473,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Maximum distance to render shadows." -msgstr "" +msgstr "Distância máxima para renderizar sombras" #: src/settings_translation_file.cpp msgid "Maximum forceloaded blocks" @@ -5559,9 +5561,9 @@ msgid "" "client number." msgstr "" "Número máximo de pacotes enviados por etapa de envio, se você tem uma " -"conexão lenta \n" -"tente reduzir isso, mas não reduza a um número abaixo do dobro do número de " -"cliente alvo." +"conexão lenta\n" +"tente reduzir isso, mas não reduza a um número abaixo do dobro do\n" +"número de cliente alvo." #: src/settings_translation_file.cpp msgid "Maximum number of players that can be connected simultaneously." @@ -5604,19 +5606,19 @@ msgstr "" "0 para desabilitar a fila e -1 para a tornar ilimitada." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Maximum time a file download (e.g. a mod download) may take, stated in " "milliseconds." msgstr "" -"Tempo máximo em ms para download de arquivo (por exemplo, um arquivo ZIP de " -"um modificador) pode tomar." +"Tempo máximo em ms para download de arquivo (por exemplo, um mod) pode tomar." #: src/settings_translation_file.cpp msgid "" "Maximum time an interactive request (e.g. server list fetch) may take, " "stated in milliseconds." msgstr "" +"Tempo máximo que um pedido interativo (ex: busca de lista de servidores) " +"pode levar, em milissegundos." #: src/settings_translation_file.cpp msgid "Maximum users" @@ -5844,8 +5846,8 @@ msgid "" msgstr "" "Número de blocos extras que pode ser carregados por /clearobjects ao mesmo " "tempo.\n" -"Esta é uma troca entre sobrecarga de transação do sqlite e consumo de " -"memória (4096 = 100 MB, como uma regra de ouro)." +"Esta é uma troca entre sobrecarga de transação do sqlite e\n" +"consumo de memória (4096 = 100 MB, como uma regra de ouro)." #: src/settings_translation_file.cpp msgid "Online Content Repository" @@ -5867,7 +5869,8 @@ msgid "" "open." msgstr "" "Abre o menu de pausa quando o foco da janela é perdido.Não pausa se um " -"formspec está aberto." +"formspec está\n" +"aberto." #: src/settings_translation_file.cpp msgid "" @@ -5986,9 +5989,8 @@ msgid "Player versus player" msgstr "Jogador contra jogador" #: src/settings_translation_file.cpp -#, fuzzy msgid "Poisson filtering" -msgstr "Filtragem bi-linear" +msgstr "Filtragem de Poisson" #: src/settings_translation_file.cpp msgid "" @@ -6017,8 +6019,8 @@ msgid "" "Print the engine's profiling data in regular intervals (in seconds).\n" "0 = disable. Useful for developers." msgstr "" -"Intervalo de impressão de dados do analisador (em segundos). 0 = " -"desabilitado. Útil para desenvolvedores." +"Intervalo de impressão de dados do analisador (em segundos).\n" +"0 = desabilitado. Útil para desenvolvedores." #: src/settings_translation_file.cpp msgid "Privileges that players with basic_privs can grant" @@ -6125,10 +6127,11 @@ msgid "" msgstr "" "Restringe o acesso de certas funções a nível de cliente em servidores.\n" "Combine os byflags abaixo par restringir recursos de nível de cliente, ou " -"coloque 0 para nenhuma restrição:\n" +"coloque 0\n" +"para nenhuma restrição:\n" "LOAD_CLIENT_MODS: 1 (desabilita o carregamento de mods de cliente)\n" -"CHAT_MESSAGES: 2 (desabilita a chamada send_chat_message no lado do " -"cliente)\n" +"CHAT_MESSAGES: 2 (desabilita a chamada send_chat_message no lado do cliente)" +"\n" "READ_ITEMDEFS: 4 (desabilita a chamada get_item_def no lado do cliente)\n" "READ_NODEDEFS: 8 (desabilita a chamada get_node_def no lado do cliente)\n" "LOOKUP_NODES_LIMIT: 16 (limita a chamada get_node no lado do cliente para " @@ -6390,6 +6393,9 @@ msgid "" "Set the shadow strength.\n" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" +"Defina a força da sombra.\n" +"Valores mais baixo significam sombras mais brandas, valores mais altos " +"significam sombras mais fortes." #: src/settings_translation_file.cpp msgid "" @@ -6398,6 +6404,10 @@ msgid "" "resources.\n" "Minimun value 0.001 seconds max value 0.2 seconds" msgstr "" +"Defina o tempo de atualização das sombras.\n" +"Valores mais baixos significam que sombras e mapa atualizam mais rápido, mas " +"consume mais recursos.\n" +"Valor mínimo 0.001 segundos e valor máximo 0.2 segundos" #: src/settings_translation_file.cpp msgid "" @@ -6405,6 +6415,10 @@ msgid "" "Lower values mean sharper shadows bigger values softer.\n" "Minimun value 1.0 and max value 10.0" msgstr "" +"Defina o tamanho do raio de sombras suaves.\n" +"Valores mais baixos significam sombras mais nítidas e valores altos sombras " +"suaves.\n" +"Valor mínimo 1.0 e valor máximo 10.0" #: src/settings_translation_file.cpp msgid "" @@ -6412,15 +6426,17 @@ msgid "" "Value of 0 means no tilt / vertical orbit.\n" "Minimun value 0.0 and max value 60.0" msgstr "" +"Defina a inclinação da órbita do Sol/Lua em graus\n" +"Valor 0 significa sem inclinação/ órbita vertical.\n" +"Valor mínimo de 0.0 e máximo de 60.0" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Set to true to enable Shadow Mapping.\n" "Requires shaders to be enabled." msgstr "" -"Definido como true habilita o balanço das folhas.\n" -"Requer que os sombreadores estejam ativados." +"Defina para true para ativar o Mapeamento de Sombras.\n" +"Requer sombreadores para ser ativado." #: src/settings_translation_file.cpp msgid "" @@ -6452,6 +6468,9 @@ msgid "" "On false, 16 bits texture will be used.\n" "This can cause much more artifacts in the shadow." msgstr "" +"Define a qualidade da textura das sombras para 32 bits.\n" +"Quando false, a textura de 16 bits será usada\n" +"Isso pode fazer com que muito mais coisas aparecam nas sombras." #: src/settings_translation_file.cpp msgid "Shader path" @@ -6465,26 +6484,25 @@ msgid "" "This only works with the OpenGL video backend." msgstr "" "Sombreadores permitem efeitos visuais avançados e podem aumentar a " -"performance em algumas placas de vídeo.\n" +"performance em algumas\n" +"placas de vídeo.\n" "Só funcionam com o modo de vídeo OpenGL." #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow filter quality" -msgstr "Qualidade da Captura de tela;" +msgstr "Qualidade do filtro de sombras" #: src/settings_translation_file.cpp msgid "Shadow map max distance in nodes to render shadows" -msgstr "" +msgstr "Distância do mapa de sombras em nodes para renderizar sombras" #: src/settings_translation_file.cpp msgid "Shadow map texture in 32 bits" -msgstr "" +msgstr "Textura do mapa de sombras em 32 bits" #: src/settings_translation_file.cpp -#, fuzzy msgid "Shadow map texture size" -msgstr "Tamanho mínimo da textura" +msgstr "Tamanho da textura do mapa de sombras" #: src/settings_translation_file.cpp msgid "" @@ -6496,7 +6514,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Shadow strength" -msgstr "" +msgstr "Força da sombra" #: src/settings_translation_file.cpp msgid "Shape of the minimap. Enabled = round, disabled = square." @@ -6519,9 +6537,8 @@ msgstr "" "É necessário reiniciar após alterar isso." #: src/settings_translation_file.cpp -#, fuzzy msgid "Show nametag backgrounds by default" -msgstr "Fonte em negrito por padrão" +msgstr "Mostrar plano de fundo da nametag por padrão" #: src/settings_translation_file.cpp msgid "Shutdown message" @@ -6554,7 +6571,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Sky Body Orbit Tilt" -msgstr "" +msgstr "Inclinação Da Órbita Do Céu" #: src/settings_translation_file.cpp msgid "Slice w" @@ -6616,9 +6633,8 @@ msgid "Sneaking speed, in nodes per second." msgstr "Velocidade ao esgueirar-se, em nós (blocos) por segundo." #: src/settings_translation_file.cpp -#, fuzzy msgid "Soft shadow radius" -msgstr "Fonte alpha de sombra" +msgstr "Raio das sombras suaves" #: src/settings_translation_file.cpp msgid "Sound" @@ -6786,6 +6802,9 @@ msgid "" "This must be a power of two.\n" "Bigger numbers create better shadowsbut it is also more expensive." msgstr "" +"Tamanho da textura em que o mapa de sombras será renderizado em.\n" +"Deve ser um múltiplo de dois.\n" +"Números maiores criam sombras melhores mas também esvazia a conta do banco." #: src/settings_translation_file.cpp msgid "" @@ -6885,7 +6904,6 @@ msgstr "" "Isso deve ser configurado junto com active_object_send_range_blocks." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end.\n" "A restart is required after changing this.\n" @@ -6894,7 +6912,7 @@ msgid "" "On other platforms, OpenGL is recommended.\n" "Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)" msgstr "" -"O back-end de renderização para Irrlicht.\n" +"O back-end de renderização.\n" "É necessário reiniciar após alterar isso.\n" "Nota: No Android, use OGLES1 se não tiver certeza! O aplicativo pode falhar " "ao iniciar de outra forma.\n" @@ -7240,9 +7258,8 @@ msgid "Viewing range" msgstr "Intervalo de visualização" #: src/settings_translation_file.cpp -#, fuzzy msgid "Virtual joystick triggers Aux1 button" -msgstr "Joystick virtual ativa botão auxiliar" +msgstr "Joystick virtual ativa botão especial" #: src/settings_translation_file.cpp msgid "Volume" @@ -7380,6 +7397,8 @@ msgid "" "Whether nametag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" +"Se os planos de fundo das nametags devem ser mostradas por padrão.\n" +"Mods ainda poderão definir um plano de fundo." #: src/settings_translation_file.cpp msgid "Whether node texture animations should be desynchronized per mapblock." @@ -7433,9 +7452,9 @@ msgstr "" "como teclar F5)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Width component of the initial window size. Ignored in fullscreen mode." -msgstr "Largura da janela inicial." +msgstr "" +"Componente de tamanho da janela inicial. Ignorado em modo de tela cheia." #: src/settings_translation_file.cpp msgid "Width of the selection box lines around nodes." From 6569056bfc207617edff1326d00b61122eff7b86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jiri=20Gr=C3=B6nroos?= Date: Wed, 15 Sep 2021 07:46:55 +0000 Subject: [PATCH 102/412] Translated using Weblate (Finnish) Currently translated at 20.9% (292 of 1396 strings) --- po/fi/minetest.po | 386 +++++++++++++++++++++++----------------------- 1 file changed, 195 insertions(+), 191 deletions(-) diff --git a/po/fi/minetest.po b/po/fi/minetest.po index e12580417..6761f3e6f 100644 --- a/po/fi/minetest.po +++ b/po/fi/minetest.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-04-10 15:49+0000\n" -"Last-Translator: Markus Mikkonen \n" +"PO-Revision-Date: 2021-09-16 16:37+0000\n" +"Last-Translator: Jiri Grönroos \n" "Language-Team: Finnish \n" "Language: fi\n" @@ -17,44 +17,43 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.6-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" -msgstr "" +msgstr "Tyhjennä keskustelujono" #: builtin/client/chatcommands.lua msgid "Empty command." -msgstr "" +msgstr "Tyhjä komento." #: builtin/client/chatcommands.lua -#, fuzzy msgid "Exit to main menu" -msgstr "Takaisin päävalikkoon" +msgstr "Poistu päävalikkoon" #: builtin/client/chatcommands.lua msgid "Invalid command: " -msgstr "" +msgstr "Virheellinen komento: " #: builtin/client/chatcommands.lua msgid "Issued command: " -msgstr "" +msgstr "Annettu komento: " #: builtin/client/chatcommands.lua msgid "List online players" -msgstr "" +msgstr "Listaa verkkopelaajat" #: builtin/client/chatcommands.lua msgid "Online players: " -msgstr "" +msgstr "Verkkopelaajat: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." -msgstr "" +msgstr "Keskustelujono on nyt tyhjä." #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "Palvelin on poistanut komennon käytöstä." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -65,30 +64,31 @@ msgid "You died" msgstr "Kuolit" #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." -msgstr "Kuolit" +msgstr "Kuolit." #: builtin/common/chatcommands.lua msgid "Available commands:" -msgstr "" +msgstr "Käytettävissä olevat komennot:" #: builtin/common/chatcommands.lua msgid "Available commands: " -msgstr "" +msgstr "Käytettävissä olevat komennot: " #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "Komento ei ole käytettävissä: " #: builtin/common/chatcommands.lua msgid "Get help for commands" -msgstr "" +msgstr "Ohjeita komentojen käyttöön" #: builtin/common/chatcommands.lua msgid "" "Use '.help ' to get more information, or '.help all' to list everything." msgstr "" +"Käytä '.help ' saadaksesi lisätietoja komennosta, tai '.help all' " +"listataksesi kaiken." #: builtin/common/chatcommands.lua msgid "[all | ]" @@ -196,7 +196,7 @@ msgstr "Pelin kuvausta ei ole annettu." #: builtin/mainmenu/dlg_config_world.lua msgid "No hard dependencies" -msgstr "" +msgstr "Ei kovia riippuvuuksia" #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." @@ -225,7 +225,7 @@ msgstr "käytössä" #: builtin/mainmenu/dlg_contentstore.lua msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" +msgstr "\"$1\" on jo olemassa. Haluatko korvata sen?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." @@ -263,11 +263,11 @@ msgstr "Asennettu jo" #: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" -msgstr "Takaisin päävalikkoon" +msgstr "Palaa päävalikkoon" #: builtin/mainmenu/dlg_contentstore.lua msgid "Base Game:" -msgstr "" +msgstr "Peruspeli:" #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" @@ -305,7 +305,7 @@ msgstr "Modit" #: builtin/mainmenu/dlg_contentstore.lua msgid "No packages could be retrieved" -msgstr "" +msgstr "Paketteja ei voitu noutaa" #: builtin/mainmenu/dlg_contentstore.lua msgid "No results" @@ -317,7 +317,7 @@ msgstr "Ei päivityksiä" #: builtin/mainmenu/dlg_contentstore.lua msgid "Not found" -msgstr "" +msgstr "Ei löytynyt" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" @@ -329,7 +329,7 @@ msgstr "" #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" -msgstr "" +msgstr "Jonotettu" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" @@ -349,7 +349,7 @@ msgstr "Päivitä kaikki [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "Katso lisätietoja verkkoselaimessa" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" @@ -437,7 +437,7 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Lakes" -msgstr "" +msgstr "Järvet" #: builtin/mainmenu/dlg_create_world.lua msgid "Low humidity and high heat causes shallow or dry rivers" @@ -449,11 +449,11 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen flags" -msgstr "" +msgstr "Mapgen-valitsimet" #: builtin/mainmenu/dlg_create_world.lua msgid "Mapgen-specific flags" -msgstr "" +msgstr "Mapgen-spesifit valitsimet" #: builtin/mainmenu/dlg_create_world.lua msgid "Mountains" @@ -481,7 +481,7 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Rivers" -msgstr "" +msgstr "Joet" #: builtin/mainmenu/dlg_create_world.lua msgid "Sea level rivers" @@ -536,7 +536,7 @@ msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Warning: The Development Test is meant for developers." -msgstr "" +msgstr "Varoitus: Development Test on tarkoitettu kehittäjille." #: builtin/mainmenu/dlg_create_world.lua msgid "World name" @@ -558,11 +558,11 @@ msgstr "Poista" #: builtin/mainmenu/dlg_delete_content.lua msgid "pkgmgr: failed to delete \"$1\"" -msgstr "" +msgstr "pkgmgr: kohteen \"$1\" poistaminen epäonnistui" #: builtin/mainmenu/dlg_delete_content.lua msgid "pkgmgr: invalid path \"$1\"" -msgstr "" +msgstr "pkgmgr: virheellinen polku \"$1\"" #: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" @@ -574,7 +574,7 @@ msgstr "Hyväksy" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Rename Modpack:" -msgstr "" +msgstr "Nimeä modipaketti uudelleen:" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "" @@ -592,7 +592,7 @@ msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "< Back to Settings page" -msgstr "< Takaisin asetussivulle" +msgstr "< Palaa asetussivulle" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Browse" @@ -628,15 +628,15 @@ msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Please enter a valid integer." -msgstr "" +msgstr "Anna kelvollinen kokonaisuluku." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Please enter a valid number." -msgstr "" +msgstr "Anna kelvollinen numero." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Restore Default" -msgstr "" +msgstr "Palauta oletus" #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp msgid "Scale" @@ -660,11 +660,11 @@ msgstr "Näytä tekniset nimet" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "The value must be at least $1." -msgstr "" +msgstr "Arvon tulee olla vähintään $1." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "The value must not be larger than $1." -msgstr "" +msgstr "Arvo ei saa olla suurempi kuin $1." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "X" @@ -719,7 +719,7 @@ msgstr "$1 (Käytössä)" #: builtin/mainmenu/pkgmgr.lua msgid "$1 mods" -msgstr "" +msgstr "$1 modia" #: builtin/mainmenu/pkgmgr.lua msgid "Failed to install $1 to $2" @@ -739,7 +739,7 @@ msgstr "" #: builtin/mainmenu/pkgmgr.lua msgid "Install: file: \"$1\"" -msgstr "" +msgstr "Asenna: tiedosto: \"$1\"" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" @@ -767,7 +767,7 @@ msgstr "Ladataan..." #: builtin/mainmenu/serverlistmgr.lua msgid "Public server list is disabled" -msgstr "" +msgstr "Julkinen palvelinlista on pois käytöstä" #: builtin/mainmenu/serverlistmgr.lua msgid "Try reenabling public serverlist and check your internet connection." @@ -777,7 +777,7 @@ msgstr "" #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "" +msgstr "Tietoja" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" @@ -793,7 +793,7 @@ msgstr "" #: builtin/mainmenu/tab_about.lua msgid "Open User Data Directory" -msgstr "" +msgstr "Avaa käyttäjätietohakemisto" #: builtin/mainmenu/tab_about.lua msgid "" @@ -811,11 +811,11 @@ msgstr "" #: builtin/mainmenu/tab_content.lua msgid "Browse online content" -msgstr "" +msgstr "Selaa sisältöä verkossa" #: builtin/mainmenu/tab_content.lua msgid "Content" -msgstr "" +msgstr "Sisältö" #: builtin/mainmenu/tab_content.lua msgid "Disable Texture Pack" @@ -823,7 +823,7 @@ msgstr "Poista tekstuuripaketti käytöstä" #: builtin/mainmenu/tab_content.lua msgid "Information:" -msgstr "" +msgstr "Tietoja:" #: builtin/mainmenu/tab_content.lua msgid "Installed Packages:" @@ -851,11 +851,11 @@ msgstr "Käytä tekstuuripakettia" #: builtin/mainmenu/tab_local.lua msgid "Announce Server" -msgstr "" +msgstr "Ilmoita palvelin" #: builtin/mainmenu/tab_local.lua msgid "Bind Address" -msgstr "" +msgstr "Sido osoite" #: builtin/mainmenu/tab_local.lua msgid "Creative Mode" @@ -863,23 +863,23 @@ msgstr "Luova tila" #: builtin/mainmenu/tab_local.lua msgid "Enable Damage" -msgstr "" +msgstr "Ota vahinko käyttöön" #: builtin/mainmenu/tab_local.lua msgid "Host Game" -msgstr "" +msgstr "Isännöi peli" #: builtin/mainmenu/tab_local.lua msgid "Host Server" -msgstr "" +msgstr "Isännöi palvelin" #: builtin/mainmenu/tab_local.lua msgid "Install games from ContentDB" -msgstr "" +msgstr "Asenna pelejä ContentDB:stä" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua msgid "Name" -msgstr "" +msgstr "Nimi" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -887,11 +887,11 @@ msgstr "Uusi" #: builtin/mainmenu/tab_local.lua msgid "No world created or selected!" -msgstr "" +msgstr "Maailmaa ei ole luotu tai valittu!" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua msgid "Password" -msgstr "" +msgstr "Salasana" #: builtin/mainmenu/tab_local.lua msgid "Play Game" @@ -903,7 +903,7 @@ msgstr "Portti" #: builtin/mainmenu/tab_local.lua msgid "Select Mods" -msgstr "" +msgstr "Valitse modit" #: builtin/mainmenu/tab_local.lua msgid "Select World:" @@ -911,20 +911,19 @@ msgstr "Valitse maailma:" #: builtin/mainmenu/tab_local.lua msgid "Server Port" -msgstr "" +msgstr "Palvelimen portti" #: builtin/mainmenu/tab_local.lua msgid "Start Game" -msgstr "" +msgstr "Aloita peli" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Address" -msgstr "Osoite / Portti" +msgstr "Osoite" #: builtin/mainmenu/tab_online.lua src/client/keycode.cpp msgid "Clear" -msgstr "" +msgstr "Tyhjennä" #: builtin/mainmenu/tab_online.lua msgid "Connect" @@ -937,20 +936,19 @@ msgstr "Luova tila" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua msgid "Damage / PvP" -msgstr "" +msgstr "Vahinko / PvP" #: builtin/mainmenu/tab_online.lua msgid "Del. Favorite" msgstr "" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Favorites" -msgstr "Suosikki" +msgstr "Suosikit" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" -msgstr "" +msgstr "Palvelimet eivät ole yhteensopivat" #: builtin/mainmenu/tab_online.lua msgid "Join Game" @@ -962,15 +960,15 @@ msgstr "Viive" #: builtin/mainmenu/tab_online.lua msgid "Public Servers" -msgstr "" +msgstr "Julkiset palvelimet" #: builtin/mainmenu/tab_online.lua msgid "Refresh" -msgstr "" +msgstr "Päivitä" #: builtin/mainmenu/tab_online.lua msgid "Server Description" -msgstr "" +msgstr "Palvelimen kuvaus" #: builtin/mainmenu/tab_settings.lua msgid "2x" @@ -978,7 +976,7 @@ msgstr "2x" #: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" -msgstr "" +msgstr "3D-pilvet" #: builtin/mainmenu/tab_settings.lua msgid "4x" @@ -994,19 +992,19 @@ msgstr "Kaikki asetukset" #: builtin/mainmenu/tab_settings.lua msgid "Antialiasing:" -msgstr "" +msgstr "Reunanpehmennys:" #: builtin/mainmenu/tab_settings.lua msgid "Autosave Screen Size" -msgstr "" +msgstr "Tallenna näytön koko automaattisesti" #: builtin/mainmenu/tab_settings.lua msgid "Bilinear Filter" -msgstr "" +msgstr "Bilineaarinen suodatus" #: builtin/mainmenu/tab_settings.lua src/client/game.cpp msgid "Change Keys" -msgstr "" +msgstr "Näppäinasetukset" #: builtin/mainmenu/tab_settings.lua msgid "Connected Glass" @@ -1014,11 +1012,11 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Dynamic shadows" -msgstr "" +msgstr "Dynaamiset varjot" #: builtin/mainmenu/tab_settings.lua msgid "Dynamic shadows: " -msgstr "" +msgstr "Dynaamiset varjot: " #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" @@ -1046,7 +1044,7 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua msgid "No Filter" -msgstr "" +msgstr "Ei suodatinta" #: builtin/mainmenu/tab_settings.lua msgid "No Mipmap" @@ -1070,7 +1068,7 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua msgid "Opaque Water" -msgstr "" +msgstr "Läpinäkymätön vesi" #: builtin/mainmenu/tab_settings.lua msgid "Particles" @@ -1078,7 +1076,7 @@ msgstr "Partikkelit" #: builtin/mainmenu/tab_settings.lua msgid "Screen:" -msgstr "" +msgstr "Näyttö:" #: builtin/mainmenu/tab_settings.lua msgid "Settings" @@ -1086,15 +1084,15 @@ msgstr "Asetukset" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Shaders" -msgstr "" +msgstr "Varjostimet" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (experimental)" -msgstr "" +msgstr "Varjostimet (kokeellinen)" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" -msgstr "" +msgstr "Varjostimet (ei käytettävissä)" #: builtin/mainmenu/tab_settings.lua msgid "Simple Leaves" @@ -1102,15 +1100,15 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua msgid "Smooth Lighting" -msgstr "" +msgstr "Tasainen valaistus" #: builtin/mainmenu/tab_settings.lua msgid "Texturing:" -msgstr "" +msgstr "Teksturointi:" #: builtin/mainmenu/tab_settings.lua msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" +msgstr "Varjostimien käyttäminen vaatii, että käytössä on OpenGL-ajuri." #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" @@ -1146,11 +1144,11 @@ msgstr "" #: src/client/client.cpp msgid "Connection timed out." -msgstr "" +msgstr "Yhteys aikakatkaistiin." #: src/client/client.cpp msgid "Done!" -msgstr "" +msgstr "Valmis!" #: src/client/client.cpp msgid "Initializing nodes" @@ -1166,7 +1164,7 @@ msgstr "Ladataan tekstuureja..." #: src/client/client.cpp msgid "Rebuilding shaders..." -msgstr "" +msgstr "Rakennetaan uudelleen varjostimia..." #: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" @@ -1182,7 +1180,7 @@ msgstr "" #: src/client/clientlauncher.cpp msgid "Main Menu" -msgstr "" +msgstr "Päävalikko" #: src/client/clientlauncher.cpp msgid "No world selected and no address provided. Nothing to do." @@ -1190,11 +1188,11 @@ msgstr "" #: src/client/clientlauncher.cpp msgid "Player name too long." -msgstr "" +msgstr "Pelaajan nimi on liian pitkä." #: src/client/clientlauncher.cpp msgid "Please choose a name!" -msgstr "" +msgstr "Valitse nimi!" #: src/client/clientlauncher.cpp msgid "Provided password file failed to open: " @@ -1212,36 +1210,36 @@ msgstr "" #: src/client/game.cpp msgid "- Address: " -msgstr "" +msgstr "- Osoite: " #: src/client/game.cpp msgid "- Creative Mode: " -msgstr "" +msgstr "- Luova tila: " #: src/client/game.cpp msgid "- Damage: " -msgstr "" +msgstr "- Vahinko: " #: src/client/game.cpp msgid "- Mode: " -msgstr "" +msgstr "- Tila: " #: src/client/game.cpp msgid "- Port: " -msgstr "" +msgstr "- Portti: " #: src/client/game.cpp msgid "- Public: " -msgstr "" +msgstr "- Julkinen: " #. ~ PvP = Player versus Player #: src/client/game.cpp msgid "- PvP: " -msgstr "" +msgstr "- PvP: " #: src/client/game.cpp msgid "- Server Name: " -msgstr "" +msgstr "- Palvelimen nimi: " #: src/client/game.cpp msgid "Automatic forward disabled" @@ -1261,7 +1259,7 @@ msgstr "" #: src/client/game.cpp msgid "Change Password" -msgstr "" +msgstr "Vaihda salasana" #: src/client/game.cpp msgid "Cinematic mode disabled" @@ -1277,11 +1275,11 @@ msgstr "" #: src/client/game.cpp msgid "Connecting to server..." -msgstr "" +msgstr "Yhdistetään palvelimeen..." #: src/client/game.cpp msgid "Continue" -msgstr "" +msgstr "Jatka" #: src/client/game.cpp #, c-format @@ -1304,11 +1302,11 @@ msgstr "" #: src/client/game.cpp msgid "Creating client..." -msgstr "" +msgstr "Luodaan asiakasta..." #: src/client/game.cpp msgid "Creating server..." -msgstr "" +msgstr "Luodaan palvelinta..." #: src/client/game.cpp msgid "Debug info and profiler graph hidden" @@ -1348,11 +1346,11 @@ msgstr "" #: src/client/game.cpp msgid "Exit to Menu" -msgstr "" +msgstr "Poistu valikkoon" #: src/client/game.cpp msgid "Exit to OS" -msgstr "" +msgstr "Poistu käyttöjärjestelmään" #: src/client/game.cpp msgid "Fast mode disabled" @@ -1368,11 +1366,11 @@ msgstr "" #: src/client/game.cpp msgid "Fly mode disabled" -msgstr "" +msgstr "Lentotila pois käytöstä" #: src/client/game.cpp msgid "Fly mode enabled" -msgstr "" +msgstr "Lentotila käytössä" #: src/client/game.cpp msgid "Fly mode enabled (note: no 'fly' privilege)" @@ -1380,19 +1378,19 @@ msgstr "" #: src/client/game.cpp msgid "Fog disabled" -msgstr "" +msgstr "Sumu pois käytöstä" #: src/client/game.cpp msgid "Fog enabled" -msgstr "" +msgstr "Sumu käytössä" #: src/client/game.cpp msgid "Game info:" -msgstr "" +msgstr "Pelin tiedot:" #: src/client/game.cpp msgid "Game paused" -msgstr "" +msgstr "Peli keskeytetty" #: src/client/game.cpp msgid "Hosting server" @@ -1440,11 +1438,11 @@ msgstr "" #: src/client/game.cpp msgid "Off" -msgstr "" +msgstr "Pois" #: src/client/game.cpp msgid "On" -msgstr "" +msgstr "Päällä" #: src/client/game.cpp msgid "Pitch move mode disabled" @@ -1460,27 +1458,27 @@ msgstr "" #: src/client/game.cpp msgid "Remote server" -msgstr "" +msgstr "Etäpalvelin" #: src/client/game.cpp msgid "Resolving address..." -msgstr "" +msgstr "Selvitetään osoitetta..." #: src/client/game.cpp msgid "Shutting down..." -msgstr "" +msgstr "Sammutetaan..." #: src/client/game.cpp msgid "Singleplayer" -msgstr "" +msgstr "Yksinpeli" #: src/client/game.cpp msgid "Sound Volume" -msgstr "" +msgstr "Äänenvoimakkuus" #: src/client/game.cpp msgid "Sound muted" -msgstr "" +msgstr "Ääni mykistetty" #: src/client/game.cpp msgid "Sound system is disabled" @@ -1492,7 +1490,7 @@ msgstr "" #: src/client/game.cpp msgid "Sound unmuted" -msgstr "" +msgstr "Ääni palautettu" #: src/client/game.cpp #, c-format @@ -1528,7 +1526,7 @@ msgstr "" #: src/client/gameui.cpp msgid "Chat hidden" -msgstr "" +msgstr "Keskustelu piilotettu" #: src/client/gameui.cpp msgid "Chat shown" @@ -1830,11 +1828,11 @@ msgstr "" #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" -msgstr "" +msgstr "Salasanat eivät täsmää!" #: src/gui/guiConfirmRegistration.cpp msgid "Register and Join" -msgstr "" +msgstr "Rekisteröidy ja liity" #: src/gui/guiConfirmRegistration.cpp #, c-format @@ -1845,6 +1843,10 @@ msgid "" "Please retype your password and click 'Register and Join' to confirm account " "creation, or click 'Cancel' to abort." msgstr "" +"Olet aikeissa liittyä tälle palvelimelle nimellä \"%s\" ensimmäistä kertaa.\n" +"Jos jatkat, uusi tili kirjautumistietojen kera luodaan tälle palvelimelle.\n" +"Kirjoita salasana ja napsauta \"Rekisteröidy ja liity\" vahvistaaksesi tilin " +"luomisen, tai napsauta \"Peruuta\" lopettaaksesi." #: src/gui/guiFormSpecMenu.cpp msgid "Proceed" @@ -1860,7 +1862,7 @@ msgstr "" #: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Automatic jumping" -msgstr "" +msgstr "Hypi automaattisesti" #: src/gui/guiKeyChangeMenu.cpp msgid "Aux1" @@ -1868,7 +1870,7 @@ msgstr "" #: src/gui/guiKeyChangeMenu.cpp msgid "Backward" -msgstr "" +msgstr "Taakse" #: src/gui/guiKeyChangeMenu.cpp msgid "Block bounds" @@ -1876,19 +1878,19 @@ msgstr "" #: src/gui/guiKeyChangeMenu.cpp msgid "Change camera" -msgstr "" +msgstr "Vaihda kameraa" #: src/gui/guiKeyChangeMenu.cpp msgid "Chat" -msgstr "" +msgstr "Keskustelu" #: src/gui/guiKeyChangeMenu.cpp msgid "Command" -msgstr "" +msgstr "Komento" #: src/gui/guiKeyChangeMenu.cpp msgid "Console" -msgstr "" +msgstr "Konsoli" #: src/gui/guiKeyChangeMenu.cpp msgid "Dec. range" @@ -1908,7 +1910,7 @@ msgstr "" #: src/gui/guiKeyChangeMenu.cpp msgid "Forward" -msgstr "" +msgstr "Eteen" #: src/gui/guiKeyChangeMenu.cpp msgid "Inc. range" @@ -1920,11 +1922,11 @@ msgstr "" #: src/gui/guiKeyChangeMenu.cpp msgid "Inventory" -msgstr "" +msgstr "Inventaario" #: src/gui/guiKeyChangeMenu.cpp msgid "Jump" -msgstr "" +msgstr "Hyppää" #: src/gui/guiKeyChangeMenu.cpp msgid "Key already in use" @@ -1933,10 +1935,12 @@ msgstr "" #: src/gui/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" +"Näppäimistöasetukset. (Jos tämä valikko rikkoutuu, poista asioita minetest." +"conf-tiedostosta)" #: src/gui/guiKeyChangeMenu.cpp msgid "Local command" -msgstr "" +msgstr "Paikallinen komento" #: src/gui/guiKeyChangeMenu.cpp msgid "Mute" @@ -1956,11 +1960,11 @@ msgstr "" #: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Screenshot" -msgstr "" +msgstr "Kuvakaappaus" #: src/gui/guiKeyChangeMenu.cpp msgid "Sneak" -msgstr "" +msgstr "Hiivi" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle HUD" @@ -2004,27 +2008,27 @@ msgstr "" #: src/gui/guiPasswordChange.cpp msgid "Confirm Password" -msgstr "" +msgstr "Vahvista salasana" #: src/gui/guiPasswordChange.cpp msgid "New Password" -msgstr "" +msgstr "Uusi salasana" #: src/gui/guiPasswordChange.cpp msgid "Old Password" -msgstr "" +msgstr "Vanha salasana" #: src/gui/guiVolumeChange.cpp msgid "Exit" -msgstr "" +msgstr "Poistu" #: src/gui/guiVolumeChange.cpp msgid "Muted" -msgstr "" +msgstr "Mykistetty" #: src/gui/guiVolumeChange.cpp msgid "Sound Volume: " -msgstr "" +msgstr "Äänenvoimakkuus: " #. ~ Imperative, as in "Enter/type in text". #. Don't forget the space. @@ -2105,11 +2109,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "3D clouds" -msgstr "" +msgstr "3D-pilvet" #: src/settings_translation_file.cpp msgid "3D mode" -msgstr "" +msgstr "3D-tila" #: src/settings_translation_file.cpp msgid "3D mode parallax strength" @@ -2242,7 +2246,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Advanced" -msgstr "" +msgstr "Lisäasetukset" #: src/settings_translation_file.cpp msgid "" @@ -2336,7 +2340,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Autosave screen size" -msgstr "" +msgstr "Tallenna näytön koko automaattisesti" #: src/settings_translation_file.cpp msgid "Autoscaling mode" @@ -2550,11 +2554,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Client" -msgstr "" +msgstr "Asiakas" #: src/settings_translation_file.cpp msgid "Client and Server" -msgstr "" +msgstr "Asiakas ja palvelin" #: src/settings_translation_file.cpp msgid "Client modding" @@ -2578,7 +2582,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Clouds" -msgstr "" +msgstr "Pilvet" #: src/settings_translation_file.cpp msgid "Clouds are a client side effect." @@ -2962,7 +2966,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Enable console window" -msgstr "" +msgstr "Käytä konsoli-ikkunaa" #: src/settings_translation_file.cpp msgid "Enable creative mode for all players" @@ -3333,7 +3337,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "FreeType fonts" -msgstr "" +msgstr "FreeType-fontit" #: src/settings_translation_file.cpp msgid "" @@ -3357,11 +3361,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Full screen" -msgstr "" +msgstr "Koko näyttö" #: src/settings_translation_file.cpp msgid "Fullscreen mode." -msgstr "" +msgstr "Koko näytön tila." #: src/settings_translation_file.cpp msgid "GUI scaling" @@ -3400,7 +3404,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Graphics" -msgstr "" +msgstr "Grafiikka" #: src/settings_translation_file.cpp msgid "Gravity" @@ -3416,7 +3420,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "HTTP mods" -msgstr "" +msgstr "HTTP-modit" #: src/settings_translation_file.cpp msgid "HUD scale factor" @@ -3490,7 +3494,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Homepage of server, to be displayed in the serverlist." -msgstr "" +msgstr "Palvelimen sivusto, näytetään palvelinlistauksessa." #: src/settings_translation_file.cpp msgid "" @@ -3681,11 +3685,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "IPv6" -msgstr "" +msgstr "IPv6" #: src/settings_translation_file.cpp msgid "IPv6 server" -msgstr "" +msgstr "IPv6-palvelin" #: src/settings_translation_file.cpp msgid "" @@ -3786,7 +3790,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "In-Game" -msgstr "" +msgstr "Pelinsisäinen" #: src/settings_translation_file.cpp msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." @@ -4481,7 +4485,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Language" -msgstr "" +msgstr "Kieli" #: src/settings_translation_file.cpp msgid "Large cave depth" @@ -4833,7 +4837,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Maximum FPS" -msgstr "" +msgstr "FPS enintään" #: src/settings_translation_file.cpp msgid "Maximum FPS when the window is not focused, or when the game is paused." @@ -4962,11 +4966,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Maximum users" -msgstr "" +msgstr "Käyttäjiä enintään" #: src/settings_translation_file.cpp msgid "Menus" -msgstr "" +msgstr "Valikot" #: src/settings_translation_file.cpp msgid "Mesh cache" @@ -5050,7 +5054,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Mouse sensitivity" -msgstr "" +msgstr "Hiiren herkkyys" #: src/settings_translation_file.cpp msgid "Mouse sensitivity multiplier." @@ -5072,7 +5076,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Mute sound" -msgstr "" +msgstr "Mykistä ääni" #: src/settings_translation_file.cpp msgid "" @@ -5100,7 +5104,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Network" -msgstr "" +msgstr "Verkko" #: src/settings_translation_file.cpp msgid "" @@ -5110,7 +5114,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "New users need to input this password." -msgstr "" +msgstr "Uusien käyttäjien tulee syöttää tämä salasana." #: src/settings_translation_file.cpp msgid "Noclip" @@ -5232,7 +5236,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Physics" -msgstr "" +msgstr "Fysiikka" #: src/settings_translation_file.cpp msgid "Pitch move key" @@ -5258,7 +5262,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Player name" -msgstr "" +msgstr "Pelaajan nimi" #: src/settings_translation_file.cpp msgid "Player transfer distance" @@ -5266,7 +5270,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Player versus player" -msgstr "" +msgstr "Pelaaja vastaan pelaaja" #: src/settings_translation_file.cpp msgid "Poisson filtering" @@ -5480,23 +5484,23 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Screen height" -msgstr "" +msgstr "Näytön korkeus" #: src/settings_translation_file.cpp msgid "Screen width" -msgstr "" +msgstr "Näytön leveys" #: src/settings_translation_file.cpp msgid "Screenshot folder" -msgstr "" +msgstr "Kuvakaappausten kansio" #: src/settings_translation_file.cpp msgid "Screenshot format" -msgstr "" +msgstr "Kuvakaappausten muoto" #: src/settings_translation_file.cpp msgid "Screenshot quality" -msgstr "" +msgstr "Kuvakaappausten laatu" #: src/settings_translation_file.cpp msgid "" @@ -5519,11 +5523,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Security" -msgstr "" +msgstr "Turvallisuus" #: src/settings_translation_file.cpp msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" -msgstr "" +msgstr "Lue https://www.sqlite.org/pragma.html#pragma_synchronous" #: src/settings_translation_file.cpp msgid "Selection box border color (R,G,B)." @@ -5562,27 +5566,27 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Server / Singleplayer" -msgstr "" +msgstr "Palvelin / yksinpeli" #: src/settings_translation_file.cpp msgid "Server URL" -msgstr "" +msgstr "Palvelimen URL" #: src/settings_translation_file.cpp msgid "Server address" -msgstr "" +msgstr "Palvelimen osoite" #: src/settings_translation_file.cpp msgid "Server description" -msgstr "" +msgstr "Palvelimen kuvaus" #: src/settings_translation_file.cpp msgid "Server name" -msgstr "" +msgstr "Palvelimen nimi" #: src/settings_translation_file.cpp msgid "Server port" -msgstr "" +msgstr "Palvelimen portti" #: src/settings_translation_file.cpp msgid "Server side occlusion culling" @@ -5798,7 +5802,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Sneaking speed" -msgstr "" +msgstr "Hiiviskelyn nopeus" #: src/settings_translation_file.cpp msgid "Sneaking speed, in nodes per second." @@ -5810,7 +5814,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Sound" -msgstr "" +msgstr "Ääni" #: src/settings_translation_file.cpp msgid "" @@ -5885,7 +5889,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Synchronous SQLite" -msgstr "" +msgstr "Synkroninen SQLite" #: src/settings_translation_file.cpp msgid "Temperature variation for biomes." @@ -6134,7 +6138,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Trusted mods" -msgstr "" +msgstr "Luotetut modit" #: src/settings_translation_file.cpp msgid "URL to the server list displayed in the Multiplayer Tab." @@ -6273,7 +6277,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Video driver" -msgstr "" +msgstr "Videoajuri" #: src/settings_translation_file.cpp msgid "View bobbing factor" @@ -6328,7 +6332,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Walking speed" -msgstr "" +msgstr "Kävelyn nopeus" #: src/settings_translation_file.cpp msgid "Walking, flying and climbing speed in fast mode, in nodes per second." From 9f5d35e2aa205a88c13cce5d430e3572f85348f2 Mon Sep 17 00:00:00 2001 From: Ronoaldo Pereira Date: Thu, 16 Sep 2021 18:28:41 +0000 Subject: [PATCH 103/412] Translated using Weblate (Portuguese (Brazil)) Currently translated at 99.7% (1392 of 1396 strings) --- po/pt_BR/minetest.po | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/po/pt_BR/minetest.po b/po/pt_BR/minetest.po index 90064c76e..50157b57c 100644 --- a/po/pt_BR/minetest.po +++ b/po/pt_BR/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Portuguese (Brazil) (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-09-16 16:36+0000\n" -"Last-Translator: Heitor \n" +"PO-Revision-Date: 2021-09-17 18:38+0000\n" +"Last-Translator: Ronoaldo Pereira \n" "Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\n" @@ -2472,9 +2472,8 @@ msgid "Aux1 key" msgstr "Tecla especial" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key for climbing/descending" -msgstr "Tecla especial pra escalar/descer" +msgstr "Tecla Aux1 pra escalar/descer" #: src/settings_translation_file.cpp msgid "Backward key" @@ -2726,9 +2725,8 @@ msgid "Colored fog" msgstr "Névoa colorida" #: src/settings_translation_file.cpp -#, fuzzy msgid "Colored shadows" -msgstr "Névoa colorida" +msgstr "Sombra colorida" #: src/settings_translation_file.cpp msgid "" @@ -3356,12 +3354,11 @@ msgid "Fast movement" msgstr "Modo rápido" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Fast movement (via the \"Aux1\" key).\n" "This requires the \"fast\" privilege on the server." msgstr "" -"Movimento rápido (através da tecla \"especial\").\n" +"Movimento rápido (através da tecla \"Aux1\").\n" "Isso requer o privilegio \"fast\" no servidor." #: src/settings_translation_file.cpp @@ -3395,7 +3392,6 @@ msgid "Filmic tone mapping" msgstr "Filmic Tone Mapping" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Filtered textures can blend RGB values with fully-transparent neighbors,\n" "which PNG optimizers usually discard, often resulting in dark or\n" @@ -3405,7 +3401,8 @@ msgstr "" "Texturas filtradas podem misturar valores RGB com os vizinhos totalmente \n" "transparentes, o qual otimizadores PNG geralmente descartam, por vezes \n" "resultando em uma linha escura em texturas transparentes.\n" -"Aplicar esse filtro para limpar isso no tempo de carregamento da textura." +"Aplique esse filtro para limpar isso no momento de carregamento da textura.\n" +"Esse filtro será ativo automaticamente ao ativar \"mipmapping\"." #: src/settings_translation_file.cpp msgid "Filtering" From 1935783cc67c700a52ecc9625de93efe0b2ffaad Mon Sep 17 00:00:00 2001 From: Markus Mikkonen Date: Sat, 18 Sep 2021 06:55:16 +0000 Subject: [PATCH 104/412] Translated using Weblate (Finnish) Currently translated at 20.9% (292 of 1396 strings) --- po/fi/minetest.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/po/fi/minetest.po b/po/fi/minetest.po index 6761f3e6f..90882169d 100644 --- a/po/fi/minetest.po +++ b/po/fi/minetest.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-09-16 16:37+0000\n" -"Last-Translator: Jiri Grönroos \n" +"PO-Revision-Date: 2021-09-19 07:38+0000\n" +"Last-Translator: Markus Mikkonen \n" "Language-Team: Finnish \n" "Language: fi\n" @@ -288,7 +288,7 @@ msgstr "Pelit" #: builtin/mainmenu/dlg_contentstore.lua msgid "Install" -msgstr "Asenna" +msgstr "Asentaa" #: builtin/mainmenu/dlg_contentstore.lua msgid "Install $1" From 714d4e4a81a06cd9fcb4d53a9c09f1378e955e2c Mon Sep 17 00:00:00 2001 From: phlostically Date: Sun, 3 Oct 2021 23:29:01 +0000 Subject: [PATCH 105/412] Translated using Weblate (Esperanto) Currently translated at 97.2% (1357 of 1396 strings) --- po/eo/minetest.po | 50 ++++++++++++++++++++--------------------------- 1 file changed, 21 insertions(+), 29 deletions(-) diff --git a/po/eo/minetest.po b/po/eo/minetest.po index 9af8f5ec9..12fcbe9c1 100644 --- a/po/eo/minetest.po +++ b/po/eo/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Esperanto (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-08-25 16:34+0000\n" -"Last-Translator: Tirifto \n" +"PO-Revision-Date: 2021-10-05 08:09+0000\n" +"Last-Translator: phlostically \n" "Language-Team: Esperanto \n" "Language: eo\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.8.1-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: builtin/client/chatcommands.lua #, fuzzy @@ -86,7 +86,7 @@ msgstr "" #: builtin/common/chatcommands.lua msgid "[all | ]" -msgstr "" +msgstr "[all | ]" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" @@ -785,9 +785,8 @@ msgid "Active Contributors" msgstr "Aktivaj kontribuantoj" #: builtin/mainmenu/tab_about.lua -#, fuzzy msgid "Active renderer:" -msgstr "Aktiva senda amplekso de objektoj" +msgstr "Aktiva bildigilo:" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" @@ -965,16 +964,14 @@ msgid "Ping" msgstr "Retprokrasto" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Public Servers" -msgstr "Enlistigi servilon" +msgstr "Publikaj serviloj" #: builtin/mainmenu/tab_online.lua msgid "Refresh" -msgstr "" +msgstr "Reŝargi" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Server Description" msgstr "Priskribo pri servilo" @@ -1032,15 +1029,15 @@ msgstr "Ŝikaj folioj" #: builtin/mainmenu/tab_settings.lua msgid "High" -msgstr "" +msgstr "Alta" #: builtin/mainmenu/tab_settings.lua msgid "Low" -msgstr "" +msgstr "Malalta" #: builtin/mainmenu/tab_settings.lua msgid "Medium" -msgstr "" +msgstr "Mezalta" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" @@ -1132,11 +1129,11 @@ msgstr "Trilineara filtrilo" #: builtin/mainmenu/tab_settings.lua msgid "Ultra High" -msgstr "" +msgstr "Altega" #: builtin/mainmenu/tab_settings.lua msgid "Very Low" -msgstr "" +msgstr "Malaltega" #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" @@ -1453,9 +1450,8 @@ msgid "Minimap currently disabled by game or mod" msgstr "Mapeto nuntempe malŝaltita de ludo aŭ modifaĵo" #: src/client/game.cpp -#, fuzzy msgid "Multiplayer" -msgstr "Ludo por unu" +msgstr "Ludo por pluraj ludantoj" #: src/client/game.cpp msgid "Noclip mode disabled" @@ -2711,9 +2707,8 @@ msgid "Colored fog" msgstr "Kolora nebulo" #: src/settings_translation_file.cpp -#, fuzzy msgid "Colored shadows" -msgstr "Kolora nebulo" +msgstr "Koloraj ombroj" #: src/settings_translation_file.cpp msgid "" @@ -6427,7 +6422,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Shadow strength" -msgstr "" +msgstr "Forto de ombro" #: src/settings_translation_file.cpp msgid "Shape of the minimap. Enabled = round, disabled = square." @@ -6544,9 +6539,8 @@ msgid "Sneaking speed, in nodes per second." msgstr "Rapido de kaŝirado, en monderoj sekunde." #: src/settings_translation_file.cpp -#, fuzzy msgid "Soft shadow radius" -msgstr "Travidebleco de tipara ombro" +msgstr "Radiuso de mola ombro" #: src/settings_translation_file.cpp msgid "Sound" @@ -6808,7 +6802,6 @@ msgstr "" "Ĉi tio devas esti agordita kune kun active_object_send_range_blocks." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "The rendering back-end.\n" "A restart is required after changing this.\n" @@ -6817,8 +6810,8 @@ msgid "" "On other platforms, OpenGL is recommended.\n" "Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)" msgstr "" -"La bildiga internaĵo por Irrlicht.\n" -"Rerulo necesas post ĉi tiu ŝanĝo.\n" +"La bildiga internaĵo.\n" +"Relanĉo necesas post ĉi tiu ŝanĝo.\n" "Rimarko: Sur Androido, restu ĉe OGLES1, se vi ne certas! Aplikaĵo alie " "povus\n" "malsukcesi ruliĝon. Sur aliaj sistemoj, OpenGL estas rekomendata.\n" @@ -7337,9 +7330,9 @@ msgstr "" "Ĉu montri erarserĉajn informojn de la kliento (efikas samkiel premo de F5)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Width component of the initial window size. Ignored in fullscreen mode." -msgstr "Larĝeco de la fenestro je ĝia komenca grando." +msgstr "" +"Larĝo de la fenestro je ĝia komenca grando. Ignorata en plenekrana reĝimo." #: src/settings_translation_file.cpp msgid "Width of the selection box lines around nodes." @@ -7475,9 +7468,8 @@ msgid "cURL file download timeout" msgstr "Tempolimo de dosiere elŝuto de cURL" #: src/settings_translation_file.cpp -#, fuzzy msgid "cURL interactive timeout" -msgstr "cURL tempolimo" +msgstr "Interaga tempolimo de cURL" #: src/settings_translation_file.cpp msgid "cURL parallel limit" From 88731631abc299d4190d4b1992d44843e2697bad Mon Sep 17 00:00:00 2001 From: 109247019824 Date: Tue, 5 Oct 2021 16:27:58 +0000 Subject: [PATCH 106/412] Translated using Weblate (Bulgarian) Currently translated at 12.6% (177 of 1396 strings) --- po/bg/minetest.po | 830 ++++++++++++++++++++++++---------------------- 1 file changed, 427 insertions(+), 403 deletions(-) diff --git a/po/bg/minetest.po b/po/bg/minetest.po index 4e8037f24..0476ee3e1 100644 --- a/po/bg/minetest.po +++ b/po/bg/minetest.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2020-08-04 04:41+0000\n" -"Last-Translator: atomicbeef \n" +"PO-Revision-Date: 2021-10-08 20:02+0000\n" +"Last-Translator: 109247019824 \n" "Language-Team: Bulgarian \n" "Language: bg\n" @@ -17,78 +17,78 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.2-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" -msgstr "" +msgstr "Изчистване на изходящата опашка на разговорите" #: builtin/client/chatcommands.lua msgid "Empty command." -msgstr "" +msgstr "Празна команда." #: builtin/client/chatcommands.lua -#, fuzzy msgid "Exit to main menu" -msgstr "Обратно към Главното Меню" +msgstr "Главно меню" #: builtin/client/chatcommands.lua msgid "Invalid command: " -msgstr "" +msgstr "Недействителна команда: " #: builtin/client/chatcommands.lua msgid "Issued command: " -msgstr "" +msgstr "Подадена команда: " #: builtin/client/chatcommands.lua msgid "List online players" -msgstr "" +msgstr "Играчи на линия" #: builtin/client/chatcommands.lua msgid "Online players: " -msgstr "" +msgstr "Играчи на линия: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." -msgstr "" +msgstr "Изходящата опашка на разговори е изпразнена." #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "Командата е забранена от сървъра." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" -msgstr "Прераждането" +msgstr "Прераждане" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "You died" -msgstr "Ти умря" +msgstr "Умряхте" #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." -msgstr "Ти умря" +msgstr "Умряхте." #: builtin/common/chatcommands.lua msgid "Available commands:" -msgstr "" +msgstr "Достъпни команди:" #: builtin/common/chatcommands.lua msgid "Available commands: " -msgstr "" +msgstr "Достъпни команди: " #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "Недостъпни команди: " #: builtin/common/chatcommands.lua msgid "Get help for commands" -msgstr "" +msgstr "Помощ за командите" #: builtin/common/chatcommands.lua msgid "" "Use '.help ' to get more information, or '.help all' to list everything." msgstr "" +"Въведете „.help “ за повече информация или „.help all“ за списък с " +"всички команди." #: builtin/common/chatcommands.lua msgid "[all | ]" @@ -100,43 +100,43 @@ msgstr "Добре" #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" -msgstr "Имаше грешка в Lua скрипт:" +msgstr "Грешка в скрипт на Lua:" #: builtin/fstk/ui.lua msgid "An error occurred:" -msgstr "Имаше грешка:" +msgstr "Възникна грешка:" #: builtin/fstk/ui.lua msgid "Main menu" -msgstr "Главното меню" +msgstr "Главно меню" #: builtin/fstk/ui.lua msgid "Reconnect" -msgstr "Повтаряне на връзката" +msgstr "Повторно свързване" #: builtin/fstk/ui.lua msgid "The server has requested a reconnect:" -msgstr "Сървърт поиска нова връзка:" +msgstr "Сървърът поиска повторно свързване:" #: builtin/mainmenu/common.lua msgid "Protocol version mismatch. " -msgstr "Версията на протокола е грешна. " +msgstr "Изданието на протокола не съвпада. " #: builtin/mainmenu/common.lua msgid "Server enforces protocol version $1. " -msgstr "Сървърт налага версия $1 на протокола. " +msgstr "Сървърът налага издание $1 на протокола. " #: builtin/mainmenu/common.lua msgid "Server supports protocol versions between $1 and $2. " -msgstr "Сървърът подкрепя версии на протокола между $1 и $2. " +msgstr "Сървърът поддържа изданията на протокола между $1 и $2. " #: builtin/mainmenu/common.lua msgid "We only support protocol version $1." -msgstr "Ние само подкрепяме версия $1 на протокола." +msgstr "Поддържаме само издание $1 на протокола." #: builtin/mainmenu/common.lua msgid "We support protocol versions between version $1 and $2." -msgstr "Ние подкрепяме версии на протокола между $1 и $2." +msgstr "Поддържаме само изданията на протокола между $1 и $2." #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_create_world.lua @@ -156,35 +156,35 @@ msgstr "Зависимости:" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable all" -msgstr "Деактивиране на всички" +msgstr "Изключване всички" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable modpack" -msgstr "Деактивиране на модпака" +msgstr "Изключване на пакет с модификации" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" -msgstr "Актиривране на всички" +msgstr "Включване всички" #: builtin/mainmenu/dlg_config_world.lua msgid "Enable modpack" -msgstr "Активиране на модпака" +msgstr "Включване на пакет с модификации" #: builtin/mainmenu/dlg_config_world.lua msgid "" "Failed to enable mod \"$1\" as it contains disallowed characters. Only " "characters [a-z0-9_] are allowed." msgstr "" -"Активиране на мода \"$1\" беше неуспешно, защото съдържа забранени символи. " -"Само символите [a-z0-9_] са разрешени." +"Включването на модификацията „$1“ не е успешно, защото съдържа забранени " +"символи. Разрешени са само символите [a-z0-9_]." #: builtin/mainmenu/dlg_config_world.lua msgid "Find More Mods" -msgstr "Намиране на Още Модове" +msgstr "Още модификации" #: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" -msgstr "Мод:" +msgstr "Модификация:" #: builtin/mainmenu/dlg_config_world.lua msgid "No (optional) dependencies" @@ -192,7 +192,7 @@ msgstr "Няма (незадължителни) зависимости" #: builtin/mainmenu/dlg_config_world.lua msgid "No game description provided." -msgstr "Няма описание за играта." +msgstr "Играта няма описание." #: builtin/mainmenu/dlg_config_world.lua msgid "No hard dependencies" @@ -200,7 +200,7 @@ msgstr "Няма задължителни зависимости" #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." -msgstr "Няма описание за модпака." +msgstr "Пакетът с модификации няма описание." #: builtin/mainmenu/dlg_config_world.lua msgid "No optional dependencies" @@ -213,7 +213,7 @@ msgstr "Незадължителни зависимости:" #: builtin/mainmenu/dlg_config_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp msgid "Save" -msgstr "Записване" +msgstr "Запазване" #: builtin/mainmenu/dlg_config_world.lua msgid "World:" @@ -221,38 +221,39 @@ msgstr "Свят:" #: builtin/mainmenu/dlg_config_world.lua msgid "enabled" -msgstr "Активиран" +msgstr "включен" #: builtin/mainmenu/dlg_contentstore.lua msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" +msgstr "„$1“ вече съществува. Да бъде ли презаписан?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." -msgstr "" +msgstr "$1 и $2 зависимости ще бъдат инсталирани." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" -msgstr "" +msgstr "$1 от $2" #: builtin/mainmenu/dlg_contentstore.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" +"$1 се изтеглят,\n" +"$2 изчакват" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 downloading..." -msgstr "Изтегля..." +msgstr "$1 се изтеглят…" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "" +msgstr "$1 задължителни зависимости не могат да бъдат намерени." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" +msgstr "$1 ще бъдат инсталирани, а $2 зависимости ще бъдат пропуснати." #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" @@ -260,27 +261,28 @@ msgstr "Всички пакети" #: builtin/mainmenu/dlg_contentstore.lua msgid "Already installed" -msgstr "" +msgstr "Вече инсталирано" #: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" -msgstr "Обратно към Главното Меню" +msgstr "Главно меню" #: builtin/mainmenu/dlg_contentstore.lua msgid "Base Game:" -msgstr "" +msgstr "Основна игра:" #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB не е налично когато Minetest е съставен без cURL" +msgstr "" +"Съдържанието от ContentDB не е налично, когато Minetest е компилиран без cURL" #: builtin/mainmenu/dlg_contentstore.lua msgid "Downloading..." -msgstr "Изтегля..." +msgstr "Изтегляне…" #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" -msgstr "Изтеглянето на $1 беше неуспешно" +msgstr "Грешка при изтеглянето на $1" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -292,72 +294,69 @@ msgid "Install" msgstr "Инсталиране" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install $1" -msgstr "Инсталиране" +msgstr "Инсталиране $1" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install missing dependencies" -msgstr "Незадължителни зависимости:" +msgstr "Инсталиране на липсващи зависимости" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" -msgstr "Модове" +msgstr "Модификации" #: builtin/mainmenu/dlg_contentstore.lua msgid "No packages could be retrieved" -msgstr "Получаване на пакети беше неуспешно" +msgstr "Пакетите не могат да бъдат получени" #: builtin/mainmenu/dlg_contentstore.lua msgid "No results" msgstr "Няма резултати" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "No updates" -msgstr "Актуализация" +msgstr "Няма обновяване" #: builtin/mainmenu/dlg_contentstore.lua msgid "Not found" -msgstr "" +msgstr "Не е намерено" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" -msgstr "" +msgstr "Презаписване" #: builtin/mainmenu/dlg_contentstore.lua msgid "Please check that the base game is correct." -msgstr "" +msgstr "Уверете се, че основната игра е правилна." #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" -msgstr "" +msgstr "Изчакващи" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" -msgstr "Пакети на текстури" +msgstr "Пакети с текстури" #: builtin/mainmenu/dlg_contentstore.lua msgid "Uninstall" -msgstr "Деинсталиране" +msgstr "Премахване" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update" -msgstr "Актуализация" +msgstr "Обновяване" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update All [$1]" -msgstr "" +msgstr "Обновяване всички [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "Вижте повече в браузъра" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" -msgstr "Вече има свят с името \"$1\"" +msgstr "Свят с името „$1“ вече съществува" #: builtin/mainmenu/dlg_create_world.lua msgid "Additional terrain" @@ -365,23 +364,23 @@ msgstr "Допълнителен терен" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Altitude chill" -msgstr "Студ от височина" +msgstr "Застудяване във височина" #: builtin/mainmenu/dlg_create_world.lua msgid "Altitude dry" -msgstr "Сух от височина" +msgstr "Засушаване във височина" #: builtin/mainmenu/dlg_create_world.lua msgid "Biome blending" -msgstr "Смесване между природни зони" +msgstr "Смесване на биоми" #: builtin/mainmenu/dlg_create_world.lua msgid "Biomes" -msgstr "Природни зони" +msgstr "Биоми" #: builtin/mainmenu/dlg_create_world.lua msgid "Caverns" -msgstr "Пещери" +msgstr "Големи пещери" #: builtin/mainmenu/dlg_create_world.lua msgid "Caves" @@ -393,7 +392,7 @@ msgstr "Създаване" #: builtin/mainmenu/dlg_create_world.lua msgid "Decorations" -msgstr "Украси" +msgstr "Декорации" #: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" @@ -401,7 +400,7 @@ msgstr "Изтегляне на игра, например Minetest Game, от m #: builtin/mainmenu/dlg_create_world.lua msgid "Download one from minetest.net" -msgstr "Изтегли един от minetest.net" +msgstr "Изтеглете от minetest.net" #: builtin/mainmenu/dlg_create_world.lua msgid "Dungeons" @@ -413,11 +412,11 @@ msgstr "Равен терен" #: builtin/mainmenu/dlg_create_world.lua msgid "Floating landmasses in the sky" -msgstr "Земни маси в небето" +msgstr "Плаващи земни маси в небето" #: builtin/mainmenu/dlg_create_world.lua msgid "Floatlands (experimental)" -msgstr "Земни маси в небето (експериментално)" +msgstr "Небесни острови (експериментално)" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" @@ -425,11 +424,11 @@ msgstr "Игра" #: builtin/mainmenu/dlg_create_world.lua msgid "Generate non-fractal terrain: Oceans and underground" -msgstr "Създаване на нефрактален терен: Морета и под земята" +msgstr "Създаване на нефрактален терен: Морета и подземен свят" #: builtin/mainmenu/dlg_create_world.lua msgid "Hills" -msgstr "Хълми" +msgstr "Хълмове" #: builtin/mainmenu/dlg_create_world.lua msgid "Humid rivers" @@ -437,7 +436,7 @@ msgstr "Влажни реки" #: builtin/mainmenu/dlg_create_world.lua msgid "Increases humidity around rivers" -msgstr "Нараства влажност около реки" +msgstr "Увеличава влажността около реките" #: builtin/mainmenu/dlg_create_world.lua msgid "Lakes" @@ -445,19 +444,19 @@ msgstr "Езера" #: builtin/mainmenu/dlg_create_world.lua msgid "Low humidity and high heat causes shallow or dry rivers" -msgstr "Ниска влажност и висока топлина причинява ниски или сухи реки" +msgstr "Ниската влажност и горещините причиняват плитки или пресъхнали реки" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen" -msgstr "Създаване на света" +msgstr "Генератор на карти" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen flags" -msgstr "Флагове за създаване на света" +msgstr "Настройки на генератора" #: builtin/mainmenu/dlg_create_world.lua msgid "Mapgen-specific flags" -msgstr "Флагове спесифични за създване на света" +msgstr "Специфични за генератора настройки" #: builtin/mainmenu/dlg_create_world.lua msgid "Mountains" @@ -477,11 +476,11 @@ msgstr "Няма избрана игра" #: builtin/mainmenu/dlg_create_world.lua msgid "Reduces heat with altitude" -msgstr "Намалява топлина с височина" +msgstr "Намалява топлината във височина" #: builtin/mainmenu/dlg_create_world.lua msgid "Reduces humidity with altitude" -msgstr "Намалява влажност с височина" +msgstr "Намалява влажността във височина" #: builtin/mainmenu/dlg_create_world.lua msgid "Rivers" @@ -498,35 +497,35 @@ msgstr "Семе" #: builtin/mainmenu/dlg_create_world.lua msgid "Smooth transition between biomes" -msgstr "Гладка промяна между природни зони" +msgstr "Плавен преход между биомите" #: builtin/mainmenu/dlg_create_world.lua msgid "" "Structures appearing on the terrain (no effect on trees and jungle grass " "created by v6)" msgstr "" -"Появяване на структури на терена (няма ефект на трева от джунгла и дървета " -"създадени от v6)" +"Структури, появяващи се върху терена (няма ефект върху дърветата и тревата в " +"джунглата, създадени от v6)" #: builtin/mainmenu/dlg_create_world.lua msgid "Structures appearing on the terrain, typically trees and plants" -msgstr "Появяване на структури на терена, типично дървета и растения" +msgstr "Структури, появяващи се върху терена, обикновено дървета и растения" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert" -msgstr "Умерен, Пустиня" +msgstr "Умерен климат, пустиня" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle" -msgstr "Умерен, Пустиня, Джунгла" +msgstr "Умерен климат, пустиня, джунгла" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle, Tundra, Taiga" -msgstr "Умерен, Пустиня, Джунгла, Тундра, Тайга" +msgstr "Умерен климат, пустиня, джунгла, тундра, тайга" #: builtin/mainmenu/dlg_create_world.lua msgid "Terrain surface erosion" -msgstr "Ерозия на повърхност на терен" +msgstr "Ерозия на земната повърхност" #: builtin/mainmenu/dlg_create_world.lua msgid "Trees and jungle grass" @@ -534,7 +533,7 @@ msgstr "Трева в джунглата и дървета" #: builtin/mainmenu/dlg_create_world.lua msgid "Vary river depth" -msgstr "Вариране на дълбочина на реки" +msgstr "Промяна в дълбочината на реките" #: builtin/mainmenu/dlg_create_world.lua msgid "Very large caverns deep in the underground" @@ -542,7 +541,7 @@ msgstr "Много големи пещери дълбоко под земята" #: builtin/mainmenu/dlg_create_world.lua msgid "Warning: The Development Test is meant for developers." -msgstr "Внимание: Тестът за Развитие е предназначен за разработници." +msgstr "Внимание: Тестът за разработка е предназначен за разработчици." #: builtin/mainmenu/dlg_create_world.lua msgid "World name" @@ -550,29 +549,29 @@ msgstr "Име на света" #: builtin/mainmenu/dlg_create_world.lua msgid "You have no games installed." -msgstr "Нямаш инсалирани игри." +msgstr "Няма инсталирани игри." #: builtin/mainmenu/dlg_delete_content.lua msgid "Are you sure you want to delete \"$1\"?" -msgstr "Сигурен ли си че искаш да изтриваш \"$1\"?" +msgstr "Сигурни ли сте, че искате да премахнете „$1“?" #: builtin/mainmenu/dlg_delete_content.lua #: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua #: src/client/keycode.cpp msgid "Delete" -msgstr "Изтриване" +msgstr "Премахване" #: builtin/mainmenu/dlg_delete_content.lua msgid "pkgmgr: failed to delete \"$1\"" -msgstr "pkgmgr: Изтриване на \"$1\" беше неуспешно" +msgstr "pkgmgr: грешка при премахване на „$1“" #: builtin/mainmenu/dlg_delete_content.lua msgid "pkgmgr: invalid path \"$1\"" -msgstr "pkgmgr: Грешна пътека \"$1\"" +msgstr "pkgmgr: недействителен път „$1“" #: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" -msgstr "Да изтриe ли света \"$1\"?" +msgstr "Премахване на света „$1“?" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Accept" @@ -580,32 +579,31 @@ msgstr "Приемане" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "Rename Modpack:" -msgstr "Преименуване на модпак:" +msgstr "Преименуване на пакет модификации:" #: builtin/mainmenu/dlg_rename_modpack.lua msgid "" "This modpack has an explicit name given in its modpack.conf which will " "override any renaming here." msgstr "" -"Този модпак има изрично име дадено в неговия modpack.conf, което ще отменя " -"всяко преименуване тука." +"Този пакет с модификации има изрично зададено име в modpack.conf, което ще " +"отмени всяко преименуване." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "(No description of setting given)" -msgstr "" +msgstr "(Настройката няма описание)" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "2D Noise" -msgstr "" +msgstr "Двуизмерен шум" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "< Back to Settings page" -msgstr "" +msgstr "Главно меню" #: builtin/mainmenu/dlg_settings_advanced.lua -#, fuzzy msgid "Browse" -msgstr "Преглеждане" +msgstr "Разглеждане" #: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua msgid "Disabled" @@ -613,7 +611,7 @@ msgstr "Изключено" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Edit" -msgstr "" +msgstr "Редактиране" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Enabled" @@ -621,34 +619,33 @@ msgstr "Включено" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Lacunarity" -msgstr "" +msgstr "Лакунарност" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Octaves" -msgstr "" +msgstr "Октави" #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp msgid "Offset" -msgstr "Изместване" +msgstr "Отместване" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Persistance" -msgstr "" +msgstr "Устойчивост" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Please enter a valid integer." -msgstr "" +msgstr "Въведете цяло число." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Please enter a valid number." -msgstr "" +msgstr "Въведете число." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Restore Default" -msgstr "" +msgstr "По подразбиране" #: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp -#, fuzzy msgid "Scale" msgstr "Мащаб" @@ -658,32 +655,31 @@ msgstr "Търсене" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Select directory" -msgstr "" +msgstr "Избор на папка" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Select file" -msgstr "" +msgstr "Избор на файл" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Show technical names" -msgstr "" +msgstr "Технически наименования" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "The value must be at least $1." -msgstr "" +msgstr "Стойността трябва да е най-малко $1." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "The value must not be larger than $1." -msgstr "" +msgstr "Стойността трябва да е най-много $1." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "X" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua -#, fuzzy msgid "X spread" -msgstr "Разпространение на Х-оста" +msgstr "Разпределение по X" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Y" @@ -691,7 +687,7 @@ msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Y spread" -msgstr "Разпространение на У-оста" +msgstr "Разпределение по Y" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Z" @@ -699,7 +695,7 @@ msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Z spread" -msgstr "" +msgstr "Разпределение по Z" #. ~ "absvalue" is a noise parameter flag. #. It is short for "absolute value". @@ -714,7 +710,7 @@ msgstr "" #. for noise settings in main menu -> "All Settings". #: builtin/mainmenu/dlg_settings_advanced.lua msgid "defaults" -msgstr "" +msgstr "подразбирани" #. ~ "eased" is a noise parameter flag. #. It is used to make the map smoother and @@ -726,15 +722,15 @@ msgstr "" #: builtin/mainmenu/pkgmgr.lua msgid "$1 (Enabled)" -msgstr "" +msgstr "$1 (включено)" #: builtin/mainmenu/pkgmgr.lua msgid "$1 mods" -msgstr "" +msgstr "$1 модификации" #: builtin/mainmenu/pkgmgr.lua msgid "Failed to install $1 to $2" -msgstr "" +msgstr "Грешка при инсталиране на $1 в $2" #: builtin/mainmenu/pkgmgr.lua msgid "Install Mod: Unable to find real mod name for: $1" @@ -746,11 +742,11 @@ msgstr "" #: builtin/mainmenu/pkgmgr.lua msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" +msgstr "Инсталиране: Неподдържан вид на файла „$ 1“ или повреден архив" #: builtin/mainmenu/pkgmgr.lua msgid "Install: file: \"$1\"" -msgstr "" +msgstr "Инсталиране: файл: „$1“" #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" @@ -774,241 +770,240 @@ msgstr "" #: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp msgid "Loading..." -msgstr "Зарежда..." +msgstr "Зареждане…" #: builtin/mainmenu/serverlistmgr.lua msgid "Public server list is disabled" -msgstr "" +msgstr "Списъкът с обществени сървъри е изключен" #: builtin/mainmenu/serverlistmgr.lua msgid "Try reenabling public serverlist and check your internet connection." -msgstr "" -"Опитай да включиш публичния списък на сървъри отново и си провай интернет " -"връзката." +msgstr "Включете списъка на обществени сървъри и проверете връзката с интернет." #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "" +msgstr "Относно" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" -msgstr "" +msgstr "Активни сътрудници" #: builtin/mainmenu/tab_about.lua msgid "Active renderer:" -msgstr "" +msgstr "Активен визуализатор:" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" -msgstr "" +msgstr "Основни разработчици" #: builtin/mainmenu/tab_about.lua msgid "Open User Data Directory" -msgstr "" +msgstr "Папка с данни" #: builtin/mainmenu/tab_about.lua msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" +"Отваря папката, съдържаща предоставените от потребителя\n" +"светове, игри, модификации и текстури." #: builtin/mainmenu/tab_about.lua msgid "Previous Contributors" -msgstr "" +msgstr "Предишни сътрудници" #: builtin/mainmenu/tab_about.lua msgid "Previous Core Developers" -msgstr "" +msgstr "Предишни основни разработчици" #: builtin/mainmenu/tab_content.lua msgid "Browse online content" -msgstr "" +msgstr "Преглед на съдържание онлайн" #: builtin/mainmenu/tab_content.lua msgid "Content" -msgstr "" +msgstr "Съдържание" #: builtin/mainmenu/tab_content.lua msgid "Disable Texture Pack" -msgstr "" +msgstr "Изкл. на пакет с текстури" #: builtin/mainmenu/tab_content.lua msgid "Information:" -msgstr "" +msgstr "Описание:" #: builtin/mainmenu/tab_content.lua msgid "Installed Packages:" -msgstr "" +msgstr "Инсталирани пакети:" #: builtin/mainmenu/tab_content.lua msgid "No dependencies." -msgstr "" +msgstr "Няма зависимости." #: builtin/mainmenu/tab_content.lua msgid "No package description available" -msgstr "" +msgstr "Пакетът няма описание" #: builtin/mainmenu/tab_content.lua msgid "Rename" -msgstr "" +msgstr "Преименуване" #: builtin/mainmenu/tab_content.lua msgid "Uninstall Package" -msgstr "" +msgstr "Премахване на пакет" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" -msgstr "" +msgstr "Вкл. на пакет с текстури" #: builtin/mainmenu/tab_local.lua msgid "Announce Server" -msgstr "" +msgstr "Обявяване на сървъра" #: builtin/mainmenu/tab_local.lua msgid "Bind Address" -msgstr "" +msgstr "Адрес за свързване" #: builtin/mainmenu/tab_local.lua msgid "Creative Mode" -msgstr "" +msgstr "Творчески режим" #: builtin/mainmenu/tab_local.lua msgid "Enable Damage" -msgstr "" +msgstr "Получаване на щети" #: builtin/mainmenu/tab_local.lua msgid "Host Game" -msgstr "" +msgstr "Създаване на игра" #: builtin/mainmenu/tab_local.lua msgid "Host Server" -msgstr "" +msgstr "Създаване на сървър" #: builtin/mainmenu/tab_local.lua msgid "Install games from ContentDB" -msgstr "" +msgstr "Инсталиране на игри от ContentDB" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua msgid "Name" -msgstr "" +msgstr "Име" #: builtin/mainmenu/tab_local.lua msgid "New" -msgstr "" +msgstr "Създаване" #: builtin/mainmenu/tab_local.lua msgid "No world created or selected!" -msgstr "" +msgstr "Не е създаден или избран свят!" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua msgid "Password" -msgstr "" +msgstr "Парола" #: builtin/mainmenu/tab_local.lua msgid "Play Game" -msgstr "" +msgstr "Започване на игра" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua msgid "Port" -msgstr "" +msgstr "Порт" #: builtin/mainmenu/tab_local.lua msgid "Select Mods" -msgstr "" +msgstr "Модификации" #: builtin/mainmenu/tab_local.lua msgid "Select World:" -msgstr "" +msgstr "Избор на свят:" #: builtin/mainmenu/tab_local.lua msgid "Server Port" -msgstr "" +msgstr "Порт на сървъра" #: builtin/mainmenu/tab_local.lua msgid "Start Game" -msgstr "" +msgstr "Създаване на игра" #: builtin/mainmenu/tab_online.lua msgid "Address" -msgstr "" +msgstr "Адрес" #: builtin/mainmenu/tab_online.lua src/client/keycode.cpp msgid "Clear" -msgstr "" +msgstr "Изчистване" #: builtin/mainmenu/tab_online.lua msgid "Connect" -msgstr "" +msgstr "Свързване" #: builtin/mainmenu/tab_online.lua msgid "Creative mode" -msgstr "" +msgstr "Творчески режим" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua msgid "Damage / PvP" -msgstr "" +msgstr "Щети / PvP" #: builtin/mainmenu/tab_online.lua msgid "Del. Favorite" -msgstr "" +msgstr "Премах. любим" #: builtin/mainmenu/tab_online.lua msgid "Favorites" -msgstr "" +msgstr "Любими" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" -msgstr "" +msgstr "Несъвместими сървъри" #: builtin/mainmenu/tab_online.lua msgid "Join Game" -msgstr "" +msgstr "Включване към игра" #: builtin/mainmenu/tab_online.lua msgid "Ping" -msgstr "" +msgstr "Ping" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Public Servers" -msgstr "Влажни реки" +msgstr "Обществени сървъри" #: builtin/mainmenu/tab_online.lua msgid "Refresh" -msgstr "" +msgstr "Презареждане" #: builtin/mainmenu/tab_online.lua msgid "Server Description" -msgstr "" +msgstr "Описание на сървър" #: builtin/mainmenu/tab_settings.lua msgid "2x" -msgstr "" +msgstr "2x" #: builtin/mainmenu/tab_settings.lua msgid "3D Clouds" -msgstr "" +msgstr "Тримерни облаци" #: builtin/mainmenu/tab_settings.lua msgid "4x" -msgstr "" +msgstr "4x" #: builtin/mainmenu/tab_settings.lua msgid "8x" -msgstr "" +msgstr "8x" #: builtin/mainmenu/tab_settings.lua msgid "All Settings" -msgstr "" +msgstr "Всички настройки" #: builtin/mainmenu/tab_settings.lua msgid "Antialiasing:" -msgstr "" +msgstr "Сгласяне:" #: builtin/mainmenu/tab_settings.lua msgid "Autosave Screen Size" -msgstr "" +msgstr "Авт. запазване на размера" #: builtin/mainmenu/tab_settings.lua msgid "Bilinear Filter" @@ -1016,83 +1011,86 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua src/client/game.cpp msgid "Change Keys" -msgstr "" +msgstr "Промяна на клавиши" #: builtin/mainmenu/tab_settings.lua msgid "Connected Glass" -msgstr "" +msgstr "Свързано стъкло" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Dynamic shadows" -msgstr "" +msgstr "Динамични сенки" #: builtin/mainmenu/tab_settings.lua msgid "Dynamic shadows: " -msgstr "" +msgstr "Динамични сенки: " #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" -msgstr "" +msgstr "Луксозни листа" #: builtin/mainmenu/tab_settings.lua msgid "High" -msgstr "" +msgstr "Силни" #: builtin/mainmenu/tab_settings.lua msgid "Low" -msgstr "" +msgstr "Слаби" #: builtin/mainmenu/tab_settings.lua msgid "Medium" -msgstr "" +msgstr "Нормални" #: builtin/mainmenu/tab_settings.lua +#, fuzzy msgid "Mipmap" -msgstr "" +msgstr "Миникарта" #: builtin/mainmenu/tab_settings.lua +#, fuzzy msgid "Mipmap + Aniso. Filter" -msgstr "" +msgstr "Миникарта + анизо. филтър" #: builtin/mainmenu/tab_settings.lua msgid "No Filter" -msgstr "" +msgstr "Без филтър" #: builtin/mainmenu/tab_settings.lua +#, fuzzy msgid "No Mipmap" -msgstr "" +msgstr "Без миникарта" #: builtin/mainmenu/tab_settings.lua msgid "Node Highlighting" -msgstr "" +msgstr "Осветяване на възел" #: builtin/mainmenu/tab_settings.lua msgid "Node Outlining" -msgstr "" +msgstr "Ограждане на възел" #: builtin/mainmenu/tab_settings.lua msgid "None" -msgstr "" +msgstr "Без" #: builtin/mainmenu/tab_settings.lua msgid "Opaque Leaves" -msgstr "" +msgstr "Непрозрачни листа" #: builtin/mainmenu/tab_settings.lua msgid "Opaque Water" -msgstr "" +msgstr "Непрозрачна вода" #: builtin/mainmenu/tab_settings.lua msgid "Particles" -msgstr "" +msgstr "Частици" #: builtin/mainmenu/tab_settings.lua msgid "Screen:" -msgstr "" +msgstr "Екран:" #: builtin/mainmenu/tab_settings.lua msgid "Settings" -msgstr "" +msgstr "Настройки" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Shaders" @@ -1109,15 +1107,15 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua msgid "Simple Leaves" -msgstr "" +msgstr "Обикновени листа" #: builtin/mainmenu/tab_settings.lua msgid "Smooth Lighting" -msgstr "" +msgstr "Гладко осветление" #: builtin/mainmenu/tab_settings.lua msgid "Texturing:" -msgstr "" +msgstr "Текстуриране:" #: builtin/mainmenu/tab_settings.lua msgid "To enable shaders the OpenGL driver needs to be used." @@ -1129,7 +1127,7 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua msgid "Touchthreshold: (px)" -msgstr "" +msgstr "Праг на докосване: (px)" #: builtin/mainmenu/tab_settings.lua msgid "Trilinear Filter" @@ -1137,43 +1135,43 @@ msgstr "" #: builtin/mainmenu/tab_settings.lua msgid "Ultra High" -msgstr "" +msgstr "Много силни" #: builtin/mainmenu/tab_settings.lua msgid "Very Low" -msgstr "" +msgstr "Много слаби" #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" -msgstr "" +msgstr "Поклащащи се листа" #: builtin/mainmenu/tab_settings.lua msgid "Waving Liquids" -msgstr "" +msgstr "Поклащащи се течности" #: builtin/mainmenu/tab_settings.lua msgid "Waving Plants" -msgstr "" +msgstr "Поклащащи се растения" #: src/client/client.cpp msgid "Connection timed out." -msgstr "" +msgstr "Времето за свързване изтече." #: src/client/client.cpp msgid "Done!" -msgstr "" +msgstr "Готово!" #: src/client/client.cpp msgid "Initializing nodes" -msgstr "" +msgstr "Иницииране на възли" #: src/client/client.cpp msgid "Initializing nodes..." -msgstr "" +msgstr "Иницииране на възли…" #: src/client/client.cpp msgid "Loading textures..." -msgstr "" +msgstr "Зареждане на текстури…" #: src/client/client.cpp msgid "Rebuilding shaders..." @@ -1181,7 +1179,7 @@ msgstr "" #: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" -msgstr "" +msgstr "Грешка при свързване (изтекло време?)" #: src/client/clientlauncher.cpp msgid "Could not find or load game \"" @@ -1193,106 +1191,108 @@ msgstr "" #: src/client/clientlauncher.cpp msgid "Main Menu" -msgstr "" +msgstr "Главно меню" #: src/client/clientlauncher.cpp msgid "No world selected and no address provided. Nothing to do." -msgstr "" +msgstr "Няма избран свят, нито зададен адрес. Няма какво да бъде направено." #: src/client/clientlauncher.cpp msgid "Player name too long." -msgstr "" +msgstr "Името на играча е твърде дълго." #: src/client/clientlauncher.cpp msgid "Please choose a name!" -msgstr "" +msgstr "Изберете име!" #: src/client/clientlauncher.cpp msgid "Provided password file failed to open: " -msgstr "" +msgstr "Файлът с пароли не се отваря: " #: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " -msgstr "" +msgstr "Зададеният път към света не съществува: " #: src/client/game.cpp msgid "" "\n" "Check debug.txt for details." msgstr "" +"\n" +"Прегледайте debug.txt за повече информация." #: src/client/game.cpp msgid "- Address: " -msgstr "" +msgstr "- Адрес: " #: src/client/game.cpp msgid "- Creative Mode: " -msgstr "" +msgstr "- Творчески режим: " #: src/client/game.cpp msgid "- Damage: " -msgstr "" +msgstr "- Щети: " #: src/client/game.cpp msgid "- Mode: " -msgstr "" +msgstr "- Режим: " #: src/client/game.cpp msgid "- Port: " -msgstr "" +msgstr "- Порт: " #: src/client/game.cpp msgid "- Public: " -msgstr "" +msgstr "- Обществен: " #. ~ PvP = Player versus Player #: src/client/game.cpp msgid "- PvP: " -msgstr "" +msgstr "- PvP: " #: src/client/game.cpp msgid "- Server Name: " -msgstr "" +msgstr "- Име на сървър: " #: src/client/game.cpp msgid "Automatic forward disabled" -msgstr "" +msgstr "Автоматичното движение напред е изключено" #: src/client/game.cpp msgid "Automatic forward enabled" -msgstr "" +msgstr "Автоматичното движение напред е включено" #: src/client/game.cpp msgid "Camera update disabled" -msgstr "" +msgstr "Опресняването на екрана при движение е изключено" #: src/client/game.cpp msgid "Camera update enabled" -msgstr "" +msgstr "Опресняването на екрана при движение е включено" #: src/client/game.cpp msgid "Change Password" -msgstr "" +msgstr "Промяна на парола" #: src/client/game.cpp msgid "Cinematic mode disabled" -msgstr "" +msgstr "Кинематографичният режим е изключен" #: src/client/game.cpp msgid "Cinematic mode enabled" -msgstr "" +msgstr "Кинематографичният режим е включен" #: src/client/game.cpp msgid "Client side scripting is disabled" -msgstr "" +msgstr "Изпълняване на скриптове от страната на клиента е изключено" #: src/client/game.cpp msgid "Connecting to server..." -msgstr "" +msgstr "Свързване със сървър…" #: src/client/game.cpp msgid "Continue" -msgstr "" +msgstr "Продължаване" #: src/client/game.cpp #, c-format @@ -1312,14 +1312,28 @@ msgid "" "- Mouse wheel: select item\n" "- %s: chat\n" msgstr "" +"Управление:\n" +"- %s: движение напред\n" +"- %s: движение назад\n" +"- %s: движение наляво\n" +"- %s: движение надясно\n" +"- %s: скачане/катерене\n" +"- %s: копаене/удар\n" +"- %s: поставяне/използване\n" +"- %s: промъкване/слизане\n" +"- %s: пускане на предмет\n" +"- %s: инвентар\n" +"- мишка: завъртане/разглеждане\n" +"- колелце на мишка: избор на предмет\n" +"- %s: разговор\n" #: src/client/game.cpp msgid "Creating client..." -msgstr "" +msgstr "Създаване на клиент…" #: src/client/game.cpp msgid "Creating server..." -msgstr "" +msgstr "Създаване на сървър…" #: src/client/game.cpp msgid "Debug info and profiler graph hidden" @@ -1351,67 +1365,67 @@ msgstr "" #: src/client/game.cpp msgid "Disabled unlimited viewing range" -msgstr "" +msgstr "Неограниченият обхват на видимост е изключен" #: src/client/game.cpp msgid "Enabled unlimited viewing range" -msgstr "" +msgstr "Неограниченият обхват на видимост е включен" #: src/client/game.cpp msgid "Exit to Menu" -msgstr "" +msgstr "Изход към менюто" #: src/client/game.cpp msgid "Exit to OS" -msgstr "" +msgstr "Изход към ОС" #: src/client/game.cpp msgid "Fast mode disabled" -msgstr "" +msgstr "Режимът на бързо движение е изключен" #: src/client/game.cpp msgid "Fast mode enabled" -msgstr "" +msgstr "Режимът на бързо движение е включен" #: src/client/game.cpp msgid "Fast mode enabled (note: no 'fast' privilege)" -msgstr "" +msgstr "Режимът на бързо движение е включен (заб.: липсва правото „fast“)" #: src/client/game.cpp msgid "Fly mode disabled" -msgstr "" +msgstr "Режимът на летене е изключен" #: src/client/game.cpp msgid "Fly mode enabled" -msgstr "" +msgstr "Режимът на летене е включен" #: src/client/game.cpp msgid "Fly mode enabled (note: no 'fly' privilege)" -msgstr "" +msgstr "Режимът на летене е включен (заб.: липсва правото „fly“)" #: src/client/game.cpp msgid "Fog disabled" -msgstr "" +msgstr "Мъглата е изключена" #: src/client/game.cpp msgid "Fog enabled" -msgstr "" +msgstr "Мъглата е включена" #: src/client/game.cpp msgid "Game info:" -msgstr "" +msgstr "Информация за играта:" #: src/client/game.cpp msgid "Game paused" -msgstr "" +msgstr "Играта е на пауза" #: src/client/game.cpp msgid "Hosting server" -msgstr "" +msgstr "Домакин на играта" #: src/client/game.cpp msgid "Item definitions..." -msgstr "" +msgstr "Дефиниции на предмети…" #: src/client/game.cpp msgid "KiB/s" @@ -1419,7 +1433,7 @@ msgstr "" #: src/client/game.cpp msgid "Media..." -msgstr "" +msgstr "Медия…" #: src/client/game.cpp msgid "MiB/s" @@ -1427,160 +1441,160 @@ msgstr "" #: src/client/game.cpp msgid "Minimap currently disabled by game or mod" -msgstr "" +msgstr "Картата е спряна или от играта, или от модификация" #: src/client/game.cpp msgid "Multiplayer" -msgstr "" +msgstr "Множество играчи" #: src/client/game.cpp msgid "Noclip mode disabled" -msgstr "" +msgstr "Режимът „без изрязване“ е изключен" #: src/client/game.cpp msgid "Noclip mode enabled" -msgstr "" +msgstr "Режимът „без изрязване“ е включен" #: src/client/game.cpp msgid "Noclip mode enabled (note: no 'noclip' privilege)" -msgstr "" +msgstr "Режимът „без изрязване“ е включен (заб.: липсва правото „noclip“)" #: src/client/game.cpp msgid "Node definitions..." -msgstr "" +msgstr "Дефиниции на възли…" #: src/client/game.cpp msgid "Off" -msgstr "" +msgstr "Изключено" #: src/client/game.cpp msgid "On" -msgstr "" +msgstr "Включено" #: src/client/game.cpp msgid "Pitch move mode disabled" -msgstr "" +msgstr "Режимът „промяна на височината“ е изключен" #: src/client/game.cpp msgid "Pitch move mode enabled" -msgstr "" +msgstr "Режимът „промяна на височината“ е включен" #: src/client/game.cpp msgid "Profiler graph shown" -msgstr "" +msgstr "Графиката на профилатора е показана" #: src/client/game.cpp msgid "Remote server" -msgstr "" +msgstr "Отдалечен сървър" #: src/client/game.cpp msgid "Resolving address..." -msgstr "" +msgstr "Намиране на адрес…" #: src/client/game.cpp msgid "Shutting down..." -msgstr "" +msgstr "Изключване…" #: src/client/game.cpp msgid "Singleplayer" -msgstr "" +msgstr "Един играч" #: src/client/game.cpp msgid "Sound Volume" -msgstr "" +msgstr "Сила на звука" #: src/client/game.cpp msgid "Sound muted" -msgstr "" +msgstr "Звукът е заглушен" #: src/client/game.cpp msgid "Sound system is disabled" -msgstr "" +msgstr "Системата за звук е изключена" #: src/client/game.cpp msgid "Sound system is not supported on this build" -msgstr "" +msgstr "В това издание не се поддържа звукова система" #: src/client/game.cpp msgid "Sound unmuted" -msgstr "" +msgstr "Звукът е пуснат" #: src/client/game.cpp #, c-format msgid "Viewing range changed to %d" -msgstr "" +msgstr "Обхватът на видимостта е променен на %d" #: src/client/game.cpp #, c-format msgid "Viewing range is at maximum: %d" -msgstr "" +msgstr "Обхватът на видимостта е на своя максимум: %d" #: src/client/game.cpp #, c-format msgid "Viewing range is at minimum: %d" -msgstr "" +msgstr "Обхватът на видимостта е на своя минимум: %d" #: src/client/game.cpp #, c-format msgid "Volume changed to %d%%" -msgstr "" +msgstr "Силата на звука е променена на %d%%" #: src/client/game.cpp msgid "Wireframe shown" -msgstr "" +msgstr "Показани са телените рамки" #: src/client/game.cpp msgid "Zoom currently disabled by game or mod" -msgstr "" +msgstr "Мащабирането е спряно или от играта, или от модификация" #: src/client/game.cpp msgid "ok" -msgstr "" +msgstr "добре" #: src/client/gameui.cpp msgid "Chat hidden" -msgstr "" +msgstr "Разговорите са скрити" #: src/client/gameui.cpp msgid "Chat shown" -msgstr "" +msgstr "Разговорите са видими" #: src/client/gameui.cpp msgid "HUD hidden" -msgstr "" +msgstr "HUD скрит" #: src/client/gameui.cpp msgid "HUD shown" -msgstr "" +msgstr "HUD видим" #: src/client/gameui.cpp msgid "Profiler hidden" -msgstr "" +msgstr "Профилаторът е скрит" #: src/client/gameui.cpp #, c-format msgid "Profiler shown (page %d of %d)" -msgstr "" +msgstr "Профилаторът е видим (страница %d от %d)" #: src/client/keycode.cpp msgid "Apps" -msgstr "" +msgstr "Приложения" #: src/client/keycode.cpp msgid "Backspace" -msgstr "" +msgstr "Backspace" #: src/client/keycode.cpp msgid "Caps Lock" -msgstr "" +msgstr "Caps Lock" #: src/client/keycode.cpp msgid "Control" -msgstr "" +msgstr "Control" #: src/client/keycode.cpp msgid "Down" -msgstr "" +msgstr "Надолу" #: src/client/keycode.cpp msgid "End" @@ -1628,27 +1642,27 @@ msgstr "" #: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp msgid "Left" -msgstr "" +msgstr "Наляво" #: src/client/keycode.cpp msgid "Left Button" -msgstr "" +msgstr "Ляв бутон" #: src/client/keycode.cpp msgid "Left Control" -msgstr "" +msgstr "Ляв Control" #: src/client/keycode.cpp msgid "Left Menu" -msgstr "" +msgstr "Ляв Menu" #: src/client/keycode.cpp msgid "Left Shift" -msgstr "" +msgstr "Ляв Shift" #: src/client/keycode.cpp msgid "Left Windows" -msgstr "" +msgstr "Ляв Windows" #. ~ Key name, common on Windows keyboards #: src/client/keycode.cpp @@ -1657,7 +1671,7 @@ msgstr "" #: src/client/keycode.cpp msgid "Middle Button" -msgstr "" +msgstr "Среден бутон" #: src/client/keycode.cpp msgid "Num Lock" @@ -1754,31 +1768,31 @@ msgstr "" #: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp msgid "Right" -msgstr "" +msgstr "Дясно" #: src/client/keycode.cpp msgid "Right Button" -msgstr "" +msgstr "Десен бутон" #: src/client/keycode.cpp msgid "Right Control" -msgstr "" +msgstr "Десен Control" #: src/client/keycode.cpp msgid "Right Menu" -msgstr "" +msgstr "Десен Menu" #: src/client/keycode.cpp msgid "Right Shift" -msgstr "" +msgstr "Десен Shift" #: src/client/keycode.cpp msgid "Right Windows" -msgstr "" +msgstr "Десен Windows" #: src/client/keycode.cpp msgid "Scroll Lock" -msgstr "" +msgstr "Scroll Lock" #. ~ Key name #: src/client/keycode.cpp @@ -1787,27 +1801,27 @@ msgstr "" #: src/client/keycode.cpp msgid "Shift" -msgstr "" +msgstr "Shift" #: src/client/keycode.cpp msgid "Sleep" -msgstr "" +msgstr "Sleep" #: src/client/keycode.cpp msgid "Snapshot" -msgstr "" +msgstr "Снимка на екрана" #: src/client/keycode.cpp msgid "Space" -msgstr "" +msgstr "Интервал" #: src/client/keycode.cpp msgid "Tab" -msgstr "" +msgstr "Табулатор" #: src/client/keycode.cpp msgid "Up" -msgstr "" +msgstr "Нагоре" #: src/client/keycode.cpp msgid "X Button 1" @@ -1819,33 +1833,33 @@ msgstr "" #: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp msgid "Zoom" -msgstr "" +msgstr "Мащабиране" #: src/client/minimap.cpp msgid "Minimap hidden" -msgstr "" +msgstr "Картата е скрита" #: src/client/minimap.cpp #, c-format msgid "Minimap in radar mode, Zoom x%d" -msgstr "" +msgstr "Картата е в режим на радар, мащаб x%d" #: src/client/minimap.cpp #, c-format msgid "Minimap in surface mode, Zoom x%d" -msgstr "" +msgstr "Картата е в режим на повърхност, мащаб x%d" #: src/client/minimap.cpp msgid "Minimap in texture mode" -msgstr "" +msgstr "Картата е в режим на текстура" #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" -msgstr "" +msgstr "Паролите не съвпадат!" #: src/gui/guiConfirmRegistration.cpp msgid "Register and Join" -msgstr "" +msgstr "Регистриране и вход" #: src/gui/guiConfirmRegistration.cpp #, c-format @@ -1856,186 +1870,192 @@ msgid "" "Please retype your password and click 'Register and Join' to confirm account " "creation, or click 'Cancel' to abort." msgstr "" +"На път сте да влезете в сървъра с име „%s“ за първи път.\n" +"Ако продължите нова сметка с тези данни ще бъде създадена на сървъра.\n" +"Въведете паролата отново и натиснете „Регистриране и вход“, за да потвърдите " +"или „Отказ“ за връщане обратно." #: src/gui/guiFormSpecMenu.cpp msgid "Proceed" -msgstr "" +msgstr "Напред" #: src/gui/guiKeyChangeMenu.cpp msgid "\"Aux1\" = climb down" -msgstr "" +msgstr "„Aux1“ = слизане" #: src/gui/guiKeyChangeMenu.cpp msgid "Autoforward" -msgstr "" +msgstr "Автоматично напред" #: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Automatic jumping" -msgstr "" +msgstr "Автоматично скачане" #: src/gui/guiKeyChangeMenu.cpp msgid "Aux1" -msgstr "" +msgstr "Aux1" #: src/gui/guiKeyChangeMenu.cpp msgid "Backward" -msgstr "" +msgstr "Назад" #: src/gui/guiKeyChangeMenu.cpp msgid "Block bounds" -msgstr "" +msgstr "Граници на блокове" #: src/gui/guiKeyChangeMenu.cpp msgid "Change camera" -msgstr "" +msgstr "Промяна на камера" #: src/gui/guiKeyChangeMenu.cpp msgid "Chat" -msgstr "" +msgstr "Разговори" #: src/gui/guiKeyChangeMenu.cpp msgid "Command" -msgstr "" +msgstr "Команда" #: src/gui/guiKeyChangeMenu.cpp msgid "Console" -msgstr "" +msgstr "Конзола" #: src/gui/guiKeyChangeMenu.cpp msgid "Dec. range" -msgstr "" +msgstr "Намал. на обхвата" #: src/gui/guiKeyChangeMenu.cpp msgid "Dec. volume" -msgstr "" +msgstr "Намал. на звука" #: src/gui/guiKeyChangeMenu.cpp msgid "Double tap \"jump\" to toggle fly" -msgstr "" +msgstr "Два пъти „скок“ превключва полета" #: src/gui/guiKeyChangeMenu.cpp msgid "Drop" -msgstr "" +msgstr "Пускане предмет" #: src/gui/guiKeyChangeMenu.cpp msgid "Forward" -msgstr "" +msgstr "Напред" #: src/gui/guiKeyChangeMenu.cpp msgid "Inc. range" -msgstr "" +msgstr "Увелич. на обхвата" #: src/gui/guiKeyChangeMenu.cpp msgid "Inc. volume" -msgstr "" +msgstr "Увелич. на звука" #: src/gui/guiKeyChangeMenu.cpp msgid "Inventory" -msgstr "" +msgstr "Инвентар" #: src/gui/guiKeyChangeMenu.cpp msgid "Jump" -msgstr "" +msgstr "Скок" #: src/gui/guiKeyChangeMenu.cpp msgid "Key already in use" -msgstr "" +msgstr "Клавишът вече се ползва" #: src/gui/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" +"Клавишни комбинации (Ако екранът изглежда счупен махнете нещата от minetest." +"conf)" #: src/gui/guiKeyChangeMenu.cpp msgid "Local command" -msgstr "" +msgstr "Местна команда" #: src/gui/guiKeyChangeMenu.cpp msgid "Mute" -msgstr "" +msgstr "Заглушаване" #: src/gui/guiKeyChangeMenu.cpp msgid "Next item" -msgstr "" +msgstr "След. предмет" #: src/gui/guiKeyChangeMenu.cpp msgid "Prev. item" -msgstr "" +msgstr "Пред. предмет" #: src/gui/guiKeyChangeMenu.cpp msgid "Range select" -msgstr "" +msgstr "Обхват видимост" #: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Screenshot" -msgstr "" +msgstr "Снимка на екрана" #: src/gui/guiKeyChangeMenu.cpp msgid "Sneak" -msgstr "" +msgstr "Промъкване" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle HUD" -msgstr "" +msgstr "Превкл. HUD" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle chat log" -msgstr "" +msgstr "Превкл. разговори" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle fast" -msgstr "" +msgstr "Превкл. бързина" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle fly" -msgstr "" +msgstr "Превкл. полет" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle fog" -msgstr "" +msgstr "Превкл. мъгла" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle minimap" -msgstr "" +msgstr "Превкл. карта" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle noclip" -msgstr "" +msgstr "Превкл. изрязване" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle pitchmove" -msgstr "" +msgstr "Превкл. „pitchmove“" #: src/gui/guiKeyChangeMenu.cpp msgid "press key" -msgstr "" +msgstr "избор бутон" #: src/gui/guiPasswordChange.cpp msgid "Change" -msgstr "" +msgstr "Променяне" #: src/gui/guiPasswordChange.cpp msgid "Confirm Password" -msgstr "" +msgstr "Потвърж. на парола" #: src/gui/guiPasswordChange.cpp msgid "New Password" -msgstr "" +msgstr "Нова парола" #: src/gui/guiPasswordChange.cpp msgid "Old Password" -msgstr "" +msgstr "Стара парола" #: src/gui/guiVolumeChange.cpp msgid "Exit" -msgstr "" +msgstr "Изход" #: src/gui/guiVolumeChange.cpp msgid "Muted" -msgstr "" +msgstr "Без звук" #: src/gui/guiVolumeChange.cpp msgid "Sound Volume: " -msgstr "" +msgstr "Сила на звука: " #. ~ Imperative, as in "Enter/type in text". #. Don't forget the space. @@ -2339,15 +2359,15 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Automatically jump up single-node obstacles." -msgstr "" +msgstr "Автоматично прескача препятствия от единични възли." #: src/settings_translation_file.cpp msgid "Automatically report to the serverlist." -msgstr "" +msgstr "Автоматично докладване в списъка на сървърите." #: src/settings_translation_file.cpp msgid "Autosave screen size" -msgstr "" +msgstr "Автоматично запазване на размера на екрана" #: src/settings_translation_file.cpp msgid "Autoscaling mode" @@ -2395,7 +2415,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Bind address" -msgstr "" +msgstr "Адрес за свързване" #: src/settings_translation_file.cpp msgid "Biome API temperature and humidity noise parameters" @@ -2644,19 +2664,19 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Connects glass if supported by node." -msgstr "" +msgstr "Свързва стъкло, ако се поддържа от възела." #: src/settings_translation_file.cpp msgid "Console alpha" -msgstr "" +msgstr "Прозрачност на конзолата" #: src/settings_translation_file.cpp msgid "Console color" -msgstr "" +msgstr "Цвят на конзолата" #: src/settings_translation_file.cpp msgid "Console height" -msgstr "" +msgstr "Височина на конзолата" #: src/settings_translation_file.cpp msgid "ContentDB Flag Blacklist" @@ -2690,10 +2710,14 @@ msgid "" "Examples:\n" "72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged." msgstr "" +"Управлява дължината на цикъла ден/нощ.\n" +"Пример:\n" +"72 = 20 мин, 360 = 4 мин, 1 = 24 часа, 0 = ден/нощ/каквото е остава без " +"промяна." #: src/settings_translation_file.cpp msgid "Controls sinking speed in liquid." -msgstr "" +msgstr "Управлява скоростта на потъване в течности." #: src/settings_translation_file.cpp msgid "Controls steepness/depth of lake depressions." @@ -2794,7 +2818,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Default report format" -msgstr "" +msgstr "Формат на отчета по подразбиране" #: src/settings_translation_file.cpp msgid "Default stack size" @@ -4508,7 +4532,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Large cave proportion flooded" -msgstr "" +msgstr "Голяма част от пещерите са наводнени" #: src/settings_translation_file.cpp msgid "Large chat console key" @@ -5269,7 +5293,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Player name" -msgstr "" +msgstr "Име на играча" #: src/settings_translation_file.cpp msgid "Player transfer distance" @@ -5335,7 +5359,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." -msgstr "" +msgstr "Частта от големи пещери, които съдържат течност." #: src/settings_translation_file.cpp msgid "" @@ -5370,7 +5394,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Remote port" -msgstr "" +msgstr "Отдалечен порт" #: src/settings_translation_file.cpp msgid "" @@ -5581,7 +5605,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Server address" -msgstr "" +msgstr "Адрес на сървър" #: src/settings_translation_file.cpp msgid "Server description" @@ -5593,7 +5617,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Server port" -msgstr "" +msgstr "Порт на сървъра" #: src/settings_translation_file.cpp msgid "Server side occlusion culling" From c24b02852baeca6bafecee316693e09ed34fa59c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Gonz=C3=A1lez?= Date: Wed, 6 Oct 2021 14:34:17 +0000 Subject: [PATCH 107/412] Translated using Weblate (Spanish) Currently translated at 81.8% (1142 of 1396 strings) --- po/es/minetest.po | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/po/es/minetest.po b/po/es/minetest.po index bb50c828b..7cc5f9063 100644 --- a/po/es/minetest.po +++ b/po/es/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-08-02 16:34+0000\n" -"Last-Translator: David Leal \n" +"PO-Revision-Date: 2021-10-06 14:41+0000\n" +"Last-Translator: Manuel González \n" "Language-Team: Spanish \n" "Language: es\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.8-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" @@ -1137,7 +1137,7 @@ msgstr "Ultra Alto" #: builtin/mainmenu/tab_settings.lua msgid "Very Low" -msgstr "" +msgstr "Muy bajo" #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" @@ -1906,7 +1906,7 @@ msgstr "Salto automático" #: src/gui/guiKeyChangeMenu.cpp msgid "Aux1" -msgstr "" +msgstr "Aux1" #: src/gui/guiKeyChangeMenu.cpp msgid "Backward" @@ -2477,7 +2477,7 @@ msgstr "Tecla Aux1" #: src/settings_translation_file.cpp msgid "Aux1 key for climbing/descending" -msgstr "" +msgstr "Tecla Aux1 para subir/bajar" #: src/settings_translation_file.cpp msgid "Backward key" @@ -3145,6 +3145,9 @@ msgid "" "Enable colored shadows. \n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" +"Habilitar las sombras a color.\n" +"Si el valor es verdadero los nodos traslúcidos proyectarán sombras a color. " +"Esta opción usa muchos recursos." #: src/settings_translation_file.cpp msgid "Enable console window" @@ -3176,6 +3179,9 @@ msgid "" "On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " "filtering." msgstr "" +"Habilitar filtrado \"poisson disk\".\n" +"Si el valor es \"verdadero\", utiliza \"poisson disk\" para proyectar " +"sombras suaves. De otro modo utiliza filtrado PCF." #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." @@ -4088,6 +4094,8 @@ msgid "" "If the execution of a chat command takes longer than this specified time in\n" "seconds, add the time information to the chat command message" msgstr "" +"Si la ejecución de un comando toma más tiempo del especificado en\n" +"segundos, agrega la información del tiempo al mensaje del comando" #: src/settings_translation_file.cpp msgid "" @@ -5679,7 +5687,7 @@ msgstr "Ruido 3D que determina la cantidad de mazmorras por chunk." #: src/settings_translation_file.cpp msgid "Minimum limit of random number of small caves per mapchunk." -msgstr "" +msgstr "Límite mínimo del número aleatorio de cavernas pequeñas por mapchunk." #: src/settings_translation_file.cpp msgid "Minimum texture size" From 6f9d803d67f22b43d18c3825b5ee18e207eaef34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joaqu=C3=ADn=20Villalba?= Date: Wed, 6 Oct 2021 14:40:56 +0000 Subject: [PATCH 108/412] Translated using Weblate (Spanish) Currently translated at 81.8% (1142 of 1396 strings) --- po/es/minetest.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/es/minetest.po b/po/es/minetest.po index 7cc5f9063..933329fb7 100644 --- a/po/es/minetest.po +++ b/po/es/minetest.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" "PO-Revision-Date: 2021-10-06 14:41+0000\n" -"Last-Translator: Manuel González \n" +"Last-Translator: Joaquín Villalba \n" "Language-Team: Spanish \n" "Language: es\n" @@ -5691,7 +5691,7 @@ msgstr "Límite mínimo del número aleatorio de cavernas pequeñas por mapchunk #: src/settings_translation_file.cpp msgid "Minimum texture size" -msgstr "" +msgstr "Tamaño mínimo de textura" #: src/settings_translation_file.cpp #, fuzzy From 8d99cddeccdcce84522fac2c2359c5d8dbfc45e3 Mon Sep 17 00:00:00 2001 From: Vancha March Date: Tue, 12 Oct 2021 09:09:16 +0000 Subject: [PATCH 109/412] Translated using Weblate (Dutch) Currently translated at 95.3% (1331 of 1396 strings) --- po/nl/minetest.po | 94 ++++++++++++++++++++--------------------------- 1 file changed, 39 insertions(+), 55 deletions(-) diff --git a/po/nl/minetest.po b/po/nl/minetest.po index 37ffdcc24..4604f6951 100644 --- a/po/nl/minetest.po +++ b/po/nl/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Dutch (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-02-01 05:52+0000\n" -"Last-Translator: eol \n" +"PO-Revision-Date: 2021-10-14 07:35+0000\n" +"Last-Translator: Vancha March \n" "Language-Team: Dutch \n" "Language: nl\n" @@ -12,49 +12,43 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 4.9-dev\n" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Clear the out chat queue" -msgstr "Maximale omvang van de wachtrij uitgezonden berichten" +msgstr "Wachtrij voor uitgezonden berichten legen" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Empty command." -msgstr "Chat-commando's" +msgstr "Instructie voor legen." #: builtin/client/chatcommands.lua -#, fuzzy msgid "Exit to main menu" -msgstr "Terug naar menu" +msgstr "Terug naar hoofd menu" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Invalid command: " -msgstr "Lokale commando" +msgstr "Ongeldige instructie " #: builtin/client/chatcommands.lua msgid "Issued command: " -msgstr "" +msgstr "Opgegeven instructie: " #: builtin/client/chatcommands.lua -#, fuzzy msgid "List online players" -msgstr "Singleplayer" +msgstr "Online spelers weergeven" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Online players: " -msgstr "Singleplayer" +msgstr "Online spelers: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." -msgstr "" +msgstr "De wachtrij voor uitgezonden berichten is nu leeg." #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "Deze instructie is uitgeschakeld door de server." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -65,36 +59,35 @@ msgid "You died" msgstr "Je bent gestorven" #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." -msgstr "Je bent gestorven" +msgstr "Je bent gestorven." #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands:" -msgstr "Lokale commando" +msgstr "Beschikbare instructies:" #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands: " -msgstr "Lokale commando" +msgstr "Beschikbare instructies: " #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "Instructie niet beschikbaar: " #: builtin/common/chatcommands.lua msgid "Get help for commands" -msgstr "" +msgstr "Krijg hulp voor instructies" #: builtin/common/chatcommands.lua msgid "" "Use '.help ' to get more information, or '.help all' to list everything." msgstr "" +"Gebruik '.help ' om meer informatie te verkrijgen, of '.help all' om " +"alles weer te geven." #: builtin/common/chatcommands.lua msgid "[all | ]" -msgstr "" +msgstr "[all | ]" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" @@ -792,7 +785,7 @@ msgstr "" #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "" +msgstr "Over" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" @@ -936,9 +929,8 @@ msgid "Start Game" msgstr "Start spel" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Address" -msgstr "- Adres: " +msgstr "Adres" #: builtin/mainmenu/tab_online.lua src/client/keycode.cpp msgid "Clear" @@ -954,9 +946,8 @@ msgstr "Creatieve modus" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Damage / PvP" -msgstr "Verwondingen/schade" +msgstr "Schade / PvP" #: builtin/mainmenu/tab_online.lua msgid "Del. Favorite" @@ -969,7 +960,7 @@ msgstr "Favorieten" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" -msgstr "" +msgstr "Incompatibele Servers" #: builtin/mainmenu/tab_online.lua msgid "Join Game" @@ -980,18 +971,16 @@ msgid "Ping" msgstr "Ping" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Public Servers" -msgstr "Server aanmelden bij de server-lijst" +msgstr "Publieke Servers" #: builtin/mainmenu/tab_online.lua msgid "Refresh" -msgstr "" +msgstr "Verversen" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Server Description" -msgstr "Omschrijving van de server" +msgstr "Omschrijving van de Server" #: builtin/mainmenu/tab_settings.lua msgid "2x" @@ -1034,13 +1023,12 @@ msgid "Connected Glass" msgstr "Verbonden Glas" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp -#, fuzzy msgid "Dynamic shadows" -msgstr "Fontschaduw" +msgstr "Dynamische schaduwen" #: builtin/mainmenu/tab_settings.lua msgid "Dynamic shadows: " -msgstr "" +msgstr "Dynamische schaduwen: " #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" @@ -1048,15 +1036,15 @@ msgstr "Mooie bladeren" #: builtin/mainmenu/tab_settings.lua msgid "High" -msgstr "" +msgstr "Hoog" #: builtin/mainmenu/tab_settings.lua msgid "Low" -msgstr "" +msgstr "Laag" #: builtin/mainmenu/tab_settings.lua msgid "Medium" -msgstr "" +msgstr "Gemiddeld" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" @@ -1148,11 +1136,11 @@ msgstr "Tri-Lineare Filtering" #: builtin/mainmenu/tab_settings.lua msgid "Ultra High" -msgstr "" +msgstr "Zeer Hoog" #: builtin/mainmenu/tab_settings.lua msgid "Very Low" -msgstr "" +msgstr "Zeer Laag" #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" @@ -1469,9 +1457,8 @@ msgid "Minimap currently disabled by game or mod" msgstr "Mini-kaart momenteel uitgeschakeld door spel of mod" #: src/client/game.cpp -#, fuzzy msgid "Multiplayer" -msgstr "Singleplayer" +msgstr "Multiplayer" #: src/client/game.cpp msgid "Noclip mode disabled" @@ -1909,9 +1896,8 @@ msgid "Proceed" msgstr "Doorgaan" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "\"Aux1\" = climb down" -msgstr "\"Speciaal\" = naar beneden klimmen" +msgstr "\"Aux1\" = naar beneden klimmen" #: src/gui/guiKeyChangeMenu.cpp msgid "Autoforward" @@ -1923,7 +1909,7 @@ msgstr "Automatisch springen" #: src/gui/guiKeyChangeMenu.cpp msgid "Aux1" -msgstr "" +msgstr "Aux1" #: src/gui/guiKeyChangeMenu.cpp msgid "Backward" @@ -2745,9 +2731,8 @@ msgid "Colored fog" msgstr "Gekleurde mist" #: src/settings_translation_file.cpp -#, fuzzy msgid "Colored shadows" -msgstr "Gekleurde mist" +msgstr "Gekleurde schaduwen" #: src/settings_translation_file.cpp msgid "" @@ -3166,9 +3151,8 @@ msgid "Enable console window" msgstr "Schakel het console venster in" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable creative mode for all players" -msgstr "Schakel creatieve modus in voor nieuwe kaarten." +msgstr "Schakel creatieve modus in voor alle spelers" #: src/settings_translation_file.cpp msgid "Enable joysticks" From fc0897682de4b13d0d16bbde6917d20684a7ff02 Mon Sep 17 00:00:00 2001 From: Molly Date: Wed, 13 Oct 2021 07:27:43 +0000 Subject: [PATCH 110/412] Translated using Weblate (Dutch) Currently translated at 97.0% (1355 of 1396 strings) --- po/nl/minetest.po | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/po/nl/minetest.po b/po/nl/minetest.po index 4604f6951..c2b57af01 100644 --- a/po/nl/minetest.po +++ b/po/nl/minetest.po @@ -4,7 +4,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" "PO-Revision-Date: 2021-10-14 07:35+0000\n" -"Last-Translator: Vancha March \n" +"Last-Translator: Molly \n" "Language-Team: Dutch \n" "Language: nl\n" @@ -1917,7 +1917,7 @@ msgstr "Achteruit" #: src/gui/guiKeyChangeMenu.cpp msgid "Block bounds" -msgstr "" +msgstr "Blok grenzen" #: src/gui/guiKeyChangeMenu.cpp msgid "Change camera" @@ -2967,6 +2967,10 @@ msgid "" "This simulates the soft shadows effect by applying a PCF or poisson disk\n" "but also uses more resources." msgstr "" +"Defineer schaduw filtering kwaliteit\n" +"Dit simuleert de zachte schaduw effect door een PCF of poisson schijf te " +"toepassen\n" +"maar gebruikt meer middelen." #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." From 42b8167f3d8e648080f72deec506ff8d32210cb9 Mon Sep 17 00:00:00 2001 From: Johann Lau Date: Fri, 12 Nov 2021 10:51:11 +0100 Subject: [PATCH 111/412] Added translation using Weblate (Yue) --- po/yue/minetest.po | 6552 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 6552 insertions(+) create mode 100644 po/yue/minetest.po diff --git a/po/yue/minetest.po b/po/yue/minetest.po new file mode 100644 index 000000000..1b4bdd2f4 --- /dev/null +++ b/po/yue/minetest.po @@ -0,0 +1,6552 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the minetest package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: minetest\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: yue\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: builtin/client/chatcommands.lua +msgid "Issued command: " +msgstr "" + +#: builtin/client/chatcommands.lua +msgid "Empty command." +msgstr "" + +#: builtin/client/chatcommands.lua +msgid "Invalid command: " +msgstr "" + +#: builtin/client/chatcommands.lua +msgid "List online players" +msgstr "" + +#: builtin/client/chatcommands.lua +msgid "This command is disabled by server." +msgstr "" + +#: builtin/client/chatcommands.lua +msgid "Online players: " +msgstr "" + +#: builtin/client/chatcommands.lua +msgid "Exit to main menu" +msgstr "" + +#: builtin/client/chatcommands.lua +msgid "Clear the out chat queue" +msgstr "" + +#: builtin/client/chatcommands.lua +msgid "The out chat queue is now empty." +msgstr "" + +#: builtin/client/death_formspec.lua +msgid "You died." +msgstr "" + +#: builtin/client/death_formspec.lua src/client/game.cpp +msgid "You died" +msgstr "" + +#: builtin/client/death_formspec.lua src/client/game.cpp +msgid "Respawn" +msgstr "" + +#: builtin/common/chatcommands.lua +msgid "Available commands: " +msgstr "" + +#: builtin/common/chatcommands.lua +msgid "" +"Use '.help ' to get more information, or '.help all' to list everything." +msgstr "" + +#: builtin/common/chatcommands.lua +msgid "Available commands:" +msgstr "" + +#: builtin/common/chatcommands.lua +msgid "Command not available: " +msgstr "" + +#: builtin/common/chatcommands.lua +msgid "[all | ]" +msgstr "" + +#: builtin/common/chatcommands.lua +msgid "Get help for commands" +msgstr "" + +#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp +msgid "OK" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occurred in a Lua script:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occurred:" +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No modpack description provided." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No game description provided." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No (optional) dependencies" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No hard dependencies" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua +msgid "Optional dependencies:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/tab_content.lua +msgid "Dependencies:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "No optional dependencies" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_delete_content.lua +#: builtin/mainmenu/dlg_delete_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua +#: builtin/mainmenu/dlg_settings_advanced.lua src/client/keycode.cpp +#: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp +#: src/gui/guiPasswordChange.cpp +msgid "Cancel" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable modpack" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable modpack" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable all" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable all" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"characters [a-z0-9_] are allowed." +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "All packages" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Games" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Mods" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Texture packs" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Failed to download $1" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Already installed" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "$1 by $2" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Not found" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "$1 and $2 dependencies will be installed." +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "$1 will be installed, and $2 dependencies will be skipped." +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "$1 required dependencies could not be found." +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Please check that the base game is correct." +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install $1" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Base Game:" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install missing dependencies" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "\"$1\" already exists. Would you like to overwrite it?" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Overwrite" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Back to Main Menu" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "" +"$1 downloading,\n" +"$2 queued" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "$1 downloading..." +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "No updates" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Update All [$1]" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "No results" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "No packages could be retrieved" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Downloading..." +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Queued" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Update" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Uninstall" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "View more information in a web browser" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caverns" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Sea level rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mountains" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floatlands (experimental)" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floating landmasses in the sky" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Altitude chill" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces heat with altitude" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Altitude dry" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Reduces humidity with altitude" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Humid rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Increases humidity around rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Vary river depth" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Low humidity and high heat causes shallow or dry rivers" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Hills" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Lakes" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Additional terrain" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Generate non-fractal terrain: Oceans and underground" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Trees and jungle grass" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mud flow" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Terrain surface erosion" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle, Tundra, Taiga" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert, Jungle" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Temperate, Desert" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no games installed." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caves" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Dungeons" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Decorations" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "" +"Structures appearing on the terrain (no effect on trees and jungle grass " +"created by v6)" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Structures appearing on the terrain, typically trees and plants" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Network of tunnels and caves" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biomes" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biome blending" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Smooth transition between biomes" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Mapgen-specific flags" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The Development Test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a game, such as Minetest Game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "A world named \"$1\" already exists" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "No game selected" +msgstr "" + +#: builtin/mainmenu/dlg_delete_content.lua +msgid "Are you sure you want to delete \"$1\"?" +msgstr "" + +#: builtin/mainmenu/dlg_delete_content.lua +#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua +#: src/client/keycode.cpp +msgid "Delete" +msgstr "" + +#: builtin/mainmenu/dlg_delete_content.lua +msgid "pkgmgr: failed to delete \"$1\"" +msgstr "" + +#: builtin/mainmenu/dlg_delete_content.lua +msgid "pkgmgr: invalid path \"$1\"" +msgstr "" + +#: builtin/mainmenu/dlg_delete_world.lua +msgid "Delete World \"$1\"?" +msgstr "" + +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Accept" +msgstr "" + +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "" +"This modpack has an explicit name given in its modpack.conf which will " +"override any renaming here." +msgstr "" + +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua +msgid "Disabled" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Enabled" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Browse" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp +msgid "Offset" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp +msgid "Scale" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "X spread" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Y spread" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "2D Noise" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Z spread" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Octaves" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Persistance" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Lacunarity" +msgstr "" + +#. ~ "defaults" is a noise parameter flag. +#. It describes the default processing options +#. for noise settings in main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "defaults" +msgstr "" + +#. ~ "eased" is a noise parameter flag. +#. It is used to make the map smoother and +#. can be enabled in noise settings in +#. main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "eased" +msgstr "" + +#. ~ "absvalue" is a noise parameter flag. +#. It is short for "absolute value". +#. It can be enabled in noise settings in +#. main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "absvalue" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "X" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Y" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Z" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "(No description of setting given)" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Please enter a valid integer." +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "The value must be at least $1." +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "The value must not be larger than $1." +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Please enter a valid number." +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Select directory" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Select file" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua +msgid "Search" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "< Back to Settings page" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Edit" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Show technical names" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "$1 (Enabled)" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a $1 as a texture pack" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Failed to install $1 to $2" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to find a valid mod or modpack" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a modpack as a $1" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install Mod: Unable to find suitable folder name for modpack $1" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a mod as a $1" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install Mod: Unable to find real mod name for: $1" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Unable to install a game as a $1" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install: file: \"$1\"" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "Install: Unsupported file type \"$1\" or broken archive" +msgstr "" + +#: builtin/mainmenu/pkgmgr.lua +msgid "$1 mods" +msgstr "" + +#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp +msgid "Loading..." +msgstr "" + +#: builtin/mainmenu/serverlistmgr.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/serverlistmgr.lua +msgid "Public server list is disabled" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "About" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "Active Contributors" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "Previous Contributors" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "Active renderer:" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "" +"Opens the directory that contains user-provided worlds, games, mods,\n" +"and texture packs in a file manager / explorer." +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "Open User Data Directory" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Installed Packages:" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Browse online content" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "No package description available" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Rename" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "No dependencies." +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Disable Texture Pack" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Use Texture Pack" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Information:" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Uninstall Package" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Content" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Select Mods" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "New" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Select World:" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Creative Mode" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Enable Damage" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Host Server" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Host Game" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Announce Server" +msgstr "" + +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua +msgid "Name" +msgstr "" + +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua +msgid "Password" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Bind Address" +msgstr "" + +#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua +msgid "Port" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Server Port" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Play Game" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Start Game" +msgstr "" + +#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp +msgid "Clear" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Refresh" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Address" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Server Description" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Connect" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Del. Favorite" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Ping" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Creative mode" +msgstr "" + +#. ~ PvP = Player versus Player +#: builtin/mainmenu/tab_online.lua +msgid "Damage / PvP" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Favorites" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Public Servers" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Incompatible Servers" +msgstr "" + +#: builtin/mainmenu/tab_online.lua +msgid "Join Game" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Outlining" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Trilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "No Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Mipmap + Aniso. Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "2x" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "4x" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "8x" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Very Low" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Low" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Medium" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "High" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Ultra High" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Smooth Lighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Particles" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "3D Clouds" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Water" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Connected Glass" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Texturing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Screen:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Autosave Screen Size" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Shaders" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders (experimental)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Shaders (unavailable)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua src/client/game.cpp +msgid "Change Keys" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "All Settings" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Touchthreshold: (px)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Tone Mapping" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Liquids" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Plants" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Dynamic shadows: " +msgstr "" + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Dynamic shadows" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "To enable shaders the OpenGL driver needs to be used." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Settings" +msgstr "" + +#: src/client/client.cpp +msgid "Connection timed out." +msgstr "" + +#: src/client/client.cpp +msgid "Loading textures..." +msgstr "" + +#: src/client/client.cpp +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client/client.cpp +msgid "Done!" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided password file failed to open: " +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Please choose a name!" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "" + +#: src/client/game.cpp +msgid "Shutting down..." +msgstr "" + +#: src/client/game.cpp +msgid "Creating server..." +msgstr "" + +#: src/client/game.cpp +msgid "Creating client..." +msgstr "" + +#: src/client/game.cpp +msgid "Singleplayer" +msgstr "" + +#: src/client/game.cpp +msgid "Multiplayer" +msgstr "" + +#: src/client/game.cpp +msgid "Resolving address..." +msgstr "" + +#: src/client/game.cpp +msgid "Connecting to server..." +msgstr "" + +#: src/client/game.cpp +msgid "Item definitions..." +msgstr "" + +#: src/client/game.cpp +msgid "Node definitions..." +msgstr "" + +#: src/client/game.cpp +msgid "Media..." +msgstr "" + +#: src/client/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/client/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/client/game.cpp +msgid "Client side scripting is disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Sound muted" +msgstr "" + +#: src/client/game.cpp +msgid "Sound unmuted" +msgstr "" + +#: src/client/game.cpp +msgid "Sound system is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Volume changed to %d%%" +msgstr "" + +#: src/client/game.cpp +msgid "Sound system is not supported on this build" +msgstr "" + +#: src/client/game.cpp +msgid "ok" +msgstr "" + +#: src/client/game.cpp +msgid "Fly mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fly mode enabled (note: no 'fly' privilege)" +msgstr "" + +#: src/client/game.cpp +msgid "Fly mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Pitch move mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Pitch move mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fast mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fast mode enabled (note: no 'fast' privilege)" +msgstr "" + +#: src/client/game.cpp +msgid "Fast mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Noclip mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Noclip mode enabled (note: no 'noclip' privilege)" +msgstr "" + +#: src/client/game.cpp +msgid "Noclip mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Cinematic mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Cinematic mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Automatic forward enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Automatic forward disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap currently disabled by game or mod" +msgstr "" + +#: src/client/game.cpp +msgid "Fog disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fog enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Debug info shown" +msgstr "" + +#: src/client/game.cpp +msgid "Profiler graph shown" +msgstr "" + +#: src/client/game.cpp +msgid "Wireframe shown" +msgstr "" + +#: src/client/game.cpp +msgid "Debug info, profiler graph, and wireframe hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Debug info and profiler graph hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Camera update disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Camera update enabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range is at maximum: %d" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range changed to %d" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range is at minimum: %d" +msgstr "" + +#: src/client/game.cpp +msgid "Enabled unlimited viewing range" +msgstr "" + +#: src/client/game.cpp +msgid "Disabled unlimited viewing range" +msgstr "" + +#: src/client/game.cpp +msgid "Zoom currently disabled by game or mod" +msgstr "" + +#: src/client/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "" +"Controls:\n" +"- %s: move forwards\n" +"- %s: move backwards\n" +"- %s: move left\n" +"- %s: move right\n" +"- %s: jump/climb up\n" +"- %s: dig/punch\n" +"- %s: place/use\n" +"- %s: sneak/climb down\n" +"- %s: drop item\n" +"- %s: inventory\n" +"- Mouse: turn/look\n" +"- Mouse wheel: select item\n" +"- %s: chat\n" +msgstr "" + +#: src/client/game.cpp +msgid "Continue" +msgstr "" + +#: src/client/game.cpp +msgid "Change Password" +msgstr "" + +#: src/client/game.cpp +msgid "Game paused" +msgstr "" + +#: src/client/game.cpp +msgid "Sound Volume" +msgstr "" + +#: src/client/game.cpp +msgid "Exit to Menu" +msgstr "" + +#: src/client/game.cpp +msgid "Exit to OS" +msgstr "" + +#: src/client/game.cpp +msgid "Game info:" +msgstr "" + +#: src/client/game.cpp +msgid "- Mode: " +msgstr "" + +#: src/client/game.cpp +msgid "Remote server" +msgstr "" + +#: src/client/game.cpp +msgid "- Address: " +msgstr "" + +#: src/client/game.cpp +msgid "Hosting server" +msgstr "" + +#: src/client/game.cpp +msgid "- Port: " +msgstr "" + +#: src/client/game.cpp +msgid "On" +msgstr "" + +#: src/client/game.cpp +msgid "Off" +msgstr "" + +#: src/client/game.cpp +msgid "- Damage: " +msgstr "" + +#: src/client/game.cpp +msgid "- Creative Mode: " +msgstr "" + +#. ~ PvP = Player versus Player +#: src/client/game.cpp +msgid "- PvP: " +msgstr "" + +#: src/client/game.cpp +msgid "- Public: " +msgstr "" + +#: src/client/game.cpp +msgid "- Server Name: " +msgstr "" + +#: src/client/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" + +#: src/client/gameui.cpp +msgid "Chat shown" +msgstr "" + +#: src/client/gameui.cpp +msgid "Chat hidden" +msgstr "" + +#: src/client/gameui.cpp +msgid "HUD shown" +msgstr "" + +#: src/client/gameui.cpp +msgid "HUD hidden" +msgstr "" + +#: src/client/gameui.cpp +#, c-format +msgid "Profiler shown (page %d of %d)" +msgstr "" + +#: src/client/gameui.cpp +msgid "Profiler hidden" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Button" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Button" +msgstr "" + +#: src/client/keycode.cpp +msgid "Middle Button" +msgstr "" + +#: src/client/keycode.cpp +msgid "X Button 1" +msgstr "" + +#: src/client/keycode.cpp +msgid "X Button 2" +msgstr "" + +#: src/client/keycode.cpp +msgid "Backspace" +msgstr "" + +#: src/client/keycode.cpp +msgid "Tab" +msgstr "" + +#: src/client/keycode.cpp +msgid "Return" +msgstr "" + +#: src/client/keycode.cpp +msgid "Shift" +msgstr "" + +#: src/client/keycode.cpp +msgid "Control" +msgstr "" + +#. ~ Key name, common on Windows keyboards +#: src/client/keycode.cpp +msgid "Menu" +msgstr "" + +#: src/client/keycode.cpp +msgid "Pause" +msgstr "" + +#: src/client/keycode.cpp +msgid "Caps Lock" +msgstr "" + +#: src/client/keycode.cpp +msgid "Space" +msgstr "" + +#: src/client/keycode.cpp +msgid "Page up" +msgstr "" + +#: src/client/keycode.cpp +msgid "Page down" +msgstr "" + +#: src/client/keycode.cpp +msgid "End" +msgstr "" + +#: src/client/keycode.cpp +msgid "Home" +msgstr "" + +#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp +msgid "Left" +msgstr "" + +#: src/client/keycode.cpp +msgid "Up" +msgstr "" + +#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp +msgid "Right" +msgstr "" + +#: src/client/keycode.cpp +msgid "Down" +msgstr "" + +#. ~ Key name +#: src/client/keycode.cpp +msgid "Select" +msgstr "" + +#. ~ "Print screen" key +#: src/client/keycode.cpp +msgid "Print" +msgstr "" + +#: src/client/keycode.cpp +msgid "Execute" +msgstr "" + +#: src/client/keycode.cpp +msgid "Snapshot" +msgstr "" + +#: src/client/keycode.cpp +msgid "Insert" +msgstr "" + +#: src/client/keycode.cpp +msgid "Help" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Windows" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Windows" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 0" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 1" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 2" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 3" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 4" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 5" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 6" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 7" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 8" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad 9" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad *" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad +" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad ." +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad -" +msgstr "" + +#: src/client/keycode.cpp +msgid "Numpad /" +msgstr "" + +#: src/client/keycode.cpp +msgid "Num Lock" +msgstr "" + +#: src/client/keycode.cpp +msgid "Scroll Lock" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Shift" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Shift" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Control" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Control" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Menu" +msgstr "" + +#: src/client/keycode.cpp +msgid "Right Menu" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Escape" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Convert" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Nonconvert" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Accept" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Mode Change" +msgstr "" + +#: src/client/keycode.cpp +msgid "Apps" +msgstr "" + +#: src/client/keycode.cpp +msgid "Sleep" +msgstr "" + +#: src/client/keycode.cpp +msgid "Erase EOF" +msgstr "" + +#: src/client/keycode.cpp +msgid "Play" +msgstr "" + +#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp +msgid "Zoom" +msgstr "" + +#: src/client/keycode.cpp +msgid "OEM Clear" +msgstr "" + +#: src/client/minimap.cpp +msgid "Minimap hidden" +msgstr "" + +#: src/client/minimap.cpp +#, c-format +msgid "Minimap in surface mode, Zoom x%d" +msgstr "" + +#: src/client/minimap.cpp +#, c-format +msgid "Minimap in radar mode, Zoom x%d" +msgstr "" + +#: src/client/minimap.cpp +msgid "Minimap in texture mode" +msgstr "" + +#: src/gui/guiConfirmRegistration.cpp +#, c-format +msgid "" +"You are about to join this server with the name \"%s\" for the first time.\n" +"If you proceed, a new account using your credentials will be created on this " +"server.\n" +"Please retype your password and click 'Register and Join' to confirm account " +"creation, or click 'Cancel' to abort." +msgstr "" + +#: src/gui/guiConfirmRegistration.cpp +msgid "Register and Join" +msgstr "" + +#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp +msgid "Passwords do not match!" +msgstr "" + +#: src/gui/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "\"Aux1\" = climb down" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp +msgid "Automatic jumping" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Aux1" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Prev. item" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Next item" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Change camera" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle minimap" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle pitchmove" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Mute" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Dec. volume" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inc. volume" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Autoforward" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp +msgid "Screenshot" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Dec. range" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inc. range" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Local command" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Block bounds" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle HUD" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle chat log" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fog" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "Old Password" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "New Password" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "" + +#: src/gui/guiPasswordChange.cpp +msgid "Change" +msgstr "" + +#: src/gui/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "" + +#: src/gui/guiVolumeChange.cpp +msgid "Exit" +msgstr "" + +#: src/gui/guiVolumeChange.cpp +msgid "Muted" +msgstr "" + +#. ~ Imperative, as in "Enter/type in text". +#. Don't forget the space. +#: src/gui/modalMenu.cpp +msgid "Enter " +msgstr "" + +#. ~ DO NOT TRANSLATE THIS LITERALLY! +#. This is a special string which needs to contain the translation's +#. language code (e.g. "de" for German). +#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp +msgid "LANG_CODE" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the \"fly\" privilege on the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Pitch move mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, makes move directions relative to the player's pitch when flying " +"or swimming." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via the \"Aux1\" key).\n" +"This requires the \"fast\" privilege on the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the \"noclip\" privilege on the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when looking around. Also called look or mouse smoothing.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Aux1 key for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down " +"and\n" +"descending." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double tap jump for fly" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double-tapping the jump key toggles fly mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Place repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated node placements when holding\n" +"the place button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automatically jump up single-node obstacles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Safe digging and placing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Prevent digging and placing from repeating when holding the mouse buttons.\n" +"Enable this when you dig or place too often by accident." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Continuous forward movement, toggled by autoforward key.\n" +"Press the autoforward key again or the backwards movement to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Touch screen threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The length in pixels it takes for touch screen interaction to start." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fixed virtual joystick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"(Android) Fixes the position of virtual joystick.\n" +"If disabled, virtual joystick will center to first-touch's position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Virtual joystick triggers Aux1 button" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"(Android) Use virtual joystick to trigger \"Aux1\" button.\n" +"If enabled, virtual joystick will also tap \"Aux1\" button when out of main " +"circle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable joysticks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick ID" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The identifier of the joystick to use" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick type" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The type of joystick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick button repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated events\n" +"when holding down a joystick button combination." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick deadzone" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The deadzone of the joystick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick frustum sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The sensitivity of the joystick axes for moving the\n" +"ingame view frustum around." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Forward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Backward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"Will also disable autoforward, when active.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Left key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Right key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jump key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneak key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dig key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for digging.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Place key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for placing.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inventory key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Aux1 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Command key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type local commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Range select key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Pitch move key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling pitch move mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar next key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the next item in the hotbar.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar previous key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the previous item in the hotbar.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mute key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for muting the game.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inc. volume key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the volume.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dec. volume key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the volume.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automatic forward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling autoforward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cinematic mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View zoom key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key to use view zoom when possible.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 1 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the first hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 2 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the second hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 3 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the third hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 4 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the fourth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 5 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the fifth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 6 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the sixth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 7 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the seventh hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 8 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the eighth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 9 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the ninth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 10 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the tenth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 11 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 11th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 12 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 12th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 13 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 13th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 14 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 14th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 15 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 15th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 16 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 16th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 17 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 17th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 18 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 18th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 19 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 19th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 20 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 20th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 21 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 21st hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 22 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 22nd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 23 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 23rd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 24 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 24th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 25 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 25th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 26 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 26th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 27 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 27th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 28 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 28th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 29 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 29th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 30 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 30th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 31 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 31st hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 32 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 32nd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large chat console key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the large chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camera update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-Game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show nametag backgrounds by default" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether nametag backgrounds should be shown by default.\n" +"Mods may still set a background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "VBO" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable vertex buffer objects.\n" +"This should greatly improve graphics performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect glass" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooth lighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D clouds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Method used to highlight selected object." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Digging particles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Adds particles when digging a node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mipmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Use mip mapping to scale textures. May slightly increase performance,\n" +"especially when using a high resolution texture pack.\n" +"Gamma correct downscaling is not supported." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anisotropic filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, often resulting in dark or\n" +"light edges to transparent textures. Apply a filter to clean that up\n" +"at texture load time. This is automatically enabled if mipmapping is enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"bilinear/trilinear/anisotropic filtering is enabled.\n" +"This is also used as the base node texture size for world-aligned\n" +"texture autoscaling." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Use multi-sample antialiasing (MSAA) to smooth out block edges.\n" +"This algorithm smooths out the 3D viewport while keeping the image sharp,\n" +"but it doesn't affect the insides of textures\n" +"(which is especially noticeable with transparent textures).\n" +"Visible spaces appear between nodes when shaders are disabled.\n" +"If set to 0, MSAA is disabled.\n" +"A restart is required after changing this option." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Undersampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Undersampling is similar to using a lower screen resolution, but it applies\n" +"to the game world only, keeping the GUI intact.\n" +"It should give a significant performance boost at the cost of less detailed " +"image.\n" +"Higher values result in a less detailed image." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visual effects and may increase performance on some " +"video\n" +"cards.\n" +"This only works with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shader path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to shader directory. If no path is defined, default location will be " +"used." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filmic tone mapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables Hable's 'Uncharted 2' filmic tone mapping.\n" +"Simulates the tone curve of photographic film and how this approximates the\n" +"appearance of high dynamic range images. Mid-range contrast is slightly\n" +"enhanced, highlights and shadows are gradually compressed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving Nodes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable waving liquids (like water).\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wave height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The maximum height of the surface of waving liquids.\n" +"4.0 = Wave height is two nodes.\n" +"0.0 = Wave doesn't move at all.\n" +"Default is 1.0 (1/2 node).\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wavelength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of liquid waves.\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wave speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How fast liquid waves will move. Higher = faster.\n" +"If negative, liquid waves will move backwards.\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving leaves" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true to enable Shadow Mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shadow strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set the shadow strength.\n" +"Lower value means lighter shadows, higher value means darker shadows." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shadow map max distance in nodes to render shadows" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum distance to render shadows." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shadow map texture size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Texture size to render the shadow map on.\n" +"This must be a power of two.\n" +"Bigger numbers create better shadowsbut it is also more expensive." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shadow map texture in 32 bits" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Sets shadow texture quality to 32 bits.\n" +"On false, 16 bits texture will be used.\n" +"This can cause much more artifacts in the shadow." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Poisson filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable poisson disk filtering.\n" +"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shadow filter quality" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Define shadow filtering quality\n" +"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"but also uses more resources." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Colored shadows" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows. \n" +"On true translucent nodes cast colored shadows. This is expensive." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map update time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set the shadow update time.\n" +"Lower value means shadows and map updates faster, but it consume more " +"resources.\n" +"Minimun value 0.001 seconds max value 0.2 seconds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Soft shadow radius" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set the soft shadow radius size.\n" +"Lower values mean sharper shadows bigger values softer.\n" +"Minimun value 1.0 and max value 10.0" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sky Body Orbit Tilt" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set the tilt of Sun/Moon orbit in degrees\n" +"Value of 0 means no tilt / vertical orbit.\n" +"Minimun value 0.0 and max value 60.0" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Arm inertia" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Arm inertia, gives a more realistic movement of\n" +"the arm when the camera moves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS when unfocused or paused" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when the window is not focused, or when the game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Pause on lost window focus" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Open the pause menu when the window's focus is lost. Does not pause if a " +"formspec is\n" +"open." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View distance in nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Near plane" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Camera 'near clipping plane' distance in nodes, between 0 and 0.25\n" +"Only works on GLES platforms. Most users will not need to change this.\n" +"Increasing can reduce artifacting on weaker GPUs.\n" +"0.1 = Default, 0.25 = Good value for weaker tablets." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width component of the initial window size. Ignored in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Height component of the initial window size. Ignored in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Autosave screen size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save window size automatically when modified." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "VSync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Alters the light curve by applying 'gamma correction' to it.\n" +"Higher values make middle and lower light levels brighter.\n" +"Value '1.0' leaves the light curve unaltered.\n" +"This only has significant effect on daylight and artificial\n" +"light, it has very little effect on natural night light." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve low gradient" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Gradient of light curve at minimum light level.\n" +"Controls the contrast of the lowest light levels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve high gradient" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Gradient of light curve at maximum light level.\n" +"Controls the contrast of the highest light levels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Strength of light curve boost.\n" +"The 3 'boost' parameters define a range of the light\n" +"curve that is boosted in brightness." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost center" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Center of light curve boost range.\n" +"Where 0.0 is minimum light level, 1.0 is maximum light level." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost spread" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Spread of light curve boost range.\n" +"Controls the width of the range to be boosted.\n" +"Standard deviation of the light curve boost Gaussian." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Texture path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The rendering back-end.\n" +"A restart is required after changing this.\n" +"Note: On Android, stick with OGLES1 if unsure! App may fail to start " +"otherwise.\n" +"On other platforms, OpenGL is recommended.\n" +"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable view bobbing and amount of view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side.\n" +"- crossview: Cross-eyed 3d\n" +"- pageflip: quadbuffer based 3d.\n" +"Note that the interlaced mode requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Full-Screen Background Opacity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec full-screen background opacity (between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Full-Screen Background Color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec full-screen background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Default Background Opacity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec default background opacity (between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Default Background Color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec default background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selection box lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Crosshair color (R,G,B).\n" +"Also controls the object crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Crosshair alpha (opaqueness, between 0 and 255).\n" +"Also controls the object crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Recent Chat Messages" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of recent chat messages to show" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD scale factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modifies the size of the hudbar elements." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock mesh generation delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Delay between mesh updates on the client in ms. Increasing this will slow\n" +"down the rate of mesh updates, thus reducing jitter on slower clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock mesh generator's MapBlock cache size in MB" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of the MapBlock cache of the mesh generator. Increasing this will\n" +"increase the cache hit %, reducing the data being copied from the main\n" +"thread, thus reducing jitter." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables minimap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Usable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inventory items animations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables animation of inventory items." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog start" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fraction of the visible distance at which fog starts to be rendered" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Opaque liquids" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes all liquids opaque" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "World-aligned textures mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Textures on a node may be aligned either to the node or to the world.\n" +"The former mode suits better things like machines, furniture, etc., while\n" +"the latter makes stairs and microblocks fit surroundings better.\n" +"However, as this possibility is new, thus may not be used by older servers,\n" +"this option allows enforcing it for certain node types. Note though that\n" +"that is considered EXPERIMENTAL and may not work properly." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Autoscaling mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World-aligned textures may be scaled to span several nodes. However,\n" +"the server may not send the scale you want, especially if you use\n" +"a specially-designed texture pack; with this option, the client tries\n" +"to determine the scale automatically basing on the texture size.\n" +"See also texture_min_size.\n" +"Warning: This option is EXPERIMENTAL!" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show entity selection boxes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Show entity selection boxes\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Menus" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds in menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale GUI by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"properly support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Append item name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Append item name to tooltip." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FreeType fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether FreeType fonts are used, requires FreeType support to be compiled " +"in.\n" +"If disabled, bitmap and XML vectors fonts are used instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font bold by default" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font italic by default" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Shadow offset (in pixels) of the default font. If 0, then shadow will not be " +"drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the default font in point (pt)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Regular font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to the default font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" +"The fallback font will be used if the font cannot be loaded." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Italic font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold and italic font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the monospace font in point (pt)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to the monospace font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" +"This font is used for e.g. the console and profiler screen." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Italic monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold and italic monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path of the fallback font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" +"This font will be used for certain languages or if the default font is " +"unavailable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Font size of the recent chat text and chat prompt in point (pt).\n" +"Value 0 will use the default font size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to save screenshots at. Can be an absolute or relative path.\n" +"The folder will be created if it doesn't already exist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Format of screenshots." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot quality" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Screenshot quality. Only used for JPEG format.\n" +"1 means worst quality; 100 means best quality.\n" +"Use 0 for default quality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable console window" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Windows systems only: Start Minetest with the command line window in the " +"background.\n" +"Contains the same information as the file debug.txt (default name)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables the sound system.\n" +"If disabled, this completely disables all sounds everywhere and the in-game\n" +"sound controls will be non-functional.\n" +"Changing this setting requires a restart." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volume" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Volume of all sounds.\n" +"Requires the sound system to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mute sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to mute sounds. You can unmute sounds at any time, unless the\n" +"sound system is disabled (enable_sound=false).\n" +"In-game, you can toggle the mute state with the mute key or by using the\n" +"pause menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Prometheus listener address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Prometheus listener address.\n" +"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"enable metrics listener for Prometheus on that address.\n" +"Metrics can be fetch on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect to external media server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client modding" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable Lua modding support on client.\n" +"This support is experimental and API can change." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist file" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the\n" +"Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum size of the out chat queue" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum size of the out chat queue.\n" +"0 to disable queueing and -1 to make the queue size unlimited." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable register confirmation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable register confirmation when connecting to server.\n" +"If disabled, new account will be registered automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server / Singleplayer" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server description" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automatically report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce to this serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strip color codes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Remove color codes from incoming chat messages\n" +"Use this to stop players from being able to use color in their messages" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bind address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server.\n" +"Ignored if bind_address is set.\n" +"Needs enable_ipv6 to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneous block sends per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks that are simultaneously sent per client.\n" +"The maximum total count is calculated dynamically:\n" +"max_total = ceil((#clients + max_users) * per_client / 4)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay in sending blocks after building" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map Compression Level for Network Transfer" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"ZLib compression level to use when sending mapblocks to the client.\n" +"-1 - Zlib's default compression level\n" +"0 - no compresson, fastest\n" +"9 - best compression, slowest\n" +"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can be connected simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default stack size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies the default stack size of nodes, items and tools.\n" +"Note that mods or games may explicitly set a stack for certain (or all) " +"items." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Damage" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Creative" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable creative mode for all players" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default password" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Basic privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Privileges that players with basic_privs can grant" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mod channels" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod channels support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disable anticheat" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Format of player chat messages. The following strings are valid " +"placeholders:\n" +"@name, @message, @timestamp (optional)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat command time message threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If the execution of a chat command takes longer than this specified time in\n" +"seconds, add the time information to the chat command message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes).\n" +"\n" +"Setting this larger than active_block_range will also cause the server\n" +"to maintain active objects up to this distance in the direction the\n" +"player is looking. (This can avoid mobs suddenly disappearing from view)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The radius of the volume of blocks around every player that is subject to " +"the\n" +"active block stuff, stated in mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run.\n" +"This is also the minimum range in which active objects (mobs) are " +"maintained.\n" +"This should be configured together with active_object_send_range_blocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples:\n" +"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "World start time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time of day when a new world is started, in millihours (0-23999)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message max length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Set the maximum character length of a chat message sent by clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message count limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Amount of messages a player may send per 10 seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message kick threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Kick players who sent more than X messages per 10 seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Horizontal and vertical acceleration on ground or when climbing,\n" +"in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Horizontal acceleration in air when jumping or falling,\n" +"in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Horizontal and vertical acceleration in fast mode,\n" +"in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking and flying speed, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneaking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneaking speed, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking, flying and climbing speed in fast mode, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical climbing speed, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Initial vertical speed when jumping, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Decrease this to increase liquid resistance to movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum liquid resistance. Controls deceleration when entering liquid at\n" +"high speed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sinking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls sinking speed in liquid." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration of gravity, in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated Lua API calls:\n" +"- none: Do not log deprecated calls\n" +"- log: mimic and log backtrace of deprecated call (default).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map Compression Level for Disk Storage" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"ZLib compression level to use when saving mapblocks to disk.\n" +"-1 - Zlib's default compression level\n" +"0 - no compresson, fastest\n" +"9 - best compression, slowest\n" +"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over\n" +"network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block management interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between active block management cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ABM interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between Active Block Modifier (ABM) execution cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ABM time budget" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time budget allowed for ABMs to execute on each step\n" +"(as a fraction of the ABM Interval)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "NodeTimer interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between NodeTimer execution cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Block send optimize distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"At this distance the server will aggressively optimize which blocks are sent " +"to\n" +"clients.\n" +"Small values potentially improve performance a lot, at the expense of " +"visible\n" +"rendering glitches (some blocks will not be rendered under water and in " +"caves,\n" +"as well as sometimes on land).\n" +"Setting this to a value greater than max_block_send_distance disables this\n" +"optimization.\n" +"Stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server side occlusion culling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled the server will perform map block occlusion culling based on\n" +"on the eye position of the player. This can reduce the number of blocks\n" +"sent to the client 50-80%. The client will not longer receive most " +"invisible\n" +"so that the utility of noclip mode is reduced." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client side modding restrictions" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Restricts the access of certain client-side functions on servers.\n" +"Combine the byteflags below to restrict client-side features, or set to 0\n" +"for no restrictions:\n" +"LOAD_CLIENT_MODS: 1 (disable loading client-provided mods)\n" +"CHAT_MESSAGES: 2 (disable send_chat_message call client-side)\n" +"READ_ITEMDEFS: 4 (disable get_item_def call client-side)\n" +"READ_NODEDEFS: 8 (disable get_node_def call client-side)\n" +"LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to\n" +"csm_restriction_noderange)\n" +"READ_PLAYERINFO: 32 (disable get_player_names call client-side)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client side node lookup range restriction" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If the CSM restriction for node range is enabled, get_node calls are " +"limited\n" +"to this distance from the player to the node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HTTP mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of mods that are allowed to access HTTP APIs, which\n" +"allow them to upload and download data to/from the internet." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Load the game profiler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Load the game profiler to collect game profiling data.\n" +"Provides a /profiler command to access the compiled profile.\n" +"Useful for mod developers and server operators." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default report format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The default format in which profiles are being saved,\n" +"when calling `/profiler save [format]` without format." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Report path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The file path relative to your worldpath in which profiles will be saved to." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrumentation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Entity methods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrument the methods of entities on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active Block Modifiers" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument the action function of Active Block Modifiers on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Loading Block Modifiers" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument the action function of Loading Block Modifiers on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chatcommands" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrument chatcommands on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Global callbacks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument global callback functions on registration.\n" +"(anything you pass to a minetest.register_*() function)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Builtin" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument builtin.\n" +"This is usually only needed by core/builtin contributors" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Have the profiler instrument itself:\n" +"* Instrument an empty function.\n" +"This estimates the overhead, that instrumentation is adding (+1 function " +"call).\n" +"* Instrument the sampler being used to update the statistics." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log file size threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If the file size of debug.txt exceeds the number of megabytes specified in\n" +"this setting when it is opened, the file is moved to debug.txt.1,\n" +"deleting an older debug.txt.1 if it exists.\n" +"debug.txt is only moved if this setting is positive." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable IPv6 support (for both client and server).\n" +"Required for IPv6 connections to work at all." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL interactive timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum time an interactive request (e.g. server list fetch) may take, " +"stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum time a file download (e.g. a mod download) may take, stated in " +"milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu script" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Engine profiling data print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Print the engine's profiling data in regular intervals (in seconds).\n" +"0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this.\n" +"Current mapgens in a highly unstable state:\n" +"- The optional floatlands of v7 (disabled by default)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n" +"Only mapchunks completely within the mapgen limit are generated.\n" +"Value is stored per-world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" +"and junglegrass, in all other mapgens this flag controls all decorations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Biome API temperature and humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Heat noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Temperature variation for biomes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Heat blend noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small-scale temperature variation for blending biomes on borders." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity variation for biomes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity blend noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small-scale humidity variation for blending biomes on borders." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V5" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V5 specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation attributes specific to Mapgen v5." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls width of tunnels, a smaller value creates wider tunnels.\n" +"Value >= 10.0 completely disables generation of tunnels and avoids the\n" +"intensive noise calculations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y of upper limit of large caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small cave minimum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum limit of random number of small caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small cave maximum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum limit of random number of small caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave minimum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum limit of random number of large caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave maximum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum limit of random number of large caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave proportion flooded" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Proportion of large caves that contain liquid." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of cavern upper limit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern taper" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-distance over which caverns expand to full size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines full size of caverns, smaller values create larger caverns." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon minimum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lower Y limit of dungeons." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon maximum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Upper Y limit of dungeons." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noises" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filler depth noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of biome filler depth." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Factor noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Variation of terrain vertical scale.\n" +"When noise is < -0.55 terrain is near-flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of average terrain surface." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave1 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "First of two 3D noises that together define tunnels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave2 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Second of two 3D noises that together define tunnels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining giant caverns." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ground noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise that determines number of dungeons per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V6 specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen v6.\n" +"The 'snowbiomes' flag enables the new 5 biome system.\n" +"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" +"the 'jungles' flag is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desert noise threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Deserts occur when np_biome exceeds this value.\n" +"When the 'snowbiomes' flag is enabled, this is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Beach noise threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sandy beaches occur when np_beach exceeds this value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain base noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of lower terrain and seabed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain higher noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of higher terrain that creates cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Steepness noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Varies steepness of cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height select noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines distribution of higher terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mud noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Varies depth of biome surface nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Beach noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines areas with sandy beaches." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Biome noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of number of caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trees noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines tree areas and tree density." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Apple trees noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines areas where trees have apples." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V7" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V7 specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen v7.\n" +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain zero level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Y of mountain density gradient zero level. Used to shift mountains " +"vertically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland minimum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland maximum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Upper Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland tapering distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Y-distance over which floatlands taper from full density to nothing.\n" +"Tapering starts at this distance from the Y limit.\n" +"For a solid floatland layer, this controls the height of hills/mountains.\n" +"Must be less than or equal to half the distance between the Y limits." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland taper exponent" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\n" +"Value = 1.0 creates a uniform, linear tapering.\n" +"Values > 1.0 create a smooth tapering suitable for the default separated\n" +"floatlands.\n" +"Values < 1.0 (for example 0.25) create a more defined surface level with\n" +"flatter lowlands, suitable for a solid floatland layer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland density" +msgstr "" + +#: src/settings_translation_file.cpp +#, c-format +msgid "" +"Adjusts the density of the floatland layer.\n" +"Increase value to increase density. Can be positive or negative.\n" +"Value = 0.0: 50% of volume is floatland.\n" +"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n" +"to be sure) creates a solid floatland layer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Surface level of optional water placed on a solid floatland layer.\n" +"Water is disabled by default and will only be placed if this value is set\n" +"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n" +"upper tapering).\n" +"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n" +"When enabling water placement the floatlands must be configured and tested\n" +"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n" +"required value depending on 'mgv7_np_floatland'), to avoid\n" +"server-intensive extreme water flow and to avoid vast flooding of the\n" +"world surface below." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain alternative noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain persistence noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Varies roughness of terrain.\n" +"Defines the 'persistence' value for terrain_base and terrain_alt noises." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines distribution of higher terrain and steepness of cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain height noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of maximum mountain height (in nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridge underwater noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines large-scale river channel structure." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D noise defining mountain structure and height.\n" +"Also defines structure of floatland mountain terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridge noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining structure of river canyon walls." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D noise defining structure of floatlands.\n" +"If altered from the default, the noise 'scale' (0.7 by default) may need\n" +"to be adjusted, as floatland tapering functions best when this noise has\n" +"a value range of approximately -2.0 to 2.0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Carpathian" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Carpathian specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation attributes specific to Mapgen Carpathian." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Base ground level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the base ground level." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River channel width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the width of the river channel." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River channel depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the depth of the river channel." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River valley width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the width of the river valley." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness1 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "First of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness2 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Second of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness3 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Third of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness4 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fourth of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rolling hills spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the size/occurrence of rolling hills." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridge mountain spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the size/occurrence of ridged mountain ranges." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Step mountain spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the size/occurrence of step mountain ranges." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rolling hill size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of rolling hills." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ridged mountain size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of ridged mountains." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Step mountain size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that controls the shape/size of step mountains." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "2D noise that locates the river valleys and channels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain variation noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Flat" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Flat specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen Flat.\n" +"Occasional lakes and hills can be added to the flat world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ground level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y of flat ground." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lake threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Terrain noise threshold for lakes.\n" +"Controls proportion of world area covered by lakes.\n" +"Adjust towards 0.0 for a larger proportion." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lake steepness" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls steepness/depth of lake depressions." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hill threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Terrain noise threshold for hills.\n" +"Controls proportion of world area covered by hills.\n" +"Adjust towards 0.0 for a larger proportion." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hill steepness" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls steepness/height of hills." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines location and terrain of optional hills and lakes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Fractal" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Fractal specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen Fractal.\n" +"'terrain' enables the generation of non-fractal terrain:\n" +"ocean, islands and underground." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fractal type" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Selects one of 18 fractal types.\n" +"1 = 4D \"Roundy\" Mandelbrot set.\n" +"2 = 4D \"Roundy\" Julia set.\n" +"3 = 4D \"Squarry\" Mandelbrot set.\n" +"4 = 4D \"Squarry\" Julia set.\n" +"5 = 4D \"Mandy Cousin\" Mandelbrot set.\n" +"6 = 4D \"Mandy Cousin\" Julia set.\n" +"7 = 4D \"Variation\" Mandelbrot set.\n" +"8 = 4D \"Variation\" Julia set.\n" +"9 = 3D \"Mandelbrot/Mandelbar\" Mandelbrot set.\n" +"10 = 3D \"Mandelbrot/Mandelbar\" Julia set.\n" +"11 = 3D \"Christmas Tree\" Mandelbrot set.\n" +"12 = 3D \"Christmas Tree\" Julia set.\n" +"13 = 3D \"Mandelbulb\" Mandelbrot set.\n" +"14 = 3D \"Mandelbulb\" Julia set.\n" +"15 = 3D \"Cosine Mandelbulb\" Mandelbrot set.\n" +"16 = 3D \"Cosine Mandelbulb\" Julia set.\n" +"17 = 4D \"Mandelbulb\" Mandelbrot set.\n" +"18 = 4D \"Mandelbulb\" Julia set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Iterations of the recursive function.\n" +"Increasing this increases the amount of fine detail, but also\n" +"increases processing load.\n" +"At iterations = 20 this mapgen has a similar load to mapgen V7." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"(X,Y,Z) scale of fractal in nodes.\n" +"Actual fractal size will be 2 to 3 times larger.\n" +"These numbers can be made very large, the fractal does\n" +"not have to fit inside the world.\n" +"Increase these to 'zoom' into the detail of the fractal.\n" +"Default is for a vertically-squashed shape suitable for\n" +"an island, set all 3 numbers equal for the raw shape." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n" +"Can be used to move a desired point to (0, 0) to create a\n" +"suitable spawn point, or to allow 'zooming in' on a desired\n" +"point by increasing 'scale'.\n" +"The default is tuned for a suitable spawn point for Mandelbrot\n" +"sets with default parameters, it may need altering in other\n" +"situations.\n" +"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Slice w" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"W coordinate of the generated 3D slice of a 4D fractal.\n" +"Determines which 3D slice of the 4D shape is generated.\n" +"Alters the shape of the fractal.\n" +"Has no effect on 3D fractals.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia x" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"X component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"Y component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia z" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"Z component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia w" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"W component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Has no effect on 3D fractals.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Seabed noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of seabed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Valleys" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Valleys specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen Valleys.\n" +"'altitude_chill': Reduces heat with altitude.\n" +"'humid_rivers': Increases humidity around rivers.\n" +"'vary_river_depth': If enabled, low humidity and high heat causes rivers\n" +"to become shallower and occasionally dry.\n" +"'altitude_dry': Reduces humidity with altitude." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The vertical distance over which heat drops by 20 if 'altitude_chill' is\n" +"enabled. Also the vertical distance over which humidity drops by 10 if\n" +"'altitude_dry' is enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Depth below which you'll find large caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern upper limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Depth below which you'll find giant caverns." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How deep to make rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How wide to make rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise #1" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise #2" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filler depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The depth of dirt or other biome filler node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Base terrain height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Raises terrain to make valleys around the rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley fill" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Slope and fill work together to modify the heights." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley profile" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Amplifies the valleys." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley slope" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\n" +"WARNING!: There is no benefit, and there are several dangers, in\n" +"increasing this value above 5.\n" +"Reducing this value increases cave and dungeon density.\n" +"Altering this value is for special usage, leaving it unchanged is\n" +"recommended." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug information." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of queued blocks to emerge" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"This limit is enforced per player." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"This limit is enforced per player." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use.\n" +"Value 0:\n" +"- Automatic selection. The number of emerge threads will be\n" +"- 'number of processors - 2', with a lower limit of 1.\n" +"Any other value:\n" +"- Specifies the number of emerge threads, with a lower limit of 1.\n" +"WARNING: Increasing the number of emerge threads increases engine mapgen\n" +"speed, but this may harm game performance by interfering with other\n" +"processes, especially in singleplayer and/or when running Lua code in\n" +"'on_generated'. For many users the optimum setting may be '1'." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Online Content Repository" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The URL for the content repository" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB Flag Blacklist" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of flags to hide in the content repository.\n" +"\"nonfree\" can be used to hide packages which do not qualify as 'free " +"software',\n" +"as defined by the Free Software Foundation.\n" +"You can also specify content ratings.\n" +"These flags are independent from Minetest versions,\n" +"so see a full list at https://content.minetest.net/help/content_flags/" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB Max Concurrent Downloads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of concurrent downloads. Downloads exceeding this limit will " +"be queued.\n" +"This should be lower than curl_parallel_limit." +msgstr "" From 33325929057f087f0f500a96288e16128af2a2f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Pfrogner?= Date: Sat, 20 Nov 2021 09:50:36 +0000 Subject: [PATCH 112/412] Translated using Weblate (Czech) Currently translated at 62.9% (879 of 1396 strings) --- po/cs/minetest.po | 1094 ++++++++++++++++++++++----------------------- 1 file changed, 540 insertions(+), 554 deletions(-) diff --git a/po/cs/minetest.po b/po/cs/minetest.po index ac3d06de3..922347d55 100644 --- a/po/cs/minetest.po +++ b/po/cs/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Czech (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2021-02-03 04:31+0000\n" -"Last-Translator: Vít Skalický \n" +"PO-Revision-Date: 2021-11-22 18:50+0000\n" +"Last-Translator: Ondřej Pfrogner \n" "Language-Team: Czech \n" "Language: cs\n" @@ -12,48 +12,43 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 4.5-dev\n" +"X-Generator: Weblate 4.10-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" -msgstr "" +msgstr "Vyprázdnit frontu odchozího chatu" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Empty command." -msgstr "Příkazy" +msgstr "Prázdný příkaz." #: builtin/client/chatcommands.lua -#, fuzzy msgid "Exit to main menu" -msgstr "Odejít do nabídky" +msgstr "Odejít do hlavní nabídky" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Invalid command: " -msgstr "Místní příkaz" +msgstr "Neplatný příkaz: " #: builtin/client/chatcommands.lua msgid "Issued command: " -msgstr "" +msgstr "Zadaný příkaz: " #: builtin/client/chatcommands.lua -#, fuzzy msgid "List online players" -msgstr "Místní hra" +msgstr "Vypsat připojené hráče" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Online players: " -msgstr "Místní hra" +msgstr "Připojení hráči: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." -msgstr "" +msgstr "Fronta odchozího chatu je nyní prázdná." #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "Server zakázal tento příkaz." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -64,40 +59,39 @@ msgid "You died" msgstr "Zemřel jsi" #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." -msgstr "Zemřel jsi" +msgstr "Zemřel jsi." #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands:" -msgstr "Místní příkaz" +msgstr "Příkazy k dispozici:" #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands: " -msgstr "Místní příkaz" +msgstr "Příkazy k dispozici: " #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "Příkaz není k dispozici: " #: builtin/common/chatcommands.lua msgid "Get help for commands" -msgstr "" +msgstr "Získat nápovědu pro příkazy" #: builtin/common/chatcommands.lua msgid "" "Use '.help ' to get more information, or '.help all' to list everything." msgstr "" +"Použij \".help \" pro obdržení více informací, nebo \".help all\" " +"pro celý výpis." #: builtin/common/chatcommands.lua msgid "[all | ]" -msgstr "" +msgstr "[all | ]" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" -msgstr "OK" +msgstr "Dobře" #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" @@ -117,7 +111,7 @@ msgstr "Znovu se připojit" #: builtin/fstk/ui.lua msgid "The server has requested a reconnect:" -msgstr "Server vyžaduje znovupřipojení se:" +msgstr "Server vyžaduje opětovné připojení:" #: builtin/mainmenu/common.lua msgid "Protocol version mismatch. " @@ -230,7 +224,7 @@ msgstr "\"$1\" již existuje. Chcete jej přepsat?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." -msgstr "" +msgstr "Budou nainstalovány závislosti $1 a $2." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" @@ -250,38 +244,35 @@ msgstr "$1 se stahuje..." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "" +msgstr "$1 požadovaných závislostí nebylo nalezeno." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" +msgstr "$1 závislostí bude nainstalováno a $2 bude vynecháno." #: builtin/mainmenu/dlg_contentstore.lua msgid "All packages" msgstr "Všechny balíčky" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Already installed" -msgstr "Klávesa je již používána" +msgstr "Již nainstalováno" #: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Zpět do hlavní nabídky" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Base Game:" -msgstr "Založit hru" +msgstr "Základní hra:" #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" +msgstr "ContentDB není přístupná pokud byl Minetest kompilován bez použití cURL" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Downloading..." -msgstr "Nahrávám..." +msgstr "Stahuji..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -297,14 +288,12 @@ msgid "Install" msgstr "Instalovat" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install $1" -msgstr "Instalovat" +msgstr "Instalovat $1" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install missing dependencies" -msgstr "Volitelné závislosti:" +msgstr "Instalovat chybějící závislosti" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -320,25 +309,24 @@ msgid "No results" msgstr "Žádné výsledky" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "No updates" -msgstr "Aktualizovat" +msgstr "Žádné aktualizace" #: builtin/mainmenu/dlg_contentstore.lua msgid "Not found" -msgstr "" +msgstr "Nenalezeno" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" -msgstr "" +msgstr "Přepsat" #: builtin/mainmenu/dlg_contentstore.lua msgid "Please check that the base game is correct." -msgstr "" +msgstr "Ověř prosím, zda je základní hra v pořádku." #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" -msgstr "" +msgstr "Ve frontě" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" @@ -354,57 +342,51 @@ msgstr "Aktualizovat" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update All [$1]" -msgstr "" +msgstr "Aktualizovat vše [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "Zobrazit více informací v prohlížeči" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" -msgstr "Svět s názvem \"$1\" už existuje" +msgstr "Svět s názvem \"$1\" již existuje" #: builtin/mainmenu/dlg_create_world.lua msgid "Additional terrain" -msgstr "" +msgstr "Další terén" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Altitude chill" -msgstr "Výškové ochlazení" +msgstr "Teplota (výšková)" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Altitude dry" -msgstr "Výškové ochlazení" +msgstr "Vlhkost (výšková)" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Biome blending" -msgstr "Šum biomů" +msgstr "Prolínání biomů" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Biomes" -msgstr "Šum biomů" +msgstr "Biomy" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Caverns" -msgstr "Šum jeskynních dutin" +msgstr "Jeskyně (velké)" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Caves" -msgstr "Oktávy" +msgstr "Jeskyně (malé)" #: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Vytvořit" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Decorations" -msgstr "Iterace" +msgstr "Dekorace" #: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" @@ -415,23 +397,20 @@ msgid "Download one from minetest.net" msgstr "Stáhněte si jednu z minetest.net" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Dungeons" -msgstr "Šum hřbetů" +msgstr "Žaláře" #: builtin/mainmenu/dlg_create_world.lua msgid "Flat terrain" -msgstr "" +msgstr "Plochý terén" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Floating landmasses in the sky" -msgstr "Koncentrace hor na létajících ostrovech" +msgstr "Krajina vznášející se na nebi" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Floatlands (experimental)" -msgstr "Výška létajících ostrovů" +msgstr "Létající ostrovy (experimentální)" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" @@ -439,28 +418,27 @@ msgstr "Hra" #: builtin/mainmenu/dlg_create_world.lua msgid "Generate non-fractal terrain: Oceans and underground" -msgstr "" +msgstr "Generovat terén bez použití fraktálů: Oceány a podzemí" #: builtin/mainmenu/dlg_create_world.lua msgid "Hills" -msgstr "" +msgstr "Kopce" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Humid rivers" -msgstr "Ovladač grafiky" +msgstr "Vodnost řek" #: builtin/mainmenu/dlg_create_world.lua msgid "Increases humidity around rivers" -msgstr "" +msgstr "Zvyšuje vlhkost v okolí řek" #: builtin/mainmenu/dlg_create_world.lua msgid "Lakes" -msgstr "" +msgstr "Jezera" #: builtin/mainmenu/dlg_create_world.lua msgid "Low humidity and high heat causes shallow or dry rivers" -msgstr "" +msgstr "Nízká vlhkost a vysoké teploty mají za následek mělké či vyschlé řeky" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen" @@ -468,24 +446,23 @@ msgstr "Generátor mapy" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen flags" -msgstr "Nastavení generátoru mapy" +msgstr "Nastavení pro Generátor mapy" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Mapgen-specific flags" -msgstr "Mapgen údolí" +msgstr "Nastavení pro Generátor mapy" #: builtin/mainmenu/dlg_create_world.lua msgid "Mountains" -msgstr "" +msgstr "Hory" #: builtin/mainmenu/dlg_create_world.lua msgid "Mud flow" -msgstr "" +msgstr "Eroze" #: builtin/mainmenu/dlg_create_world.lua msgid "Network of tunnels and caves" -msgstr "" +msgstr "Jeskynní systém" #: builtin/mainmenu/dlg_create_world.lua msgid "No game selected" @@ -493,20 +470,19 @@ msgstr "Není vybrána žádná hra" #: builtin/mainmenu/dlg_create_world.lua msgid "Reduces heat with altitude" -msgstr "" +msgstr "Snižuje teplotu a nadmořskou výšku" #: builtin/mainmenu/dlg_create_world.lua msgid "Reduces humidity with altitude" -msgstr "" +msgstr "Snižuje vlhkost s rostoucí nadmořskou výškou" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Rivers" -msgstr "Velikost řeky" +msgstr "Řeky" #: builtin/mainmenu/dlg_create_world.lua msgid "Sea level rivers" -msgstr "" +msgstr "Řeky v úrovni mořské hladiny" #: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -515,51 +491,51 @@ msgstr "Seedové číslo" #: builtin/mainmenu/dlg_create_world.lua msgid "Smooth transition between biomes" -msgstr "" +msgstr "Pozvolný přechod mezi biomy" #: builtin/mainmenu/dlg_create_world.lua msgid "" "Structures appearing on the terrain (no effect on trees and jungle grass " "created by v6)" msgstr "" +"Povrchové struktury (nemá vliv na stromy a tropickou trávu vytvořené ve v6 a " +"později)" #: builtin/mainmenu/dlg_create_world.lua msgid "Structures appearing on the terrain, typically trees and plants" -msgstr "" +msgstr "Povrchové struktury, především stromy a rostliny" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert" -msgstr "" +msgstr "Mírné, Poušť" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle" -msgstr "" +msgstr "Mírné, Poušť, Džungle" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle, Tundra, Taiga" -msgstr "" +msgstr "Mírné, Poušť, Džungle, Tundra, Tajga" #: builtin/mainmenu/dlg_create_world.lua msgid "Terrain surface erosion" -msgstr "" +msgstr "Povrchová eroze" #: builtin/mainmenu/dlg_create_world.lua msgid "Trees and jungle grass" -msgstr "" +msgstr "Stromy a tropická tráva" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Vary river depth" -msgstr "Hloubka řeky" +msgstr "Proměnná hloubka řek" #: builtin/mainmenu/dlg_create_world.lua msgid "Very large caverns deep in the underground" -msgstr "" +msgstr "Veliké jeskyně hluboko pod zemí" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Warning: The Development Test is meant for developers." -msgstr "Varování: \"Minimal development test\" je zamýšlen pouze pro vývojáře." +msgstr "Varování: Development Test je určen pro vývojáře." #: builtin/mainmenu/dlg_create_world.lua msgid "World name" @@ -794,9 +770,8 @@ msgid "Loading..." msgstr "Nahrávám..." #: builtin/mainmenu/serverlistmgr.lua -#, fuzzy msgid "Public server list is disabled" -msgstr "Uživatelské skripty nejsou povoleny" +msgstr "Seznam veřejných serverů je vypnut" #: builtin/mainmenu/serverlistmgr.lua msgid "Try reenabling public serverlist and check your internet connection." @@ -806,31 +781,31 @@ msgstr "" #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "" +msgstr "O nás" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" msgstr "Aktivní přispěvatelé" #: builtin/mainmenu/tab_about.lua -#, fuzzy msgid "Active renderer:" -msgstr "Odesílací rozsah aktivních bloků" +msgstr "Aktivní renderer:" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" msgstr "Hlavní vývojáři" #: builtin/mainmenu/tab_about.lua -#, fuzzy msgid "Open User Data Directory" -msgstr "Vyberte adresář" +msgstr "Otevřít uživatelský adresář" #: builtin/mainmenu/tab_about.lua msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" +"Ve správci souborů otevře adresář obsahující uživatelské světy, hry,\n" +"mody a balíčky textur." #: builtin/mainmenu/tab_about.lua msgid "Previous Contributors" @@ -906,11 +881,11 @@ msgstr "Založit server" #: builtin/mainmenu/tab_local.lua msgid "Install games from ContentDB" -msgstr "" +msgstr "Instalovat hry z ContentDB" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua msgid "Name" -msgstr "" +msgstr "Jméno" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -921,9 +896,8 @@ msgid "No world created or selected!" msgstr "Žádný svět nebyl vytvořen ani vybrán!" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Password" -msgstr "Nové heslo" +msgstr "Heslo" #: builtin/mainmenu/tab_local.lua msgid "Play Game" @@ -934,9 +908,8 @@ msgid "Port" msgstr "Port" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Select Mods" -msgstr "Vyberte svět:" +msgstr "Vybrat mody" #: builtin/mainmenu/tab_local.lua msgid "Select World:" @@ -951,9 +924,8 @@ msgid "Start Game" msgstr "Spustit hru" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Address" -msgstr "- Adresa: " +msgstr "Adresa" #: builtin/mainmenu/tab_online.lua src/client/keycode.cpp msgid "Clear" @@ -969,22 +941,20 @@ msgstr "Kreativní mód" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Damage / PvP" -msgstr "Zranění" +msgstr "Zranění / PvP" #: builtin/mainmenu/tab_online.lua msgid "Del. Favorite" msgstr "Smazat oblíbené" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Favorites" msgstr "Oblíbené" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" -msgstr "" +msgstr "Nekompatibilní server" #: builtin/mainmenu/tab_online.lua msgid "Join Game" @@ -995,16 +965,14 @@ msgid "Ping" msgstr "Ping" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Public Servers" -msgstr "Uveřejnit server" +msgstr "Veřejné servery" #: builtin/mainmenu/tab_online.lua msgid "Refresh" -msgstr "" +msgstr "Obnovit" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Server Description" msgstr "Popis serveru" @@ -1049,13 +1017,12 @@ msgid "Connected Glass" msgstr "Propojené sklo" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp -#, fuzzy msgid "Dynamic shadows" -msgstr "Stín písma" +msgstr "Dynamické stíny" #: builtin/mainmenu/tab_settings.lua msgid "Dynamic shadows: " -msgstr "" +msgstr "Dynamické stíny: " #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" @@ -1063,19 +1030,19 @@ msgstr "Vícevrstevné listí" #: builtin/mainmenu/tab_settings.lua msgid "High" -msgstr "" +msgstr "Vysoké" #: builtin/mainmenu/tab_settings.lua msgid "Low" -msgstr "" +msgstr "Nízké" #: builtin/mainmenu/tab_settings.lua msgid "Medium" -msgstr "" +msgstr "Střední" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" -msgstr "Mipmapy zapnuté" +msgstr "Mipmapy" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap + Aniso. Filter" @@ -1126,9 +1093,8 @@ msgid "Shaders" msgstr "Shadery" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Shaders (experimental)" -msgstr "Výška létajících ostrovů" +msgstr "Shader (experimentální)" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" @@ -1164,11 +1130,11 @@ msgstr "Trilineární filtr" #: builtin/mainmenu/tab_settings.lua msgid "Ultra High" -msgstr "" +msgstr "Velmi vysoké" #: builtin/mainmenu/tab_settings.lua msgid "Very Low" -msgstr "" +msgstr "Vylmi nízké" #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" @@ -1325,7 +1291,7 @@ msgid "Continue" msgstr "Pokračovat" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "" "Controls:\n" "- %s: move forwards\n" @@ -1348,13 +1314,13 @@ msgstr "" "- %s: pohyb doleva\n" "- %s: pohyb doprava\n" "- %s: skok/výstup\n" +"- %s: těžit/uhodit\n" +"- %s: umístit/použít\n" "- %s: plížení/sestup\n" -"- %s: zahození věci\n" +"- %s: zahození předmětu\n" "- %s: inventář\n" "- Myš: otáčení/rozhlížení\n" -"- Levé tl. myši: těžit/uhodit\n" -"- Pravé tl. myši: položit/použít\n" -"- Kolečko myši: výběr přihrádky\n" +"- Kolečko myši: výběr předmětu\n" "- %s: chat\n" #: src/client/game.cpp @@ -1486,9 +1452,8 @@ msgid "Minimap currently disabled by game or mod" msgstr "Minimapa je aktuálně zakázána" #: src/client/game.cpp -#, fuzzy msgid "Multiplayer" -msgstr "Místní hra" +msgstr "Multiplayer" #: src/client/game.cpp msgid "Noclip mode disabled" @@ -1540,7 +1505,7 @@ msgstr "Vypínání..." #: src/client/game.cpp msgid "Singleplayer" -msgstr "Místní hra" +msgstr "Singleplayer" #: src/client/game.cpp msgid "Sound Volume" @@ -1552,11 +1517,11 @@ msgstr "Zvuk vypnut" #: src/client/game.cpp msgid "Sound system is disabled" -msgstr "" +msgstr "Zvukový systém je vypnutý" #: src/client/game.cpp msgid "Sound system is not supported on this build" -msgstr "" +msgstr "Zvukový systém není v této verzi podporovaný" #: src/client/game.cpp msgid "Sound unmuted" @@ -1883,19 +1848,18 @@ msgid "Minimap hidden" msgstr "Minimapa je skryta" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in radar mode, Zoom x%d" -msgstr "Minimapa v režimu radar, Přiblížení x1" +msgstr "Minimapa v režimu Radar, Přiblížení x%d" #: src/client/minimap.cpp -#, fuzzy, c-format +#, c-format msgid "Minimap in surface mode, Zoom x%d" -msgstr "Minimapa v režimu povrch, Přiblížení x1" +msgstr "Minimapa v režimu Povrch, Přiblížení x%d" #: src/client/minimap.cpp -#, fuzzy msgid "Minimap in texture mode" -msgstr "Minimální velikost textury k filtrování" +msgstr "Minimapa v režimu Textura" #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" @@ -1925,9 +1889,8 @@ msgid "Proceed" msgstr "Pokračovat" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "\"Aux1\" = climb down" -msgstr "„Speciální“ = sestoupit dolů" +msgstr "\"Aux1\" = sestoupit" #: src/gui/guiKeyChangeMenu.cpp msgid "Autoforward" @@ -1939,7 +1902,7 @@ msgstr "Automaticky skákat" #: src/gui/guiKeyChangeMenu.cpp msgid "Aux1" -msgstr "" +msgstr "Aux1" #: src/gui/guiKeyChangeMenu.cpp msgid "Backward" @@ -1947,7 +1910,7 @@ msgstr "Vzad" #: src/gui/guiKeyChangeMenu.cpp msgid "Block bounds" -msgstr "" +msgstr "Ohraničení bloku" #: src/gui/guiKeyChangeMenu.cpp msgid "Change camera" @@ -2125,14 +2088,13 @@ msgstr "" "Pokud je zakázán, virtuální joystick se upraví podle umístění prvního dotyku." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "(Android) Use virtual joystick to trigger \"Aux1\" button.\n" "If enabled, virtual joystick will also tap \"Aux1\" button when out of main " "circle." msgstr "" -"(Android) Použít virtuální joystick pro stisknutí tlačítka 'aux'.\n" -"Pokud je povoleno, virtuální joystick automaticky stiskne tlačítko 'aux' " +"(Android) Použít virtuální joystick pro stisk tlačítka \"Aux1\".\n" +"Pokud je povoleno, virtuální joystick automaticky stiskne tlačítko \"Aux1\" " "pokud je mimo hlavní kruh." #: src/settings_translation_file.cpp @@ -2210,9 +2172,8 @@ msgid "3D mode" msgstr "Režim 3D zobrazení" #: src/settings_translation_file.cpp -#, fuzzy msgid "3D mode parallax strength" -msgstr "Síla parallax occlusion" +msgstr "Intezita Parallax ve 3D modu" #: src/settings_translation_file.cpp msgid "3D noise defining giant caverns." @@ -2233,6 +2194,11 @@ msgid "" "to be adjusted, as floatland tapering functions best when this noise has\n" "a value range of approximately -2.0 to 2.0." msgstr "" +"3D šum definující strukturu létajících ostrovů.\n" +"Pokud je odlišný od výchozího, může být nutné upravit\n" +"\"měřítko\" šumu (výchozí 0.7), jelikož zužování (obrácené hory)\n" +"létajících ostrovů funguje nejlépe pokud je šum v rozmezí přibližně -2.0 až 2" +".0." #: src/settings_translation_file.cpp msgid "3D noise defining structure of river canyon walls." @@ -2248,7 +2214,7 @@ msgstr "3D šum definující horské převisy, atp. Typicky malé odchylky." #: src/settings_translation_file.cpp msgid "3D noise that determines number of dungeons per mapchunk." -msgstr "3D šum, který definuje počet žalářů na kusu mapy." +msgstr "3D šum definující počet žalářů na kusu mapy." #: src/settings_translation_file.cpp msgid "" @@ -2297,12 +2263,11 @@ msgstr "Interval Aktivní Blokové Modifikace (ABM)" #: src/settings_translation_file.cpp msgid "ABM time budget" -msgstr "" +msgstr "ABM použitelný čas" #: src/settings_translation_file.cpp -#, fuzzy msgid "Absolute limit of queued blocks to emerge" -msgstr "Maximální počet emerge front" +msgstr "Maximální počet připravených bloků ve frontě" #: src/settings_translation_file.cpp msgid "Acceleration in air" @@ -2359,6 +2324,11 @@ msgid "" "Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n" "to be sure) creates a solid floatland layer." msgstr "" +"Upravit hustotu roviny létajících ostrovů.\n" +"Zvýšením hodnoty se zvýší hustota. Hodnota může být kladná i záporná.\n" +"Hodnota = 0.0: 50% světa tvoří létajících ostrovy.\n" +"Hodnota = 2.0 (může být i vyšší v závislosti na “mgv7_np_floatland“,\n" +"nutno vždy otestovat) vytvoří souvislou vrstvu létajících ostrovů." #: src/settings_translation_file.cpp msgid "Advanced" @@ -2372,6 +2342,11 @@ msgid "" "This only has significant effect on daylight and artificial\n" "light, it has very little effect on natural night light." msgstr "" +"Změní křivku světla použitím \"gamma korekce\".\n" +"Vysoké hodnoty zesvětlí málo a středně osvětlené prostory.\n" +"Hodnota \"1.0\" nastaví výchozí křivku.\n" +"Tato úprava slouží především pro úpravu denního\n" +"a umělého osvětlení a má pouze malý dopad na noční osvětlení." #: src/settings_translation_file.cpp msgid "Always fly and fast" @@ -2398,9 +2373,8 @@ msgid "Announce server" msgstr "Zveřejnit server" #: src/settings_translation_file.cpp -#, fuzzy msgid "Announce to this serverlist." -msgstr "Zveřejnit server" +msgstr "Oznámit tomuto seznamu serverů." #: src/settings_translation_file.cpp msgid "Append item name" @@ -2431,7 +2405,6 @@ msgid "Ask to reconnect after crash" msgstr "Zeptat se na znovupřipojení po havárii" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "At this distance the server will aggressively optimize which blocks are sent " "to\n" @@ -2445,29 +2418,26 @@ msgid "" "optimization.\n" "Stated in mapblocks (16 nodes)." msgstr "" -"V této vzdálenosti bude server agresivně optimalizovat, které bloky pošle " -"klientům.\n" -"Malé hodnoty mohou mírně zvýšit rychlost, mohou však také způsobit viditelné " -"nedostatky ve vykreslování.\n" -"(některé bloky, zvláště pod vodou, v jeskyních a občas i na zemi, nebudou " -"vykresleny)\n" -"Nastavení této hodnoty na více než max_block_send_distance zakáže " -"optimalizaci.\n" -"Jednotkou je mapblok (16 bloků)" +"V této vzdálenosti bude server razantně optimalizovat výběr bloků,\n" +"které pošle klientům.\n" +"Malé hodnoty mohou zlepšit výkon, však mohou také způsobit chyby\n" +"ve vykreslování (některé bloky, zvláště pod vodou, v jeskyních\n" +"a někdy i na zemi, nebudou vykresleny).\n" +"Nastavení této hodnoty vyšší než max_block_send_distance zakáže vypne\n" +"tuto optimalizaci.\n" +"Jednotkou je mapblok (16 bloků)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Automatic forward key" -msgstr "Vpřed" +msgstr "Automaticky vpřed klávesa" #: src/settings_translation_file.cpp msgid "Automatically jump up single-node obstacles." msgstr "Automaticky vyskočit na překážky vysoké 1 blok." #: src/settings_translation_file.cpp -#, fuzzy msgid "Automatically report to the serverlist." -msgstr "Automaticky hlásit seznamu serverů." +msgstr "Automaticky nahlásit do seznamu serverů." #: src/settings_translation_file.cpp msgid "Autosave screen size" @@ -2478,35 +2448,30 @@ msgid "Autoscaling mode" msgstr "Režim automatického přiblížení" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key" -msgstr "Klávesa skoku" +msgstr "Aux1 klávesa" #: src/settings_translation_file.cpp -#, fuzzy msgid "Aux1 key for climbing/descending" -msgstr "Klávesa pro výstup/sestup" +msgstr "Aux1 klávesa pro výstup/sestup" #: src/settings_translation_file.cpp msgid "Backward key" msgstr "Vzad" #: src/settings_translation_file.cpp -#, fuzzy msgid "Base ground level" -msgstr "Výška povrchu země" +msgstr "Základní úroveň povrchu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Base terrain height." -msgstr "Základní výška terénu" +msgstr "Základní výška terénu." #: src/settings_translation_file.cpp msgid "Basic" msgstr "Základní" #: src/settings_translation_file.cpp -#, fuzzy msgid "Basic privileges" msgstr "Základní práva" @@ -2539,24 +2504,20 @@ msgid "Block send optimize distance" msgstr "Optimalizace vzdálenosti vysílání bloku" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold and italic font path" -msgstr "Cesta k neproporcionálnímu písmu" +msgstr "Cesta k tučnému písmu s kurzívou" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold and italic monospace font path" -msgstr "Cesta k neproporcionálnímu písmu" +msgstr "Cesta k tučnému proporcionálnímu písmu s kurzívou" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold font path" -msgstr "Cesta k písmu" +msgstr "Cesta k tučnému písmu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Bold monospace font path" -msgstr "Cesta k neproporcionálnímu písmu" +msgstr "Cesta k proporcionálnímu písmu" #: src/settings_translation_file.cpp msgid "Build inside player" @@ -2588,7 +2549,7 @@ msgstr "Klávesa pro přepínání aktualizace pohledu" #: src/settings_translation_file.cpp msgid "Cave noise" -msgstr "Šum jeskyní" +msgstr "Šum v jeskynních" #: src/settings_translation_file.cpp msgid "Cave noise #1" @@ -2600,7 +2561,7 @@ msgstr "Šum v jeskynních 2" #: src/settings_translation_file.cpp msgid "Cave width" -msgstr "Šířka jeskyně" +msgstr "Šířka jeskyní" #: src/settings_translation_file.cpp msgid "Cave1 noise" @@ -2627,48 +2588,44 @@ msgid "Cavern threshold" msgstr "Práh jeskynních dutin" #: src/settings_translation_file.cpp -#, fuzzy msgid "Cavern upper limit" -msgstr "Limit jeskynních dutin" +msgstr "Horní hranice jeskynních dutin" #: src/settings_translation_file.cpp msgid "" "Center of light curve boost range.\n" "Where 0.0 is minimum light level, 1.0 is maximum light level." msgstr "" +"Střed posílené křivky světla.\n" +"0.0 odpovídá nejnižší úrovni, 1.0 odpovídá nejvyšší úrovni světla." #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat command time message threshold" -msgstr "Práh pouštního šumu" +msgstr "Doba do zobrazení času pro příkaz v chatu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat font size" -msgstr "Velikost písma" +msgstr "Velikost písma v chatu" #: src/settings_translation_file.cpp msgid "Chat key" msgstr "Klávesa chatu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat log level" -msgstr "Úroveň minimální důležitosti ladících informací" +msgstr "Úroveň důležitosti ladících informací" #: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "Omezení počtu zpráv v Chatu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat message format" -msgstr "Zpráva o havárii" +msgstr "Formát zpráv v chatu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat message kick threshold" -msgstr "Práh pouštního šumu" +msgstr "Doba do vyhození zprávy z chatu" #: src/settings_translation_file.cpp msgid "Chat message max length" @@ -2711,9 +2668,8 @@ msgid "Client modding" msgstr "Lokální mody" #: src/settings_translation_file.cpp -#, fuzzy msgid "Client side modding restrictions" -msgstr "Lokální mody" +msgstr "Omezení modování na straně klienta" #: src/settings_translation_file.cpp msgid "Client side node lookup range restriction" @@ -2744,9 +2700,8 @@ msgid "Colored fog" msgstr "Barevná mlha" #: src/settings_translation_file.cpp -#, fuzzy msgid "Colored shadows" -msgstr "Barevná mlha" +msgstr "Zbarvené stíny" #: src/settings_translation_file.cpp msgid "" @@ -2758,6 +2713,13 @@ msgid "" "These flags are independent from Minetest versions,\n" "so see a full list at https://content.minetest.net/help/content_flags/" msgstr "" +"Seznam nastavení ve formátu CSV sloužící k filtrování obsahu repozitáře.\n" +"\"nesvobodné\" slouží pro skrytí balíčků, které se podle definice Free " +"Software Foundation\n" +"neřadí do \"svobodného softwaru\".\n" +"Můžete také zadat hodnocení obsahu.\n" +"Tato nastavení jsou nezávislá na versi Minetestu,\n" +"kompletní seznam na: https://content.minetest.net/help/content_flags/" #: src/settings_translation_file.cpp msgid "" @@ -2806,16 +2768,15 @@ msgstr "Šírka konzole" #: src/settings_translation_file.cpp msgid "ContentDB Flag Blacklist" -msgstr "" +msgstr "ContentDB: Černá listina" #: src/settings_translation_file.cpp msgid "ContentDB Max Concurrent Downloads" -msgstr "" +msgstr "ContentDB Max. souběžných stahování" #: src/settings_translation_file.cpp -#, fuzzy msgid "ContentDB URL" -msgstr "Pokračovat" +msgstr "ContentDB-URL" #: src/settings_translation_file.cpp msgid "Continuous forward" @@ -2826,25 +2787,26 @@ msgid "" "Continuous forward movement, toggled by autoforward key.\n" "Press the autoforward key again or the backwards movement to disable." msgstr "" +"Nepřetržitý pohyb vpřed zapnutý klávesou Automaticky vpřed.\n" +"Stisk klávesy Automaticky vpřed nebo Dozadu, pohyb zruší." #: src/settings_translation_file.cpp msgid "Controls" msgstr "Ovládání" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Controls length of day/night cycle.\n" "Examples:\n" "72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged." msgstr "" "Ovládání délky denního cyklu.\n" -"Příklad: 72 = 20 minut, 360 = 4 minutý, 1 = 24 hodin, 0 = zůstává pouze noc " -"nebo den." +"Příklad:\n" +"72 = 20 minut, 360 = 4 minuty, 1 = 24 hodin, 0 = zůstává pouze noc nebo den." #: src/settings_translation_file.cpp msgid "Controls sinking speed in liquid." -msgstr "Ovládá rychlost potápění v kapalinách." +msgstr "Stanovuje rychlost potápění v kapalinách." #: src/settings_translation_file.cpp msgid "Controls steepness/depth of lake depressions." @@ -2860,6 +2822,9 @@ msgid "" "Value >= 10.0 completely disables generation of tunnels and avoids the\n" "intensive noise calculations." msgstr "" +"Stanovuje šířku tunelů. Nižší hodnota vytváří širší tunely.\n" +"Hodnota >= 10.0 úplně vypne generování tunelů, čímž se zruší\n" +"náročné výpočty šumu." #: src/settings_translation_file.cpp msgid "Crash message" @@ -2874,11 +2839,12 @@ msgid "Crosshair alpha" msgstr "Průhlednost zaměřovače" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" "Also controls the object crosshair color" -msgstr "Průhlednost zaměřovače (mezi 0 a 255)." +msgstr "" +"Průhlednost zaměřovače (0 až 255).\n" +"Také určuje barvu zaměřovače" #: src/settings_translation_file.cpp msgid "Crosshair color" @@ -2889,6 +2855,8 @@ msgid "" "Crosshair color (R,G,B).\n" "Also controls the object crosshair color" msgstr "" +"Barva zaměřovače (R,G,B).\n" +"Také určuje barvu zaměřovače" #: src/settings_translation_file.cpp msgid "DPI" @@ -2903,9 +2871,8 @@ msgid "Debug info toggle key" msgstr "Klávesa pro zobrazení ladících informací" #: src/settings_translation_file.cpp -#, fuzzy msgid "Debug log file size threshold" -msgstr "Práh pouštního šumu" +msgstr "Práh velikosti souboru s ladícími informacemi" #: src/settings_translation_file.cpp msgid "Debug log level" @@ -2917,7 +2884,7 @@ msgstr "Klávesa snížení hlasitosti" #: src/settings_translation_file.cpp msgid "Decrease this to increase liquid resistance to movement." -msgstr "" +msgstr "Snižte toto pro zvýšení odporu kapalin vůči pohybu." #: src/settings_translation_file.cpp msgid "Dedicated server step" @@ -2952,9 +2919,8 @@ msgid "Default report format" msgstr "Výchozí formát reportů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Default stack size" -msgstr "Výchozí hra" +msgstr "Výchozí velikost hromádky" #: src/settings_translation_file.cpp msgid "" @@ -2962,6 +2928,9 @@ msgid "" "This simulates the soft shadows effect by applying a PCF or poisson disk\n" "but also uses more resources." msgstr "" +"Určit kvalitu filtrování stínů\n" +"Simuluje efekt měkkých stínů použitím PCF nebo Poissonova disku,\n" +"za využívá většího výkonu." #: src/settings_translation_file.cpp msgid "Defines areas where trees have apples." @@ -2972,14 +2941,12 @@ msgid "Defines areas with sandy beaches." msgstr "Určuje oblasti s písčitými plážemi." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines distribution of higher terrain and steepness of cliffs." -msgstr "Určuje oblasti vyššího terénu (cliff-top) a ovlivňuje strmost útesů." +msgstr "Určuje rozmístění vyššího terénu a strmých útesů." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines distribution of higher terrain." -msgstr "Určuje oblasti spadající pod 'terrain_higher' (cliff-top terén)." +msgstr "Určuje rozmístění vyššího terénu." #: src/settings_translation_file.cpp msgid "Defines full size of caverns, smaller values create larger caverns." @@ -2996,28 +2963,24 @@ msgid "Defines location and terrain of optional hills and lakes." msgstr "Určuje pozici a terén možných hor a jezer." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines the base ground level." -msgstr "Určuje lesní oblasti a hustotu stromového porostu." +msgstr "Určuje základní úroveň povrchu." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines the depth of the river channel." -msgstr "Určuje lesní oblasti a hustotu stromového porostu." +msgstr "Určuje hloubku říčního koryta." #: src/settings_translation_file.cpp msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." msgstr "Určuje maximální posun hráče v blocích (0 = neomezený)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines the width of the river channel." -msgstr "Určuje makroskopickou strukturu koryta řeky." +msgstr "Určuje šířku říčního koryta." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines the width of the river valley." -msgstr "Určuje oblasti, kde stromy nesou plody." +msgstr "Určuje šířku údolí řeky." #: src/settings_translation_file.cpp msgid "Defines tree areas and tree density." @@ -3045,13 +3008,12 @@ msgid "Deprecated Lua API handling" msgstr "Zacházení se zastaralým Lua API" #: src/settings_translation_file.cpp -#, fuzzy msgid "Depth below which you'll find giant caverns." -msgstr "Hloubka pod kterou najdete velké jeskyně." +msgstr "Hloubka, pod kterou se nachází velké jeskynní dutiny." #: src/settings_translation_file.cpp msgid "Depth below which you'll find large caves." -msgstr "Hloubka pod kterou najdete velké jeskyně." +msgstr "Hloubka, pod kterou se nachází velké jeskyně." #: src/settings_translation_file.cpp msgid "" @@ -3066,22 +3028,20 @@ msgid "Desert noise threshold" msgstr "Práh pouštního šumu" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Deserts occur when np_biome exceeds this value.\n" "When the 'snowbiomes' flag is enabled, this is ignored." msgstr "" "Pouště se objeví v místech, kde 'np_biome' přesahuje tuto hodnotu.\n" -"Pokud je zapnutý nový systém biomů, toto nastavení nemá vliv." +"Ignorováno, pokud je zapnuté nastavení \"snowbiomes\"." #: src/settings_translation_file.cpp msgid "Desynchronize block animation" msgstr "Nesynchronizovat animace bloků" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dig key" -msgstr "Klávesa doprava" +msgstr "Klávesa těžení" #: src/settings_translation_file.cpp msgid "Digging particles" @@ -3112,28 +3072,28 @@ msgid "Drop item key" msgstr "Klávesa vyhození předmětu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dump the mapgen debug information." -msgstr "Vypsat ladící informace mapgenu." +msgstr "Vypsat ladící informace z Generátoru mapy." #: src/settings_translation_file.cpp msgid "Dungeon maximum Y" -msgstr "" +msgstr "Horní hranice Y pro žaláře" #: src/settings_translation_file.cpp msgid "Dungeon minimum Y" -msgstr "" +msgstr "Dolní hranice Y pro žaláře" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dungeon noise" -msgstr "Šum hřbetů" +msgstr "Šum žalářů" #: src/settings_translation_file.cpp msgid "" "Enable IPv6 support (for both client and server).\n" "Required for IPv6 connections to work at all." msgstr "" +"Zapnout podporu IPv6 (pro klienta i server).\n" +"Požadováno pro IPv6 připojení." #: src/settings_translation_file.cpp msgid "" @@ -3148,25 +3108,25 @@ msgid "" "Enable colored shadows. \n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" +"Zanout zbarvené stíny.\n" +"Po zapnutí vrhají průhledné předměty zbarvené stíny. Toto má velký vliv na " +"výkon." #: src/settings_translation_file.cpp msgid "Enable console window" msgstr "Povolit konzolové okno" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable creative mode for all players" -msgstr "Zapnout kreativní mód pro nové mapy." +msgstr "Zapnout kreativní mód pro všechny hráče" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable joysticks" msgstr "Zapnout joysticky" #: src/settings_translation_file.cpp -#, fuzzy msgid "Enable mod channels support." -msgstr "Zapnout zabezpečení módů" +msgstr "" #: src/settings_translation_file.cpp msgid "Enable mod security" @@ -3182,6 +3142,9 @@ msgid "" "On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " "filtering." msgstr "" +"Zapnout filtrování Poissoným diskem.\n" +"Pokud je zapnuto, využívá Poissonův disk pro generování \"měkkých stínů\". V " +"opačném případě je využito filtrování PCF." #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." @@ -3189,13 +3152,15 @@ msgstr "Povolit náhodný uživatelský vstup (pouze pro testování)." #: src/settings_translation_file.cpp msgid "Enable register confirmation" -msgstr "" +msgstr "Zapnout potvrzení registrace" #: src/settings_translation_file.cpp msgid "" "Enable register confirmation when connecting to server.\n" "If disabled, new account will be registered automatically." msgstr "" +"Zapnout potvrzení registrace pro připojení na server.\n" +"Pokud je toto vypnuto, je nový účet registrován automaticky." #: src/settings_translation_file.cpp msgid "" @@ -3234,6 +3199,8 @@ msgid "" "Enable vertex buffer objects.\n" "This should greatly improve graphics performance." msgstr "" +"Zapnout objekty vyrovnávací paměti vertexů.\n" +"Toto by mělo výrazně zlepšit grafický výkon." #: src/settings_translation_file.cpp msgid "" @@ -3244,15 +3211,14 @@ msgstr "" "Např.: 0 pro žádné, 1.0 pro normální a 2.0 pro dvojité klepání." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Enable/disable running an IPv6 server.\n" "Ignored if bind_address is set.\n" "Needs enable_ipv6 to be enabled." msgstr "" -"Povolit/zakázat spouštění IPv6 serveru. IPv6 server může podle\n" -"systémového nastevení být omezen pouze na klienty s IPv6.\n" -"Nemá vliv, pokud je 'bind_address' nastaveno." +"Povolit/zakázat spuštění IPv6 serveru.\n" +"Ignorováno, pokud je 'bind_address' nastaveno.\n" +"Je třeba mít povoleno enable_ipv6." #: src/settings_translation_file.cpp msgid "" @@ -3261,6 +3227,10 @@ msgid "" "appearance of high dynamic range images. Mid-range contrast is slightly\n" "enhanced, highlights and shadows are gradually compressed." msgstr "" +"Zapíná Hableho \"Uncharted 2\" filmové mapování odstínů.\n" +"Simuluje křivku odstínu fotografického filmu a tím přibližný vzhled\n" +"obrázků s vysokým dynamickým rozsahem (HDR). Kontrast středních\n" +"hodnot je lehce zvýšený, vysoké a nízké hodnoty jsou postupně komprimovány." #: src/settings_translation_file.cpp msgid "Enables animation of inventory items." @@ -3281,6 +3251,10 @@ msgid "" "sound controls will be non-functional.\n" "Changing this setting requires a restart." msgstr "" +"Zapíná zvukový systém.\n" +"Vypnutí má za náledek úplné ztlumení všech zvuků\n" +"a zvukového ovládání ve hře.\n" +"Změna tohoto nastavení vyžaduje restart." #: src/settings_translation_file.cpp msgid "Engine profiling data print interval" @@ -3299,10 +3273,16 @@ msgid "" "Values < 1.0 (for example 0.25) create a more defined surface level with\n" "flatter lowlands, suitable for a solid floatland layer." msgstr "" +"Exponent pro zužování létajících ostrovů. Mění míru zúžení.\n" +"Hodnota = 1.0 vytvoří rovnoměrné přímé zúžení.\n" +"Hodnoty > 1.0 vytvoří hladké zúžení vhodné pro výchozí oddělené\n" +"létající ostrovy.\n" +"Hodnoty < 1.0 (např. 0.25) vytvoří výraznější úroveň povrchu\n" +"s rovinatějšími nížinami, vhodné pro souvislou vrstvu létajících ostrovů." #: src/settings_translation_file.cpp msgid "FPS when unfocused or paused" -msgstr "" +msgstr "Snímky za sekundu (FPS) při pauze či hře běžící na pozadí" #: src/settings_translation_file.cpp msgid "FSAA" @@ -3317,9 +3297,8 @@ msgid "Fall bobbing factor" msgstr "Součinitel houpání pohledu při pádu" #: src/settings_translation_file.cpp -#, fuzzy msgid "Fallback font path" -msgstr "Záložní písmo" +msgstr "Cesta k záložnímu písmu" #: src/settings_translation_file.cpp msgid "Fast key" @@ -3338,12 +3317,11 @@ msgid "Fast movement" msgstr "Turbo režim pohybu" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Fast movement (via the \"Aux1\" key).\n" "This requires the \"fast\" privilege on the server." msgstr "" -"Turbo režim pohybu (pomocí klávesy použít).\n" +"Turbo režim pohybu (pomocí klávesy \"Aux1\").\n" "Vyžaduje na serveru přidělené právo \"fast\"." #: src/settings_translation_file.cpp @@ -3355,17 +3333,15 @@ msgid "Field of view in degrees." msgstr "Úhel pohledu ve stupních." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "File in client/serverlist/ that contains your favorite servers displayed in " "the\n" "Multiplayer Tab." msgstr "" "Soubor v client/serverlist/, který obsahuje oblíbené servery zobrazené na " -"záložce 'Online hra'." +"záložce 'Multiplayer'." #: src/settings_translation_file.cpp -#, fuzzy msgid "Filler depth" msgstr "Hloubka výplně" @@ -3378,7 +3354,6 @@ msgid "Filmic tone mapping" msgstr "Filmový tone mapping" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Filtered textures can blend RGB values with fully-transparent neighbors,\n" "which PNG optimizers usually discard, often resulting in dark or\n" @@ -3386,20 +3361,19 @@ msgid "" "at texture load time. This is automatically enabled if mipmapping is enabled." msgstr "" "Okraje filtrovaných textur se mohou mísit s průhlednými sousedními pixely,\n" -"které PNG optimizery obvykle zahazují. To může vyústit v tmavý nebo světlý\n" -"lem okolo hran. Zapnutí tohoto filtru problém řeší při načítání textur." +"které PNG optimizery obvykle zahazují. To může vyústit v tmavé nebo světlé\n" +"okraje hran. Zapnutí tohoto filtru problém řeší při načítání textur.\n" +"Toto nastavení je automaticky zapnuto, pokud je povoleno Mip-Mapování." #: src/settings_translation_file.cpp msgid "Filtering" msgstr "Filtrování" #: src/settings_translation_file.cpp -#, fuzzy msgid "First of 4 2D noises that together define hill/mountain range height." -msgstr "První ze dvou 3D šumů, které dohromady definují tunely." +msgstr "První ze 4 2D šumů, které dohromady definují rozsah výšek kopců/hor." #: src/settings_translation_file.cpp -#, fuzzy msgid "First of two 3D noises that together define tunnels." msgstr "První ze dvou 3D šumů, které dohromady definují tunely." @@ -3409,42 +3383,35 @@ msgstr "Fixované seedové čislo" #: src/settings_translation_file.cpp msgid "Fixed virtual joystick" -msgstr "" +msgstr "Nepohyblivý virtuální joystick" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland density" -msgstr "Koncentrace hor na létajících ostrovech" +msgstr "Hustota létajících ostrovů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland maximum Y" -msgstr "Výška hor na létajících ostrovech" +msgstr "Létajících ostrovy: Max. Y" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland minimum Y" -msgstr "Výška hor na létajících ostrovech" +msgstr "Létajících ostrovy: Min. Y" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland noise" -msgstr "Základní šum létajících ostrovů" +msgstr "Šum létajících ostrovů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland taper exponent" -msgstr "Koncentrace hor na létajících ostrovech" +msgstr "Exponent zúžení létajících ostrovů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland tapering distance" -msgstr "Základní šum létajících ostrovů" +msgstr "Vzdálenost zužování létajících ostrovů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland water level" -msgstr "Výška létajících ostrovů" +msgstr "Hladina vody na létajících ostrovech" #: src/settings_translation_file.cpp msgid "Fly key" @@ -3459,7 +3426,6 @@ msgid "Fog" msgstr "Mlha" #: src/settings_translation_file.cpp -#, fuzzy msgid "Fog start" msgstr "Začátek mlhy" @@ -3469,11 +3435,11 @@ msgstr "Klávesa pro přepnutí mlhy" #: src/settings_translation_file.cpp msgid "Font bold by default" -msgstr "" +msgstr "Tučné písmo jako výchozí" #: src/settings_translation_file.cpp msgid "Font italic by default" -msgstr "" +msgstr "Kurzíva jako výchozí" #: src/settings_translation_file.cpp msgid "Font shadow" @@ -3489,17 +3455,19 @@ msgstr "Velikost písma" #: src/settings_translation_file.cpp msgid "Font size of the default font in point (pt)." -msgstr "" +msgstr "Velikost výchozího písma v bodech (pt)." #: src/settings_translation_file.cpp msgid "Font size of the monospace font in point (pt)." -msgstr "" +msgstr "Velikost proporcionálního písma v bodech (pt)." #: src/settings_translation_file.cpp msgid "" "Font size of the recent chat text and chat prompt in point (pt).\n" "Value 0 will use the default font size." msgstr "" +"Velikost písma posledního textu a výzvy v chatu v bodech (pt).\n" +"Výchozí velikost písma se nastaví hodnotou 0." #: src/settings_translation_file.cpp msgid "" @@ -3507,6 +3475,8 @@ msgid "" "placeholders:\n" "@name, @message, @timestamp (optional)" msgstr "" +"Formát hráčovy zprávy v chatu. Řetězec níže obsahuje platné zástupce:\n" +"@name, @message, @timestamp (optional)" #: src/settings_translation_file.cpp msgid "Format of screenshots." @@ -3514,50 +3484,44 @@ msgstr "Formát snímků obrazovky." #: src/settings_translation_file.cpp msgid "Formspec Default Background Color" -msgstr "" +msgstr "Konzole Výchozí barva pozadí" #: src/settings_translation_file.cpp msgid "Formspec Default Background Opacity" -msgstr "" +msgstr "Konzole Výchozí průhlednost pozadí" #: src/settings_translation_file.cpp msgid "Formspec Full-Screen Background Color" -msgstr "" +msgstr "Konzole Barva pozadí při zobrazení na celé obrazovce" #: src/settings_translation_file.cpp msgid "Formspec Full-Screen Background Opacity" -msgstr "" +msgstr "Konzole Průhlednost pozadí při zobrazení na celé obrazovce" #: src/settings_translation_file.cpp -#, fuzzy msgid "Formspec default background color (R,G,B)." -msgstr "Barva (R,G,B) pozadí herní chatovací konzole." +msgstr "Konzole Výchozí barva pozadí (R,G,B)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Formspec default background opacity (between 0 and 255)." -msgstr "" -"Průhlednost pozadí herní chatovací konzole (neprůhlednost, mezi 0 a 255)." +msgstr "Konzole Výchozí průhlednost pozadí (0 až 255)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Formspec full-screen background color (R,G,B)." -msgstr "Barva (R,G,B) pozadí herní chatovací konzole." +msgstr "Konzole Barva pozadí při zobrazení na celou obrazovku (R,G,B)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Formspec full-screen background opacity (between 0 and 255)." -msgstr "" -"Průhlednost pozadí herní chatovací konzole (neprůhlednost, mezi 0 a 255)." +msgstr "Konzole Průhlednost pozadí při zobrazení na celou obrazovku (0 až 255)." #: src/settings_translation_file.cpp msgid "Forward key" msgstr "Vpřed" #: src/settings_translation_file.cpp -#, fuzzy msgid "Fourth of 4 2D noises that together define hill/mountain range height." -msgstr "První ze dvou 3D šumů, které dohromady definují tunely." +msgstr "" +"Čtvrtý ze čtyř 2D šumů, které dohromady definují rozsah výšek kopců/hor." #: src/settings_translation_file.cpp msgid "Fractal type" @@ -3568,7 +3532,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered" msgstr "Podíl viditelné vzdálenosti, na kterém začne být mlha vykreslována" #: src/settings_translation_file.cpp -#, fuzzy msgid "FreeType fonts" msgstr "Písma Freetype" @@ -3577,15 +3540,15 @@ msgid "" "From how far blocks are generated for clients, stated in mapblocks (16 " "nodes)." msgstr "" -"Maximální vzdálenost, ve které jsou klientům generovány bloky, určená\n" -"v mapblocích (16 bloků)." +"Vzdálenost, ve které jsou klientům generovány bloky, určená v mapblocích (16 " +"bloků)." #: src/settings_translation_file.cpp msgid "" "From how far blocks are sent to clients, stated in mapblocks (16 nodes)." msgstr "" -"Maximální vzdálenost, ve které jsou klientům odeslány bloky, určená\n" -"v mapblocích (16 bloků)." +"Vzdálenost, ze které jsou klientům odesílány bloky, určená v mapblocích (16 " +"bloků)." #: src/settings_translation_file.cpp msgid "" @@ -3595,6 +3558,11 @@ msgid "" "to maintain active objects up to this distance in the direction the\n" "player is looking. (This can avoid mobs suddenly disappearing from view)" msgstr "" +"Vzdálenost, na kterou má klient inforamace o objektech,\n" +"určená v mapblocích (16 bloků).\n" +"Nastavení této hodnoty výše než active_block_range umožní serveru\n" +"udržet v paměti aktivní objekty až do této vzdálenosti ve směru hráčova\n" +"pohledu. (Toto může předejít náhlému mizení postav)" #: src/settings_translation_file.cpp msgid "Full screen" @@ -3621,30 +3589,31 @@ msgid "Global callbacks" msgstr "Globální callback funkce" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" "and junglegrass, in all other mapgens this flag controls all decorations." msgstr "" "Globální parametry generování mapy.\n" -"V mapgenu v6 ovládal příznak 'decorations' všechny dekorace kromě\n" -"stromů a tropické trávy. V ostatních mapgenech tento příznak řídí\n" -"všechny dekorace.\n" -"Neuvedené příznaky zůstávají ve výchozím stavu.\n" -"Příznaky začínající na 'no' slouží k zakázání možnosti." +"V Generátoru mapy v6 ovládá nastavení \"decorations\" všechny dekorace\n" +"kromě stromů a tropické trávy, ve všech ostatních verzích Generátoru mapy\n" +"ovládá toto nastavení všechny dekorace." #: src/settings_translation_file.cpp msgid "" "Gradient of light curve at maximum light level.\n" "Controls the contrast of the highest light levels." msgstr "" +"Gradient křivky světla na nejvyšší úrovni světla.\n" +"Určuje kontrast nejvyšších světelných hodnot." #: src/settings_translation_file.cpp msgid "" "Gradient of light curve at minimum light level.\n" "Controls the contrast of the lowest light levels." msgstr "" +"Gradient křivky světla na nejnižší úrovni světla.\n" +"Určuje kontrast nejnižších světelných hodnot." #: src/settings_translation_file.cpp msgid "Graphics" @@ -3659,14 +3628,12 @@ msgid "Ground level" msgstr "Výška povrchu země" #: src/settings_translation_file.cpp -#, fuzzy msgid "Ground noise" -msgstr "Výška povrchu země" +msgstr "Šum povrchu" #: src/settings_translation_file.cpp -#, fuzzy msgid "HTTP mods" -msgstr "HTTP mody" +msgstr "HTTP režimy" #: src/settings_translation_file.cpp msgid "HUD scale factor" @@ -3677,7 +3644,6 @@ msgid "HUD toggle key" msgstr "Klávesa pro přepnutí HUD (Head-Up Display)" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Handling for deprecated Lua API calls:\n" "- none: Do not log deprecated calls\n" @@ -3685,7 +3651,7 @@ msgid "" "- error: abort on usage of deprecated call (suggested for mod developers)." msgstr "" "Zacházení s voláními zastaralého Lua API:\n" -"- legacy: pokusí se napodobit staré chování (výchozí pro release).\n" +"- none: Nezaznamenávat zastaralá volání\n" "- log: pokusí se napodobit staré chování a zaznamená backtrace volání\n" " (výchozí pro debug).\n" "- error: při volání zastaralé funkce skončit (doporučeno vývojářům modů)." @@ -3712,10 +3678,11 @@ msgid "Heat noise" msgstr "Tepelný šum" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Height component of the initial window size. Ignored in fullscreen mode." -msgstr "Výšková část počáteční velikosti okna." +msgstr "" +"Výškový parametr počáteční velikosti okna. Ignorováno v režimu na celé " +"obrazovce." #: src/settings_translation_file.cpp msgid "Height noise" @@ -3734,24 +3701,20 @@ msgid "Hill threshold" msgstr "Práh kopců" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hilliness1 noise" -msgstr "Tepelný šum" +msgstr "Šum kopcovitosti1" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hilliness2 noise" -msgstr "Tepelný šum" +msgstr "Šum kopcovitosti2" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hilliness3 noise" -msgstr "Tepelný šum" +msgstr "Šum kopcovitosti3" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hilliness4 noise" -msgstr "Tepelný šum" +msgstr "Šum kopcovitosti4" #: src/settings_translation_file.cpp msgid "Homepage of server, to be displayed in the serverlist." @@ -3762,18 +3725,24 @@ msgid "" "Horizontal acceleration in air when jumping or falling,\n" "in nodes per second per second." msgstr "" +"Horizontální zrychlení ve vzduchu při skoku nebo pádu,\n" +"určeno v blocích za sekundu za sekundu." #: src/settings_translation_file.cpp msgid "" "Horizontal and vertical acceleration in fast mode,\n" "in nodes per second per second." msgstr "" +"Horizontální a vertikální zrychlení v rychlém režimu,\n" +"určeno v blocích za sekundu za sekundu." #: src/settings_translation_file.cpp msgid "" "Horizontal and vertical acceleration on ground or when climbing,\n" "in nodes per second per second." msgstr "" +"Horizontální a vertikální zrychlení na zemi nebo při lezení,\n" +"určeno v blocích za sekundu za sekundu." #: src/settings_translation_file.cpp msgid "Hotbar next key" @@ -3784,169 +3753,136 @@ msgid "Hotbar previous key" msgstr "Klávesa pro předchozí věc v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 1 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 1 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 10 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 10 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 11 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 11 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 12 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 12 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 13 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 13 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 14 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 14 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 15 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 15 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 16 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 16 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 17 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 17 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 18 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 18 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 19 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 19 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 2 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 2 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 20 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 20 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 21 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 21 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 22 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 22 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 23 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 23 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 24 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 24 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 25 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 25 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 26 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 26 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 27 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 27 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 28 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 28 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 29 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 29 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 3 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 3 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 30 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 30 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 31 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 31 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 32 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 32 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 4 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 4 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 5 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 5 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 6 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 6 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 7 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 7 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 8 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 8 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "Hotbar slot 9 key" -msgstr "Klávesa pro následující věc v liště předmětů" +msgstr "Klávesa pro přihrádku 9 v liště předmětů" #: src/settings_translation_file.cpp -#, fuzzy msgid "How deep to make rivers." -msgstr "Jak hluboké dělat řeky" +msgstr "Jak hluboké dělat řeky." #: src/settings_translation_file.cpp msgid "" @@ -3954,6 +3890,9 @@ msgid "" "If negative, liquid waves will move backwards.\n" "Requires waving liquids to be enabled." msgstr "" +"Rychlost pohybu vln v kapalinách. Vyšší = rychlejší.\n" +"Záporné hodnoty vytvoří vlny jdoucí pozpátku.\n" +"Vyžaduje zapnuté vlnění kapalin." #: src/settings_translation_file.cpp msgid "" @@ -3964,9 +3903,8 @@ msgstr "" "Vyšší hodnota zlepší rychlost programu, ale také způsobí větší spotřebu RAM." #: src/settings_translation_file.cpp -#, fuzzy msgid "How wide to make rivers." -msgstr "Jak široké dělat řeky" +msgstr "Jak široké dělat řeky." #: src/settings_translation_file.cpp msgid "Humidity blend noise" @@ -3997,14 +3935,12 @@ msgstr "" "omezit ji vyčkáváním, aby se zbytečně neplýtvalo výkonem CPU." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n" "enabled." msgstr "" -"V zakázaném stavu způsobí, že klávesa \"použít\" je použita k aktivaci " -"turba\n" -"v režimu létání." +"Pokud je vypnuto, klávesa \"Aux1\" je , při zapnutém létání\n" +"a rychlém režimu, použita k rychlému létání." #: src/settings_translation_file.cpp msgid "" @@ -4030,14 +3966,13 @@ msgstr "" "K tomu je potřeba mít na serveru oprávnění \"noclip\"." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down " "and\n" "descending." msgstr "" -"Když zapnuto, místo klávesy \"plížit se\" se ke slézání a potápění používá " -"klávese \"použít\"." +"Pokud je zapnuto, je klávesa \"Aux1\" využita pro sestup\n" +"namísto klávesy \"Plížení\"." #: src/settings_translation_file.cpp msgid "" @@ -4064,6 +3999,8 @@ msgid "" "If enabled, makes move directions relative to the player's pitch when flying " "or swimming." msgstr "" +"Pokud je zapnuto, je směr pohybu, při létání nebo plavání, závislý na úhlu " +"hráčova pohledu." #: src/settings_translation_file.cpp msgid "If enabled, new players cannot join with an empty password." @@ -4085,12 +4022,16 @@ msgid "" "limited\n" "to this distance from the player to the node." msgstr "" +"Pokud je omezení CSM pro vzdálenost bloků povoleno, jsou volání get_node\n" +"omezena na tuto vzdálenost hráče od bloku." #: src/settings_translation_file.cpp msgid "" "If the execution of a chat command takes longer than this specified time in\n" "seconds, add the time information to the chat command message" msgstr "" +"Pokud je doba výkonu příkazu z chatu delší než zadaný čas v sekundách,\n" +"přidej informaci o čase do příkazu v chatu" #: src/settings_translation_file.cpp msgid "" @@ -4099,6 +4040,11 @@ msgid "" "deleting an older debug.txt.1 if it exists.\n" "debug.txt is only moved if this setting is positive." msgstr "" +"Pokud velikost souboru debug.txt po otevření přesáhne počet megabytů určený\n" +"tímto nastavením, bude soubor přesunut do debug.txt.1 (toto vymaže původní " +"debug.txt.1,\n" +"pokud existuje).\n" +"debug.txt je přesunut pouze pokud je toto nastavení platné." #: src/settings_translation_file.cpp msgid "If this is set, players will always (re)spawn at the given position." @@ -4114,8 +4060,7 @@ msgstr "Ve hře" #: src/settings_translation_file.cpp msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." -msgstr "" -"Průhlednost pozadí herní chatovací konzole (neprůhlednost, mezi 0 a 255)." +msgstr "Průhlednost pozadí herní chatovací konzole (neprůhlednost, 0 až 255)." #: src/settings_translation_file.cpp msgid "In-game chat console background color (R,G,B)." @@ -4133,7 +4078,7 @@ msgstr "Klávesa zvýšení hlasitosti" #: src/settings_translation_file.cpp msgid "Initial vertical speed when jumping, in nodes per second." -msgstr "" +msgstr "Počáteční vertikální rychlost skoku v blocích za sekundu." #: src/settings_translation_file.cpp msgid "" @@ -4198,14 +4143,12 @@ msgid "Invert vertical mouse movement." msgstr "Obrátit svislý pohyb myši." #: src/settings_translation_file.cpp -#, fuzzy msgid "Italic font path" -msgstr "Cesta k neproporcionálnímu písmu" +msgstr "Cesta k písmu s kurzívou" #: src/settings_translation_file.cpp -#, fuzzy msgid "Italic monospace font path" -msgstr "Cesta k neproporcionálnímu písmu" +msgstr "Cesta k proporcionálnímu písmu s kurzívou" #: src/settings_translation_file.cpp msgid "Item entity TTL" @@ -4222,6 +4165,10 @@ msgid "" "increases processing load.\n" "At iterations = 20 this mapgen has a similar load to mapgen V7." msgstr "" +"Opakování rekurzivní funkce.\n" +"Zvýšení hodnoty vede ke zlepšení detailů, ale také zvyšuje nároky na výkon.\n" +"Při opakování = 20 má tento Generátor mapy podobné nároky jako\n" +"Generátor mapy v7." #: src/settings_translation_file.cpp msgid "Joystick ID" @@ -4232,21 +4179,18 @@ msgid "Joystick button repetition interval" msgstr "Interval opakování tlačítek joysticku" #: src/settings_translation_file.cpp -#, fuzzy msgid "Joystick deadzone" -msgstr "Typ joysticku" +msgstr "Mrtvá zóna joysticku" #: src/settings_translation_file.cpp msgid "Joystick frustum sensitivity" msgstr "Citlivost otáčení pohledu joystickem" #: src/settings_translation_file.cpp -#, fuzzy msgid "Joystick type" msgstr "Typ joysticku" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Julia set only.\n" "W component of hypercomplex constant.\n" @@ -4254,44 +4198,47 @@ msgid "" "Has no effect on 3D fractals.\n" "Range roughly -2 to 2." msgstr "" -"Julia udává jen: W komponet hyperkomplexu konstantní určení tvaru Julie.\n" -"Nemá efekt na 3D fraktálech.\n" -"Rozsah zhruba -2 až 2." +"Pouze pro set Julia.\n" +"Komponenta W hyperkomplexní konstanty.\n" +"Mění tvar fraktálu.\n" +"Nemá žádný vliv na 3D fraktály.\n" +"Rozmezí přibližně -2 až 2." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Julia set only.\n" "X component of hypercomplex constant.\n" "Alters the shape of the fractal.\n" "Range roughly -2 to 2." msgstr "" -"Julia udává jen: komponet X hyperkomplexu konstantího udávání tvaru julie.\n" -"Rozsah zhruba -2 až 2." +"Pouze pro set Julia.\n" +"Komponenta X hyperkomplexní konstanty.\n" +"Mění tvar fraktálu.\n" +"Rozmezí přibližně -2 až 2." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Julia set only.\n" "Y component of hypercomplex constant.\n" "Alters the shape of the fractal.\n" "Range roughly -2 to 2." msgstr "" -"Julia udává jen: W komponet hyperkomplexu konstantní určení tvaru Julie.\n" -"Nemá efekt na 3D fraktálech.\n" -"Rozsah zhruba -2 až 2." +"Pouze pro set Julia.\n" +"Komponenta Y hyperkomplexní konstanty.\n" +"Mění tvar fraktálu.\n" +"Rozmezí přibližně -2 až 2." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Julia set only.\n" "Z component of hypercomplex constant.\n" "Alters the shape of the fractal.\n" "Range roughly -2 to 2." msgstr "" -"Julia udává jen: W komponet hyperkomplexu konstantní určení tvaru Julie.\n" -"Nemá efekt na 3D fraktálech.\n" -"Rozsah zhruba -2 až 2." +"Pouze pro set Julia.\n" +"Komponenta Z hyperkomplexní konstanty.\n" +"Mění tvar fraktálu.\n" +"Rozmezí přibližně -2 až 2." #: src/settings_translation_file.cpp msgid "Julia w" @@ -4338,13 +4285,12 @@ msgstr "" "html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for digging.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"klávesy pro snížení hlasitosti.\n" +"Klávesa pro těžení\n" "viz. http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4374,6 +4320,9 @@ msgid "" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" +"Klávesa pro zvýšení hlasitosti\n" +"viz. http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp msgid "" @@ -4381,6 +4330,9 @@ msgid "" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" +"Klávesa pro skok.\n" +"viz. See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp msgid "" @@ -4388,16 +4340,19 @@ msgid "" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" +"Klávesa pro rychlý pohyb v rychlém režimu.\n" +"viz. http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Key for moving the player backward.\n" "Will also disable autoforward, when active.\n" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" -"Klávesa pro odhození právě drženého předmětu.\n" +"Klávesa pro pohyb hráče zpět.\n" +"Také vypne automatický pohyb vpřed, pokud je zapnutý.\n" "viz. http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" @@ -4407,6 +4362,9 @@ msgid "" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" +"Klávesa pro pohyb hráče vpřed.\n" +"viz. http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp msgid "" @@ -4414,6 +4372,9 @@ msgid "" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" +"Klávesa pro pohyb hráče doleva.\n" +"viz. http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp msgid "" @@ -4421,6 +4382,9 @@ msgid "" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" +"Klávesa pro pohyb hráče doprava.\n" +"viz. http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp msgid "" @@ -4428,6 +4392,9 @@ msgid "" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" +"Klávesa pro ztlumení hry.\n" +"viz. http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp msgid "" @@ -4435,6 +4402,9 @@ msgid "" "See http://irrlicht.sourceforge.net/docu/namespaceirr." "html#a54da2a0e231901735e3da1b0edf72eb3" msgstr "" +"Klávesa pro otevření okna chatu za účelem zadání příkazů.\n" +"viz. http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" #: src/settings_translation_file.cpp msgid "" @@ -4987,15 +4957,15 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Kick players who sent more than X messages per 10 seconds." -msgstr "" +msgstr "Vyhodit hráče, který poslal více jak X zpráv během 10 sekund." #: src/settings_translation_file.cpp msgid "Lake steepness" -msgstr "" +msgstr "Strmost jezer" #: src/settings_translation_file.cpp msgid "Lake threshold" -msgstr "" +msgstr "Strmost jezer" #: src/settings_translation_file.cpp msgid "Language" @@ -5003,19 +4973,19 @@ msgstr "Jazyk" #: src/settings_translation_file.cpp msgid "Large cave depth" -msgstr "Hloubka velké jeskyně" +msgstr "Hloubka velkých jeskyní" #: src/settings_translation_file.cpp msgid "Large cave maximum number" -msgstr "" +msgstr "Horní hranice velkých jeskyní" #: src/settings_translation_file.cpp msgid "Large cave minimum number" -msgstr "" +msgstr "Spodní hranice velkých jeskyní" #: src/settings_translation_file.cpp msgid "Large cave proportion flooded" -msgstr "" +msgstr "Poměr zatopení velkých jeskyní" #: src/settings_translation_file.cpp msgid "Large chat console key" @@ -5032,6 +5002,11 @@ msgid "" "- Simple: only outer faces, if defined special_tiles are used\n" "- Opaque: disable transparency" msgstr "" +"Styl listí:\n" +"- Vícevrstevné: všechny plochy jsou viditelné\n" +"- Jednoduché: pouze vnější plochy, pokud je definováno special_tiles, jsou " +"použity\n" +"- Neprůhledné: vypne průhlednost" #: src/settings_translation_file.cpp msgid "Left key" @@ -5043,24 +5018,28 @@ msgid "" "updated over\n" "network." msgstr "" +"Frekvence aktualizece objektů na serveru.\n" +"Určeno v délce jedné periody." #: src/settings_translation_file.cpp msgid "" "Length of liquid waves.\n" "Requires waving liquids to be enabled." msgstr "" +"Délka vln v kapalinách.\n" +"Vyžaduje zapnuté vlnění kapalin." #: src/settings_translation_file.cpp msgid "Length of time between Active Block Modifier (ABM) execution cycles" -msgstr "" +msgstr "Frekvence vykonání cyklů Active Block Modifieru (ABM)" #: src/settings_translation_file.cpp msgid "Length of time between NodeTimer execution cycles" -msgstr "" +msgstr "Frekvence vykonání cyklů ČasovačeBloku" #: src/settings_translation_file.cpp msgid "Length of time between active block management cycles" -msgstr "" +msgstr "Frekvence vykonání cyklů aktivní správy bloků" #: src/settings_translation_file.cpp msgid "" @@ -5073,30 +5052,38 @@ msgid "" "- info\n" "- verbose" msgstr "" +"Úroveň ladících informací zapsaných do debug.txt:\n" +"- (žádné ladící informace)\n" +"- none (zprávy budou vypsány bez patřičné úrovně)\n" +"- error (chyba)\n" +"- warning (varování)\n" +"- action (akce)\n" +"- info (informace)\n" +"- verbose (slovně)" #: src/settings_translation_file.cpp msgid "Light curve boost" -msgstr "" +msgstr "Posílení křivky světla" #: src/settings_translation_file.cpp msgid "Light curve boost center" -msgstr "" +msgstr "Posílení křivky světla Středy" #: src/settings_translation_file.cpp msgid "Light curve boost spread" -msgstr "" +msgstr "Posílení křivky světla Šíření" #: src/settings_translation_file.cpp msgid "Light curve gamma" -msgstr "" +msgstr "Křivka světla Gamma" #: src/settings_translation_file.cpp msgid "Light curve high gradient" -msgstr "" +msgstr "Křivka světla Vysoký gradient" #: src/settings_translation_file.cpp msgid "Light curve low gradient" -msgstr "" +msgstr "Křivka světla Nízký gradient" #: src/settings_translation_file.cpp msgid "" @@ -5104,6 +5091,9 @@ msgid "" "Only mapchunks completely within the mapgen limit are generated.\n" "Value is stored per-world." msgstr "" +"Limit generování mapy v blocích, ve všech 6 směrech od (0,0,0).\n" +"Generují se pouze kusy nacházející se kompletně v zadaném limitu.\n" +"Tato hodnota je unikátní pro každý svět." #: src/settings_translation_file.cpp msgid "" @@ -5113,39 +5103,43 @@ msgid "" "- Downloads performed by main menu (e.g. mod manager).\n" "Only has an effect if compiled with cURL." msgstr "" +"Omezuje počet paralelních HTTP požadavků. Má vliv na:\n" +"- Načítání multimédií, pokud server používá nastavení remote_media.\n" +"- Stahování seznamu serverů a oznámení na serveru.\n" +"- Stahování prováděná přes hlavní nabídku (např. Správce modů).\n" +"Má vliv pouze v případě kompilace přes cURL." #: src/settings_translation_file.cpp msgid "Liquid fluidity" -msgstr "" +msgstr "Tekutost kapalin" #: src/settings_translation_file.cpp msgid "Liquid fluidity smoothing" -msgstr "" +msgstr "Vyhlazení tekutosti kapalin" #: src/settings_translation_file.cpp msgid "Liquid loop max" -msgstr "" +msgstr "Horní hranice kapalinového cyklu" #: src/settings_translation_file.cpp msgid "Liquid queue purge time" -msgstr "" +msgstr "Doba vymazání fronty kapalin" #: src/settings_translation_file.cpp -#, fuzzy msgid "Liquid sinking" -msgstr "Rychlost sestupu" +msgstr "Rychlost stékání kapalin" #: src/settings_translation_file.cpp msgid "Liquid update interval in seconds." -msgstr "" +msgstr "Frekvence aktualizace kapalin v sekundách." #: src/settings_translation_file.cpp msgid "Liquid update tick" -msgstr "" +msgstr "Jeden cyklus aktualizace kapalin" #: src/settings_translation_file.cpp msgid "Load the game profiler" -msgstr "" +msgstr "Načíst profilování hry" #: src/settings_translation_file.cpp msgid "" @@ -5153,19 +5147,21 @@ msgid "" "Provides a /profiler command to access the compiled profile.\n" "Useful for mod developers and server operators." msgstr "" +"Načíst profilování hry pro sběr profilovacích dat.\n" +"Umožňuje použít příkaz /profiler pro přístup ke zkopilovanému profilu.\n" +"Užitečné pro vývojáře modů a provozovatele serverů." #: src/settings_translation_file.cpp msgid "Loading Block Modifiers" -msgstr "" +msgstr "Loading Block Modifiery" #: src/settings_translation_file.cpp msgid "Lower Y limit of dungeons." -msgstr "" +msgstr "Spodní hranice Y pro žaláře." #: src/settings_translation_file.cpp -#, fuzzy msgid "Lower Y limit of floatlands." -msgstr "Maximální počet emerge front" +msgstr "Spodní hranice Y pro létající ostrovy." #: src/settings_translation_file.cpp msgid "Main menu script" @@ -5175,53 +5171,46 @@ msgstr "Skript hlavní nabídky" msgid "" "Make fog and sky colors depend on daytime (dawn/sunset) and view direction." msgstr "" +"Barva mlhy a oblohy záleží na denní době (svítání/soumrak) a na směru " +"pohledu." #: src/settings_translation_file.cpp msgid "Makes all liquids opaque" -msgstr "" +msgstr "Udělá všechny kapaliny neprůhledné" #: src/settings_translation_file.cpp msgid "Map Compression Level for Disk Storage" -msgstr "" +msgstr "Úroveň komprese mapy pro pevné úložiště" #: src/settings_translation_file.cpp msgid "Map Compression Level for Network Transfer" -msgstr "" +msgstr "Úroveň komprese mapy pro přenost internetem" #: src/settings_translation_file.cpp msgid "Map directory" -msgstr "" +msgstr "Směr mapy" #: src/settings_translation_file.cpp msgid "Map generation attributes specific to Mapgen Carpathian." -msgstr "" +msgstr "Parametry generování mapy pro Generátor mapy - Carpathian." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen Flat.\n" "Occasional lakes and hills can be added to the flat world." msgstr "" -"Globální parametry generování mapy.\n" -"V mapgenu v6 ovládal příznak 'decorations' všechny dekorace kromě\n" -"stromů a tropické trávy. V ostatních mapgenech tento příznak řídí\n" -"všechny dekorace.\n" -"Neuvedené příznaky zůstávají ve výchozím stavu.\n" -"Příznaky začínající na 'no' slouží k zakázání možnosti." +"Parametry generování mapy pro Generátor mapy - Plocha.\n" +"Do plochého světa je možné přidat občasná jezera a kopce." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen Fractal.\n" "'terrain' enables the generation of non-fractal terrain:\n" "ocean, islands and underground." msgstr "" -"Globální parametry generování mapy.\n" -"V mapgenu v6 ovládal příznak 'decorations' všechny dekorace kromě\n" -"stromů a tropické trávy. V ostatních mapgenech tento příznak řídí\n" -"všechny dekorace.\n" -"Neuvedené příznaky zůstávají ve výchozím stavu.\n" -"Příznaky začínající na 'no' slouží k zakázání možnosti." +"Parametry generování mapy pro Generátor mapy - Fraktál.\n" +"\"terén\" umožňuje generování \"nefraktálového\" terénu:\n" +"oceány, ostrovy a podzemí." #: src/settings_translation_file.cpp msgid "" @@ -5232,44 +5221,44 @@ msgid "" "to become shallower and occasionally dry.\n" "'altitude_dry': Reduces humidity with altitude." msgstr "" +"Parametry generování mapy pro Generátor mapy - Údolí.\n" +"„altitude_chill“: Snižuje teplotu s nadmořskou výškou.\n" +"„humid_rivers“: Zvyšuje vlhkost podél řek.\n" +"„vary_river_depth“: Pokud zapnuto, nízká vlhkost a vysoká teplota\n" +"budou mít za následek mělčí nebo místy úplně vyschlé řeky.\n" +"„altitude_dry“: Snižuje vlhkost s nadmořskou výškou." #: src/settings_translation_file.cpp msgid "Map generation attributes specific to Mapgen v5." -msgstr "" +msgstr "Parametry generování mapy pro Generátor mapy v5." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen v6.\n" "The 'snowbiomes' flag enables the new 5 biome system.\n" "When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" "the 'jungles' flag is ignored." msgstr "" -"Globální parametry generování mapy.\n" -"V mapgenu v6 ovládal příznak 'decorations' všechny dekorace kromě\n" -"stromů a tropické trávy. V ostatních mapgenech tento příznak řídí\n" -"všechny dekorace.\n" -"Neuvedené příznaky zůstávají ve výchozím stavu.\n" -"Příznaky začínající na 'no' slouží k zakázání možnosti." +"Parametry generování mapy pro Generátor mapy v6.\n" +"Nastavení \"snowbiomes\" umožňuje systém 5 biomů.\n" +"Pokud je nastavení \"snowbiomes\" zapnuto, džungle jsou automaticky\n" +"zapnuty a nastavení \"jungles\" je ignorováno." #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Map generation attributes specific to Mapgen v7.\n" "'ridges': Rivers.\n" "'floatlands': Floating land masses in the atmosphere.\n" "'caverns': Giant caves deep underground." msgstr "" -"Globální parametry generování mapy.\n" -"V mapgenu v6 ovládal příznak 'decorations' všechny dekorace kromě\n" -"stromů a tropické trávy. V ostatních mapgenech tento příznak řídí\n" -"všechny dekorace.\n" -"Neuvedené příznaky zůstávají ve výchozím stavu.\n" -"Příznaky začínající na 'no' slouží k zakázání možnosti." +"Parametry generování mapy v Generátoru mapy v7.\n" +"'hřebeny': Rivers.\n" +"'létající ostrovy': Ostrovy vznášející se v prostoru.\n" +"'jeskynní dutiny': Obrovské jeskyně hluboko v podzemí." #: src/settings_translation_file.cpp msgid "Map generation limit" -msgstr "" +msgstr "Limit generování mapy" #: src/settings_translation_file.cpp msgid "Map save interval" @@ -5277,107 +5266,99 @@ msgstr "Interval ukládání mapy" #: src/settings_translation_file.cpp msgid "Map update time" -msgstr "" +msgstr "Doba aktualizace mapy" #: src/settings_translation_file.cpp msgid "Mapblock limit" -msgstr "" +msgstr "Limit mapbloků" #: src/settings_translation_file.cpp msgid "Mapblock mesh generation delay" -msgstr "" +msgstr "Prodleva generování sítě mapbloků" #: src/settings_translation_file.cpp msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" +msgstr "Velikost cache paměti v MB Generátoru mapy pro Mapbloky" #: src/settings_translation_file.cpp msgid "Mapblock unload timeout" -msgstr "" +msgstr "Časový limit pro vymazání Mapbloku z paměti" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Carpathian" -msgstr "Mapgen plochy" +msgstr "Generátor mapy - Carpathian" #: src/settings_translation_file.cpp msgid "Mapgen Carpathian specific flags" -msgstr "" +msgstr "Nastavení pro Generátor mapy - Carpathian" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Flat" -msgstr "Mapgen plochy" +msgstr "Generátor mapy - Plocha" #: src/settings_translation_file.cpp msgid "Mapgen Flat specific flags" -msgstr "" +msgstr "Nastavení Generátory mapy - Plocha" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Fractal" -msgstr "Mapgen plochy" +msgstr "Generátor mapy - Fraktál" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Fractal specific flags" -msgstr "Mapgen údolí" +msgstr "Nastavení pro Generátor mapy - Fraktál" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V5" -msgstr "Mapgen v5" +msgstr "Generátor mapy V5" #: src/settings_translation_file.cpp msgid "Mapgen V5 specific flags" -msgstr "" +msgstr "Nastavení pro Generátor mapy v5" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V6" -msgstr "Mapgen v6" +msgstr "Generátor mapy v6" #: src/settings_translation_file.cpp msgid "Mapgen V6 specific flags" -msgstr "" +msgstr "Nastavení pro Generátor mapy v6" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen V7" -msgstr "Mapgen v7" +msgstr "Generátor mapy v7" #: src/settings_translation_file.cpp msgid "Mapgen V7 specific flags" -msgstr "" +msgstr "Nastavení pro Generátor mapy v7" #: src/settings_translation_file.cpp msgid "Mapgen Valleys" msgstr "Mapgen údolí" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Valleys specific flags" -msgstr "Mapgen údolí" +msgstr "Nastavení pro Generátor mapy - Údolí" #: src/settings_translation_file.cpp msgid "Mapgen debug" -msgstr "Ladění generátoru mapy" +msgstr "Ladění Generátoru mapy" #: src/settings_translation_file.cpp msgid "Mapgen name" -msgstr "Jméno generátoru mapy" +msgstr "Jméno Generátoru mapy" #: src/settings_translation_file.cpp msgid "Max block generate distance" -msgstr "" +msgstr "Horní hranice vzdálenosti pro generování bloků" #: src/settings_translation_file.cpp msgid "Max block send distance" -msgstr "" +msgstr "Horní hranice vzdálenosti pro posílání bloků" #: src/settings_translation_file.cpp msgid "Max liquids processed per step." -msgstr "" +msgstr "Horní hranice počtu kapalin zpracovaných za jeden krok." #: src/settings_translation_file.cpp msgid "Max. clearobjects extra blocks" @@ -5409,11 +5390,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Maximum limit of random number of large caves per mapchunk." -msgstr "" +msgstr "Horní hranice pro náhodný počet velkých jeskyní na kus mapy." #: src/settings_translation_file.cpp msgid "Maximum limit of random number of small caves per mapchunk." -msgstr "" +msgstr "Horní hranice pro náhodný počet malých jeskyní na kus mapy." #: src/settings_translation_file.cpp msgid "" @@ -5558,11 +5539,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Minimum limit of random number of large caves per mapchunk." -msgstr "" +msgstr "Spodní hranice pro náhodný počet velkých jeskyní na kus mapy." #: src/settings_translation_file.cpp msgid "Minimum limit of random number of small caves per mapchunk." -msgstr "" +msgstr "Spodní hranice pro náhodný počet malých jeskyní na kus mapy." #: src/settings_translation_file.cpp #, fuzzy @@ -5886,7 +5867,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Proportion of large caves that contain liquid." -msgstr "" +msgstr "Poměr velkých jeskyní s kapalinami." #: src/settings_translation_file.cpp msgid "" @@ -6347,6 +6328,12 @@ msgid "" "Altering this value is for special usage, leaving it unchanged is\n" "recommended." msgstr "" +"Velikost kusů mapy vytovřených Generátorem mapy v mapblocích (16 bloků).\n" +"VAROVÁNÍ!: Hodnota vyšší než 5 nepřináší žádné zlepšení\n" +"a zvyšuje riziko problémů.\n" +"Snížení hodnoty zvýší husotou jeskyní a žalářů.\n" +"Změna hodnoty je pro zvláštní případy, jinak je doporučeno\n" +"nechat ji na výchozí hodnotě." #: src/settings_translation_file.cpp msgid "" @@ -6369,11 +6356,11 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Small cave maximum number" -msgstr "" +msgstr "Horní hranice počtu malých jeskyní" #: src/settings_translation_file.cpp msgid "Small cave minimum number" -msgstr "" +msgstr "Spodní hranice počtu malých jeskyní" #: src/settings_translation_file.cpp msgid "Small-scale humidity variation for blending biomes on borders." @@ -6859,7 +6846,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Variation of number of caves." -msgstr "" +msgstr "Variace počtu jeskyní." #: src/settings_translation_file.cpp msgid "" @@ -7124,13 +7111,12 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Y of upper limit of large caves." -msgstr "Maximální počet emerge front" +msgstr "Hodnota Y pro horní hranici velkých jeskyní." #: src/settings_translation_file.cpp msgid "Y-distance over which caverns expand to full size." -msgstr "" +msgstr "Vzdálenost Y, přes kterou se jeskynní dutiny rozšíří do plné velikosti." #: src/settings_translation_file.cpp msgid "" @@ -7146,7 +7132,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Y-level of cavern upper limit." -msgstr "" +msgstr "Úroveň Y horní hranice jeskynních dutin." #: src/settings_translation_file.cpp msgid "Y-level of higher terrain that creates cliffs." From 3ac102c93b9b4f7651ab3233658af4f3e32dd251 Mon Sep 17 00:00:00 2001 From: ROllerozxa Date: Sat, 27 Nov 2021 11:38:45 +0000 Subject: [PATCH 113/412] Translated using Weblate (Swedish) Currently translated at 46.0% (643 of 1396 strings) --- po/sv/minetest.po | 725 +++++++++++++++++++--------------------------- 1 file changed, 304 insertions(+), 421 deletions(-) diff --git a/po/sv/minetest.po b/po/sv/minetest.po index 6806efea1..02c14cf08 100644 --- a/po/sv/minetest.po +++ b/po/sv/minetest.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: Swedish (Minetest)\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-06-16 18:27+0200\n" -"PO-Revision-Date: 2020-03-31 10:14+0000\n" -"Last-Translator: sfan5 \n" +"PO-Revision-Date: 2021-11-27 18:30+0000\n" +"Last-Translator: ROllerozxa \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -12,48 +12,43 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.0-dev\n" +"X-Generator: Weblate 4.10-dev\n" #: builtin/client/chatcommands.lua msgid "Clear the out chat queue" -msgstr "" +msgstr "Rensa chattkön" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Empty command." -msgstr "Chattkommandon" +msgstr "Tomt kommando." #: builtin/client/chatcommands.lua -#, fuzzy msgid "Exit to main menu" -msgstr "Avsluta till Meny" +msgstr "Avsluta till huvudmeny" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Invalid command: " -msgstr "Lokalt kommando" +msgstr "Ogiltigt kommando: " #: builtin/client/chatcommands.lua msgid "Issued command: " -msgstr "" +msgstr "Utfärdat kommando: " #: builtin/client/chatcommands.lua -#, fuzzy msgid "List online players" -msgstr "Enspelarläge" +msgstr "Lista över spelare online" #: builtin/client/chatcommands.lua -#, fuzzy msgid "Online players: " -msgstr "Enspelarläge" +msgstr "Spelare online: " #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." -msgstr "" +msgstr "Den utgående chattkön är nu tom." #: builtin/client/chatcommands.lua msgid "This command is disabled by server." -msgstr "" +msgstr "Detta kommando är inaktiverat av servern." #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" @@ -64,45 +59,43 @@ msgid "You died" msgstr "Du dog" #: builtin/client/death_formspec.lua -#, fuzzy msgid "You died." -msgstr "Du dog" +msgstr "Du dog." #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands:" -msgstr "Lokalt kommando" +msgstr "Tillgängliga kommandon:" #: builtin/common/chatcommands.lua -#, fuzzy msgid "Available commands: " -msgstr "Lokalt kommando" +msgstr "Tillgängliga kommandon: " #: builtin/common/chatcommands.lua msgid "Command not available: " -msgstr "" +msgstr "Kommando inte tillgängligt: " #: builtin/common/chatcommands.lua msgid "Get help for commands" -msgstr "" +msgstr "Få hjälp med kommandon" #: builtin/common/chatcommands.lua msgid "" "Use '.help ' to get more information, or '.help all' to list everything." msgstr "" +"Använd '.help ' för att få mer information, eller '.help all' för att " +"visa allt." #: builtin/common/chatcommands.lua msgid "[all | ]" -msgstr "" +msgstr "[all | ]" #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" -msgstr "" +msgstr "OK" #: builtin/fstk/ui.lua -#, fuzzy msgid "An error occurred in a Lua script:" -msgstr "Ett fel uppstod i ett Lua-skript, såsom en mod:" +msgstr "Ett fel uppstod i ett Lua-skript:" #: builtin/fstk/ui.lua msgid "An error occurred:" @@ -122,7 +115,7 @@ msgstr "Servern har begärt en återanslutning:" #: builtin/mainmenu/common.lua msgid "Protocol version mismatch. " -msgstr "Protokollversionen matchar ej. " +msgstr "Protokollversionen matchar inte. " #: builtin/mainmenu/common.lua msgid "Server enforces protocol version $1. " @@ -182,34 +175,31 @@ msgstr "" #: builtin/mainmenu/dlg_config_world.lua msgid "Find More Mods" -msgstr "" +msgstr "Hitta Fler Moddar" #: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Mod:" #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No (optional) dependencies" -msgstr "Valfria beroenden:" +msgstr "Inga (valfria) beroenden" #: builtin/mainmenu/dlg_config_world.lua msgid "No game description provided." msgstr "Ingen spelbeskrivning tillgänglig." #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No hard dependencies" -msgstr "Inga beroenden." +msgstr "Inga hårda beroenden" #: builtin/mainmenu/dlg_config_world.lua msgid "No modpack description provided." msgstr "Ingen modpaketsbeskrivning tillgänglig." #: builtin/mainmenu/dlg_config_world.lua -#, fuzzy msgid "No optional dependencies" -msgstr "Valfria beroenden:" +msgstr "Inga valfria beroenden" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua msgid "Optional dependencies:" @@ -230,30 +220,31 @@ msgstr "aktiverad" #: builtin/mainmenu/dlg_contentstore.lua msgid "\"$1\" already exists. Would you like to overwrite it?" -msgstr "" +msgstr "\"$1\" finns redan. Vill du skriva över den?" #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 and $2 dependencies will be installed." -msgstr "" +msgstr "$1 och $2 beroende paket kommer installeras." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 by $2" -msgstr "" +msgstr "$1 till $2" #: builtin/mainmenu/dlg_contentstore.lua msgid "" "$1 downloading,\n" "$2 queued" msgstr "" +"$1 laddas ner,\n" +"$2 köad" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "$1 downloading..." -msgstr "Laddar..." +msgstr "$1 laddas ner..." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 required dependencies could not be found." -msgstr "" +msgstr "$1 nödvändiga beroenden kunde inte hittas." #: builtin/mainmenu/dlg_contentstore.lua msgid "$1 will be installed, and $2 dependencies will be skipped." @@ -264,27 +255,24 @@ msgid "All packages" msgstr "Alla paket" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Already installed" -msgstr "Tangent används redan" +msgstr "Redan installerad" #: builtin/mainmenu/dlg_contentstore.lua msgid "Back to Main Menu" msgstr "Tillbaka till huvudmeny" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Base Game:" -msgstr "Bilda Spel" +msgstr "Basspel:" #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "" +msgstr "ContentDB är inte tillgänglig när Minetest är kompilerad utan cURL" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Downloading..." -msgstr "Laddar..." +msgstr "Laddar ner..." #: builtin/mainmenu/dlg_contentstore.lua msgid "Failed to download $1" @@ -300,14 +288,12 @@ msgid "Install" msgstr "Installera" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install $1" -msgstr "Installera" +msgstr "Installera $1" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "Install missing dependencies" -msgstr "Valfria beroenden:" +msgstr "Installera saknade beroenden" #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -323,25 +309,24 @@ msgid "No results" msgstr "Inga resultat" #: builtin/mainmenu/dlg_contentstore.lua -#, fuzzy msgid "No updates" -msgstr "Uppdatera" +msgstr "Inga uppdateringar" #: builtin/mainmenu/dlg_contentstore.lua msgid "Not found" -msgstr "" +msgstr "Hittades inte" #: builtin/mainmenu/dlg_contentstore.lua msgid "Overwrite" -msgstr "" +msgstr "Skriv över" #: builtin/mainmenu/dlg_contentstore.lua msgid "Please check that the base game is correct." -msgstr "" +msgstr "Var snäll se att basspelet är korrekt." #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" -msgstr "" +msgstr "Köad" #: builtin/mainmenu/dlg_contentstore.lua msgid "Texture packs" @@ -357,11 +342,11 @@ msgstr "Uppdatera" #: builtin/mainmenu/dlg_contentstore.lua msgid "Update All [$1]" -msgstr "" +msgstr "Uppdatera Alla [$1]" #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" -msgstr "" +msgstr "Visa mer information i en webbläsare" #: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" @@ -369,46 +354,39 @@ msgstr "En värld med namnet \"$1\" finns redan" #: builtin/mainmenu/dlg_create_world.lua msgid "Additional terrain" -msgstr "" +msgstr "Ytterligare terräng" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp -#, fuzzy msgid "Altitude chill" msgstr "Altitudkyla" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Altitude dry" -msgstr "Altitudkyla" +msgstr "Altitudtorka" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Biome blending" -msgstr "Biotopoljud" +msgstr "Biotopblandning" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Biomes" -msgstr "Biotopoljud" +msgstr "Biotoper" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Caverns" -msgstr "Grottoljud" +msgstr "Grottor" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Caves" -msgstr "Oktaver" +msgstr "Grottor" #: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Skapa" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Decorations" -msgstr "Modinformation:" +msgstr "Dekorationer" #: builtin/mainmenu/dlg_create_world.lua msgid "Download a game, such as Minetest Game, from minetest.net" @@ -419,21 +397,20 @@ msgid "Download one from minetest.net" msgstr "Ladda ner ett från minetest.net" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Dungeons" -msgstr "Grottoljud" +msgstr "Fängelsehålor" #: builtin/mainmenu/dlg_create_world.lua msgid "Flat terrain" -msgstr "" +msgstr "Platt terräng" #: builtin/mainmenu/dlg_create_world.lua msgid "Floating landmasses in the sky" -msgstr "" +msgstr "Svävande landmassor i himlen" #: builtin/mainmenu/dlg_create_world.lua msgid "Floatlands (experimental)" -msgstr "" +msgstr "Floatlands (experimentellt)" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" @@ -441,27 +418,27 @@ msgstr "Spel" #: builtin/mainmenu/dlg_create_world.lua msgid "Generate non-fractal terrain: Oceans and underground" -msgstr "" +msgstr "Generera icke-fraktal terräng: Oceaner och underjord" #: builtin/mainmenu/dlg_create_world.lua msgid "Hills" -msgstr "" +msgstr "Kullar" #: builtin/mainmenu/dlg_create_world.lua msgid "Humid rivers" -msgstr "" +msgstr "Fuktiga floder" #: builtin/mainmenu/dlg_create_world.lua msgid "Increases humidity around rivers" -msgstr "" +msgstr "Ökar luftfuktigheten runt floderna" #: builtin/mainmenu/dlg_create_world.lua msgid "Lakes" -msgstr "" +msgstr "Sjöar" #: builtin/mainmenu/dlg_create_world.lua msgid "Low humidity and high heat causes shallow or dry rivers" -msgstr "" +msgstr "Låg luftfuktighet och hög värme orsakar grunda eller torra floder" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen" @@ -469,24 +446,23 @@ msgstr "Kartgenerator" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen flags" -msgstr "" +msgstr "Mapgen-flaggor" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Mapgen-specific flags" -msgstr "Kartgenerator" +msgstr "Mapgen-specifika flaggor" #: builtin/mainmenu/dlg_create_world.lua msgid "Mountains" -msgstr "" +msgstr "Berg" #: builtin/mainmenu/dlg_create_world.lua msgid "Mud flow" -msgstr "" +msgstr "Lerflöde" #: builtin/mainmenu/dlg_create_world.lua msgid "Network of tunnels and caves" -msgstr "" +msgstr "Nätverk med tunnlar och grottor" #: builtin/mainmenu/dlg_create_world.lua msgid "No game selected" @@ -494,20 +470,19 @@ msgstr "Inget spel valt" #: builtin/mainmenu/dlg_create_world.lua msgid "Reduces heat with altitude" -msgstr "" +msgstr "Minskar värmen efter höjd" #: builtin/mainmenu/dlg_create_world.lua msgid "Reduces humidity with altitude" -msgstr "" +msgstr "Minskar luftfuktigheten efter höjd" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Rivers" -msgstr "Grottoljud" +msgstr "Floder" #: builtin/mainmenu/dlg_create_world.lua msgid "Sea level rivers" -msgstr "" +msgstr "Havsnivåfloder" #: builtin/mainmenu/dlg_create_world.lua #: builtin/mainmenu/dlg_settings_advanced.lua @@ -516,50 +491,51 @@ msgstr "Frö" #: builtin/mainmenu/dlg_create_world.lua msgid "Smooth transition between biomes" -msgstr "" +msgstr "Smidig övergång mellan biotoper" #: builtin/mainmenu/dlg_create_world.lua msgid "" "Structures appearing on the terrain (no effect on trees and jungle grass " "created by v6)" msgstr "" +"Strukturer som förekommer i terrängen (ingen effekt på träd och djungelgräs " +"som skapats av v6)" #: builtin/mainmenu/dlg_create_world.lua msgid "Structures appearing on the terrain, typically trees and plants" -msgstr "" +msgstr "Strukturer som förekommer i terrängen, vanligtvis träd och växter" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert" -msgstr "" +msgstr "Tempererad, Öken" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle" -msgstr "" +msgstr "Tempererad, Öken, Djungel" #: builtin/mainmenu/dlg_create_world.lua msgid "Temperate, Desert, Jungle, Tundra, Taiga" -msgstr "" +msgstr "Tempererad, Öken, Djungel, Tundra, Tajga" #: builtin/mainmenu/dlg_create_world.lua msgid "Terrain surface erosion" -msgstr "" +msgstr "Erosion av terrängytan" #: builtin/mainmenu/dlg_create_world.lua msgid "Trees and jungle grass" -msgstr "" +msgstr "Träd- och djungelgräs" #: builtin/mainmenu/dlg_create_world.lua msgid "Vary river depth" -msgstr "" +msgstr "Varierande floddjup" #: builtin/mainmenu/dlg_create_world.lua msgid "Very large caverns deep in the underground" -msgstr "" +msgstr "Mycket stora grottor djupt ner i underjorden" #: builtin/mainmenu/dlg_create_world.lua -#, fuzzy msgid "Warning: The Development Test is meant for developers." -msgstr "Varning: Minimala utvecklingstestet är avsett för utvecklare." +msgstr "Varning: Utvecklingstestet är avsett för utvecklare." #: builtin/mainmenu/dlg_create_world.lua msgid "World name" @@ -580,14 +556,12 @@ msgid "Delete" msgstr "Radera" #: builtin/mainmenu/dlg_delete_content.lua -#, fuzzy msgid "pkgmgr: failed to delete \"$1\"" -msgstr "Modhanterare: misslyckades radera \"$1\"" +msgstr "pkgmgr: misslyckades att radera \"$1\"" #: builtin/mainmenu/dlg_delete_content.lua -#, fuzzy msgid "pkgmgr: invalid path \"$1\"" -msgstr "Modhanterare: ogiltig modsökväg \"$1\"" +msgstr "pkgmgr: ogiltig sökväg \"$1\"" #: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" @@ -606,15 +580,16 @@ msgid "" "This modpack has an explicit name given in its modpack.conf which will " "override any renaming here." msgstr "" +"Detta moddpaket har ett uttryckligt namn angett i modpack.conf vilket går " +"före namnändring här." #: builtin/mainmenu/dlg_settings_advanced.lua msgid "(No description of setting given)" msgstr "(Ingen beskrivning av inställning angiven)" #: builtin/mainmenu/dlg_settings_advanced.lua -#, fuzzy msgid "2D Noise" -msgstr "Grotta2 oljud" +msgstr "2D-Brus" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "< Back to Settings page" @@ -677,9 +652,8 @@ msgid "Select directory" msgstr "Välj katalog" #: builtin/mainmenu/dlg_settings_advanced.lua -#, fuzzy msgid "Select file" -msgstr "Välj modfil:" +msgstr "Välj fil" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Show technical names" @@ -729,9 +703,8 @@ msgstr "" #. It describes the default processing options #. for noise settings in main menu -> "All Settings". #: builtin/mainmenu/dlg_settings_advanced.lua -#, fuzzy msgid "defaults" -msgstr "Standardspel" +msgstr "standarder" #. ~ "eased" is a noise parameter flag. #. It is used to make the map smoother and @@ -742,65 +715,52 @@ msgid "eased" msgstr "" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "$1 (Enabled)" -msgstr "Aktiverad" +msgstr "$1 (Aktiverad)" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "$1 mods" -msgstr "3D-läge" +msgstr "$1 moddar" #: builtin/mainmenu/pkgmgr.lua msgid "Failed to install $1 to $2" msgstr "Misslyckades installera $1 till $2" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Install Mod: Unable to find real mod name for: $1" -msgstr "Modinstallation: lyckas ej hitta riktiga modnamnet för: $1" +msgstr "Moddinstallation: Lyckades ej hitta riktiga moddnamnet för: $1" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Install Mod: Unable to find suitable folder name for modpack $1" -msgstr "Modinstallation: lyckas ej hitta lämpligt mappnamn för modpaket $1" +msgstr "Moddinstallation: lyckas ej hitta lämpligt mappnamn för moddpaket $1" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" -"\n" -"Modinstallation: ej stöd för filtyp \"$1\" eller trasigt arkiv" +msgstr "Installation: ej stöd för filtyp \"$1\" eller trasigt arkiv" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Install: file: \"$1\"" -msgstr "Modinstallation: fil: \"$1\"" +msgstr "Installera: fil: \"$1\"" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Unable to find a valid mod or modpack" -msgstr "Modinstallation: lyckas ej hitta lämpligt mappnamn för modpaket $1" +msgstr "Lyckades ej hitta lämplig modd eller moddpaket" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Unable to install a $1 as a texture pack" -msgstr "Misslyckades installera $1 till $2" +msgstr "Misslyckades att installera $1 som ett texturpaket" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Unable to install a game as a $1" -msgstr "Misslyckades installera $1 till $2" +msgstr "Misslyckades installera ett spel som en $1" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Unable to install a mod as a $1" -msgstr "Misslyckades installera $1 till $2" +msgstr "Misslyckades installera en modd som en $1" #: builtin/mainmenu/pkgmgr.lua -#, fuzzy msgid "Unable to install a modpack as a $1" -msgstr "Misslyckades installera $1 till $2" +msgstr "Misslyckades installera moddpaket som en $1" #: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp msgid "Loading..." @@ -808,7 +768,7 @@ msgstr "Laddar..." #: builtin/mainmenu/serverlistmgr.lua msgid "Public server list is disabled" -msgstr "" +msgstr "Den offentliga serverlistan är inaktiverad" #: builtin/mainmenu/serverlistmgr.lua msgid "Try reenabling public serverlist and check your internet connection." @@ -817,31 +777,31 @@ msgstr "" #: builtin/mainmenu/tab_about.lua msgid "About" -msgstr "" +msgstr "Om" #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" msgstr "Aktiva Bidragande" #: builtin/mainmenu/tab_about.lua -#, fuzzy msgid "Active renderer:" -msgstr "Aktivt avstånd för objektsändning" +msgstr "Aktiv renderer:" #: builtin/mainmenu/tab_about.lua msgid "Core Developers" msgstr "Huvudutvecklare" #: builtin/mainmenu/tab_about.lua -#, fuzzy msgid "Open User Data Directory" -msgstr "Välj katalog" +msgstr "Öppna Användardatamappen" #: builtin/mainmenu/tab_about.lua msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" "and texture packs in a file manager / explorer." msgstr "" +"Öppnar mappen som innehåller världar, spel, moddar,\n" +"och texturpaket i en filhanterare." #: builtin/mainmenu/tab_about.lua msgid "Previous Contributors" @@ -853,50 +813,43 @@ msgstr "Före detta huvudutvecklare" #: builtin/mainmenu/tab_content.lua msgid "Browse online content" -msgstr "" +msgstr "Bläddra bland onlineinnehåll" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Content" -msgstr "Fortsätt" +msgstr "Innehåll" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Disable Texture Pack" -msgstr "Välj texturpaket:" +msgstr "Inaktivera Texturpaket" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Information:" -msgstr "Modinformation:" +msgstr "Information:" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Installed Packages:" -msgstr "Installerade moddar:" +msgstr "Installerade paket:" #: builtin/mainmenu/tab_content.lua msgid "No dependencies." msgstr "Inga beroenden." #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "No package description available" -msgstr "Ingen modbeskrivning tillgänglig" +msgstr "Ingen paketbeskrivning tillgänglig" #: builtin/mainmenu/tab_content.lua msgid "Rename" msgstr "Byt namn" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Uninstall Package" -msgstr "Avinstallera vald mod" +msgstr "Avinstallera Paket" #: builtin/mainmenu/tab_content.lua -#, fuzzy msgid "Use Texture Pack" -msgstr "Texturpaket" +msgstr "Använd Texturpaket" #: builtin/mainmenu/tab_local.lua msgid "Announce Server" @@ -920,15 +873,15 @@ msgstr "Bilda Spel" #: builtin/mainmenu/tab_local.lua msgid "Host Server" -msgstr "Bilda Server" +msgstr "Värdserver" #: builtin/mainmenu/tab_local.lua msgid "Install games from ContentDB" -msgstr "" +msgstr "Installera spel från ContentDB" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua msgid "Name" -msgstr "" +msgstr "Namn" #: builtin/mainmenu/tab_local.lua msgid "New" @@ -939,23 +892,20 @@ msgid "No world created or selected!" msgstr "Ingen värld skapad eller vald!" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Password" -msgstr "Nytt Lösenord" +msgstr "Lösenord" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Play Game" -msgstr "Starta spel" +msgstr "Starta Spel" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua msgid "Port" msgstr "Port" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Select Mods" -msgstr "Välj värld:" +msgstr "Välj moddar" #: builtin/mainmenu/tab_local.lua msgid "Select World:" @@ -966,14 +916,12 @@ msgid "Server Port" msgstr "Serverport" #: builtin/mainmenu/tab_local.lua -#, fuzzy msgid "Start Game" -msgstr "Bilda Spel" +msgstr "Starta Spel" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Address" -msgstr "Bindningsadress" +msgstr "Adress" #: builtin/mainmenu/tab_online.lua src/client/keycode.cpp msgid "Clear" @@ -989,45 +937,40 @@ msgstr "Kreativt läge" #. ~ PvP = Player versus Player #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Damage / PvP" -msgstr "Skada" +msgstr "Skada / PvP" #: builtin/mainmenu/tab_online.lua msgid "Del. Favorite" msgstr "Radera Favorit" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Favorites" -msgstr "Favoritmarkera" +msgstr "Favoriter" #: builtin/mainmenu/tab_online.lua msgid "Incompatible Servers" -msgstr "" +msgstr "Inkompatibla Servrar" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Join Game" -msgstr "Bilda Spel" +msgstr "Anslut Spel" #: builtin/mainmenu/tab_online.lua msgid "Ping" msgstr "Ping" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Public Servers" -msgstr "Offentliggör Server" +msgstr "Offentliga Servrar" #: builtin/mainmenu/tab_online.lua msgid "Refresh" -msgstr "" +msgstr "Uppdatera" #: builtin/mainmenu/tab_online.lua -#, fuzzy msgid "Server Description" -msgstr "Serverport" +msgstr "Serverbeskrivning" #: builtin/mainmenu/tab_settings.lua msgid "2x" @@ -1046,16 +989,14 @@ msgid "8x" msgstr "8x" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "All Settings" -msgstr "Inställningar" +msgstr "Alla Inställningar" #: builtin/mainmenu/tab_settings.lua msgid "Antialiasing:" msgstr "Kantutjämning:" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Autosave Screen Size" msgstr "Spara fönsterstorlek automatiskt" @@ -1073,11 +1014,11 @@ msgstr "Sammankopplat glas" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Dynamic shadows" -msgstr "" +msgstr "Dynamiska skuggor" #: builtin/mainmenu/tab_settings.lua msgid "Dynamic shadows: " -msgstr "" +msgstr "Dynamiska skuggor: " #: builtin/mainmenu/tab_settings.lua msgid "Fancy Leaves" @@ -1085,15 +1026,15 @@ msgstr "Fina Löv" #: builtin/mainmenu/tab_settings.lua msgid "High" -msgstr "" +msgstr "Hög" #: builtin/mainmenu/tab_settings.lua msgid "Low" -msgstr "" +msgstr "Låg" #: builtin/mainmenu/tab_settings.lua msgid "Medium" -msgstr "" +msgstr "Medium" #: builtin/mainmenu/tab_settings.lua msgid "Mipmap" @@ -1149,11 +1090,11 @@ msgstr "Shaders" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (experimental)" -msgstr "" +msgstr "Shaders (experimentella)" #: builtin/mainmenu/tab_settings.lua msgid "Shaders (unavailable)" -msgstr "" +msgstr "Shaders (otillgängliga)" #: builtin/mainmenu/tab_settings.lua msgid "Simple Leaves" @@ -1176,9 +1117,8 @@ msgid "Tone Mapping" msgstr "Tonmappning" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Touchthreshold: (px)" -msgstr "Touch-tröskel (px)" +msgstr "Touch-tröskel: (px)" #: builtin/mainmenu/tab_settings.lua msgid "Trilinear Filter" @@ -1186,20 +1126,19 @@ msgstr "Trilinjärt filter" #: builtin/mainmenu/tab_settings.lua msgid "Ultra High" -msgstr "" +msgstr "Extremt Hög" #: builtin/mainmenu/tab_settings.lua msgid "Very Low" -msgstr "" +msgstr "Väldigt Låg" #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" msgstr "Vajande Löv" #: builtin/mainmenu/tab_settings.lua -#, fuzzy msgid "Waving Liquids" -msgstr "Vajande Löv" +msgstr "Vajande Vätskor" #: builtin/mainmenu/tab_settings.lua msgid "Waving Plants" @@ -1239,7 +1178,7 @@ msgstr "Kunde inte hitta eller ladda spel \"" #: src/client/clientlauncher.cpp msgid "Invalid gamespec." -msgstr "Ogiltiga spelspecifikationer." +msgstr "Ogiltig spelspecifikation." #: src/client/clientlauncher.cpp msgid "Main Menu" @@ -1247,7 +1186,7 @@ msgstr "Huvudmeny" #: src/client/clientlauncher.cpp msgid "No world selected and no address provided. Nothing to do." -msgstr "Ingen värld vald och ingen adress försed. Inget kan göras." +msgstr "Ingen värld vald och ingen adress anginven. Inget att göra." #: src/client/clientlauncher.cpp msgid "Player name too long." @@ -1255,15 +1194,15 @@ msgstr "Spelarnamn för långt." #: src/client/clientlauncher.cpp msgid "Please choose a name!" -msgstr "Välj ett namn!" +msgstr "Vänligen välj ett namn!" #: src/client/clientlauncher.cpp msgid "Provided password file failed to open: " -msgstr "" +msgstr "Den angivna lösenordsfilen kunde inte öppnas: " #: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " -msgstr "Den angivna sökvägen för världen existerar inte: " +msgstr "Angiven världssökväg existerar inte: " #: src/client/game.cpp msgid "" @@ -1271,31 +1210,27 @@ msgid "" "Check debug.txt for details." msgstr "" "\n" -"Läs debug.txt för detaljer." +"Se debug.txt för detaljer." #: src/client/game.cpp -#, fuzzy msgid "- Address: " -msgstr "Bindningsadress" +msgstr "- Bindningsadress: " #: src/client/game.cpp -#, fuzzy msgid "- Creative Mode: " -msgstr "Kreativt läge" +msgstr "- Kreativt läge: " #: src/client/game.cpp -#, fuzzy msgid "- Damage: " -msgstr "Aktivera skada" +msgstr "- Aktivera skada: " #: src/client/game.cpp msgid "- Mode: " msgstr "- Läge: " #: src/client/game.cpp -#, fuzzy msgid "- Port: " -msgstr "Port" +msgstr "- Port: " #: src/client/game.cpp msgid "- Public: " @@ -1311,42 +1246,36 @@ msgid "- Server Name: " msgstr "- Servernamn: " #: src/client/game.cpp -#, fuzzy msgid "Automatic forward disabled" -msgstr "Tangent för filmiskt länge" +msgstr "Automatiskt framåt inaktiverad" #: src/client/game.cpp -#, fuzzy msgid "Automatic forward enabled" -msgstr "Tangent för filmiskt länge" +msgstr "Automatiskt framåt aktiverat" #: src/client/game.cpp -#, fuzzy msgid "Camera update disabled" -msgstr "Av/på-tangent för kamerauppdatering" +msgstr "Kamerauppdatering inaktiverad" #: src/client/game.cpp -#, fuzzy msgid "Camera update enabled" -msgstr "Av/på-tangent för kamerauppdatering" +msgstr "Kamerauppdatering aktiverat" #: src/client/game.cpp msgid "Change Password" msgstr "Ändra Lösenord" #: src/client/game.cpp -#, fuzzy msgid "Cinematic mode disabled" -msgstr "Tangent för filmiskt länge" +msgstr "Filmiskt länge inaktiverad" #: src/client/game.cpp -#, fuzzy msgid "Cinematic mode enabled" -msgstr "Tangent för filmiskt länge" +msgstr "Filmiskt länge aktiverat" #: src/client/game.cpp msgid "Client side scripting is disabled" -msgstr "" +msgstr "Klientsidiga skriptar är inaktiverade" #: src/client/game.cpp msgid "Connecting to server..." @@ -1357,7 +1286,7 @@ msgid "Continue" msgstr "Fortsätt" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "" "Controls:\n" "- %s: move forwards\n" @@ -1380,12 +1309,12 @@ msgstr "" "- %s: rör dig åt vänster\n" "- %s: rör dig åt höger\n" "- %s: hoppa/klättra\n" +"- %s: gräv/slå\n" +"- %s: använd\n" "- %s: smyg/rör dig nedåt\n" "- %s: släpp föremål\n" "- %s: förråd\n" "- Mus: vänd/titta\n" -"- Vänsterklick: gräv/slå\n" -"- Högerklick: placera/använd\n" "- Mushjul: välj föremål\n" "- %s: chatt\n" @@ -1399,16 +1328,15 @@ msgstr "Skapar server..." #: src/client/game.cpp msgid "Debug info and profiler graph hidden" -msgstr "" +msgstr "Felsökningsinfo och profileringsgraf gömd" #: src/client/game.cpp -#, fuzzy msgid "Debug info shown" -msgstr "Av/På tangent för debuginformation" +msgstr "Felsökningsinfo visas" #: src/client/game.cpp msgid "Debug info, profiler graph, and wireframe hidden" -msgstr "" +msgstr "Felsökningsinfo, profileringsgraf och wireframe gömd" #: src/client/game.cpp msgid "" @@ -1440,11 +1368,11 @@ msgstr "" #: src/client/game.cpp msgid "Disabled unlimited viewing range" -msgstr "" +msgstr "Inaktiverat obegränsat visningsområde" #: src/client/game.cpp msgid "Enabled unlimited viewing range" -msgstr "" +msgstr "Aktiverat obegränsat visningsområde" #: src/client/game.cpp msgid "Exit to Menu" @@ -1452,43 +1380,39 @@ msgstr "Avsluta till Meny" #: src/client/game.cpp msgid "Exit to OS" -msgstr "Avsluta till Operativsystem" +msgstr "Avsluta till OS" #: src/client/game.cpp msgid "Fast mode disabled" -msgstr "" +msgstr "Snabbt läge inaktiverat" #: src/client/game.cpp -#, fuzzy msgid "Fast mode enabled" -msgstr "Skada aktiverat" +msgstr "Snabbläge aktiverat" #: src/client/game.cpp msgid "Fast mode enabled (note: no 'fast' privilege)" -msgstr "" +msgstr "Snabbt läge aktiverat (notera: inget 'fast'-tillstånd)" #: src/client/game.cpp msgid "Fly mode disabled" -msgstr "" +msgstr "Flygläge inaktiverat" #: src/client/game.cpp -#, fuzzy msgid "Fly mode enabled" -msgstr "Skada aktiverat" +msgstr "Flygläge aktiverat" #: src/client/game.cpp msgid "Fly mode enabled (note: no 'fly' privilege)" -msgstr "" +msgstr "Flygläge aktiverat (notera: inget 'fast'-tillstånd)" #: src/client/game.cpp -#, fuzzy msgid "Fog disabled" -msgstr "Inaktiverad" +msgstr "Dimma inaktiverad" #: src/client/game.cpp -#, fuzzy msgid "Fog enabled" -msgstr "aktiverad" +msgstr "Dimma aktiverat" #: src/client/game.cpp msgid "Game info:" @@ -1520,25 +1444,23 @@ msgstr "MiB/s" #: src/client/game.cpp msgid "Minimap currently disabled by game or mod" -msgstr "" +msgstr "Minimapp för närvarande inaktiverad av spel eller modd" #: src/client/game.cpp -#, fuzzy msgid "Multiplayer" -msgstr "Enspelarläge" +msgstr "Flerspelarläge" #: src/client/game.cpp msgid "Noclip mode disabled" -msgstr "" +msgstr "Noclipläge inaktiverat" #: src/client/game.cpp -#, fuzzy msgid "Noclip mode enabled" -msgstr "Skada aktiverat" +msgstr "Noclipläge aktiverat" #: src/client/game.cpp msgid "Noclip mode enabled (note: no 'noclip' privilege)" -msgstr "" +msgstr "Noclipläge aktiverat (notera: inget 'noclip'-tillstånd)" #: src/client/game.cpp msgid "Node definitions..." @@ -1562,7 +1484,7 @@ msgstr "" #: src/client/game.cpp msgid "Profiler graph shown" -msgstr "" +msgstr "Profileringsgraf visas" #: src/client/game.cpp msgid "Remote server" @@ -1585,17 +1507,16 @@ msgid "Sound Volume" msgstr "Ljudvolym" #: src/client/game.cpp -#, fuzzy msgid "Sound muted" -msgstr "Ljudvolym" +msgstr "Ljudvolym avstängd" #: src/client/game.cpp msgid "Sound system is disabled" -msgstr "" +msgstr "Ljudsystem är inaktiverad" #: src/client/game.cpp msgid "Sound system is not supported on this build" -msgstr "" +msgstr "Ljudsystem stöds inte i detta bygge" #: src/client/game.cpp #, fuzzy @@ -1603,19 +1524,19 @@ msgid "Sound unmuted" msgstr "Ljudvolym" #: src/client/game.cpp -#, fuzzy, c-format +#, c-format msgid "Viewing range changed to %d" -msgstr "Volym ändrad till to %d%%" +msgstr "Visningsområde ändrad till %d" #: src/client/game.cpp #, c-format msgid "Viewing range is at maximum: %d" -msgstr "" +msgstr "Visningsområde är vid sitt maximala: %d" #: src/client/game.cpp #, c-format msgid "Viewing range is at minimum: %d" -msgstr "" +msgstr "Visningsområde är vid sitt minimala: %d" #: src/client/game.cpp #, c-format @@ -1624,50 +1545,48 @@ msgstr "Volym ändrad till to %d%%" #: src/client/game.cpp msgid "Wireframe shown" -msgstr "" +msgstr "Wireframe visas" #: src/client/game.cpp msgid "Zoom currently disabled by game or mod" -msgstr "" +msgstr "Zoom är för närvarande inaktiverad av spel eller modd" #: src/client/game.cpp msgid "ok" msgstr "ok" #: src/client/gameui.cpp -#, fuzzy msgid "Chat hidden" -msgstr "Chattangent" +msgstr "Chatt gömd" #: src/client/gameui.cpp msgid "Chat shown" -msgstr "" +msgstr "Chatt visas" #: src/client/gameui.cpp msgid "HUD hidden" -msgstr "" +msgstr "HUD gömd" #: src/client/gameui.cpp msgid "HUD shown" -msgstr "" +msgstr "HUD visas" #: src/client/gameui.cpp msgid "Profiler hidden" -msgstr "" +msgstr "Profilering gömd" #: src/client/gameui.cpp #, c-format msgid "Profiler shown (page %d of %d)" -msgstr "" +msgstr "Profilering visas (sida %d av %d)" #: src/client/keycode.cpp msgid "Apps" msgstr "Appar" #: src/client/keycode.cpp -#, fuzzy msgid "Backspace" -msgstr "Tillbaka" +msgstr "Backspace" #: src/client/keycode.cpp msgid "Caps Lock" @@ -1828,11 +1747,11 @@ msgstr "Rensa OEM" #: src/client/keycode.cpp msgid "Page down" -msgstr "" +msgstr "Sida ner" #: src/client/keycode.cpp msgid "Page up" -msgstr "" +msgstr "Sida upp" #: src/client/keycode.cpp msgid "Pause" @@ -1922,21 +1841,21 @@ msgstr "Zoom" #: src/client/minimap.cpp msgid "Minimap hidden" -msgstr "" +msgstr "Minimapp gömd" #: src/client/minimap.cpp #, c-format msgid "Minimap in radar mode, Zoom x%d" -msgstr "" +msgstr "Minimapp i radarläge, Zoom x%d" #: src/client/minimap.cpp #, c-format msgid "Minimap in surface mode, Zoom x%d" -msgstr "" +msgstr "Minimapp i ytläge, Zoom x%d" #: src/client/minimap.cpp msgid "Minimap in texture mode" -msgstr "" +msgstr "Minimapp i texturläge" #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" @@ -1944,7 +1863,7 @@ msgstr "Lösenorden matchar inte!" #: src/gui/guiConfirmRegistration.cpp msgid "Register and Join" -msgstr "" +msgstr "Registrera och Anslut" #: src/gui/guiConfirmRegistration.cpp #, c-format @@ -1955,28 +1874,32 @@ msgid "" "Please retype your password and click 'Register and Join' to confirm account " "creation, or click 'Cancel' to abort." msgstr "" +"Du håller på att ansluta till den här servern med namnet \"%s\" för den " +"första gången.\n" +"Om du fortsätter kommer ett nytt konto med dina uppgifter skapas på servern." +"\n" +"Var snäll och fyll i ditt lösenord och tryck på 'Registrera och Anslut' för " +"att bekräfta kontoregistrering, eller tryck \"Avbryt\" för att avbryta." #: src/gui/guiFormSpecMenu.cpp msgid "Proceed" msgstr "Fortsätt" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "\"Aux1\" = climb down" -msgstr "\"Använd\" = klättra neråt" +msgstr "\"Aux1\" = klättra neråt" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Autoforward" -msgstr "Framåt" +msgstr "Autoframåt" #: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Automatic jumping" -msgstr "" +msgstr "Automatiskt hopp" #: src/gui/guiKeyChangeMenu.cpp msgid "Aux1" -msgstr "" +msgstr "Aux1" #: src/gui/guiKeyChangeMenu.cpp msgid "Backward" @@ -1984,12 +1907,11 @@ msgstr "Bakåt" #: src/gui/guiKeyChangeMenu.cpp msgid "Block bounds" -msgstr "" +msgstr "Blockgränser" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Change camera" -msgstr "Ändra tangenter" +msgstr "Ändra kamera" #: src/gui/guiKeyChangeMenu.cpp msgid "Chat" @@ -2005,7 +1927,7 @@ msgstr "Konsol" #: src/gui/guiKeyChangeMenu.cpp msgid "Dec. range" -msgstr "" +msgstr "Min. räckvidd" #: src/gui/guiKeyChangeMenu.cpp msgid "Dec. volume" @@ -2025,7 +1947,7 @@ msgstr "Framåt" #: src/gui/guiKeyChangeMenu.cpp msgid "Inc. range" -msgstr "" +msgstr "Höj räckvidd" #: src/gui/guiKeyChangeMenu.cpp msgid "Inc. volume" @@ -2071,21 +1993,19 @@ msgstr "Välj räckvidd" #: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Screenshot" -msgstr "" +msgstr "Skärmdump" #: src/gui/guiKeyChangeMenu.cpp msgid "Sneak" msgstr "Smyg" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle HUD" -msgstr "Slå av/på flygläge" +msgstr "Slå av/på HUD" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle chat log" -msgstr "Slå av/på snabb" +msgstr "Slå av/på chattlog" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle fast" @@ -2096,27 +2016,24 @@ msgid "Toggle fly" msgstr "Slå av/på flygläge" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle fog" -msgstr "Slå av/på flygläge" +msgstr "Slå av/på dimma" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle minimap" -msgstr "Slå av/på noclip" +msgstr "Slå av/på minimapp" #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle noclip" msgstr "Slå av/på noclip" #: src/gui/guiKeyChangeMenu.cpp -#, fuzzy msgid "Toggle pitchmove" -msgstr "Slå av/på snabb" +msgstr "Slå av/på pitchmove" #: src/gui/guiKeyChangeMenu.cpp msgid "press key" -msgstr "tryck på tangent" +msgstr "tryck knapp" #: src/gui/guiPasswordChange.cpp msgid "Change" @@ -2139,9 +2056,8 @@ msgid "Exit" msgstr "Avsluta" #: src/gui/guiVolumeChange.cpp -#, fuzzy msgid "Muted" -msgstr "Tysta" +msgstr "Tyst" #: src/gui/guiVolumeChange.cpp msgid "Sound Volume: " @@ -2174,7 +2090,6 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "(X,Y,Z) offset of fractal from world center in units of 'scale'.\n" "Can be used to move a desired point to (0, 0) to create a\n" @@ -2186,10 +2101,13 @@ msgid "" "Range roughly -2 to 2. Multiply by 'scale' for offset in nodes." msgstr "" "(X,Y,Z) förskjutning av fraktal från världscenter i enheten 'skala'.\n" -"Används för att flytta ett passande spawn-område av lågland nära (0, 0).\n" -"Ursprungsvärdena passar mandelbrotmängder, de behöver ändras för " -"juliamängder.\n" -"Värden mellan -2 to 2. Multiplicera med 'skala' för avvikelse i noder." +"Kan användas för att förflytta en punkt till (0, 0) för att skapa en\n" +"passande spawnpunkt, eller för att tillåta inzoomning på en specifik\n" +"punkt genom att höja 'scale'.\n" +"Ursprungsvärdena passar en spawnpunkt för mandelbrotmängder,\n" +"den kan behöva ändras i andra situationer.\n" +"Värdegräns mellan -2 och 2. Multiplicera med 'skala för avvikelse\n" +"i noder." #: src/settings_translation_file.cpp msgid "" @@ -2267,9 +2185,8 @@ msgid "3D noise defining structure of river canyon walls." msgstr "3D oljudsdefiniering av strukturen av floddalsväggar." #: src/settings_translation_file.cpp -#, fuzzy msgid "3D noise defining terrain." -msgstr "3D oljudsdefinierade jättegrottor" +msgstr "3D brusdefinierad terräng." #: src/settings_translation_file.cpp msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations." @@ -2280,7 +2197,6 @@ msgid "3D noise that determines number of dungeons per mapchunk." msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "3D support.\n" "Currently supported:\n" @@ -2300,7 +2216,9 @@ msgstr "" "- interlaced: skärmstöd för ojämn/jämn linjebaserad polarisering.\n" "- topbottom: split screen över/under.\n" "- sidebyside: split screen sida vid sida.\n" -"- pageflip: quadbufferbaserad 3d." +"- crossview: Korsögad 3d\n" +"- pageflip: quadbufferbaserad 3d.\n" +"Notera att 'interlaced'-läget kräver shaders." #: src/settings_translation_file.cpp msgid "" @@ -2320,16 +2238,15 @@ msgstr "Ett meddelande som visas för alla klienter när servern stängs ner." #: src/settings_translation_file.cpp msgid "ABM interval" -msgstr "" +msgstr "ABM-intervall" #: src/settings_translation_file.cpp msgid "ABM time budget" -msgstr "" +msgstr "ABM-tidsbudget" #: src/settings_translation_file.cpp -#, fuzzy msgid "Absolute limit of queued blocks to emerge" -msgstr "Absolut gräns av emerge kö" +msgstr "Absolut gräns för köade block att framträda" #: src/settings_translation_file.cpp msgid "Acceleration in air" @@ -2337,16 +2254,15 @@ msgstr "Acceleration i luften" #: src/settings_translation_file.cpp msgid "Acceleration of gravity, in nodes per second per second." -msgstr "" +msgstr "Accelerering av gravitation, i noder per sekund per sekund." #: src/settings_translation_file.cpp msgid "Active Block Modifiers" msgstr "Aktiva Blockmodifierare" #: src/settings_translation_file.cpp -#, fuzzy msgid "Active block management interval" -msgstr "Aktivt Blockhanteringsintervall" +msgstr "Aktivt blockhanteringsintervall" #: src/settings_translation_file.cpp msgid "Active block range" @@ -2412,12 +2328,11 @@ msgstr "Ambient ocklusion gamma" #: src/settings_translation_file.cpp msgid "Amount of messages a player may send per 10 seconds." -msgstr "" +msgstr "Antal meddelanden en spelare får skicka per 10 sekunder." #: src/settings_translation_file.cpp -#, fuzzy msgid "Amplifies the valleys." -msgstr "Amplifiera dalgångar" +msgstr "Amplifierar dalgångarna." #: src/settings_translation_file.cpp msgid "Anisotropic filtering" @@ -2428,9 +2343,8 @@ msgid "Announce server" msgstr "Offentliggör server" #: src/settings_translation_file.cpp -#, fuzzy msgid "Announce to this serverlist." -msgstr "Offentliggör server" +msgstr "Annonsera till serverlistan." #: src/settings_translation_file.cpp msgid "Append item name" @@ -2446,7 +2360,7 @@ msgstr "Äppelträdlojud" #: src/settings_translation_file.cpp msgid "Arm inertia" -msgstr "" +msgstr "Armtröghet" #: src/settings_translation_file.cpp msgid "" @@ -2459,7 +2373,6 @@ msgid "Ask to reconnect after crash" msgstr "Förfråga att återkoppla efter krash" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "At this distance the server will aggressively optimize which blocks are sent " "to\n" @@ -2473,27 +2386,28 @@ msgid "" "optimization.\n" "Stated in mapblocks (16 nodes)." msgstr "" -"Vid detta avstånd kommer servern att aggressivt omtimera vilka block som " -"skickas till klienterna.\n" +"Vid detta avstånd kommer servern att aggressivt optimera vilka block som " +"skickas till\n" +"klienterna.\n" "Små värden kan potentiellt förbättra prestandan avsevärt, på bekostnaden av " -"synliga renderingsglitchar.\n" -"(vissa block kommer inte att renderas under vatten och i grottor, ibland " -"även på land)\n" +"synliga\n" +"renderingsglitchar (vissa block kommer inte att renderas under vatten och i " +"grottor,\n" +"ibland även på land).\n" "Sätts detta till ett värde större än max_block_send_distance inaktiveras " -"denna optimering.\n" -"Angiven i mapblocks (16 noder)" +"denna\n" +"optimering.\n" +"Angiven i mapblocks (16 noder)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Automatic forward key" -msgstr "Tangent för filmiskt länge" +msgstr "Automatisk framåtknapp" #: src/settings_translation_file.cpp msgid "Automatically jump up single-node obstacles." -msgstr "" +msgstr "Hoppa automatiskt upp över enstaka noder hinder." #: src/settings_translation_file.cpp -#, fuzzy msgid "Automatically report to the serverlist." msgstr "Rapportera automatiskt till serverlistan." @@ -2503,15 +2417,15 @@ msgstr "Spara fönsterstorlek automatiskt" #: src/settings_translation_file.cpp msgid "Autoscaling mode" -msgstr "" +msgstr "Automatiskt skalningsläge" #: src/settings_translation_file.cpp msgid "Aux1 key" -msgstr "" +msgstr "Aux1-knappen" #: src/settings_translation_file.cpp msgid "Aux1 key for climbing/descending" -msgstr "" +msgstr "Aux1-knappen för klättring/sjunkning" #: src/settings_translation_file.cpp msgid "Backward key" @@ -2522,18 +2436,16 @@ msgid "Base ground level" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Base terrain height." -msgstr "Bas för terränghöjd" +msgstr "Bas för terränghöjd." #: src/settings_translation_file.cpp msgid "Basic" msgstr "Grundläggande" #: src/settings_translation_file.cpp -#, fuzzy msgid "Basic privileges" -msgstr "Grundläggande Privilegier" +msgstr "Grundläggande privilegier" #: src/settings_translation_file.cpp msgid "Beach noise" @@ -2565,19 +2477,19 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Bold and italic font path" -msgstr "" +msgstr "Fet och kursiv typsnittssökväg" #: src/settings_translation_file.cpp msgid "Bold and italic monospace font path" -msgstr "" +msgstr "Fet och kursiv monospace-typsnittssökväg" #: src/settings_translation_file.cpp msgid "Bold font path" -msgstr "" +msgstr "Fet typsnittssökväg" #: src/settings_translation_file.cpp msgid "Bold monospace font path" -msgstr "" +msgstr "Fet monospace-typsnittssökväg" #: src/settings_translation_file.cpp msgid "Build inside player" @@ -2648,9 +2560,8 @@ msgid "Cavern threshold" msgstr "Grottröskel" #: src/settings_translation_file.cpp -#, fuzzy msgid "Cavern upper limit" -msgstr "Grottbegränsning" +msgstr "Övre grottbegränsning" #: src/settings_translation_file.cpp msgid "" @@ -2659,37 +2570,32 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat command time message threshold" -msgstr "Oljudströskel för öken" +msgstr "Chattkommando tidströskel" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat font size" -msgstr "Chunkstorlek" +msgstr "Chattens typsnittsstorlek" #: src/settings_translation_file.cpp msgid "Chat key" msgstr "Chattangent" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat log level" -msgstr "Nivå av debuglogg" +msgstr "Chattens loggnivå" #: src/settings_translation_file.cpp msgid "Chat message count limit" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat message format" -msgstr "Krashmeddelande" +msgstr "Chattmeddelandeformat" #: src/settings_translation_file.cpp -#, fuzzy msgid "Chat message kick threshold" -msgstr "Oljudströskel för öken" +msgstr "Chattmeddelandens sparkningströskel" #: src/settings_translation_file.cpp msgid "Chat message max length" @@ -2732,9 +2638,8 @@ msgid "Client modding" msgstr "Klientmoddande" #: src/settings_translation_file.cpp -#, fuzzy msgid "Client side modding restrictions" -msgstr "Klientmoddande" +msgstr "Begränsningar för klientmoddning" #: src/settings_translation_file.cpp msgid "Client side node lookup range restriction" @@ -2765,7 +2670,6 @@ msgid "Colored fog" msgstr "Färgad dimma" #: src/settings_translation_file.cpp -#, fuzzy msgid "Colored shadows" msgstr "Färgad dimma" @@ -2835,9 +2739,8 @@ msgid "ContentDB Max Concurrent Downloads" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "ContentDB URL" -msgstr "Fortsätt" +msgstr "ContentDB URL" #: src/settings_translation_file.cpp msgid "Continuous forward" @@ -2854,14 +2757,14 @@ msgid "Controls" msgstr "Kontrollerar" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Controls length of day/night cycle.\n" "Examples:\n" "72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged." msgstr "" -"Kontrollerar längden av cyklerna för dag/natt\n" -"Exempel: 72 = 20min, 360 = 4min, 1 = 24timme, 0 = dag/natt/whatever förblir " +"Kontrollerar längden av cyklerna för dag/natt.\n" +"Exempel:\n" +"72 = 20min, 360 = 4min, 1 = 24timme, 0 = dag/natt/någonting förblir " "oförändrat." #: src/settings_translation_file.cpp @@ -2896,11 +2799,12 @@ msgid "Crosshair alpha" msgstr "Hårkorsalpha" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" "Also controls the object crosshair color" -msgstr "Hårkorsalpha (ogenomskinlighet, mellan 0 och 255)." +msgstr "" +"Hårkorsalpha (ogenomskinlighet, mellan 0 och 255).\n" +"Kontrollerar även objektets hårkorsfärg" #: src/settings_translation_file.cpp msgid "Crosshair color" @@ -2925,9 +2829,8 @@ msgid "Debug info toggle key" msgstr "Av/På tangent för debuginformation" #: src/settings_translation_file.cpp -#, fuzzy msgid "Debug log file size threshold" -msgstr "Oljudströskel för öken" +msgstr "Felsökningslogg storlekströskel" #: src/settings_translation_file.cpp msgid "Debug log level" @@ -2974,9 +2877,8 @@ msgid "Default report format" msgstr "Standardformat för rapporter" #: src/settings_translation_file.cpp -#, fuzzy msgid "Default stack size" -msgstr "Standardspel" +msgstr "Standardstapelstorlekar" #: src/settings_translation_file.cpp msgid "" @@ -2994,16 +2896,12 @@ msgid "Defines areas with sandy beaches." msgstr "Definierar områden med sandstränder." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines distribution of higher terrain and steepness of cliffs." -msgstr "" -"Definierar områden för högre (klipptopp-)terräng och påverkar sluttningen av " -"klippor." +msgstr "Definierar distribuering för högre terräng och sluttningen av klippor." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines distribution of higher terrain." -msgstr "Definierar områden för 'terrain_higher' (klipptoppsteräng)." +msgstr "Definierar områden för högre terräng." #: src/settings_translation_file.cpp msgid "Defines full size of caverns, smaller values create larger caverns." @@ -3019,14 +2917,12 @@ msgid "Defines location and terrain of optional hills and lakes." msgstr "Definierar plats och terräng för valfria kullar och sjöar." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines the base ground level." -msgstr "Definierar trädområden och trädtäthet." +msgstr "Definierar basnivån." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines the depth of the river channel." -msgstr "Definierar trädområden och trädtäthet." +msgstr "Definierar djupet av älvkanalen." #: src/settings_translation_file.cpp msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." @@ -3034,14 +2930,12 @@ msgstr "" "Definierar maximal distans för spelarförflyttning i block (0 = oändligt)." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines the width of the river channel." -msgstr "Definierar strukturen för storskaliga älvkanaler." +msgstr "Definierar bredden för älvkanaler." #: src/settings_translation_file.cpp -#, fuzzy msgid "Defines the width of the river valley." -msgstr "Definierar områden där träd har äpplen." +msgstr "Definierar bredden för floddalar." #: src/settings_translation_file.cpp msgid "Defines tree areas and tree density." @@ -3070,9 +2964,8 @@ msgid "Deprecated Lua API handling" msgstr "Obruklig Lua API hantering" #: src/settings_translation_file.cpp -#, fuzzy msgid "Depth below which you'll find giant caverns." -msgstr "Djup inunder du kan hitta stora grottor." +msgstr "Djup neråt där du kan hitta enorma grottor." #: src/settings_translation_file.cpp msgid "Depth below which you'll find large caves." @@ -3090,13 +2983,12 @@ msgid "Desert noise threshold" msgstr "Oljudströskel för öken" #: src/settings_translation_file.cpp -#, fuzzy msgid "" "Deserts occur when np_biome exceeds this value.\n" "When the 'snowbiomes' flag is enabled, this is ignored." msgstr "" -"Öknar förekommer när np_biome överskridet detta värde.\n" -"När det nya biotopsystemet aktiveras så ignoreras detta." +"Öknar förekommer när np_biome överskrider detta värde.\n" +"Detta ignoreras när 'snowbiomes' flaggen är aktiverad." #: src/settings_translation_file.cpp msgid "Desynchronize block animation" @@ -3147,9 +3039,8 @@ msgid "Dungeon minimum Y" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Dungeon noise" -msgstr "Grottoljud" +msgstr "Grottbrus" #: src/settings_translation_file.cpp msgid "" @@ -3412,9 +3303,8 @@ msgid "Floatland minimum Y" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Floatland noise" -msgstr "Grottoljud" +msgstr "Floatlandbrus" #: src/settings_translation_file.cpp msgid "Floatland taper exponent" @@ -3621,9 +3511,8 @@ msgid "Ground level" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Ground noise" -msgstr "Grottoljud" +msgstr "Ytbrus" #: src/settings_translation_file.cpp msgid "HTTP mods" @@ -4824,9 +4713,8 @@ msgid "Liquid queue purge time" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Liquid sinking" -msgstr "Nedstigande hastighet" +msgstr "Vätskesjunkning" #: src/settings_translation_file.cpp msgid "Liquid update interval in seconds." @@ -4856,9 +4744,8 @@ msgid "Lower Y limit of dungeons." msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Lower Y limit of floatlands." -msgstr "Absolut gräns av emerge kö" +msgstr "Nedre Y-gräns för floatlands." #: src/settings_translation_file.cpp msgid "Main menu script" @@ -4969,18 +4856,16 @@ msgid "Mapgen Carpathian specific flags" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Flat" -msgstr "Kartgenerator" +msgstr "Mapgen Platt" #: src/settings_translation_file.cpp msgid "Mapgen Flat specific flags" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Mapgen Fractal" -msgstr "Kartgenerator" +msgstr "Mapgen Fraktal" #: src/settings_translation_file.cpp #, fuzzy @@ -6414,9 +6299,8 @@ msgid "Upper Y limit of dungeons." msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Upper Y limit of floatlands." -msgstr "Absolut gräns av emerge kö" +msgstr "Övre Y-gräns för floatlands." #: src/settings_translation_file.cpp msgid "Use 3D cloud look instead of flat." @@ -6751,9 +6635,8 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -#, fuzzy msgid "Y of upper limit of large caves." -msgstr "Absolut gräns av emerge kö" +msgstr "Y-nivå för högre gräns av stora grottor." #: src/settings_translation_file.cpp msgid "Y-distance over which caverns expand to full size." From a157256706d5bf2c8f982ca971207765c2972405 Mon Sep 17 00:00:00 2001 From: "updatepo.sh" Date: Sat, 27 Nov 2021 19:41:45 +0100 Subject: [PATCH 114/412] Update minetest.conf.example and dummy cpp file --- minetest.conf.example | 93 ++++++++++++++++--------------- src/settings_translation_file.cpp | 54 ++++++++++-------- 2 files changed, 78 insertions(+), 69 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index b252f4f70..3f4d01420 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -121,7 +121,7 @@ # joystick_id = 0 # The type of joystick -# type: enum values: auto, generic, xbox +# type: enum values: auto, generic, xbox, dragonrise_gamecube # joystick_type = auto # The time in seconds it takes between repeated events @@ -129,12 +129,12 @@ # type: float min: 0.001 # repeat_joystick_button_time = 0.17 -# The deadzone of the joystick +# The dead zone of the joystick # type: int # joystick_deadzone = 2048 # The sensitivity of the joystick axes for moving the -# ingame view frustum around. +# in-game view frustum around. # type: float # joystick_frustum_sensitivity = 170 @@ -503,7 +503,7 @@ ### Basic -# Whether nametag backgrounds should be shown by default. +# Whether name tag backgrounds should be shown by default. # Mods may still set a background. # type: bool # show_nametag_backgrounds = true @@ -551,7 +551,7 @@ ### Filtering -# Use mip mapping to scale textures. May slightly increase performance, +# Use mipmapping to scale textures. May slightly increase performance, # especially when using a high resolution texture pack. # Gamma correct downscaling is not supported. # type: bool @@ -580,7 +580,7 @@ # can be blurred, so automatically upscale them with nearest-neighbor # interpolation to preserve crisp pixels. This sets the minimum texture size # for the upscaled textures; higher values look sharper, but require more -# memory. Powers of 2 are recommended. This setting is ONLY applies if +# memory. Powers of 2 are recommended. This setting is ONLY applied if # bilinear/trilinear/anisotropic filtering is enabled. # This is also used as the base node texture size for world-aligned # texture autoscaling. @@ -679,7 +679,7 @@ # Texture size to render the shadow map on. # This must be a power of two. -# Bigger numbers create better shadowsbut it is also more expensive. +# Bigger numbers create better shadows but it is also more expensive. # type: int min: 128 max: 8192 # shadow_map_texture_size = 1024 @@ -689,37 +689,38 @@ # type: bool # shadow_map_texture_32bit = true -# Enable poisson disk filtering. -# On true uses poisson disk to make "soft shadows". Otherwise uses PCF filtering. +# Enable Poisson disk filtering. +# On true uses Poisson disk to make "soft shadows". Otherwise uses PCF filtering. # type: bool # shadow_poisson_filter = true -# Define shadow filtering quality -# This simulates the soft shadows effect by applying a PCF or poisson disk +# Define shadow filtering quality. +# This simulates the soft shadows effect by applying a PCF or Poisson disk # but also uses more resources. # type: enum values: 0, 1, 2 # shadow_filters = 1 -# Enable colored shadows. +# Enable colored shadows. # On true translucent nodes cast colored shadows. This is expensive. # type: bool # shadow_map_color = false -# Set the shadow update time. -# Lower value means shadows and map updates faster, but it consume more resources. -# Minimun value 0.001 seconds max value 0.2 seconds -# type: float min: 0.001 max: 0.2 -# shadow_update_time = 0.2 +# Spread a complete update of shadow map over given amount of frames. +# Higher values might make shadows laggy, lower values +# will consume more resources. +# Minimum value: 1; maximum value: 16 +# type: int min: 1 max: 16 +# shadow_update_frames = 8 # Set the soft shadow radius size. -# Lower values mean sharper shadows bigger values softer. -# Minimun value 1.0 and max value 10.0 +# Lower values mean sharper shadows, bigger values mean softer shadows. +# Minimum value: 1.0; maximum value: 10.0 # type: float min: 1 max: 10 # shadow_soft_radius = 1.0 -# Set the tilt of Sun/Moon orbit in degrees +# Set the tilt of Sun/Moon orbit in degrees. # Value of 0 means no tilt / vertical orbit. -# Minimun value 0.0 and max value 60.0 +# Minimum value: 0.0; maximum value: 60.0 # type: float min: 0 max: 60 # shadow_sky_body_orbit_tilt = 0.0 @@ -823,7 +824,7 @@ # Note: On Android, stick with OGLES1 if unsure! App may fail to start otherwise. # On other platforms, OpenGL is recommended. # Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental) -# type: enum values: null, software, burningsvideo, direct3d8, direct3d9, opengl, ogles1, ogles2 +# type: enum values: opengl, ogles1, ogles2 # video_driver = opengl # Radius of cloud area stated in number of 64 node cloud squares. @@ -900,7 +901,7 @@ # crosshair_color = (255,255,255) # Crosshair alpha (opaqueness, between 0 and 255). -# Also controls the object crosshair color +# This also applies to the object crosshair. # type: int min: 0 max: 255 # crosshair_alpha = 255 @@ -917,7 +918,7 @@ # type: float # hud_hotbar_max_width = 1.0 -# Modifies the size of the hudbar elements. +# Modifies the size of the HUD elements. # type: float # hud_scaling = 1.0 @@ -1108,7 +1109,7 @@ # screenshot_path = screenshots # Format of screenshots. -# type: enum values: png, jpg, bmp, pcx, ppm, tga +# type: enum values: png, jpg # screenshot_format = png # Screenshot quality. Only used for JPEG format. @@ -1123,6 +1124,10 @@ # type: int min: 1 # screen_dpi = 72 +# Adjust the detected display density, used for scaling UI elements. +# type: float +# display_density_factor = 1 + # Windows systems only: Start Minetest with the command line window in the background. # Contains the same information as the file debug.txt (default name). # type: bool @@ -1155,13 +1160,13 @@ # Client # -# If enabled, http links in chat can be middle-clicked or ctrl-left-clicked to open the link in the OS's default web browser. +# Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console output. # type: bool # clickable_chat_weblinks = false -# If clickable_chat_weblinks is enabled, specify the color (as 24-bit hexadecimal) of weblinks in chat. +# Optional override for chat weblink color. # type: string -# chat_weblink_color = #8888FF +# chat_weblink_color = ## Network @@ -1177,9 +1182,9 @@ # remote_port = 30000 # Prometheus listener address. -# If minetest is compiled with ENABLE_PROMETHEUS option enabled, +# If Minetest is compiled with ENABLE_PROMETHEUS option enabled, # enable metrics listener for Prometheus on that address. -# Metrics can be fetch on http://127.0.0.1:30000/metrics +# Metrics can be fetched on http://127.0.0.1:30000/metrics # type: string # prometheus_listener_address = 127.0.0.1:30000 @@ -1314,11 +1319,10 @@ # type: int # max_packets_per_iteration = 1024 -# ZLib compression level to use when sending mapblocks to the client. -# -1 - Zlib's default compression level -# 0 - no compresson, fastest +# Compression level to use when sending mapblocks to the client. +# -1 - use default compression level +# 0 - least compression, fastest # 9 - best compression, slowest -# (levels 1-3 use Zlib's "fast" method, 4-9 use the normal method) # type: int min: -1 max: 9 # map_compression_level_net = -1 @@ -1553,7 +1557,7 @@ # deprecated_lua_api_handling = log # Number of extra blocks that can be loaded by /clearobjects at once. -# This is a trade-off between sqlite transaction overhead and +# This is a trade-off between SQLite transaction overhead and # memory consumption (4096=100MB, as a rule of thumb). # type: int # max_clearobjects_extra_loaded_blocks = 4096 @@ -1571,13 +1575,12 @@ # type: enum values: 0, 1, 2 # sqlite_synchronous = 2 -# ZLib compression level to use when saving mapblocks to disk. -# -1 - Zlib's default compression level -# 0 - no compresson, fastest +# Compression level to use when saving mapblocks to disk. +# -1 - use default compression level +# 0 - least compression, fastest # 9 - best compression, slowest -# (levels 1-3 use Zlib's "fast" method, 4-9 use the normal method) # type: int min: -1 max: 9 -# map_compression_level_disk = 3 +# map_compression_level_disk = -1 # Length of a server tick and the interval at which objects are generally updated over # network. @@ -1705,7 +1708,7 @@ # type: bool # instrument.lbm = true -# Instrument chatcommands on registration. +# Instrument chat commands on registration. # type: bool # instrument.chatcommand = true @@ -1824,7 +1827,7 @@ # Global map generation attributes. # In Mapgen v6 the 'decorations' flag controls all decorations except trees -# and junglegrass, in all other mapgens this flag controls all decorations. +# and jungle grass, in all other mapgens this flag controls all decorations. # type: flags possible values: caves, dungeons, light, decorations, biomes, ores, nocaves, nodungeons, nolight, nodecorations, nobiomes, noores # mg_flags = caves,dungeons,light,decorations,biomes,ores @@ -3405,17 +3408,17 @@ # enable_mapgen_debug_info = false # Maximum number of blocks that can be queued for loading. -# type: int +# type: int min: 1 max: 1000000 # emergequeue_limit_total = 1024 # Maximum number of blocks to be queued that are to be loaded from file. # This limit is enforced per player. -# type: int +# type: int min: 1 max: 1000000 # emergequeue_limit_diskonly = 128 # Maximum number of blocks to be queued that are to be generated. # This limit is enforced per player. -# type: int +# type: int min: 1 max: 1000000 # emergequeue_limit_generate = 128 # Number of emerge threads to use. diff --git a/src/settings_translation_file.cpp b/src/settings_translation_file.cpp index 49591d1ee..ad2093382 100644 --- a/src/settings_translation_file.cpp +++ b/src/settings_translation_file.cpp @@ -54,10 +54,10 @@ fake_function() { gettext("The type of joystick"); gettext("Joystick button repetition interval"); gettext("The time in seconds it takes between repeated events\nwhen holding down a joystick button combination."); - gettext("Joystick deadzone"); - gettext("The deadzone of the joystick"); + gettext("Joystick dead zone"); + gettext("The dead zone of the joystick"); gettext("Joystick frustum sensitivity"); - gettext("The sensitivity of the joystick axes for moving the\ningame view frustum around."); + gettext("The sensitivity of the joystick axes for moving the\nin-game view frustum around."); gettext("Forward key"); gettext("Key for moving the player forward.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); gettext("Backward key"); @@ -203,8 +203,8 @@ fake_function() { gettext("Graphics"); gettext("In-Game"); gettext("Basic"); - gettext("Show nametag backgrounds by default"); - gettext("Whether nametag backgrounds should be shown by default.\nMods may still set a background."); + gettext("Show name tag backgrounds by default"); + gettext("Whether name tag backgrounds should be shown by default.\nMods may still set a background."); gettext("VBO"); gettext("Enable vertex buffer objects.\nThis should greatly improve graphics performance."); gettext("Fog"); @@ -225,7 +225,7 @@ fake_function() { gettext("Adds particles when digging a node."); gettext("Filtering"); gettext("Mipmapping"); - gettext("Use mip mapping to scale textures. May slightly increase performance,\nespecially when using a high resolution texture pack.\nGamma correct downscaling is not supported."); + gettext("Use mipmapping to scale textures. May slightly increase performance,\nespecially when using a high resolution texture pack.\nGamma correct downscaling is not supported."); gettext("Anisotropic filtering"); gettext("Use anisotropic filtering when viewing at textures from an angle."); gettext("Bilinear filtering"); @@ -235,7 +235,7 @@ fake_function() { gettext("Clean transparent textures"); gettext("Filtered textures can blend RGB values with fully-transparent neighbors,\nwhich PNG optimizers usually discard, often resulting in dark or\nlight edges to transparent textures. Apply a filter to clean that up\nat texture load time. This is automatically enabled if mipmapping is enabled."); gettext("Minimum texture size"); - gettext("When using bilinear/trilinear/anisotropic filters, low-resolution textures\ncan be blurred, so automatically upscale them with nearest-neighbor\ninterpolation to preserve crisp pixels. This sets the minimum texture size\nfor the upscaled textures; higher values look sharper, but require more\nmemory. Powers of 2 are recommended. This setting is ONLY applies if\nbilinear/trilinear/anisotropic filtering is enabled.\nThis is also used as the base node texture size for world-aligned\ntexture autoscaling."); + gettext("When using bilinear/trilinear/anisotropic filters, low-resolution textures\ncan be blurred, so automatically upscale them with nearest-neighbor\ninterpolation to preserve crisp pixels. This sets the minimum texture size\nfor the upscaled textures; higher values look sharper, but require more\nmemory. Powers of 2 are recommended. This setting is ONLY applied if\nbilinear/trilinear/anisotropic filtering is enabled.\nThis is also used as the base node texture size for world-aligned\ntexture autoscaling."); gettext("FSAA"); gettext("Use multi-sample antialiasing (MSAA) to smooth out block edges.\nThis algorithm smooths out the 3D viewport while keeping the image sharp,\nbut it doesn't affect the insides of textures\n(which is especially noticeable with transparent textures).\nVisible spaces appear between nodes when shaders are disabled.\nIf set to 0, MSAA is disabled.\nA restart is required after changing this option."); gettext("Undersampling"); @@ -269,21 +269,21 @@ fake_function() { gettext("Shadow map max distance in nodes to render shadows"); gettext("Maximum distance to render shadows."); gettext("Shadow map texture size"); - gettext("Texture size to render the shadow map on.\nThis must be a power of two.\nBigger numbers create better shadowsbut it is also more expensive."); + gettext("Texture size to render the shadow map on.\nThis must be a power of two.\nBigger numbers create better shadows but it is also more expensive."); gettext("Shadow map texture in 32 bits"); gettext("Sets shadow texture quality to 32 bits.\nOn false, 16 bits texture will be used.\nThis can cause much more artifacts in the shadow."); gettext("Poisson filtering"); - gettext("Enable poisson disk filtering.\nOn true uses poisson disk to make \"soft shadows\". Otherwise uses PCF filtering."); + gettext("Enable Poisson disk filtering.\nOn true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF filtering."); gettext("Shadow filter quality"); - gettext("Define shadow filtering quality\nThis simulates the soft shadows effect by applying a PCF or poisson disk\nbut also uses more resources."); + gettext("Define shadow filtering quality.\nThis simulates the soft shadows effect by applying a PCF or Poisson disk\nbut also uses more resources."); gettext("Colored shadows"); - gettext("Enable colored shadows. \nOn true translucent nodes cast colored shadows. This is expensive."); - gettext("Map update time"); - gettext("Set the shadow update time.\nLower value means shadows and map updates faster, but it consume more resources.\nMinimun value 0.001 seconds max value 0.2 seconds"); + gettext("Enable colored shadows.\nOn true translucent nodes cast colored shadows. This is expensive."); + gettext("Map shadows update frames"); + gettext("Spread a complete update of shadow map over given amount of frames.\nHigher values might make shadows laggy, lower values\nwill consume more resources.\nMinimum value: 1; maximum value: 16"); gettext("Soft shadow radius"); - gettext("Set the soft shadow radius size.\nLower values mean sharper shadows bigger values softer.\nMinimun value 1.0 and max value 10.0"); + gettext("Set the soft shadow radius size.\nLower values mean sharper shadows, bigger values mean softer shadows.\nMinimum value: 1.0; maximum value: 10.0"); gettext("Sky Body Orbit Tilt"); - gettext("Set the tilt of Sun/Moon orbit in degrees\nValue of 0 means no tilt / vertical orbit.\nMinimun value 0.0 and max value 60.0"); + gettext("Set the tilt of Sun/Moon orbit in degrees.\nValue of 0 means no tilt / vertical orbit.\nMinimum value: 0.0; maximum value: 60.0"); gettext("Advanced"); gettext("Arm inertia"); gettext("Arm inertia, gives a more realistic movement of\nthe arm when the camera moves."); @@ -356,7 +356,7 @@ fake_function() { gettext("Crosshair color"); gettext("Crosshair color (R,G,B).\nAlso controls the object crosshair color"); gettext("Crosshair alpha"); - gettext("Crosshair alpha (opaqueness, between 0 and 255).\nAlso controls the object crosshair color"); + gettext("Crosshair alpha (opaqueness, between 0 and 255).\nThis also applies to the object crosshair."); gettext("Recent Chat Messages"); gettext("Maximum number of recent chat messages to show"); gettext("Desynchronize block animation"); @@ -364,7 +364,7 @@ fake_function() { gettext("Maximum hotbar width"); gettext("Maximum proportion of current window to be used for hotbar.\nUseful if there's something to be displayed right or left of hotbar."); gettext("HUD scale factor"); - gettext("Modifies the size of the hudbar elements."); + gettext("Modifies the size of the HUD elements."); gettext("Mesh cache"); gettext("Enables caching of facedir rotated meshes."); gettext("Mapblock mesh generation delay"); @@ -441,6 +441,8 @@ fake_function() { gettext("Advanced"); gettext("DPI"); gettext("Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens."); + gettext("Display Density Scaling Factor"); + gettext("Adjust the detected display density, used for scaling UI elements."); gettext("Enable console window"); gettext("Windows systems only: Start Minetest with the command line window in the background.\nContains the same information as the file debug.txt (default name)."); gettext("Sound"); @@ -451,13 +453,17 @@ fake_function() { gettext("Mute sound"); gettext("Whether to mute sounds. You can unmute sounds at any time, unless the\nsound system is disabled (enable_sound=false).\nIn-game, you can toggle the mute state with the mute key or by using the\npause menu."); gettext("Client"); + gettext("Chat weblinks"); + gettext("Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console output."); + gettext("Weblink color"); + gettext("Optional override for chat weblink color."); gettext("Network"); gettext("Server address"); gettext("Address to connect to.\nLeave this blank to start a local server.\nNote that the address field in the main menu overrides this setting."); gettext("Remote port"); gettext("Port to connect to (UDP).\nNote that the port field in the main menu overrides this setting."); gettext("Prometheus listener address"); - gettext("Prometheus listener address.\nIf minetest is compiled with ENABLE_PROMETHEUS option enabled,\nenable metrics listener for Prometheus on that address.\nMetrics can be fetch on http://127.0.0.1:30000/metrics"); + gettext("Prometheus listener address.\nIf Minetest is compiled with ENABLE_PROMETHEUS option enabled,\nenable metrics listener for Prometheus on that address.\nMetrics can be fetched on http://127.0.0.1:30000/metrics"); gettext("Saving map received from server"); gettext("Save the map received by the client on disk."); gettext("Connect to external media server"); @@ -513,7 +519,7 @@ fake_function() { gettext("Max. packets per iteration"); gettext("Maximum number of packets sent per send step, if you have a slow connection\ntry reducing it, but don't reduce it to a number below double of targeted\nclient number."); gettext("Map Compression Level for Network Transfer"); - gettext("ZLib compression level to use when sending mapblocks to the client.\n-1 - Zlib's default compression level\n0 - no compresson, fastest\n9 - best compression, slowest\n(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"); + gettext("Compression level to use when sending mapblocks to the client.\n-1 - use default compression level\n0 - least compression, fastest\n9 - best compression, slowest"); gettext("Game"); gettext("Default game"); gettext("Default game when creating a new world.\nThis will be overridden when creating a world from the main menu."); @@ -616,7 +622,7 @@ fake_function() { gettext("Deprecated Lua API handling"); gettext("Handling for deprecated Lua API calls:\n- none: Do not log deprecated calls\n- log: mimic and log backtrace of deprecated call (default).\n- error: abort on usage of deprecated call (suggested for mod developers)."); gettext("Max. clearobjects extra blocks"); - gettext("Number of extra blocks that can be loaded by /clearobjects at once.\nThis is a trade-off between sqlite transaction overhead and\nmemory consumption (4096=100MB, as a rule of thumb)."); + gettext("Number of extra blocks that can be loaded by /clearobjects at once.\nThis is a trade-off between SQLite transaction overhead and\nmemory consumption (4096=100MB, as a rule of thumb)."); gettext("Unload unused server data"); gettext("How much the server will wait before unloading unused mapblocks.\nHigher value is smoother, but will use more RAM."); gettext("Maximum objects per block"); @@ -624,7 +630,7 @@ fake_function() { gettext("Synchronous SQLite"); gettext("See https://www.sqlite.org/pragma.html#pragma_synchronous"); gettext("Map Compression Level for Disk Storage"); - gettext("ZLib compression level to use when saving mapblocks to disk.\n-1 - Zlib's default compression level\n0 - no compresson, fastest\n9 - best compression, slowest\n(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"); + gettext("Compression level to use when saving mapblocks to disk.\n-1 - use default compression level\n0 - least compression, fastest\n9 - best compression, slowest"); gettext("Dedicated server step"); gettext("Length of a server tick and the interval at which objects are generally updated over\nnetwork."); gettext("Active block management interval"); @@ -673,8 +679,8 @@ fake_function() { gettext("Instrument the action function of Active Block Modifiers on registration."); gettext("Loading Block Modifiers"); gettext("Instrument the action function of Loading Block Modifiers on registration."); - gettext("Chatcommands"); - gettext("Instrument chatcommands on registration."); + gettext("Chat commands"); + gettext("Instrument chat commands on registration."); gettext("Global callbacks"); gettext("Instrument global callback functions on registration.\n(anything you pass to a minetest.register_*() function)"); gettext("Advanced"); @@ -716,7 +722,7 @@ fake_function() { gettext("Map generation limit"); gettext("Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\nOnly mapchunks completely within the mapgen limit are generated.\nValue is stored per-world."); gettext("Mapgen flags"); - gettext("Global map generation attributes.\nIn Mapgen v6 the 'decorations' flag controls all decorations except trees\nand junglegrass, in all other mapgens this flag controls all decorations."); + gettext("Global map generation attributes.\nIn Mapgen v6 the 'decorations' flag controls all decorations except trees\nand jungle grass, in all other mapgens this flag controls all decorations."); gettext("Biome API temperature and humidity noise parameters"); gettext("Heat noise"); gettext("Temperature variation for biomes."); From 1dc1305ada07da8c2a278b46a34d58af86184af9 Mon Sep 17 00:00:00 2001 From: "updatepo.sh" Date: Sat, 27 Nov 2021 19:42:26 +0100 Subject: [PATCH 115/412] Update translation files --- po/ar/minetest.po | 261 +- po/be/minetest.po | 268 +- po/bg/minetest.po | 259 +- po/ca/minetest.po | 266 +- po/cs/minetest.po | 294 +- po/da/minetest.po | 265 +- po/de/minetest.po | 337 +- po/dv/minetest.po | 252 +- po/el/minetest.po | 250 +- po/eo/minetest.po | 303 +- po/es/minetest.po | 279 +- po/et/minetest.po | 261 +- po/eu/minetest.po | 257 +- po/fi/minetest.po | 253 +- po/fil/minetest.po | 240 +- po/fr/minetest.po | 387 +- po/gd/minetest.po | 256 +- po/gl/minetest.po | 245 +- po/he/minetest.po | 261 +- po/hi/minetest.po | 260 +- po/hu/minetest.po | 276 +- po/id/minetest.po | 294 +- po/it/minetest.po | 304 +- po/ja/minetest.po | 357 +- po/jbo/minetest.po | 253 +- po/kk/minetest.po | 245 +- po/kn/minetest.po | 247 +- po/ko/minetest.po | 266 +- po/ky/minetest.po | 251 +- po/lt/minetest.po | 261 +- po/lv/minetest.po | 260 +- po/minetest.pot | 241 +- po/mr/minetest.po | 247 +- po/ms/minetest.po | 331 +- po/ms_Arab/minetest.po | 266 +- po/nb/minetest.po | 262 +- po/nl/minetest.po | 299 +- po/nn/minetest.po | 265 +- po/pl/minetest.po | 282 +- po/pt/minetest.po | 298 +- po/pt_BR/minetest.po | 340 +- po/ro/minetest.po | 260 +- po/ru/minetest.po | 333 +- po/sk/minetest.po | 332 +- po/sl/minetest.po | 260 +- po/sr_Cyrl/minetest.po | 266 +- po/sr_Latn/minetest.po | 247 +- po/sv/minetest.po | 266 +- po/sw/minetest.po | 270 +- po/th/minetest.po | 265 +- po/tr/minetest.po | 334 +- po/tt/minetest.po | 245 +- po/uk/minetest.po | 261 +- po/vi/minetest.po | 246 +- po/yue/minetest.po | 10110 ++++++++++++++++++++------------------- po/zh_CN/minetest.po | 304 +- po/zh_TW/minetest.po | 265 +- 57 files changed, 15714 insertions(+), 9849 deletions(-) diff --git a/po/ar/minetest.po b/po/ar/minetest.po index f442efb65..5f539e66b 100644 --- a/po/ar/minetest.po +++ b/po/ar/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-10-10 21:02+0000\n" "Last-Translator: abidin toumi \n" "Language-Team: Arabic ]" msgid "OK" msgstr "موافق" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "" +msgstr "الأوامر غير المتاحة: " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "حدث خطأ في برنامج Lua النصي:" @@ -300,6 +301,11 @@ msgstr "ثبت $1" msgid "Install missing dependencies" msgstr "ثبت الإعتماديات المفقودة" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "يثبت: نوع الملف \"$1\" غير مدعوم أو هو أرشيف تالف" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -627,7 +633,7 @@ msgstr "المُعادل" #: builtin/mainmenu/dlg_settings_advanced.lua #, fuzzy -msgid "Persistance" +msgid "Persistence" msgstr "استمرار" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -738,14 +744,6 @@ msgstr "تثبيت تعديل: لا يمكن ايجاد الاسم الحقيق msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "تثبيت تعديل: لا يمكن العصور على اسم مجلد مناسب لحزمة التعديلات $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "يثبت: نوع الملف \"$1\" غير مدعوم أو هو أرشيف تالف" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "ثبت: الملف: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "فشل إيجاد تعديل أو حزمة تعديلات صالحة" @@ -1114,10 +1112,6 @@ msgstr "إضاءة سلسة" msgid "Texturing:" msgstr "الإكساء:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "لاستخدام المظللات يجب استخدام تعريف OpenGL." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "" @@ -1150,7 +1144,7 @@ msgstr "سوائل متموجة" msgid "Waving Plants" msgstr "نباتات متموجة" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "انتهت مهلة الاتصال." @@ -1179,7 +1173,8 @@ msgid "Connection error (timed out?)" msgstr "خطأ في الاتصال (انتهاء المهلة؟)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "لا يمكن إيجاد أو تحميل لعبة \"" #: src/client/clientlauncher.cpp @@ -1251,6 +1246,16 @@ msgstr "- قتال اللاعبين: " msgid "- Server Name: " msgstr "- اسم الخادم: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "حدث خطأ:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "المشي التلقائي معطل" @@ -1259,6 +1264,22 @@ msgstr "المشي التلقائي معطل" msgid "Automatic forward enabled" msgstr "المشي التلقائي ممكن" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "تحديث الكاميرا معطل" @@ -1267,6 +1288,10 @@ msgstr "تحديث الكاميرا معطل" msgid "Camera update enabled" msgstr "تحديث الكاميرا مفعل" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "غير كلمة المرور" @@ -1279,6 +1304,10 @@ msgstr "الوضع السينمائي معطل" msgid "Cinematic mode enabled" msgstr "الوضع السينمائي مفعل" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "البرمجة النصية معطلة من جانب العميل" @@ -1287,6 +1316,10 @@ msgstr "البرمجة النصية معطلة من جانب العميل" msgid "Connecting to server..." msgstr "يتصل بالخادوم…" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "تابع" @@ -1324,6 +1357,11 @@ msgstr "" "- عجلة الفأرة: غيير العنصر\n" "- -%s: دردشة\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "ينشىء عميلا…" @@ -1531,6 +1569,21 @@ msgstr "الصوت غير مكتوم" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "غُيرَ مدى الرؤية الى %d" @@ -1914,6 +1967,15 @@ msgstr "الخريطة المصغرة في وضع الأسطح، تكبير x1" msgid "Minimap in texture mode" msgstr "الخريطة المصغرة في وضع الأسطح، تكبير x1" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "فشل تحميل $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "كلمتا المرور غير متطابقتين!" @@ -1922,7 +1984,7 @@ msgstr "كلمتا المرور غير متطابقتين!" msgid "Register and Join" msgstr "سجل وادخل" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2113,7 +2175,8 @@ msgid "Muted" msgstr "مكتوم" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "حجم الصوت: " #. ~ Imperative, as in "Enter/type in text". @@ -2322,6 +2385,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2588,6 +2655,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "الأوامر" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "" @@ -2621,8 +2693,9 @@ msgid "Chat toggle key" msgstr "" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "" +#, fuzzy +msgid "Chat weblinks" +msgstr "الدردشة ظاهرة" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2640,6 +2713,12 @@ msgstr "" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "" @@ -2715,6 +2794,22 @@ msgstr "" msgid "Command key" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "" @@ -2806,7 +2901,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2883,8 +2978,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3002,6 +3097,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -3048,7 +3147,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3076,13 +3182,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3475,7 +3574,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3907,7 +4006,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -3991,7 +4090,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4820,7 +4919,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5113,7 +5212,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5245,7 +5344,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5269,6 +5368,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5409,9 +5512,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5704,26 +5807,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5814,8 +5909,9 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" -msgstr "" +#, fuzzy +msgid "Show name tag backgrounds by default" +msgstr "الخط عريض افتراضيًا" #: src/settings_translation_file.cpp msgid "Shutdown message" @@ -5919,6 +6015,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6029,7 +6133,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6047,7 +6151,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6116,7 +6220,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6279,7 +6383,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6462,6 +6566,10 @@ msgstr "" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6483,7 +6591,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6498,7 +6606,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6624,24 +6732,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6684,6 +6774,9 @@ msgstr "" #~ msgid "Generate Normal Maps" #~ msgstr "ولِد خرائط عادية" +#~ msgid "Install: file: \"$1\"" +#~ msgstr "ثبت: الملف: \"$1\"" + #~ msgid "Main" #~ msgstr "الرئيسية" @@ -6723,11 +6816,17 @@ msgstr "" #~ msgid "Start Singleplayer" #~ msgstr "إلعب فرديا" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "لاستخدام المظللات يجب استخدام تعريف OpenGL." + #~ msgid "View" #~ msgstr "إعرض" #~ msgid "Yes" #~ msgstr "نعم" +#~ msgid "You died." +#~ msgstr "مِت" + #~ msgid "needs_fallback_font" #~ msgstr "yes" diff --git a/po/be/minetest.po b/po/be/minetest.po index bfae449ad..931257dac 100644 --- a/po/be/minetest.po +++ b/po/be/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Belarusian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2019-11-19 23:04+0000\n" "Last-Translator: Viktar Vauchkevich \n" "Language-Team: Belarusian " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Адбылася памылка ў Lua-скрыпце:" @@ -307,6 +306,11 @@ msgstr "Усталяваць" msgid "Install missing dependencies" msgstr "Неабавязковыя залежнасці:" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "Усталёўка: непадтрымліваемы файл тыпу \"$1\" або сапсаваны архіў" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -653,7 +657,8 @@ msgid "Offset" msgstr "Зрух" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Сталасць" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -766,14 +771,6 @@ msgstr "" "Усталёўка мадыфікацыі: не атрымалася знайсці прыдатны каталог для пакунка " "мадыфікацый \"$1\"" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Усталёўка: непадтрымліваемы файл тыпу \"$1\" або сапсаваны архіў" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Усталёўка: файл: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Не атрымалася знайсці прыдатную мадыфікацыю альбо пакунак мадыфікацый" @@ -1151,10 +1148,6 @@ msgstr "Мяккае асвятленне" msgid "Texturing:" msgstr "Тэкстураванне:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Для ўключэння шэйдэраў неабходна выкарыстоўваць OpenGL." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Танальнае адлюстраванне" @@ -1187,7 +1180,7 @@ msgstr "Калыханне вадкасцяў" msgid "Waving Plants" msgstr "Дрыготкія расліны" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Таймаут злучэння." @@ -1216,7 +1209,8 @@ msgid "Connection error (timed out?)" msgstr "Памылка злучэння (таймаут?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Немагчыма знайсці ці загрузіць гульню \"" #: src/client/clientlauncher.cpp @@ -1288,6 +1282,16 @@ msgstr "- PvP: " msgid "- Server Name: " msgstr "- Назва сервера: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Адбылася памылка:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Аўтаматычны рух наперад адключаны" @@ -1296,6 +1300,22 @@ msgstr "Аўтаматычны рух наперад адключаны" msgid "Automatic forward enabled" msgstr "Аўтаматычны рух наперад уключаны" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Абнаўленне камеры адключана" @@ -1304,6 +1324,10 @@ msgstr "Абнаўленне камеры адключана" msgid "Camera update enabled" msgstr "Абнаўленне камеры ўключана" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Змяніць пароль" @@ -1316,6 +1340,11 @@ msgstr "Кінематаграфічны рэжым адключаны" msgid "Cinematic mode enabled" msgstr "Кінематаграфічны рэжым уключаны" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Модынг кліента" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Кліентскія мадыфікацыі выключаныя" @@ -1324,6 +1353,10 @@ msgstr "Кліентскія мадыфікацыі выключаныя" msgid "Connecting to server..." msgstr "Злучэнне з серверам…" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Працягнуць" @@ -1361,6 +1394,11 @@ msgstr "" "- Mouse wheel: абраць прадмет\n" "- %s: размова\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Стварэнне кліента…" @@ -1568,6 +1606,21 @@ msgstr "Гук уключаны" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Бачнасць змененая на %d" @@ -1901,6 +1954,15 @@ msgstr "Мінімапа ў рэжыме паверхні, павелічэнн msgid "Minimap in texture mode" msgstr "Мінімальны памер тэкстуры" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Не атрымалася спампаваць $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Паролі не супадаюць!" @@ -1909,7 +1971,7 @@ msgstr "Паролі не супадаюць!" msgid "Register and Join" msgstr "Зарэгістравацца і далучыцца" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2103,7 +2165,8 @@ msgid "Muted" msgstr "Сцішаны" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Гучнасць: " #. ~ Imperative, as in "Enter/type in text". @@ -2354,6 +2417,10 @@ msgstr "" "Наладка DPI (кропак на цалю) на экране\n" "(не толькі X11/Android), напрыклад, для 4k-экранаў." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2645,6 +2712,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Максімальная колькасць паведамленняў у размове для выключэння" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Загады размовы" + #: src/settings_translation_file.cpp #, fuzzy msgid "Chat font size" @@ -2680,8 +2752,9 @@ msgid "Chat toggle key" msgstr "Клавіша пераключэння размовы" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Загады размовы" +#, fuzzy +msgid "Chat weblinks" +msgstr "Размова паказваецца" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2699,6 +2772,12 @@ msgstr "Клавіша кінематаграфічнага рэжыму" msgid "Clean transparent textures" msgstr "Чыстыя празрыстыя тэкстуры" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Кліент" @@ -2787,6 +2866,22 @@ msgstr "" msgid "Command key" msgstr "Клавіша загаду" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Суцэльнае шкло" @@ -2883,7 +2978,7 @@ msgstr "Празрыстасць перакрыжавання" #, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "Празрыстасць перакрыжавання (паміж 0 і 255)." #: src/settings_translation_file.cpp @@ -2964,8 +3059,8 @@ msgstr "Прадвызначаная гульня" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3094,6 +3189,10 @@ msgstr "Выключыць антычыт" msgid "Disallow empty passwords" msgstr "Забараніць пустыя паролі" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "Даменная назва сервера, што будзе паказвацца ў спісе сервераў." @@ -3142,7 +3241,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3171,13 +3277,6 @@ msgstr "Уключыць абарону мадыфікацый" msgid "Enable players getting damage and dying." msgstr "Дазволіць гульцам атрымоўваць пашкоджанні і паміраць." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Уключыць выпадковы карыстальніцкі ўвод (толькі для тэставання)." @@ -3618,10 +3717,11 @@ msgid "Global callbacks" msgstr "Глабальныя зваротныя выклікі" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Глабальныя параметры генерацыі мапы.\n" "У генератары мапы 6 параметр «decorations» кіруе ўсімі дэкарацыямі,\n" @@ -4114,7 +4214,8 @@ msgstr "" "Звычайна патрабуюцца толькі распрацоўшчыкам ядра" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "Выконваць загады ў размове пры рэгістрацыі." #: src/settings_translation_file.cpp @@ -4209,7 +4310,7 @@ msgstr "Інтэрвал паўтору кнопкі джойсціка" #: src/settings_translation_file.cpp #, fuzzy -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "Тып джойсціка" #: src/settings_translation_file.cpp @@ -5334,7 +5435,7 @@ msgstr "Інтэрвал захавання мапы" #: src/settings_translation_file.cpp #, fuzzy -msgid "Map update time" +msgid "Map shadows update frames" msgstr "Інтэрвал абнаўлення вадкасці" #: src/settings_translation_file.cpp @@ -5655,7 +5756,8 @@ msgid "Mod channels" msgstr "Каналы мадыфікацый" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +#, fuzzy +msgid "Modifies the size of the HUD elements." msgstr "Змяняе памер элеметаў панэлі HUD." #: src/settings_translation_file.cpp @@ -5816,9 +5918,10 @@ msgstr "" "'On_generated. Для большасці карыстальнікаў найлепшым значэннем можа быць 1." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" "Колькасць дадатковых блокаў, што могуць адначасова загружацца загадам /" @@ -5848,6 +5951,10 @@ msgstr "" "Адкрыць меню паўзы калі акно страціла фокус. Не будзе працаваць калі якое-" "небудзь меню ўжо адкрыта." +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -6006,9 +6113,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -6348,26 +6455,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -6480,7 +6579,7 @@ msgstr "" "Пасля змены мовы патрэбна перазапусціць гульню." #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -6607,6 +6706,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp #, fuzzy msgid "" @@ -6727,7 +6834,7 @@ msgstr "Шлях да тэкстур" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6753,7 +6860,7 @@ msgstr "URL рэпазіторыя" #: src/settings_translation_file.cpp #, fuzzy -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "Ідэнтыфікатар джойсціка для выкарыстання" #: src/settings_translation_file.cpp @@ -6840,9 +6947,10 @@ msgstr "" "з падтрымкай шэйдэраў." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "Адчувальнасць восяў джойсціка пры азіранні." #: src/settings_translation_file.cpp @@ -7039,8 +7147,9 @@ msgid "Use bilinear filtering when scaling textures." msgstr "Выкарыстоўваць білінейную фільтрацыю пры маштабаванні тэкстур." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -7244,6 +7353,11 @@ msgstr "Даўжыня водных хваляў" msgid "Waving plants" msgstr "Калыханне раслін" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "Колер вобласці вылучэння" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7273,7 +7387,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7302,7 +7416,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -7448,24 +7562,6 @@ msgstr "Y-узровень нізкага рэльефу і марскога д msgid "Y-level of seabed." msgstr "Y-узровень марскога дна." -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "Таймаўт спампоўвання файла па cURL" @@ -7682,6 +7778,9 @@ msgstr "Ліміт адначасовых злучэнняў cURL" #~ "Калі ўключана адначасова з рэжымам палёту, то вызначае напрамак руху " #~ "адносна кроку гульца." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Усталёўка: файл: \"$1\"" + #~ msgid "Lava depth" #~ msgstr "Глыбіня лавы" @@ -7836,6 +7935,9 @@ msgstr "Ліміт адначасовых злучэнняў cURL" #~ msgid "This font will be used for certain languages." #~ msgstr "Гэты шрыфт будзе выкарыстоўваецца для некаторых моў." +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Для ўключэння шэйдэраў неабходна выкарыстоўваць OpenGL." + #~ msgid "Toggle Cinematic" #~ msgstr "Кінематаграфічнасць" @@ -7871,5 +7973,9 @@ msgstr "Ліміт адначасовых злучэнняў cURL" #~ msgid "Yes" #~ msgstr "Так" +#, fuzzy +#~ msgid "You died." +#~ msgstr "Вы загінулі" + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/bg/minetest.po b/po/bg/minetest.po index 0476ee3e1..f3649f6d2 100644 --- a/po/bg/minetest.po +++ b/po/bg/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-10-08 20:02+0000\n" "Last-Translator: 109247019824 \n" "Language-Team: Bulgarian " +msgstr "Недостъпни команди: " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Грешка в скрипт на Lua:" @@ -301,6 +302,11 @@ msgstr "Инсталиране $1" msgid "Install missing dependencies" msgstr "Инсталиране на липсващи зависимости" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "Инсталиране: Неподдържан вид на файла „$ 1“ или повреден архив" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -630,7 +636,8 @@ msgid "Offset" msgstr "Отместване" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Устойчивост" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -740,14 +747,6 @@ msgstr "" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Инсталиране: Неподдържан вид на файла „$ 1“ или повреден архив" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Инсталиране: файл: „$1“" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "" @@ -778,7 +777,8 @@ msgstr "Списъкът с обществени сървъри е изключ #: builtin/mainmenu/serverlistmgr.lua msgid "Try reenabling public serverlist and check your internet connection." -msgstr "Включете списъка на обществени сървъри и проверете връзката с интернет." +msgstr "" +"Включете списъка на обществени сървъри и проверете връзката с интернет." #: builtin/mainmenu/tab_about.lua msgid "About" @@ -1117,10 +1117,6 @@ msgstr "Гладко осветление" msgid "Texturing:" msgstr "Текстуриране:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "" @@ -1153,7 +1149,7 @@ msgstr "Поклащащи се течности" msgid "Waving Plants" msgstr "Поклащащи се растения" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Времето за свързване изтече." @@ -1182,7 +1178,7 @@ msgid "Connection error (timed out?)" msgstr "Грешка при свързване (изтекло време?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +msgid "Could not find or load game: " msgstr "" #: src/client/clientlauncher.cpp @@ -1254,6 +1250,16 @@ msgstr "- PvP: " msgid "- Server Name: " msgstr "- Име на сървър: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Възникна грешка:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Автоматичното движение напред е изключено" @@ -1262,6 +1268,23 @@ msgstr "Автоматичното движение напред е изключ msgid "Automatic forward enabled" msgstr "Автоматичното движение напред е включено" +#: src/client/game.cpp +#, fuzzy +msgid "Block bounds hidden" +msgstr "Граници на блокове" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Опресняването на екрана при движение е изключено" @@ -1270,6 +1293,10 @@ msgstr "Опресняването на екрана при движение е msgid "Camera update enabled" msgstr "Опресняването на екрана при движение е включено" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Промяна на парола" @@ -1282,6 +1309,10 @@ msgstr "Кинематографичният режим е изключен" msgid "Cinematic mode enabled" msgstr "Кинематографичният режим е включен" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Изпълняване на скриптове от страната на клиента е изключено" @@ -1290,6 +1321,10 @@ msgstr "Изпълняване на скриптове от страната н msgid "Connecting to server..." msgstr "Свързване със сървър…" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Продължаване" @@ -1327,6 +1362,11 @@ msgstr "" "- колелце на мишка: избор на предмет\n" "- %s: разговор\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Създаване на клиент…" @@ -1521,6 +1561,21 @@ msgstr "Звукът е пуснат" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Обхватът на видимостта е променен на %d" @@ -1853,6 +1908,15 @@ msgstr "Картата е в режим на повърхност, мащаб x% msgid "Minimap in texture mode" msgstr "Картата е в режим на текстура" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Грешка при изтеглянето на $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Паролите не съвпадат!" @@ -1861,7 +1925,7 @@ msgstr "Паролите не съвпадат!" msgid "Register and Join" msgstr "Регистриране и вход" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2054,7 +2118,8 @@ msgid "Muted" msgstr "Без звук" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Сила на звука: " #. ~ Imperative, as in "Enter/type in text". @@ -2261,6 +2326,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2527,6 +2596,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Команда" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "" @@ -2560,8 +2634,9 @@ msgid "Chat toggle key" msgstr "" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "" +#, fuzzy +msgid "Chat weblinks" +msgstr "Разговорите са видими" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2579,6 +2654,12 @@ msgstr "" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "" @@ -2654,6 +2735,22 @@ msgstr "" msgid "Command key" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "" @@ -2749,7 +2846,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2826,8 +2923,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -2945,6 +3042,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -2991,7 +3092,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3019,13 +3127,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3418,7 +3519,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3850,7 +3951,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -3934,7 +4035,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4763,7 +4864,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5056,7 +5157,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5188,7 +5289,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5212,6 +5313,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5352,9 +5457,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5647,26 +5752,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5757,7 +5854,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5862,6 +5959,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -5972,7 +6077,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -5990,7 +6095,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6059,7 +6164,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6222,7 +6327,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6405,6 +6510,10 @@ msgstr "" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6426,7 +6535,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6441,7 +6550,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6567,24 +6676,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6597,8 +6688,14 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Инсталиране: файл: „$1“" + #~ msgid "View" #~ msgstr "Гледане" +#~ msgid "You died." +#~ msgstr "Умряхте." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/ca/minetest.po b/po/ca/minetest.po index a388ebfc1..a3e4af7bd 100644 --- a/po/ca/minetest.po +++ b/po/ca/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Catalan (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: Catalan " +msgstr "" + #: builtin/fstk/ui.lua #, fuzzy msgid "An error occurred in a Lua script:" @@ -319,6 +318,13 @@ msgstr "Instal·lar" msgid "Install missing dependencies" msgstr "Dependències opcionals:" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "" +"\n" +"Instal·lar mod: Format de arxiu \"$1\" no suportat o arxiu corrupte" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -664,7 +670,7 @@ msgid "Offset" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +msgid "Persistence" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -783,18 +789,6 @@ msgstr "" "Instal·lar mod: Impossible de trobar el nom de la carpeta adequat per al " "paquet de mods $1" -#: builtin/mainmenu/pkgmgr.lua -#, fuzzy -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" -"\n" -"Instal·lar mod: Format de arxiu \"$1\" no suportat o arxiu corrupte" - -#: builtin/mainmenu/pkgmgr.lua -#, fuzzy -msgid "Install: file: \"$1\"" -msgstr "Instal·lar mod: Arxiu: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua #, fuzzy msgid "Unable to find a valid mod or modpack" @@ -1189,10 +1183,6 @@ msgstr "Il·luminació suau" msgid "Texturing:" msgstr "Texturització:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Per habilitar les ombres el controlador OpenGL ha ser utilitzat." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "" @@ -1227,7 +1217,7 @@ msgstr "Moviment de les Fulles" msgid "Waving Plants" msgstr "Moviment de Plantes" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Temps d'espera de la connexió esgotat." @@ -1256,7 +1246,8 @@ msgid "Connection error (timed out?)" msgstr "Error de connexió (¿temps esgotat?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "No es pot trobar o carregar el joc \"" #: src/client/clientlauncher.cpp @@ -1333,6 +1324,16 @@ msgstr "" msgid "- Server Name: " msgstr "" +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Ha ocorregut un error:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp #, fuzzy msgid "Automatic forward disabled" @@ -1343,6 +1344,22 @@ msgstr "Tecla Avançar" msgid "Automatic forward enabled" msgstr "Tecla Avançar" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp #, fuzzy msgid "Camera update disabled" @@ -1353,6 +1370,10 @@ msgstr "Tecla alternativa per a l'actualització de la càmera" msgid "Camera update enabled" msgstr "Tecla alternativa per a l'actualització de la càmera" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Canviar contrasenya" @@ -1367,6 +1388,11 @@ msgstr "Tecla mode cinematogràfic" msgid "Cinematic mode enabled" msgstr "Tecla mode cinematogràfic" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Client" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "" @@ -1375,6 +1401,10 @@ msgstr "" msgid "Connecting to server..." msgstr "Connectant al servidor ..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Continuar" @@ -1409,6 +1439,11 @@ msgstr "" "- Roda ratolí: triar objecte\n" "- T: xat\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Creant client ..." @@ -1627,6 +1662,21 @@ msgstr "Volum del so" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "" @@ -1968,6 +2018,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Error al instal·lar $1 en $2" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Les contrasenyes no coincideixen!" @@ -1976,7 +2035,7 @@ msgstr "Les contrasenyes no coincideixen!" msgid "Register and Join" msgstr "" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2177,7 +2236,8 @@ msgid "Muted" msgstr "Utilitza la tecla" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Volum de so: " #. ~ Imperative, as in "Enter/type in text". @@ -2413,6 +2473,10 @@ msgstr "" "Ajustar la configuració de punts per polsada (dpi) a la teva pantalla (no " "X11/Sols Android) Ex. per a pantalles amb 4K." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2693,6 +2757,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Comands de xat" + #: src/settings_translation_file.cpp #, fuzzy msgid "Chat font size" @@ -2729,8 +2798,8 @@ msgid "Chat toggle key" msgstr "Tecla alternativa per al xat" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Comands de xat" +msgid "Chat weblinks" +msgstr "" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2748,6 +2817,12 @@ msgstr "Tecla mode cinematogràfic" msgid "Clean transparent textures" msgstr "Netejar textures transparents" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Client" @@ -2833,6 +2908,22 @@ msgstr "" msgid "Command key" msgstr "Tecla comandament" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Connectar vidre" @@ -2932,7 +3023,7 @@ msgstr "Punt de mira Alpha" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -3013,8 +3104,8 @@ msgstr "Joc per defecte" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3135,6 +3226,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -3182,7 +3277,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3210,13 +3312,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Habilitar l'entrada aleatòria d'usuari (només utilitzat per testing)." @@ -3613,7 +3708,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -4054,7 +4149,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -4139,7 +4234,7 @@ msgid "Joystick button repetition interval" msgstr "Interval de repetició del click dret" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -5189,7 +5284,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5491,7 +5586,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5624,7 +5719,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5648,6 +5743,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5792,9 +5891,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -6111,26 +6210,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -6222,7 +6313,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -6332,6 +6423,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6443,7 +6542,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6461,7 +6560,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6530,7 +6629,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6701,7 +6800,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6889,6 +6988,10 @@ msgstr "Onatge" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6910,7 +7013,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6925,7 +7028,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -7055,24 +7158,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -7158,6 +7243,10 @@ msgstr "" #~ msgid "Generate Normal Maps" #~ msgstr "Generar Mapes Normals" +#, fuzzy +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Instal·lar mod: Arxiu: \"$1\"" + #~ msgid "Main" #~ msgstr "Principal" @@ -7202,11 +7291,18 @@ msgstr "" #~ msgid "Start Singleplayer" #~ msgstr "Començar Un Jugador" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Per habilitar les ombres el controlador OpenGL ha ser utilitzat." + #~ msgid "Toggle Cinematic" #~ msgstr "Activar Cinematogràfic" #~ msgid "Yes" #~ msgstr "Sí" +#, fuzzy +#~ msgid "You died." +#~ msgstr "Has mort." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/cs/minetest.po b/po/cs/minetest.po index 922347d55..4a1727dc0 100644 --- a/po/cs/minetest.po +++ b/po/cs/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Czech (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-11-22 18:50+0000\n" "Last-Translator: Ondřej Pfrogner \n" "Language-Team: Czech ]" msgid "OK" msgstr "Dobře" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "" +msgstr "Příkaz není k dispozici: " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Nastala chyba v Lua skriptu:" @@ -268,7 +269,8 @@ msgstr "Základní hra:" #: builtin/mainmenu/dlg_contentstore.lua msgid "ContentDB is not available when Minetest was compiled without cURL" -msgstr "ContentDB není přístupná pokud byl Minetest kompilován bez použití cURL" +msgstr "" +"ContentDB není přístupná pokud byl Minetest kompilován bez použití cURL" #: builtin/mainmenu/dlg_contentstore.lua msgid "Downloading..." @@ -295,6 +297,12 @@ msgstr "Instalovat $1" msgid "Install missing dependencies" msgstr "Instalovat chybějící závislosti" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "" +"Instalace rozšíření: poškozený archiv nebo nepodporovaný typ souboru \"$1\"" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -624,7 +632,8 @@ msgid "Offset" msgstr "Odstup" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Urputnost" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -736,15 +745,6 @@ msgstr "" "Instalace rozšíření: nenalezen vhodný adresář s příslušným názvem pro " "balíček $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" -"Instalace rozšíření: poškozený archiv nebo nepodporovaný typ souboru \"$1\"" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Instalace: soubor: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Platné rozšíření nebylo nalezeno" @@ -1112,10 +1112,6 @@ msgstr "Plynulé osvětlení" msgid "Texturing:" msgstr "Texturování:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Pro zapnutí shaderů musíte používat OpenGL ovladač." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Tone mapping" @@ -1148,7 +1144,7 @@ msgstr "Vlnění Kapalin" msgid "Waving Plants" msgstr "Vlnění rostlin" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Vypršel časový limit připojení." @@ -1177,7 +1173,8 @@ msgid "Connection error (timed out?)" msgstr "Chyba spojení (vypršel čas?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Hru nebylo možné nahrát nebo najít \"" #: src/client/clientlauncher.cpp @@ -1250,6 +1247,16 @@ msgstr "- PvP: " msgid "- Server Name: " msgstr "- Název serveru: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Nastala chyba:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Automatický posun vpřed zakázán" @@ -1258,6 +1265,23 @@ msgstr "Automatický posun vpřed zakázán" msgid "Automatic forward enabled" msgstr "Automatický posun vpřed povolen" +#: src/client/game.cpp +#, fuzzy +msgid "Block bounds hidden" +msgstr "Ohraničení bloku" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Aktualizace kamery (pohledu) zakázána" @@ -1266,6 +1290,10 @@ msgstr "Aktualizace kamery (pohledu) zakázána" msgid "Camera update enabled" msgstr "Aktualizace kamery (pohledu) povolena" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Změnit heslo" @@ -1278,6 +1306,11 @@ msgstr "Filmový režim zakázán" msgid "Cinematic mode enabled" msgstr "Filmový režim povolen" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Lokální mody" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Uživatelské skripty nejsou povoleny" @@ -1286,6 +1319,10 @@ msgstr "Uživatelské skripty nejsou povoleny" msgid "Connecting to server..." msgstr "Připojuji se k serveru..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Pokračovat" @@ -1323,6 +1360,11 @@ msgstr "" "- Kolečko myši: výběr předmětu\n" "- %s: chat\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Vytvářím klienta..." @@ -1529,6 +1571,21 @@ msgstr "Zvuk zapnut" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Omezení dohlédnutí upraveno na %d" @@ -1861,6 +1918,15 @@ msgstr "Minimapa v režimu Povrch, Přiblížení x%d" msgid "Minimap in texture mode" msgstr "Minimapa v režimu Textura" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Selhalo stažení $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Hesla se neshodují!" @@ -1869,7 +1935,7 @@ msgstr "Hesla se neshodují!" msgid "Register and Join" msgstr "Registrovat a Připojit se" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2063,7 +2129,8 @@ msgid "Muted" msgstr "Ztlumeno" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Hlasitost: " #. ~ Imperative, as in "Enter/type in text". @@ -2197,8 +2264,8 @@ msgstr "" "3D šum definující strukturu létajících ostrovů.\n" "Pokud je odlišný od výchozího, může být nutné upravit\n" "\"měřítko\" šumu (výchozí 0.7), jelikož zužování (obrácené hory)\n" -"létajících ostrovů funguje nejlépe pokud je šum v rozmezí přibližně -2.0 až 2" -".0." +"létajících ostrovů funguje nejlépe pokud je šum v rozmezí přibližně -2.0 až " +"2.0." #: src/settings_translation_file.cpp msgid "3D noise defining structure of river canyon walls." @@ -2315,6 +2382,10 @@ msgstr "" "Upraví nastavení DPI pro vaši obrazovku (není pro X11/Android). Pro použití " "například s 4k obrazovkami." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2603,6 +2674,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Doba do zobrazení času pro příkaz v chatu" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Příkazy" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "Velikost písma v chatu" @@ -2636,8 +2712,9 @@ msgid "Chat toggle key" msgstr "Klávesa zobrazení chatu" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Příkazy" +#, fuzzy +msgid "Chat weblinks" +msgstr "Chat zobrazen" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2655,6 +2732,12 @@ msgstr "Klávesa plynulého pohybu kamery" msgid "Clean transparent textures" msgstr "Vynulovat průhledné textury" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Klient" @@ -2742,6 +2825,22 @@ msgstr "" msgid "Command key" msgstr "CMD ⌘" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Propojené sklo" @@ -2839,9 +2938,10 @@ msgid "Crosshair alpha" msgstr "Průhlednost zaměřovače" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" "Průhlednost zaměřovače (0 až 255).\n" "Také určuje barvu zaměřovače" @@ -2923,9 +3023,10 @@ msgid "Default stack size" msgstr "Výchozí velikost hromádky" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" "Určit kvalitu filtrování stínů\n" @@ -3055,6 +3156,10 @@ msgstr "Vypnout anticheat" msgid "Disallow empty passwords" msgstr "Zakázat prázdná hesla" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "Doménové jméno serveru zobrazované na seznamu serverů." @@ -3104,8 +3209,20 @@ msgstr "" "Tato funkce je experimentální a její API se může změnit." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" +"Zapnout filtrování Poissoným diskem.\n" +"Pokud je zapnuto, využívá Poissonův disk pro generování \"měkkých stínů\". V " +"opačném případě je využito filtrování PCF." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" "Zanout zbarvené stíny.\n" @@ -3136,16 +3253,6 @@ msgstr "Zapnout zabezpečení módů" msgid "Enable players getting damage and dying." msgstr "Povolit zraňování a umírání hráčů." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" -"Zapnout filtrování Poissoným diskem.\n" -"Pokud je zapnuto, využívá Poissonův disk pro generování \"měkkých stínů\". V " -"opačném případě je využito filtrování PCF." - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Povolit náhodný uživatelský vstup (pouze pro testování)." @@ -3512,7 +3619,8 @@ msgstr "Konzole Barva pozadí při zobrazení na celou obrazovku (R,G,B)." #: src/settings_translation_file.cpp msgid "Formspec full-screen background opacity (between 0 and 255)." -msgstr "Konzole Průhlednost pozadí při zobrazení na celou obrazovku (0 až 255)." +msgstr "" +"Konzole Průhlednost pozadí při zobrazení na celou obrazovku (0 až 255)." #: src/settings_translation_file.cpp msgid "Forward key" @@ -3589,10 +3697,11 @@ msgid "Global callbacks" msgstr "Globální callback funkce" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Globální parametry generování mapy.\n" "V Generátoru mapy v6 ovládá nastavení \"decorations\" všechny dekorace\n" @@ -4089,7 +4198,8 @@ msgstr "" "Obvykle využíváno jen vývojáři jádra/builtin" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "Instrumentovat chatovací přikazy při registraci." #: src/settings_translation_file.cpp @@ -4179,7 +4289,8 @@ msgid "Joystick button repetition interval" msgstr "Interval opakování tlačítek joysticku" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +#, fuzzy +msgid "Joystick dead zone" msgstr "Mrtvá zóna joysticku" #: src/settings_translation_file.cpp @@ -5265,7 +5376,8 @@ msgid "Map save interval" msgstr "Interval ukládání mapy" #: src/settings_translation_file.cpp -msgid "Map update time" +#, fuzzy +msgid "Map shadows update frames" msgstr "Doba aktualizace mapy" #: src/settings_translation_file.cpp @@ -5559,7 +5671,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5692,7 +5804,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5716,6 +5828,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5860,9 +5976,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -6187,26 +6303,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -6312,8 +6420,9 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" -msgstr "" +#, fuzzy +msgid "Show name tag backgrounds by default" +msgstr "Tučné písmo jako výchozí" #: src/settings_translation_file.cpp msgid "Shutdown message" @@ -6425,6 +6534,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6537,7 +6654,7 @@ msgstr "Cesta k texturám" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6555,7 +6672,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6624,7 +6741,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6790,7 +6907,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6982,6 +7099,11 @@ msgstr "Délka vodních vln" msgid "Waving plants" msgstr "Vlnění rostlin" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "Barva obrysu bloku" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7003,7 +7125,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7018,7 +7140,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -7116,7 +7238,8 @@ msgstr "Hodnota Y pro horní hranici velkých jeskyní." #: src/settings_translation_file.cpp msgid "Y-distance over which caverns expand to full size." -msgstr "Vzdálenost Y, přes kterou se jeskynní dutiny rozšíří do plné velikosti." +msgstr "" +"Vzdálenost Y, přes kterou se jeskynní dutiny rozšíří do plné velikosti." #: src/settings_translation_file.cpp msgid "" @@ -7146,24 +7269,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -7337,6 +7442,9 @@ msgstr "cURL limit paralelních stahování" #~ "Např.: 72 = 20 minut, 360 = 4 minuty, 1 = 24 hodin, 0 = čas zůstává stále " #~ "stejný." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Instalace: soubor: \"$1\"" + #, fuzzy #~ msgid "Lava depth" #~ msgstr "Hloubka velké jeskyně" @@ -7421,6 +7529,9 @@ msgstr "cURL limit paralelních stahování" #~ msgid "Strength of generated normalmaps." #~ msgstr "Síla vygenerovaných normálových map." +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Pro zapnutí shaderů musíte používat OpenGL ovladač." + #~ msgid "Toggle Cinematic" #~ msgstr "Plynulá kamera" @@ -7433,5 +7544,8 @@ msgstr "cURL limit paralelních stahování" #~ msgid "Yes" #~ msgstr "Ano" +#~ msgid "You died." +#~ msgstr "Zemřel jsi." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/da/minetest.po b/po/da/minetest.po index ff40ba138..8e6690227 100644 --- a/po/da/minetest.po +++ b/po/da/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Danish (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2020-03-31 10:14+0000\n" "Last-Translator: sfan5 \n" "Language-Team: Danish " +msgstr "" + #: builtin/fstk/ui.lua #, fuzzy msgid "An error occurred in a Lua script:" @@ -310,6 +309,13 @@ msgstr "Installer" msgid "Install missing dependencies" msgstr "Valgfrie afhængigheder:" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "" +"Installer mod: Filtypen \"$1\" er enten ikke understøttet, ellers er arkivet " +"korrupt" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -656,7 +662,8 @@ msgid "Offset" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Persistens" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -767,16 +774,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" "Installer mod: Kunne ikke finde passende mappe navn for samling af mods $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" -"Installer mod: Filtypen \"$1\" er enten ikke understøttet, ellers er arkivet " -"korrupt" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Installer mod: Fil: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Kan ikke finde en korrekt mod eller samling af mods" @@ -1158,10 +1155,6 @@ msgstr "Glat belysning" msgid "Texturing:" msgstr "Teksturering:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "For at aktivere dybdeskabere skal OpenGL-driveren bruges." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Toneoversættelse" @@ -1196,7 +1189,7 @@ msgstr "Bølgende blade" msgid "Waving Plants" msgstr "Bølgende planter" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Forbindelses fejl (tidsfristen udløb)." @@ -1225,7 +1218,8 @@ msgid "Connection error (timed out?)" msgstr "Forbindelses fejl (udløbelse af tidsfrist?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Kunne ikke finde eller indlæse spil \"" #: src/client/clientlauncher.cpp @@ -1298,6 +1292,16 @@ msgstr "- Spiller mod spiller (PvP): " msgid "- Server Name: " msgstr "- Servernavn: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Der skete en fejl:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp #, fuzzy msgid "Automatic forward disabled" @@ -1308,6 +1312,22 @@ msgstr "Fremadtast" msgid "Automatic forward enabled" msgstr "Fremadtast" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp #, fuzzy msgid "Camera update disabled" @@ -1318,6 +1338,10 @@ msgstr "Tast til ændring af kameraopdatering" msgid "Camera update enabled" msgstr "Tast til ændring af kameraopdatering" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Skift kodeord" @@ -1332,6 +1356,11 @@ msgstr "Tast for filmisk tilstand" msgid "Cinematic mode enabled" msgstr "Tast for filmisk tilstand" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Klient modding" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "" @@ -1340,6 +1369,10 @@ msgstr "" msgid "Connecting to server..." msgstr "Forbinder til server..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Fortsæt" @@ -1377,6 +1410,11 @@ msgstr "" "- Musehjul: vælge genstand\n" "- %s: snakke (chat)\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Opretter klient ..." @@ -1594,6 +1632,21 @@ msgid "Sound unmuted" msgstr "Lydniveau" #: src/client/game.cpp +#, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp #, fuzzy, c-format msgid "Viewing range changed to %d" msgstr "Lydstyrke ændret til %d%%" @@ -1930,6 +1983,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Kunne ikke hente $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Kodeordene er ikke ens!" @@ -1938,7 +2000,7 @@ msgstr "Kodeordene er ikke ens!" msgid "Register and Join" msgstr "" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2138,7 +2200,8 @@ msgid "Muted" msgstr "Lydløs" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Lydstyrke: " #. ~ Imperative, as in "Enter/type in text". @@ -2373,6 +2436,10 @@ msgstr "" "Justér DPI-konfigurationen til din skærm (ikke-X11 / kun Android) f.eks. til " "4k-skærme." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2659,6 +2726,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Ørkenstøjtærskel" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Snakkekommandoer" + #: src/settings_translation_file.cpp #, fuzzy msgid "Chat font size" @@ -2696,8 +2768,8 @@ msgid "Chat toggle key" msgstr "Tast for snak (chat)" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Snakkekommandoer" +msgid "Chat weblinks" +msgstr "" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2715,6 +2787,12 @@ msgstr "Tast for filmisk tilstand" msgid "Clean transparent textures" msgstr "Rene gennemsigtige teksturer" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Klient" @@ -2800,6 +2878,22 @@ msgstr "" msgid "Command key" msgstr "Kommandotast" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Forbind glas" @@ -2897,7 +2991,7 @@ msgstr "Crosshair alpha" #, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "Crosshair alpha (uigennemsigtighed, mellem 0 og 255)." #: src/settings_translation_file.cpp @@ -2977,8 +3071,8 @@ msgstr "Standard spil" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3106,6 +3200,10 @@ msgstr "Deaktiver antisnyd" msgid "Disallow empty passwords" msgstr "Tillad ikke tomme adgangskoder" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "Domænenavn for server, til visning i serverlisten." @@ -3155,7 +3253,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3186,13 +3291,6 @@ msgstr "Aktiver mod-sikkerhed" msgid "Enable players getting damage and dying." msgstr "Aktiver at spillere kan skades og dø." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Aktiver vilkårlig brugerinddata (kun til test)." @@ -3640,7 +3738,7 @@ msgstr "Globale tilbagekald" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Globale kortoprettelsesattributter.\n" "I Mapgen v6 kontrollerer flaget »decorations« alle dekorationer undtagen " @@ -4131,7 +4229,8 @@ msgstr "" "Er normalt kun krævet af kerne/indbygningsbidragydere" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "Udstyr chatkommandoer ved registrering." #: src/settings_translation_file.cpp @@ -4221,7 +4320,7 @@ msgid "Joystick button repetition interval" msgstr "Joystick-knaps gentagelsesinterval" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -5386,7 +5485,7 @@ msgstr "Interval for kortlagring" #: src/settings_translation_file.cpp #, fuzzy -msgid "Map update time" +msgid "Map shadows update frames" msgstr "Væskeopdateringsudløsning" #: src/settings_translation_file.cpp @@ -5696,7 +5795,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5830,7 +5929,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5854,6 +5953,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5999,9 +6102,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -6326,26 +6429,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -6456,7 +6551,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -6563,6 +6658,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6678,7 +6781,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6696,7 +6799,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6766,7 +6869,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6932,7 +7035,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -7125,6 +7228,10 @@ msgstr "Bølgende vand" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7146,7 +7253,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7161,7 +7268,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -7290,24 +7397,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -7468,6 +7557,9 @@ msgstr "" #~ msgid "IPv6 support." #~ msgstr "Understøttelse af IPv6." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Installer mod: Fil: \"$1\"" + #, fuzzy #~ msgid "Lava depth" #~ msgstr "Dybde for stor hule" @@ -7532,11 +7624,18 @@ msgstr "" #~ msgid "Start Singleplayer" #~ msgstr "Enlig spiller" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "For at aktivere dybdeskabere skal OpenGL-driveren bruges." + #~ msgid "Toggle Cinematic" #~ msgstr "Aktiver filmisk" #~ msgid "Yes" #~ msgstr "Ja" +#, fuzzy +#~ msgid "You died." +#~ msgstr "Du døde" + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/de/minetest.po b/po/de/minetest.po index f2947b2dd..b65b6b5ec 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: German (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-06-21 15:38+0000\n" "Last-Translator: Wuzzy \n" "Language-Team: German ]" msgid "OK" msgstr "OK" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "" +msgstr "Befehl nicht verfügbar: " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "In einem Lua-Skript ist ein Fehler aufgetreten:" @@ -296,6 +297,12 @@ msgstr "$1 installieren" msgid "Install missing dependencies" msgstr "Fehlende Abhängigkeiten installieren" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "" +"Installation: Nicht unterstützter Dateityp „$1“ oder fehlerhaftes Archiv" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -628,7 +635,8 @@ msgid "Offset" msgstr "Versatz" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Persistenz" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -740,15 +748,6 @@ msgstr "" "Modinstallation: Geeigneter Verzeichnisname für Modpack $1 konnte nicht " "gefunden werden" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" -"Installation: Nicht unterstützter Dateityp „$1“ oder fehlerhaftes Archiv" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Installation: Datei: „$1“" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Keine gültige Mod oder Modpack gefunden" @@ -1116,10 +1115,6 @@ msgstr "Weiches Licht" msgid "Texturing:" msgstr "Texturierung:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Um Shader zu aktivieren, muss der OpenGL-Treiber genutzt werden." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Dynamikkompression" @@ -1152,7 +1147,7 @@ msgstr "Flüssigkeitswellen" msgid "Waving Plants" msgstr "Wehende Pflanzen" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Verbindungsfehler, Zeitüberschreitung." @@ -1181,7 +1176,8 @@ msgid "Connection error (timed out?)" msgstr "Verbindungsfehler (Zeitüberschreitung?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Spiel konnte nicht gefunden oder geladen werden: \"" #: src/client/clientlauncher.cpp @@ -1253,6 +1249,16 @@ msgstr "- Spielerkampf: " msgid "- Server Name: " msgstr "- Servername: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Ein Fehler ist aufgetreten:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Vorwärtsautomatik deaktiviert" @@ -1261,6 +1267,23 @@ msgstr "Vorwärtsautomatik deaktiviert" msgid "Automatic forward enabled" msgstr "Vorwärtsautomatik aktiviert" +#: src/client/game.cpp +#, fuzzy +msgid "Block bounds hidden" +msgstr "Blockgrenzen" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Kameraaktualisierung deaktiviert" @@ -1269,6 +1292,10 @@ msgstr "Kameraaktualisierung deaktiviert" msgid "Camera update enabled" msgstr "Kameraaktualisierung aktiviert" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Passwort ändern" @@ -1281,6 +1308,11 @@ msgstr "Filmmodus deaktiviert" msgid "Cinematic mode enabled" msgstr "Filmmodus aktiviert" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Client-Modding" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Clientseitige Skripte sind deaktiviert" @@ -1289,6 +1321,10 @@ msgstr "Clientseitige Skripte sind deaktiviert" msgid "Connecting to server..." msgstr "Mit Server verbinden …" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Weiter" @@ -1326,6 +1362,11 @@ msgstr "" "- Mausrad: Gegenstand wählen\n" "- %s: Chat\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Client erstellen …" @@ -1532,6 +1573,21 @@ msgstr "Ton nicht mehr stumm" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Sichtweite geändert auf %d" @@ -1864,6 +1920,15 @@ msgstr "Übersichtskarte im Bodenmodus, Zoom ×%d" msgid "Minimap in texture mode" msgstr "Übersichtskarte im Texturmodus" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Fehler beim Download von $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Passwörter stimmen nicht überein!" @@ -1872,7 +1937,7 @@ msgstr "Passwörter stimmen nicht überein!" msgid "Register and Join" msgstr "Registrieren und beitreten" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2068,7 +2133,8 @@ msgid "Muted" msgstr "Stumm" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Tonlautstärke: " #. ~ Imperative, as in "Enter/type in text". @@ -2099,8 +2165,8 @@ msgid "" "If enabled, virtual joystick will also tap \"Aux1\" button when out of main " "circle." msgstr "" -"(Android) Den virtuellen Joystick benutzen, um die „Aux1“-Taste zu betätigen." -"\n" +"(Android) Den virtuellen Joystick benutzen, um die „Aux1“-Taste zu " +"betätigen.\n" "Falls aktiviert, wird der virtuelle Joystick außerdem die „Aux1“-Taste " "drücken, wenn er sich außerhalb des Hauptkreises befindet." @@ -2337,6 +2403,10 @@ msgid "" "screens." msgstr "DPI des Bildschirms (nicht für X11/Android) z.B. für 4K-Bildschirme." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2637,6 +2707,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Chatbefehlzeitnachrichtenschwellwert" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Chatbefehle" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "Chat-Schriftgröße" @@ -2670,8 +2745,9 @@ msgid "Chat toggle key" msgstr "Taste zum Umschalten des Chatprotokolls" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Chatbefehle" +#, fuzzy +msgid "Chat weblinks" +msgstr "Chat angezeigt" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2689,6 +2765,12 @@ msgstr "Filmmodustaste" msgid "Clean transparent textures" msgstr "Transparente Texturen säubern" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Client" @@ -2780,6 +2862,36 @@ msgstr "" msgid "Command key" msgstr "Befehlstaste" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"ZLib-Kompressionsniveau für Kartenblöcke im Festspeicher.\n" +"-1 - Zlib-Standard-Kompressionsniveau\n" +"0 - keine Kompression, am schnellsten\n" +"9 - beste Kompression, am langsamsten\n" +"(Niveaus 1-3 verwenden Zlibs „schnelles“ Verfahren, 4-9 das normale " +"Verfahren)" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"ZLib-Kompressionsniveau für Kartenblöcke, die zu Clients gesendet werden.\n" +"-1 - Zlib-Standard-Kompressionsniveau\n" +"0 - keine Kompression, am schnellsten\n" +"9 - beste Kompression, am langsamsten\n" +"(Niveaus 1-3 verwenden Zlibs „schnelles“ Verfahren, 4-9 das normale " +"Verfahren)" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Verbundenes Glas" @@ -2879,9 +2991,10 @@ msgid "Crosshair alpha" msgstr "Fadenkreuzundurchsichtigkeit" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" "Fadenkreuzundurchsichtigkeit (Wert zwischen 0 und 255).\n" "Gilt auch für das Objektfadenkreuz" @@ -2965,9 +3078,10 @@ msgid "Default stack size" msgstr "Standardstapelgröße" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" "Definiert die Schattenfilterqualität\n" @@ -3102,6 +3216,10 @@ msgstr "Anti-Cheat deaktivieren" msgid "Disallow empty passwords" msgstr "Leere Passwörter verbieten" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "Domainname des Servers. Wird in der Serverliste angezeigt." @@ -3151,8 +3269,20 @@ msgstr "" "Diese Unterstützung ist experimentell und die API kann sich ändern." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" +"Aktiviert eine Poisson-Scheibenfilterung.\n" +"Falls aktiv, werden Poisson-Scheiben verwendet, um „weiche Schatten“ zu " +"erzeugen. Ansonsten wird die PCF-Filterung benutzt." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" "Aktiviert gefärbte Schatten. \n" @@ -3183,16 +3313,6 @@ msgstr "Modsicherheit aktivieren" msgid "Enable players getting damage and dying." msgstr "Spielerschaden und -tod aktivieren." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" -"Aktiviert eine Poisson-Scheibenfilterung.\n" -"Falls aktiv, werden Poisson-Scheiben verwendet, um „weiche Schatten“ zu " -"erzeugen. Ansonsten wird die PCF-Filterung benutzt." - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Schaltet zufällige Steuerung ein (nur zum Testen verwendet)." @@ -3666,10 +3786,11 @@ msgid "Global callbacks" msgstr "Globale Rückruffunktionen" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Globale Kartengenerierungsattribute.\n" "Im Kartengenerator v6 wird das „decorations“-Flag alle Dekorationen außer\n" @@ -4185,7 +4306,8 @@ msgstr "" "Dies wird normalerweise nur von Haupt-/builtin-Entwicklern benötigt" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "Chatbefehle bei ihrer Registrierung instrumentieren." #: src/settings_translation_file.cpp @@ -4281,7 +4403,8 @@ msgid "Joystick button repetition interval" msgstr "Joystick-Button-Wiederholungsrate" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +#, fuzzy +msgid "Joystick dead zone" msgstr "Joystick-Totbereich" #: src/settings_translation_file.cpp @@ -5401,7 +5524,8 @@ msgid "Map save interval" msgstr "Speicherintervall der Karte" #: src/settings_translation_file.cpp -msgid "Map update time" +#, fuzzy +msgid "Map shadows update frames" msgstr "Kartenupdatezeit" #: src/settings_translation_file.cpp @@ -5733,7 +5857,8 @@ msgid "Mod channels" msgstr "Mod-Kanäle" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +#, fuzzy +msgid "Modifies the size of the HUD elements." msgstr "Modifiziert die Größe der HUD-Leistenelemente." #: src/settings_translation_file.cpp @@ -5890,9 +6015,10 @@ msgstr "" "Für viele Benutzer wird die optimale Einstellung wohl die „1“ sein." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" "Anzahl der zusätzlichen Kartenblöcke, welche mit /clearobjects gleichzeitig\n" @@ -5923,6 +6049,10 @@ msgstr "" "Das Pausemenü öffnen, wenn der Fokus des Fensters verloren geht.\n" "Wird nicht pausieren, wenn ein Formspec geöffnet ist." +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -6099,11 +6229,12 @@ msgid "Prometheus listener address" msgstr "Prometheus-Lauschadresse" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" "Prometheus-Lauschadresse.\n" "Falls Minetest mit der ENABLE_PROMETEUS-Option kompiliert wurde,\n" @@ -6454,23 +6585,11 @@ msgstr "" "zu dunkleren Schatten." #: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" -"Setzt die Schattenupdatezeit.\n" -"Ein niedrigerer Wert bedeutet, dass Schatten und die Karte schneller " -"aktualisiert werden, aber dies verbraucht mehr Ressourcen.\n" -"Minimalwert: 0.001 Sekunden. Maximalwert: 0.2 Sekunden.\n" -"(Beachten Sie die englische Notation mit Punkt als Dezimaltrennzeichen.)" - -#: src/settings_translation_file.cpp +#, fuzzy msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" "Setzt den Radius von weichen Schatten.\n" "Niedrigere Werte führen zu schärferen Schatten, größere Werte führen zu " @@ -6478,10 +6597,11 @@ msgstr "" "Minimalwert: 1.0; Maximalwert: 10.0" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" "Setzt die Neigung vom Sonnen-/Mondorbit in Grad.\n" "0 = keine Neigung / vertikaler Orbit.\n" @@ -6594,7 +6714,8 @@ msgstr "" "Nach Änderung ist ein Neustart erforderlich." #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +#, fuzzy +msgid "Show name tag backgrounds by default" msgstr "Standardmäßig Hintergründe für Namensschilder anzeigen" #: src/settings_translation_file.cpp @@ -6725,6 +6846,14 @@ msgstr "" "bestimmte\n" "(oder alle) Gegenstände setzen kann." +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6856,10 +6985,11 @@ msgid "Texture path" msgstr "Texturenpfad" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" "Texturengröße zum Rendern der Schattenkarte.\n" "Dies muss eine Zweierpotenz sein.\n" @@ -6889,7 +7019,8 @@ msgid "The URL for the content repository" msgstr "Die URL für den Inhaltespeicher" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +#, fuzzy +msgid "The dead zone of the joystick" msgstr "Der Totbereich des Joysticks" #: src/settings_translation_file.cpp @@ -6984,9 +7115,10 @@ msgstr "" "unterstützt." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" "Die Empfindlichkeit der Joystick-Achsen, um den\n" "Pyramidenstumpf der Spielansicht herumzubewegen." @@ -7195,8 +7327,9 @@ msgid "Use bilinear filtering when scaling textures." msgstr "Bilineare Filterung bei der Skalierung von Texturen benutzen." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -7407,6 +7540,11 @@ msgstr "Flüssigkeitswellen: Wellenlänge" msgid "Waving plants" msgstr "Wehende Pflanzen" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "Auswahlboxfarbe" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7433,12 +7571,13 @@ msgstr "" "korrekt unterstützen." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7466,8 +7605,9 @@ msgstr "" "benutzt." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" "Ob Namensschildhintergründe standardmäßig angezeigt werden sollen.\n" @@ -7632,36 +7772,6 @@ msgstr "Y-Höhe von niedrigerem Gelände und dem Meeresgrund." msgid "Y-level of seabed." msgstr "Y-Höhe vom Meeresgrund." -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"ZLib-Kompressionsniveau für Kartenblöcke im Festspeicher.\n" -"-1 - Zlib-Standard-Kompressionsniveau\n" -"0 - keine Kompression, am schnellsten\n" -"9 - beste Kompression, am langsamsten\n" -"(Niveaus 1-3 verwenden Zlibs „schnelles“ Verfahren, 4-9 das normale " -"Verfahren)" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"ZLib-Kompressionsniveau für Kartenblöcke, die zu Clients gesendet werden.\n" -"-1 - Zlib-Standard-Kompressionsniveau\n" -"0 - keine Kompression, am schnellsten\n" -"9 - beste Kompression, am langsamsten\n" -"(Niveaus 1-3 verwenden Zlibs „schnelles“ Verfahren, 4-9 das normale " -"Verfahren)" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "cURL-Dateidownload-Zeitüberschreitung" @@ -7877,6 +7987,9 @@ msgstr "cURL-Parallel-Begrenzung" #~ msgid "IPv6 support." #~ msgstr "IPv6-Unterstützung." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Installation: Datei: „$1“" + #~ msgid "Lava depth" #~ msgstr "Lavatiefe" @@ -7984,6 +8097,18 @@ msgstr "cURL-Parallel-Begrenzung" #~ msgid "Select Package File:" #~ msgstr "Paket-Datei auswählen:" +#~ msgid "" +#~ "Set the shadow update time.\n" +#~ "Lower value means shadows and map updates faster, but it consume more " +#~ "resources.\n" +#~ "Minimun value 0.001 seconds max value 0.2 seconds" +#~ msgstr "" +#~ "Setzt die Schattenupdatezeit.\n" +#~ "Ein niedrigerer Wert bedeutet, dass Schatten und die Karte schneller " +#~ "aktualisiert werden, aber dies verbraucht mehr Ressourcen.\n" +#~ "Minimalwert: 0.001 Sekunden. Maximalwert: 0.2 Sekunden.\n" +#~ "(Beachten Sie die englische Notation mit Punkt als Dezimaltrennzeichen.)" + #~ msgid "Shadow limit" #~ msgstr "Schattenbegrenzung" @@ -8012,6 +8137,9 @@ msgstr "cURL-Parallel-Begrenzung" #~ msgid "This font will be used for certain languages." #~ msgstr "Diese Schrift wird von bestimmten Sprachen benutzt." +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Um Shader zu aktivieren, muss der OpenGL-Treiber genutzt werden." + #~ msgid "Toggle Cinematic" #~ msgstr "Filmmodus umschalten" @@ -8052,5 +8180,8 @@ msgstr "cURL-Parallel-Begrenzung" #~ msgid "Yes" #~ msgstr "Ja" +#~ msgid "You died." +#~ msgstr "Sie sind gestorben." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/dv/minetest.po b/po/dv/minetest.po index ffddc1a13..280d79654 100644 --- a/po/dv/minetest.po +++ b/po/dv/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Dhivehi (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2019-11-10 15:04+0000\n" "Last-Translator: Krock \n" "Language-Team: Dhivehi " +msgstr "" + #: builtin/fstk/ui.lua #, fuzzy msgid "An error occurred in a Lua script:" @@ -302,6 +301,10 @@ msgstr "އަޅާ" msgid "Install missing dependencies" msgstr "ލާޒިމުނޫން ޑިޕެންޑެންސީތައް:" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install: Unsupported file type or broken archive" +msgstr "" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -631,7 +634,7 @@ msgid "Offset" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +msgid "Persistence" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -744,15 +747,6 @@ msgstr "" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" - -#: builtin/mainmenu/pkgmgr.lua -#, fuzzy -msgid "Install: file: \"$1\"" -msgstr "މޮޑް އަޚާ: ފައިލް:\"1$\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "" @@ -1133,10 +1127,6 @@ msgstr "" msgid "Texturing:" msgstr "" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "" @@ -1169,7 +1159,7 @@ msgstr "" msgid "Waving Plants" msgstr "" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "" @@ -1198,7 +1188,7 @@ msgid "Connection error (timed out?)" msgstr "" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +msgid "Could not find or load game: " msgstr "" #: src/client/clientlauncher.cpp @@ -1268,6 +1258,16 @@ msgstr "" msgid "- Server Name: " msgstr "" +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "މޮޑެއްފަދަ ލުއޭ ސްކްރިޕްޓެއްގައި މައްސަލައެއް ދިމާވެއްޖެ:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "" @@ -1277,6 +1277,22 @@ msgstr "" msgid "Automatic forward enabled" msgstr "އަނިޔާވުން ޖައްސާފައި" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "" @@ -1286,6 +1302,10 @@ msgstr "" msgid "Camera update enabled" msgstr "އަނިޔާވުން ޖައްސާފައި" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "" @@ -1299,6 +1319,10 @@ msgstr "" msgid "Cinematic mode enabled" msgstr "އަނިޔާވުން ޖައްސާފައި" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "" @@ -1307,6 +1331,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "" @@ -1330,6 +1358,11 @@ msgid "" "- %s: chat\n" msgstr "" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "" @@ -1541,6 +1574,21 @@ msgstr "" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "" @@ -1873,6 +1921,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "$1 ނޭޅުނު" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "" @@ -1881,7 +1938,7 @@ msgstr "" msgid "Register and Join" msgstr "" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2069,7 +2126,8 @@ msgid "Muted" msgstr "" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, c-format +msgid "Sound Volume: %d%%" msgstr "" #. ~ Imperative, as in "Enter/type in text". @@ -2279,6 +2337,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2546,6 +2608,10 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +msgid "Chat commands" +msgstr "" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "" @@ -2579,7 +2645,7 @@ msgid "Chat toggle key" msgstr "" #: src/settings_translation_file.cpp -msgid "Chatcommands" +msgid "Chat weblinks" msgstr "" #: src/settings_translation_file.cpp @@ -2598,6 +2664,12 @@ msgstr "" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "" @@ -2673,6 +2745,22 @@ msgstr "" msgid "Command key" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "" @@ -2765,7 +2853,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2844,8 +2932,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -2963,6 +3051,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -3009,7 +3101,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3037,13 +3136,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3436,7 +3528,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3868,7 +3960,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -3952,7 +4044,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4781,7 +4873,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5080,7 +5172,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5215,7 +5307,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5239,6 +5331,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5379,9 +5475,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5674,26 +5770,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5784,7 +5872,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5889,6 +5977,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -5999,7 +6095,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6017,7 +6113,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6086,7 +6182,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6249,7 +6345,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6432,6 +6528,10 @@ msgstr "" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6453,7 +6553,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6468,7 +6568,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6595,24 +6695,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6637,6 +6719,10 @@ msgstr "" #~ msgid "FPS in pause menu" #~ msgstr "ޕޯސް މެނޫގައި އެފް.ޕީ.އެސް" +#, fuzzy +#~ msgid "Install: file: \"$1\"" +#~ msgstr "މޮޑް އަޚާ: ފައިލް:\"1$\"" + #, fuzzy #~ msgid "Main menu style" #~ msgstr "މެއިން މެނޫ ސްކްރިޕްޓް" @@ -6657,5 +6743,9 @@ msgstr "" #~ msgid "Select Package File:" #~ msgstr "މޮޑްގެ ފައިލް އިހްތިޔާރުކުރޭ:" +#, fuzzy +#~ msgid "You died." +#~ msgstr "މަރުވީ" + #~ msgid "needs_fallback_font" #~ msgstr "yes" diff --git a/po/el/minetest.po b/po/el/minetest.po index e0a5d314d..dad409dc4 100644 --- a/po/el/minetest.po +++ b/po/el/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Greek (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-06-07 14:33+0000\n" "Last-Translator: THANOS SIOURDAKIS \n" "Language-Team: Greek " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Ένα σφάλμα προέκυψε σε ένα σενάριο Lua:" @@ -291,6 +290,10 @@ msgstr "Εγκατάσταση $1" msgid "Install missing dependencies" msgstr "" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install: Unsupported file type or broken archive" +msgstr "" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -616,7 +619,7 @@ msgid "Offset" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +msgid "Persistence" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -726,14 +729,6 @@ msgstr "" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Εγκατάσταση: αρχείο: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "" @@ -1101,10 +1096,6 @@ msgstr "" msgid "Texturing:" msgstr "" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "" @@ -1137,7 +1128,7 @@ msgstr "" msgid "Waving Plants" msgstr "" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "" @@ -1166,7 +1157,7 @@ msgid "Connection error (timed out?)" msgstr "" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +msgid "Could not find or load game: " msgstr "" #: src/client/clientlauncher.cpp @@ -1236,6 +1227,16 @@ msgstr "" msgid "- Server Name: " msgstr "- Όνομα Διακομιστή: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Παρουσιάστηκε σφάλμα:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "" @@ -1244,6 +1245,22 @@ msgstr "" msgid "Automatic forward enabled" msgstr "" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "" @@ -1252,6 +1269,10 @@ msgstr "" msgid "Camera update enabled" msgstr "" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "" @@ -1264,6 +1285,10 @@ msgstr "" msgid "Cinematic mode enabled" msgstr "" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "" @@ -1272,6 +1297,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Συνέχεια" @@ -1295,6 +1324,11 @@ msgid "" "- %s: chat\n" msgstr "" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "" @@ -1489,6 +1523,21 @@ msgstr "" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "" @@ -1821,6 +1870,14 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/gui/guiChatConsole.cpp +msgid "Failed to open webpage" +msgstr "" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "" @@ -1829,7 +1886,7 @@ msgstr "" msgid "Register and Join" msgstr "" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2016,7 +2073,8 @@ msgid "Muted" msgstr "Σε σίγαση" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Ένταση ήχου: " #. ~ Imperative, as in "Enter/type in text". @@ -2223,6 +2281,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2489,6 +2551,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Εντολή" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "" @@ -2522,7 +2589,7 @@ msgid "Chat toggle key" msgstr "" #: src/settings_translation_file.cpp -msgid "Chatcommands" +msgid "Chat weblinks" msgstr "" #: src/settings_translation_file.cpp @@ -2541,6 +2608,12 @@ msgstr "" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "" @@ -2616,6 +2689,22 @@ msgstr "" msgid "Command key" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "" @@ -2707,7 +2796,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2784,8 +2873,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -2903,6 +2992,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -2949,7 +3042,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -2977,13 +3077,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3376,7 +3469,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3808,7 +3901,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -3892,7 +3985,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4721,7 +4814,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5014,7 +5107,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5146,7 +5239,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5170,6 +5263,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5310,9 +5407,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5605,26 +5702,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5715,7 +5804,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5820,6 +5909,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -5930,7 +6027,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -5948,7 +6045,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6017,7 +6114,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6180,7 +6277,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6363,6 +6460,10 @@ msgstr "" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6384,7 +6485,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6399,7 +6500,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6525,24 +6626,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6561,6 +6644,9 @@ msgstr "" #~ msgid "Credits" #~ msgstr "Μνείες" +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Εγκατάσταση: αρχείο: \"$1\"" + #~ msgid "Name / Password" #~ msgstr "Όνομα / Κωδικός" @@ -6570,5 +6656,9 @@ msgstr "" #~ msgid "Special key" #~ msgstr "Ειδικό πλήκτρο" +#, fuzzy +#~ msgid "You died." +#~ msgstr "Πέθανες" + #~ msgid "needs_fallback_font" #~ msgstr "needs_fallback_font" diff --git a/po/eo/minetest.po b/po/eo/minetest.po index 12fcbe9c1..a343c2d95 100644 --- a/po/eo/minetest.po +++ b/po/eo/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Esperanto (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-10-05 08:09+0000\n" "Last-Translator: phlostically \n" "Language-Team: Esperanto ]" msgid "OK" msgstr "Bone" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "" +msgstr "Komando ne uzeblas: " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Eraris Lua-skripto:" @@ -294,6 +295,11 @@ msgstr "Instali $1" msgid "Install missing dependencies" msgstr "Instali mankantajn dependaĵojn" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "Instalo: Nesubtenata dosierspeco «$1» aŭ rompita arĥivo" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -624,7 +630,8 @@ msgid "Offset" msgstr "Deŝovo" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Persisteco" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -735,14 +742,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" "Instali modifaĵon: Ne povas trovi ĝustan dosierujan nomon por modifaĵaro $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Instalo: Nesubtenata dosierspeco «$1» aŭ rompita arĥivo" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Instali: dosiero: «$1»" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Ne povas trovi validan modifaĵon aŭ modifaĵaron" @@ -1111,10 +1110,6 @@ msgstr "Glata lumado" msgid "Texturing:" msgstr "Teksturado:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Por uzi ombrigilojn, OpenGL-pelilo estas necesa." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Nuanca mapado" @@ -1147,7 +1142,7 @@ msgstr "Ondantaj fluaĵoj" msgid "Waving Plants" msgstr "Ondantaj plantoj" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Konekto eltempiĝis." @@ -1176,7 +1171,8 @@ msgid "Connection error (timed out?)" msgstr "Konekta eraro (ĉu eltempiĝo?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Ne povis trovi aŭ enlegi ludon \"" #: src/client/clientlauncher.cpp @@ -1248,6 +1244,16 @@ msgstr "– LkL: " msgid "- Server Name: " msgstr "– Nomo de servilo: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Eraro okazis:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Memaga pluigo malŝaltita" @@ -1256,6 +1262,22 @@ msgstr "Memaga pluigo malŝaltita" msgid "Automatic forward enabled" msgstr "Memaga pluigo ŝaltita" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Ĝisdatigo de vidpunkto malŝaltita" @@ -1264,6 +1286,10 @@ msgstr "Ĝisdatigo de vidpunkto malŝaltita" msgid "Camera update enabled" msgstr "Ĝisdatigo de vidpunkto ŝaltita" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Ŝanĝi pasvorton" @@ -1276,6 +1302,11 @@ msgstr "Glita vidpunkto malŝaltita" msgid "Cinematic mode enabled" msgstr "Glita vidpunkto ŝaltita" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Klienta modifado" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Klient-flanka skriptado malŝaltita" @@ -1284,6 +1315,10 @@ msgstr "Klient-flanka skriptado malŝaltita" msgid "Connecting to server..." msgstr "Konektante al servilo…" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Daŭrigi" @@ -1321,6 +1356,11 @@ msgstr "" "– Musrado: elekti portaĵon\n" "– %s: babili\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Kreante klienton…" @@ -1527,6 +1567,21 @@ msgstr "Malsilentigite" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Vidodistanco agordita al %d" @@ -1859,6 +1914,15 @@ msgstr "Mapeto en supraĵa reĝimo, zomo ×%d" msgid "Minimap in texture mode" msgstr "Mapeto en tekstura reĝimo" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Malsukcesis elŝuti $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Pasvortoj ne kongruas!" @@ -1867,7 +1931,7 @@ msgstr "Pasvortoj ne kongruas!" msgid "Register and Join" msgstr "Registriĝi kaj aliĝi" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2060,7 +2124,8 @@ msgid "Muted" msgstr "Silentigita" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Laŭteco: " #. ~ Imperative, as in "Enter/type in text". @@ -2314,6 +2379,10 @@ msgstr "" "Ĝustigi punktojn cole al via ekrano (ekster X11/Android), ekzemple por " "kvarmilaj ekranoj." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2610,6 +2679,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Sojlo de babilaj mesaĝoj antaŭ forpelo" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Babilaj komandoj" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "Grandeco de babiluja tiparo" @@ -2643,8 +2717,9 @@ msgid "Chat toggle key" msgstr "Babila baskula klavo" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Babilaj komandoj" +#, fuzzy +msgid "Chat weblinks" +msgstr "Babilo montrita" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2662,6 +2737,12 @@ msgstr "Klavo de glita vidpunkto" msgid "Clean transparent textures" msgstr "Puraj travideblaj teksturoj" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Kliento" @@ -2751,6 +2832,38 @@ msgstr "" msgid "Command key" msgstr "Komanda klavo" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Nivelo de desigo per ZLib uzota por densigi mondopecojn dum konservado sur " +"disko.\n" +"-1 - la implicita nivelo de densigo per Zlib\n" +"0 - neniu densigo, plej rapida\n" +"9 - plej bona densigo, plej malrapida\n" +"(niveloj 1-3 uzas la \"rapidan\" metodon de Zlib; 4-9 uzas la ordinaran " +"metodon)" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Nivelo de desigo per ZLib uzota por densigi mondopecojn dum sendado al " +"kliento.\n" +"-1 - la implicita nivelo de densigo per Zlib\n" +"0 - neniu densigo, plej rapida\n" +"9 - plej bona densigo, plej malrapida\n" +"(niveloj 1-3 uzas la \"rapidan\" metodon de Zlib; 4-9 uzas la ordinaran " +"metodon)" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Kunfandi vitron" @@ -2848,9 +2961,10 @@ msgid "Crosshair alpha" msgstr "Travidebleco de celilo" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" "Travidebleco de celilo (maltravidebleco, inter 0 kaj 255).\n" "Ankaŭ determinas la koloron de la celilo de objekto" @@ -2933,8 +3047,8 @@ msgstr "Implicita grandeco de la kolumno" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3063,6 +3177,10 @@ msgstr "Malŝalti senartifikigon" msgid "Disallow empty passwords" msgstr "Malpermesi malplenajn pasvortojn" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "Domajna nomo de servilo montrota en la listo de serviloj." @@ -3113,7 +3231,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3141,13 +3266,6 @@ msgstr "Ŝalti modifaĵan sekurecon" msgid "Enable players getting damage and dying." msgstr "Ŝalti difektadon kaj mortadon de ludantoj." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Ŝalti hazardan uzulan enigon (nur por testado)." @@ -3596,10 +3714,11 @@ msgid "Global callbacks" msgstr "Mallokaj revokoj" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Ĉieaj atributoj de mondestigo.\n" "En mondestigo v6, la parametro «decorations» regas ĉiujn ornamojn\n" @@ -4090,7 +4209,8 @@ msgstr "" "Ĉi tion normale bezonas nur evoluigistoj de kerno/primitivoj" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "Ekzameni babilajn komandojn je registriĝo." #: src/settings_translation_file.cpp @@ -4183,7 +4303,8 @@ msgid "Joystick button repetition interval" msgstr "Ripeta periodo de stirstangaj klavoj" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +#, fuzzy +msgid "Joystick dead zone" msgstr "Nerespondema zono de stirstango" #: src/settings_translation_file.cpp @@ -5295,7 +5416,7 @@ msgstr "Intervaloj inter konservoj de mondo" #: src/settings_translation_file.cpp #, fuzzy -msgid "Map update time" +msgid "Map shadows update frames" msgstr "Longeco de fluaĵa agociklo" #: src/settings_translation_file.cpp @@ -5616,7 +5737,8 @@ msgid "Mod channels" msgstr "Kanaloj por modifaĵoj" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +#, fuzzy +msgid "Modifies the size of the HUD elements." msgstr "Ŝanĝas la grandecon de eroj de la travida fasado." #: src/settings_translation_file.cpp @@ -5771,9 +5893,10 @@ msgstr "" "uzantoj, la optimuma agordo eble estos «1»." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" "Nombro da aldonaj mondopecoj legontaj de «/clearobjects» je unu fojo.\n" @@ -5804,6 +5927,10 @@ msgstr "" "enluda\n" "fenestro estas malfermita." +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5972,11 +6099,12 @@ msgid "Prometheus listener address" msgstr "Aŭskulta adreso de Prometheus" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" "Aŭskulta adreso de Prometheus.\n" "Se Minetest estas tradukita kun la elekteblo ENABLE_PROMETHEUS ŝaltita,\n" @@ -6318,26 +6446,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -6445,7 +6565,8 @@ msgstr "" "Rerulo necesas post la ŝanĝo." #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +#, fuzzy +msgid "Show name tag backgrounds by default" msgstr "Implicite montri fonojn de nometikedoj" #: src/settings_translation_file.cpp @@ -6568,6 +6689,14 @@ msgstr "" "Notu, ke modifaĵoj aŭ ludoj povas eksplicite agordi kolumnograndojn por iuj " "(aŭ ĉiuj) portaĵoj." +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6702,7 +6831,7 @@ msgstr "Indiko al teksturoj" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6726,7 +6855,8 @@ msgid "The URL for the content repository" msgstr "URL al la deponejo de enhavo" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +#, fuzzy +msgid "The dead zone of the joystick" msgstr "La nerespondema zono de la stirstango" #: src/settings_translation_file.cpp @@ -6819,9 +6949,10 @@ msgstr "" "(eksperimente)" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" "Sentemo de la stirstangaj aksoj por movadi la\n" "enludan vidamplekson." @@ -7013,8 +7144,9 @@ msgid "Use bilinear filtering when scaling textures." msgstr "Uzi dulinearan filtradon skalante teksturojn." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -7222,6 +7354,11 @@ msgstr "Longo de ondoj de ondantaj fluaĵoj" msgid "Waving plants" msgstr "Ondantaj plantoj" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "Koloro de elektujo" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7251,7 +7388,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7276,8 +7413,9 @@ msgstr "" "Malŝaltite, ĉi tio anstataŭe uzigas tiparojn bitbildajn kaj XML-vektorajn." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" "Ĉu implicite montri fonojn de nometikedoj.\n" @@ -7431,38 +7569,6 @@ msgstr "Y-nivelo de malsupra tereno kaj marfundo." msgid "Y-level of seabed." msgstr "Y-nivelo de marplanko." -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Nivelo de desigo per ZLib uzota por densigi mondopecojn dum konservado sur " -"disko.\n" -"-1 - la implicita nivelo de densigo per Zlib\n" -"0 - neniu densigo, plej rapida\n" -"9 - plej bona densigo, plej malrapida\n" -"(niveloj 1-3 uzas la \"rapidan\" metodon de Zlib; 4-9 uzas la ordinaran " -"metodon)" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Nivelo de desigo per ZLib uzota por densigi mondopecojn dum sendado al " -"kliento.\n" -"-1 - la implicita nivelo de densigo per Zlib\n" -"0 - neniu densigo, plej rapida\n" -"9 - plej bona densigo, plej malrapida\n" -"(niveloj 1-3 uzas la \"rapidan\" metodon de Zlib; 4-9 uzas la ordinaran " -"metodon)" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "Tempolimo de dosiere elŝuto de cURL" @@ -7668,6 +7774,9 @@ msgstr "Samtempa limo de cURL" #~ msgid "IPv6 support." #~ msgstr "Subteno de IPv6." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Instali: dosiero: «$1»" + #~ msgid "Lava depth" #~ msgstr "Lafo-profundeco" @@ -7798,6 +7907,9 @@ msgstr "Samtempa limo de cURL" #~ msgid "This font will be used for certain languages." #~ msgstr "Tiu ĉi tiparo uziĝos por iuj lingvoj." +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Por uzi ombrigilojn, OpenGL-pelilo estas necesa." + #~ msgid "Toggle Cinematic" #~ msgstr "Baskuligi glitan vidpunkton" @@ -7830,5 +7942,8 @@ msgstr "Samtempa limo de cURL" #~ msgid "Yes" #~ msgstr "Jes" +#~ msgid "You died." +#~ msgstr "Vi mortis." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/es/minetest.po b/po/es/minetest.po index 933329fb7..816111759 100644 --- a/po/es/minetest.po +++ b/po/es/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Spanish (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-10-06 14:41+0000\n" "Last-Translator: Joaquín Villalba \n" "Language-Team: Spanish ]" msgid "OK" msgstr "Aceptar" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "" +msgstr "Comando no disponible: " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Ha ocurrido un error en un script de Lua:" @@ -296,6 +297,11 @@ msgstr "Instalar $1" msgid "Install missing dependencies" msgstr "Instalar dependencias faltantes" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "Instalar: Formato de archivo \"$1\" no soportado o archivo corrupto" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -628,7 +634,8 @@ msgid "Offset" msgstr "Compensado" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Persistencia" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -740,14 +747,6 @@ msgstr "" "Instalar mod: Imposible encontrar un nombre de carpeta adecuado para el " "paquete de mod $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Instalar: Formato de archivo \"$1\" no soportado o archivo corrupto" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Instalar: Archivo: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Imposible encontrar un mod o paquete de mod" @@ -1115,10 +1114,6 @@ msgstr "Iluminación suave" msgid "Texturing:" msgstr "Texturizado:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Para habilitar los sombreadores debe utilizar el controlador OpenGL." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Mapeado de tonos" @@ -1151,7 +1146,7 @@ msgstr "Movimiento de líquidos" msgid "Waving Plants" msgstr "Movimiento de plantas" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Tiempo de espera de la conexión agotado." @@ -1180,7 +1175,8 @@ msgid "Connection error (timed out?)" msgstr "Error de conexión (¿tiempo agotado?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "No se puede encontrar o cargar el juego \"" #: src/client/clientlauncher.cpp @@ -1254,6 +1250,16 @@ msgstr "- PvP: " msgid "- Server Name: " msgstr "- Nombre del servidor: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Ha ocurrido un error:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Avance automático desactivado" @@ -1262,6 +1268,23 @@ msgstr "Avance automático desactivado" msgid "Automatic forward enabled" msgstr "Avance automático activado" +#: src/client/game.cpp +#, fuzzy +msgid "Block bounds hidden" +msgstr "Límites de bloque" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Actualización de la cámara desactivada" @@ -1270,6 +1293,10 @@ msgstr "Actualización de la cámara desactivada" msgid "Camera update enabled" msgstr "Actualización de la cámara activada" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Cambiar contraseña" @@ -1282,6 +1309,11 @@ msgstr "Modo cinematográfico desactivado" msgid "Cinematic mode enabled" msgstr "Modo cinematográfico activado" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Customización del cliente" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "El Scripting en el lado del cliente está desactivado" @@ -1290,6 +1322,10 @@ msgstr "El Scripting en el lado del cliente está desactivado" msgid "Connecting to server..." msgstr "Conectando al servidor..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Continuar" @@ -1327,6 +1363,11 @@ msgstr "" "- Rueda del ratón: elegir objeto\n" "- %s: chat\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Creando cliente..." @@ -1533,6 +1574,21 @@ msgstr "Sonido no silenciado" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Rango de visión cambiado a %d" @@ -1865,6 +1921,15 @@ msgstr "Minimapa en modo superficie, Zoom x%d" msgid "Minimap in texture mode" msgstr "Minimapa en modo textura" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Fallo al descargar $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "¡Las contraseñas no coinciden!" @@ -1873,7 +1938,7 @@ msgstr "¡Las contraseñas no coinciden!" msgid "Register and Join" msgstr "Registrarse y unirse" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2067,7 +2132,8 @@ msgid "Muted" msgstr "Silenciado" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Volumen del sonido: " #. ~ Imperative, as in "Enter/type in text". @@ -2334,6 +2400,10 @@ msgstr "" "Ajustar la configuración de puntos por pulgada a tu pantalla (no X11/Android " "sólo), por ejemplo para pantallas 4K." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2634,6 +2704,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Umbral de expulsión por mensajes" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Comandos de Chat" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "Tamaño de la fuente del chat" @@ -2667,8 +2742,9 @@ msgid "Chat toggle key" msgstr "Tecla alternativa para el chat" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Comandos de Chat" +#, fuzzy +msgid "Chat weblinks" +msgstr "Chat visible" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2686,6 +2762,12 @@ msgstr "Tecla modo cinematográfico" msgid "Clean transparent textures" msgstr "Limpiar texturas transparentes" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Cliente" @@ -2775,6 +2857,22 @@ msgstr "" msgid "Command key" msgstr "Tecla comando" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Conectar vidrio" @@ -2875,9 +2973,10 @@ msgid "Crosshair alpha" msgstr "Opacidad del punto de mira" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" "Alfa del punto de mira (opacidad, entre 0 y 255).\n" "También controla el color del objeto punto de mira" @@ -2960,8 +3059,8 @@ msgstr "Tamaño por defecto del stack (Montón)" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3091,6 +3190,10 @@ msgstr "Desactivar Anticheat" msgid "Disallow empty passwords" msgstr "No permitir contraseñas vacías" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -3141,8 +3244,20 @@ msgstr "" "El soporte es experimental y la API puede cambiar." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" +"Habilitar filtrado \"poisson disk\".\n" +"Si el valor es \"verdadero\", utiliza \"poisson disk\" para proyectar " +"sombras suaves. De otro modo utiliza filtrado PCF." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" "Habilitar las sombras a color.\n" @@ -3173,16 +3288,6 @@ msgstr "Activar seguridad de mods" msgid "Enable players getting damage and dying." msgstr "Habilitar daños y muerte de jugadores." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" -"Habilitar filtrado \"poisson disk\".\n" -"Si el valor es \"verdadero\", utiliza \"poisson disk\" para proyectar " -"sombras suaves. De otro modo utiliza filtrado PCF." - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Habilitar entrada aleatoria (solo usar para pruebas)." @@ -3639,10 +3744,11 @@ msgid "Global callbacks" msgstr "Llamadas globales" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Atributos del generador de mapas globales.\n" "En el generador de mapas V6 la opción (o marcador) \"decorations\" controla " @@ -4154,7 +4260,8 @@ msgstr "" "Esto solo suele ser necesario para los colaboradores principales o integrados" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "Instrumento de comandos del chat en el registro." #: src/settings_translation_file.cpp @@ -4249,7 +4356,8 @@ msgid "Joystick button repetition interval" msgstr "Intervalo de repetición del botón del Joystick" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +#, fuzzy +msgid "Joystick dead zone" msgstr "Zona muerta del joystick" #: src/settings_translation_file.cpp @@ -5326,8 +5434,8 @@ msgid "" "to become shallower and occasionally dry.\n" "'altitude_dry': Reduces humidity with altitude." msgstr "" -"Atributos de generación de mapas específicos del generador de mapas Valleys." -"\n" +"Atributos de generación de mapas específicos del generador de mapas " +"Valleys.\n" "'altitude_chill': Reduce el calor con la altitud.\n" "'humid_rivers': Aumenta la humedad alrededor de ríos.\n" "'vary_river_depth': Si está activo, la baja humedad y alto calor causan que\n" @@ -5372,7 +5480,8 @@ msgid "Map save interval" msgstr "Intervalo de guardado de mapa" #: src/settings_translation_file.cpp -msgid "Map update time" +#, fuzzy +msgid "Map shadows update frames" msgstr "Tiempo de actualización de mapa" #: src/settings_translation_file.cpp @@ -5703,7 +5812,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5839,7 +5948,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5863,6 +5972,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -6010,9 +6123,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -6331,26 +6444,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -6456,7 +6561,7 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "Fuente en negrita por defecto" #: src/settings_translation_file.cpp @@ -6563,6 +6668,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6674,7 +6787,7 @@ msgstr "Ruta de la textura" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6692,7 +6805,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6761,7 +6874,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6926,7 +7039,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -7117,6 +7230,10 @@ msgstr "Oleaje en el agua" msgid "Waving plants" msgstr "Movimiento de plantas" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7138,7 +7255,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7153,7 +7270,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -7280,24 +7397,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "Tiempo de espera de descarga por cURL" @@ -7501,6 +7600,9 @@ msgstr "Límite de cURL en paralelo" #~ msgid "IPv6 support." #~ msgstr "soporte IPv6." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Instalar: Archivo: \"$1\"" + #, fuzzy #~ msgid "Lava depth" #~ msgstr "Características de la Lava" @@ -7592,6 +7694,10 @@ msgstr "Límite de cURL en paralelo" #~ msgid "Strength of generated normalmaps." #~ msgstr "Fuerza de los mapas normales generados." +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "" +#~ "Para habilitar los sombreadores debe utilizar el controlador OpenGL." + #~ msgid "Toggle Cinematic" #~ msgstr "Activar cinemático" @@ -7607,5 +7713,8 @@ msgstr "Límite de cURL en paralelo" #~ msgid "Yes" #~ msgstr "Sí" +#~ msgid "You died." +#~ msgstr "Has muerto." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/et/minetest.po b/po/et/minetest.po index e7291e874..2cb107d8d 100644 --- a/po/et/minetest.po +++ b/po/et/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Estonian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-06-29 10:33+0000\n" "Last-Translator: Janar Leas \n" "Language-Team: Estonian ]" msgid "OK" msgstr "Valmis" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "" +msgstr "Käsk pole saadaval: " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Lua skriptis ilmnes viga:" @@ -293,6 +294,11 @@ msgstr "Paigalda $1" msgid "Install missing dependencies" msgstr "Paigalda puuduvad sõltuvused" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "Paigaldus: Toetamata failitüüp \"$1\" või katkine arhiiv" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -622,7 +628,8 @@ msgid "Offset" msgstr "Nihe" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Püsivus" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -733,14 +740,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" "Paigalda mod: Sobiva katalooginime leidmine ebaõnnestus mod-komplektile $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Paigaldus: Toetamata failitüüp \"$1\" või katkine arhiiv" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Paigaldus: fail: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Ei leitud sobivat mod-i ega mod-komplekti" @@ -1108,10 +1107,6 @@ msgstr "Sujuv valgustus" msgid "Texturing:" msgstr "Tekstureerimine:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Aktiveerimiseks varjud, nad vajavad OpenGL draiver." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Tooni kaardistamine" @@ -1144,7 +1139,7 @@ msgstr "Lainetavad vedelikud" msgid "Waving Plants" msgstr "Lehvivad taimed" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Ühendus aegus." @@ -1173,7 +1168,8 @@ msgid "Connection error (timed out?)" msgstr "Ühenduse viga (Aeg otsas?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Ei leia ega suuda jätkata mängu \"" #: src/client/clientlauncher.cpp @@ -1245,6 +1241,16 @@ msgstr "- Üksteise vastu: " msgid "- Server Name: " msgstr "- Serveri nimi: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Ilmnes viga:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Automaatne edastus keelatud" @@ -1253,6 +1259,23 @@ msgstr "Automaatne edastus keelatud" msgid "Automatic forward enabled" msgstr "Automaatne edastus lubatud" +#: src/client/game.cpp +#, fuzzy +msgid "Block bounds hidden" +msgstr "Klotsi piirid" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Kaamera värskendamine on keelatud" @@ -1261,6 +1284,10 @@ msgstr "Kaamera värskendamine on keelatud" msgid "Camera update enabled" msgstr "Kaamera värskendamine on lubatud" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Vaheta parooli" @@ -1273,6 +1300,10 @@ msgstr "Filmirežiim on keelatud" msgid "Cinematic mode enabled" msgstr "Filmirežiim on lubatud" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Kliendipoolne skriptimine on keelatud" @@ -1281,6 +1312,10 @@ msgstr "Kliendipoolne skriptimine on keelatud" msgid "Connecting to server..." msgstr "Serveriga ühenduse loomine..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Jätka" @@ -1318,6 +1353,11 @@ msgstr "" "- Hiireratas: vali ese\n" "- %s: vestlus\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Kliendi loomine..." @@ -1524,6 +1564,21 @@ msgstr "Heli taastatud" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Vaate kaugus on nüüd: %d" @@ -1856,6 +1911,15 @@ msgstr "Pinnakaart, Suurendus ×%d" msgid "Minimap in texture mode" msgstr "Pisikaart tekstuur-laadis" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "$1 allalaadimine nurjus" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Paroolid ei ole samad!" @@ -1864,7 +1928,7 @@ msgstr "Paroolid ei ole samad!" msgid "Register and Join" msgstr "Registreeru ja liitu" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2058,7 +2122,8 @@ msgid "Muted" msgstr "Vaigistatud" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Hääle Volüüm: " #. ~ Imperative, as in "Enter/type in text". @@ -2270,6 +2335,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2536,6 +2605,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Vestluskäskluse ajalise sõnumi lävi" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Käsklused" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "" @@ -2569,8 +2643,9 @@ msgid "Chat toggle key" msgstr "Vestluse lülitusklahv" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Käsklused" +#, fuzzy +msgid "Chat weblinks" +msgstr "Vestluse näitamine" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2588,6 +2663,12 @@ msgstr "Filmirežiimi klahv" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "" @@ -2663,6 +2744,22 @@ msgstr "" msgid "Command key" msgstr "Käsuklahv" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Ühenda klaasi" @@ -2754,7 +2851,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2831,8 +2928,8 @@ msgstr "Vaike lasu hulk" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -2952,6 +3049,10 @@ msgstr "Lülita sohituvastus välja" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -2998,7 +3099,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3026,13 +3134,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3422,10 +3523,11 @@ msgid "Global callbacks" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Üldised maailma loome omadused.\n" "Maailma loome v6 puhul lipp 'ilmestused' ei avalda mõju puudele ja \n" @@ -3860,7 +3962,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -3944,7 +4046,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4778,7 +4880,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5071,7 +5173,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5203,7 +5305,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5227,6 +5329,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5367,9 +5473,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5662,26 +5768,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5772,7 +5870,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5877,6 +5975,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -5987,7 +6093,7 @@ msgstr "Tapeedi kaust" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6005,7 +6111,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6074,7 +6180,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6237,7 +6343,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6420,6 +6526,10 @@ msgstr "Vedeliku laine pikkus" msgid "Waving plants" msgstr "Õõtsuvad taimed" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6441,7 +6551,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6456,7 +6566,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6582,24 +6692,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "cURL faili allalaadimine aegus" @@ -6655,6 +6747,9 @@ msgstr "" #~ msgid "Generate Normal Maps" #~ msgstr "Loo normaalkaardistusi" +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Paigaldus: fail: \"$1\"" + #~ msgid "Main" #~ msgstr "Peamine" @@ -6701,6 +6796,9 @@ msgstr "" #~ msgid "Start Singleplayer" #~ msgstr "Alusta üksikmängu" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Aktiveerimiseks varjud, nad vajavad OpenGL draiver." + #, fuzzy #~ msgid "Toggle Cinematic" #~ msgstr "Lülita kiirus sisse" @@ -6711,5 +6809,8 @@ msgstr "" #~ msgid "Yes" #~ msgstr "Jah" +#~ msgid "You died." +#~ msgstr "Said otsa." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/eu/minetest.po b/po/eu/minetest.po index a2f5ed31f..8151e0cbb 100644 --- a/po/eu/minetest.po +++ b/po/eu/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-02-23 15:50+0000\n" "Last-Translator: Osoitz \n" "Language-Team: Basque " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Errore bat gertatu da Lua script batean:" @@ -304,6 +303,13 @@ msgstr "$1 Instalatu" msgid "Install missing dependencies" msgstr "Falta diren mendekotasunak instalatu" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "" +"Instalakuntza: \"$1\" sustengu gabeko fitxategi formatua edo hondatutako " +"fitxategia" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -635,7 +641,8 @@ msgid "Offset" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Iraunkortasuna" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -746,16 +753,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" "Mod instalakuntza: ezinezkoa $1 mod-entzako karpeta izen egokia aurkitzea" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" -"Instalakuntza: \"$1\" sustengu gabeko fitxategi formatua edo hondatutako " -"fitxategia" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Instalakuntza: fitxategia: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Ezinezkoa baliozko mod edo mod pakete bat aurkitzea" @@ -1127,10 +1124,6 @@ msgstr "" msgid "Texturing:" msgstr "" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "" @@ -1163,7 +1156,7 @@ msgstr "" msgid "Waving Plants" msgstr "" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "" @@ -1192,7 +1185,7 @@ msgid "Connection error (timed out?)" msgstr "" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +msgid "Could not find or load game: " msgstr "" #: src/client/clientlauncher.cpp @@ -1262,6 +1255,16 @@ msgstr "" msgid "- Server Name: " msgstr "" +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Errore bat gertatu da:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "" @@ -1270,6 +1273,22 @@ msgstr "" msgid "Automatic forward enabled" msgstr "" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "" @@ -1278,6 +1297,10 @@ msgstr "" msgid "Camera update enabled" msgstr "" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "" @@ -1290,6 +1313,10 @@ msgstr "" msgid "Cinematic mode enabled" msgstr "" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "" @@ -1298,6 +1325,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "" @@ -1321,6 +1352,11 @@ msgid "" "- %s: chat\n" msgstr "" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Bezeroa sortzen..." @@ -1515,6 +1551,21 @@ msgstr "" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Ikusmen barrutia aldatu da: %d" @@ -1847,6 +1898,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Huts egin du $1 deskargatzean" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Pasahitzak ez datoz bat!" @@ -1855,7 +1915,7 @@ msgstr "Pasahitzak ez datoz bat!" msgid "Register and Join" msgstr "Eman izena eta hasi saioa" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2042,7 +2102,8 @@ msgid "Muted" msgstr "" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, c-format +msgid "Sound Volume: %d%%" msgstr "" #. ~ Imperative, as in "Enter/type in text". @@ -2249,6 +2310,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2516,6 +2581,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Agindua" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "" @@ -2549,7 +2619,7 @@ msgid "Chat toggle key" msgstr "" #: src/settings_translation_file.cpp -msgid "Chatcommands" +msgid "Chat weblinks" msgstr "" #: src/settings_translation_file.cpp @@ -2568,6 +2638,12 @@ msgstr "" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "" @@ -2643,6 +2719,22 @@ msgstr "" msgid "Command key" msgstr "Agindua tekla" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "" @@ -2734,7 +2826,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2811,8 +2903,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -2933,6 +3025,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -2979,7 +3075,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3008,13 +3111,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "Ahalbidetu jokalariek kaltea jasotzea eta hiltzea." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3418,7 +3514,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3850,7 +3946,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -3935,7 +4031,7 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "Joystick mota" #: src/settings_translation_file.cpp @@ -4796,7 +4892,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5089,7 +5185,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5221,7 +5317,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5245,6 +5341,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5386,9 +5486,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5681,26 +5781,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5791,7 +5883,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5896,6 +5988,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6006,7 +6106,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6025,7 +6125,7 @@ msgstr "Eduki biltegiaren URL helbidea" #: src/settings_translation_file.cpp #, fuzzy -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "Joystick mota" #: src/settings_translation_file.cpp @@ -6096,7 +6196,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6262,7 +6362,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6445,6 +6545,10 @@ msgstr "" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6466,7 +6570,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6481,7 +6585,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6609,24 +6713,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6652,6 +6738,9 @@ msgstr "" #~ msgid "Downloading and installing $1, please wait..." #~ msgstr "$1 deskargatu eta instalatzen, itxaron mesedez..." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Instalakuntza: fitxategia: \"$1\"" + #~ msgid "Ok" #~ msgstr "Ados" @@ -6661,5 +6750,9 @@ msgstr "" #~ msgid "Special key" #~ msgstr "Berezia tekla" +#, fuzzy +#~ msgid "You died." +#~ msgstr "Hil zara" + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/fi/minetest.po b/po/fi/minetest.po index 90882169d..dfa95fd1a 100644 --- a/po/fi/minetest.po +++ b/po/fi/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-09-19 07:38+0000\n" "Last-Translator: Markus Mikkonen \n" "Language-Team: Finnish " +msgstr "Komento ei ole käytettävissä: " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Lua-skriptissä tapahtui virhe:" @@ -298,6 +299,10 @@ msgstr "Asenna $1" msgid "Install missing dependencies" msgstr "Asenna puuttuvat riippuvuudet" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install: Unsupported file type or broken archive" +msgstr "" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -623,7 +628,7 @@ msgid "Offset" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +msgid "Persistence" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -733,14 +738,6 @@ msgstr "" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Asenna: tiedosto: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "" @@ -1106,10 +1103,6 @@ msgstr "Tasainen valaistus" msgid "Texturing:" msgstr "Teksturointi:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Varjostimien käyttäminen vaatii, että käytössä on OpenGL-ajuri." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "" @@ -1142,7 +1135,7 @@ msgstr "" msgid "Waving Plants" msgstr "" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Yhteys aikakatkaistiin." @@ -1171,7 +1164,7 @@ msgid "Connection error (timed out?)" msgstr "" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +msgid "Could not find or load game: " msgstr "" #: src/client/clientlauncher.cpp @@ -1241,6 +1234,16 @@ msgstr "- PvP: " msgid "- Server Name: " msgstr "- Palvelimen nimi: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Tapahtui virhe:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "" @@ -1249,6 +1252,22 @@ msgstr "" msgid "Automatic forward enabled" msgstr "" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "" @@ -1257,6 +1276,10 @@ msgstr "" msgid "Camera update enabled" msgstr "" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Vaihda salasana" @@ -1269,6 +1292,10 @@ msgstr "" msgid "Cinematic mode enabled" msgstr "" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "" @@ -1277,6 +1304,10 @@ msgstr "" msgid "Connecting to server..." msgstr "Yhdistetään palvelimeen..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Jatka" @@ -1300,6 +1331,11 @@ msgid "" "- %s: chat\n" msgstr "" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Luodaan asiakasta..." @@ -1494,6 +1530,21 @@ msgstr "Ääni palautettu" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "" @@ -1826,6 +1877,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Epäonnistui ladata $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Salasanat eivät täsmää!" @@ -1834,7 +1894,7 @@ msgstr "Salasanat eivät täsmää!" msgid "Register and Join" msgstr "Rekisteröidy ja liity" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2027,7 +2087,8 @@ msgid "Muted" msgstr "Mykistetty" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Äänenvoimakkuus: " #. ~ Imperative, as in "Enter/type in text". @@ -2234,6 +2295,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2500,6 +2565,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Komento" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "" @@ -2533,7 +2603,7 @@ msgid "Chat toggle key" msgstr "" #: src/settings_translation_file.cpp -msgid "Chatcommands" +msgid "Chat weblinks" msgstr "" #: src/settings_translation_file.cpp @@ -2552,6 +2622,12 @@ msgstr "" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Asiakas" @@ -2627,6 +2703,22 @@ msgstr "" msgid "Command key" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "" @@ -2718,7 +2810,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2795,8 +2887,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -2914,6 +3006,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -2960,7 +3056,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -2988,13 +3091,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3387,7 +3483,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3819,7 +3915,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -3903,7 +3999,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4732,7 +4828,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5025,7 +5121,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5157,7 +5253,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5181,6 +5277,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5321,9 +5421,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5616,26 +5716,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5726,7 +5818,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5831,6 +5923,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -5941,7 +6041,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -5959,7 +6059,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6028,7 +6128,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6191,7 +6291,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6374,6 +6474,10 @@ msgstr "" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6395,7 +6499,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6410,7 +6514,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6536,24 +6640,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6566,8 +6652,17 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Asenna: tiedosto: \"$1\"" + #~ msgid "Name / Password" #~ msgstr "Nimi / Salasana" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Varjostimien käyttäminen vaatii, että käytössä on OpenGL-ajuri." + +#~ msgid "You died." +#~ msgstr "Kuolit." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/fil/minetest.po b/po/fil/minetest.po index 785c161a5..939dfbcb3 100644 --- a/po/fil/minetest.po +++ b/po/fil/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -60,10 +60,6 @@ msgstr "" msgid "You died" msgstr "" -#: builtin/client/death_formspec.lua -msgid "You died." -msgstr "" - #: builtin/common/chatcommands.lua msgid "Available commands:" msgstr "" @@ -93,6 +89,10 @@ msgstr "" msgid "OK" msgstr "" +#: builtin/fstk/ui.lua +msgid "" +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "" @@ -291,6 +291,10 @@ msgstr "" msgid "Install missing dependencies" msgstr "" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install: Unsupported file type or broken archive" +msgstr "" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -616,7 +620,7 @@ msgid "Offset" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +msgid "Persistence" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -726,14 +730,6 @@ msgstr "" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "" @@ -1097,10 +1093,6 @@ msgstr "" msgid "Texturing:" msgstr "" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "" @@ -1133,7 +1125,7 @@ msgstr "" msgid "Waving Plants" msgstr "" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "" @@ -1162,7 +1154,7 @@ msgid "Connection error (timed out?)" msgstr "" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +msgid "Could not find or load game: " msgstr "" #: src/client/clientlauncher.cpp @@ -1232,6 +1224,15 @@ msgstr "" msgid "- Server Name: " msgstr "" +#: src/client/game.cpp +msgid "A serialization error occurred:" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "" @@ -1240,6 +1241,22 @@ msgstr "" msgid "Automatic forward enabled" msgstr "" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "" @@ -1248,6 +1265,10 @@ msgstr "" msgid "Camera update enabled" msgstr "" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "" @@ -1260,6 +1281,10 @@ msgstr "" msgid "Cinematic mode enabled" msgstr "" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "" @@ -1268,6 +1293,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "" @@ -1291,6 +1320,11 @@ msgid "" "- %s: chat\n" msgstr "" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "" @@ -1485,6 +1519,21 @@ msgstr "" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "" @@ -1817,6 +1866,14 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/gui/guiChatConsole.cpp +msgid "Failed to open webpage" +msgstr "" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "" @@ -1825,7 +1882,7 @@ msgstr "" msgid "Register and Join" msgstr "" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2012,7 +2069,8 @@ msgid "Muted" msgstr "" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, c-format +msgid "Sound Volume: %d%%" msgstr "" #. ~ Imperative, as in "Enter/type in text". @@ -2219,6 +2277,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2485,6 +2547,10 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +msgid "Chat commands" +msgstr "" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "" @@ -2518,7 +2584,7 @@ msgid "Chat toggle key" msgstr "" #: src/settings_translation_file.cpp -msgid "Chatcommands" +msgid "Chat weblinks" msgstr "" #: src/settings_translation_file.cpp @@ -2537,6 +2603,12 @@ msgstr "" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "" @@ -2612,6 +2684,22 @@ msgstr "" msgid "Command key" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "" @@ -2703,7 +2791,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2780,8 +2868,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -2899,6 +2987,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -2945,7 +3037,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -2973,13 +3072,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3372,7 +3464,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3804,7 +3896,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -3888,7 +3980,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4717,7 +4809,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5010,7 +5102,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5142,7 +5234,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5166,6 +5258,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5306,9 +5402,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5601,26 +5697,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5711,7 +5799,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5816,6 +5904,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -5926,7 +6022,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -5944,7 +6040,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6013,7 +6109,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6176,7 +6272,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6359,6 +6455,10 @@ msgstr "" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6380,7 +6480,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6395,7 +6495,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6521,24 +6621,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" diff --git a/po/fr/minetest.po b/po/fr/minetest.po index bcfe2d77a..3354529ca 100644 --- a/po/fr/minetest.po +++ b/po/fr/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: French (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-09-26 15:58+0000\n" "Last-Translator: waxtatect \n" "Language-Team: French ]" msgid "OK" msgstr "OK" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "" +msgstr "Commande non disponible : " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Une erreur est survenue dans un script Lua :" @@ -296,6 +297,13 @@ msgstr "Installer $1" msgid "Install missing dependencies" msgstr "Installer les dépendances manquantes" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "" +"Installation d'un mod : type de fichier non supporté « $1 » ou archive " +"endommagée" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -628,7 +636,8 @@ msgid "Offset" msgstr "Décalage" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Persistence" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -741,16 +750,6 @@ msgstr "" "Installation un mod : impossible de trouver un nom de dossier valide pour le " "pack de mods $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" -"Installation d'un mod : type de fichier non supporté « $1 » ou archive " -"endommagée" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Installation : fichier : « $1 »" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Impossible de trouver un mod ou un pack de mods valide" @@ -1119,10 +1118,6 @@ msgstr "Lumière douce" msgid "Texturing:" msgstr "Texturisation :" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Pour activer les shaders, le pilote OpenGL doit être utilisé." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Mappage tonal" @@ -1155,7 +1150,7 @@ msgstr "Liquides ondulants" msgid "Waving Plants" msgstr "Plantes ondulantes" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Connexion perdue." @@ -1184,7 +1179,8 @@ msgid "Connection error (timed out?)" msgstr "Erreur de connexion (perte de connexion ?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Impossible de trouver ou charger le jeu \"" #: src/client/clientlauncher.cpp @@ -1256,6 +1252,16 @@ msgstr "– JcJ : " msgid "- Server Name: " msgstr "– Nom du serveur : " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Une erreur est survenue :" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Marche automatique désactivée" @@ -1264,6 +1270,23 @@ msgstr "Marche automatique désactivée" msgid "Automatic forward enabled" msgstr "Marche automatique activée" +#: src/client/game.cpp +#, fuzzy +msgid "Block bounds hidden" +msgstr "Limites des blocs" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Mise à jour de la caméra désactivée" @@ -1272,6 +1295,10 @@ msgstr "Mise à jour de la caméra désactivée" msgid "Camera update enabled" msgstr "Mise à jour de la caméra activée" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Changer de mot de passe" @@ -1284,6 +1311,11 @@ msgstr "Mode cinématique désactivé" msgid "Cinematic mode enabled" msgstr "Mode cinématique activé" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Personnalisation client" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Les scripts côté client sont désactivés" @@ -1292,6 +1324,10 @@ msgstr "Les scripts côté client sont désactivés" msgid "Connecting to server..." msgstr "Connexion au serveur…" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Continuer" @@ -1329,6 +1365,11 @@ msgstr "" "– Molette souris : sélectionner un objet\n" "– %s : tchat\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Création du client…" @@ -1532,6 +1573,21 @@ msgstr "Son rétabli" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Distance de vue réglée sur %d" @@ -1864,6 +1920,15 @@ msgstr "Mini-carte en mode surface, zoom ×%d" msgid "Minimap in texture mode" msgstr "Mini-carte en mode texture" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Échec du téléchargement de $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Les mots de passe ne correspondent pas !" @@ -1872,7 +1937,7 @@ msgstr "Les mots de passe ne correspondent pas !" msgid "Register and Join" msgstr "S'enregistrer et rejoindre" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2066,7 +2131,8 @@ msgid "Muted" msgstr "Muet" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Volume du son : " #. ~ Imperative, as in "Enter/type in text". @@ -2136,8 +2202,8 @@ msgstr "" "Échelle (X,Y,Z) de la fractale en nœuds.\n" "La taille réelle de la fractale sera 2 à 3 fois plus grande.\n" "Ces nombres peuvent être très grands, la fractale n'a pas à être contenue " -"dans le monde. Les augmenter pour « zoomer » dans les détails de la fractale." -"\n" +"dans le monde. Les augmenter pour « zoomer » dans les détails de la " +"fractale.\n" "Le valeur par défaut est pour une forme verticalement écrasée convenant pour " "une île, définir les 3 nombres égaux pour la forme brute." @@ -2258,7 +2324,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "A message to be displayed to all clients when the server crashes." -msgstr "Un message qui sera affiché à tous les joueurs quand le serveur plante." +msgstr "" +"Un message qui sera affiché à tous les joueurs quand le serveur plante." #: src/settings_translation_file.cpp msgid "A message to be displayed to all clients when the server shuts down." @@ -2324,6 +2391,10 @@ msgstr "" "Ajuster la résolution de votre écran (non-X11 / Android seulement) ex. pour " "les écrans 4k." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2548,8 +2619,8 @@ msgid "" msgstr "" "Distance de la caméra « près du plan de coupure » dans les nœuds, entre 0 et " "0,25\n" -"Ne fonctionne que sur les plateformes GLES. La plupart des utilisateurs n’" -"auront pas besoin de changer cela.\n" +"Ne fonctionne que sur les plateformes GLES. La plupart des utilisateurs " +"n’auront pas besoin de changer cela.\n" "L’augmentation peut réduire les artefacts sur des GPUs plus faibles.\n" "0,1 = Défaut, 0,25 = Bonne valeur pour les tablettes plus faibles." @@ -2622,6 +2693,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Seuil du message de temps de commande de tchat" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Commandes de tchat" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "Taille de police du tchat" @@ -2655,8 +2731,9 @@ msgid "Chat toggle key" msgstr "Afficher le tchat" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Commandes de tchat" +#, fuzzy +msgid "Chat weblinks" +msgstr "Tchat affiché" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2674,6 +2751,12 @@ msgstr "Mode cinématique" msgid "Clean transparent textures" msgstr "Textures transparentes filtrées" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Client" @@ -2762,6 +2845,38 @@ msgstr "" msgid "Command key" msgstr "Commande" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Niveau de compression Zlib à utiliser lors de la sauvegarde des mapblocks " +"sur le disque.\n" +"-1 - niveau de compression de Zlib par défaut\n" +"0 - aucune compression, le plus rapide\n" +"9 - meilleure compression, le plus lent\n" +"(les niveaux 1–3 utilisent la méthode « rapide », 4–9 utilisent la méthode " +"normale)" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Niveau de compression Zlib à utiliser lors de l'envoi des mapblocks au " +"client.\n" +"-1 - niveau de compression de Zlib par défaut\n" +"0 - aucune compression, le plus rapide\n" +"9 - meilleure compression, le plus lent\n" +"(les niveaux 1–3 utilisent la méthode « rapide », 4–9 utilisent la méthode " +"normale)" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Verre unifié" @@ -2862,9 +2977,10 @@ msgid "Crosshair alpha" msgstr "Opacité du réticule" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" "Opacité du réticule (entre 0 et 255).\n" "Contrôle également la couleur du réticule de l'objet" @@ -2946,9 +3062,10 @@ msgid "Default stack size" msgstr "Taille d’empilement par défaut" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" "Définir la qualité du filtrage des ombres. Ceci simule l'effet d'ombres " @@ -3082,6 +3199,10 @@ msgstr "Désactiver l'anti-triche" msgid "Disallow empty passwords" msgstr "Refuser les mots de passe vides" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "Nom de domaine du serveur affichée sur la liste des serveurs." @@ -3131,8 +3252,20 @@ msgstr "" "Ce support est expérimental et l'API peut changer." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" +"Active le filtrage par disque de Poisson.\n" +"Si activé, utilise le disque de Poisson pour créer des « ombres douces ». " +"Sinon, utilise le filtrage PCF." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" "Active les ombres colorées.\n" @@ -3163,16 +3296,6 @@ msgstr "Activer la sécurisation des mods" msgid "Enable players getting damage and dying." msgstr "Active les dégâts et la mort des joueurs." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" -"Active le filtrage par disque de Poisson.\n" -"Si activé, utilise le disque de Poisson pour créer des « ombres douces ». " -"Sinon, utilise le filtrage PCF." - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3549,7 +3672,8 @@ msgstr "Couleur de l'arrière-plan en plein écran des formspec (R,V,B)." #: src/settings_translation_file.cpp msgid "Formspec full-screen background opacity (between 0 and 255)." -msgstr "Opacité de l'arrière-plan en plein écran des formspec (entre 0 et 255)." +msgstr "" +"Opacité de l'arrière-plan en plein écran des formspec (entre 0 et 255)." #: src/settings_translation_file.cpp msgid "Forward key" @@ -3632,10 +3756,11 @@ msgid "Global callbacks" msgstr "Rappels globaux" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Attributs de génération de terrain globaux.\n" "Dans le générateur de terrain v6, le drapeau « décorations » contrôle toutes " @@ -4096,8 +4221,8 @@ msgid "" "debug.txt is only moved if this setting is positive." msgstr "" "Si la taille du fichier « debug.txt » dépasse le nombre de mégaoctets " -"spécifié par ce paramètre ; une fois ouvert, le fichier est déplacé vers « " -"debug.txt.1 » et supprime l'ancien « debug.txt.1 » s'il existe.\n" +"spécifié par ce paramètre ; une fois ouvert, le fichier est déplacé vers " +"« debug.txt.1 » et supprime l'ancien « debug.txt.1 » s'il existe.\n" "« debug.tx t» est déplacé seulement si ce paramètre est activé." #: src/settings_translation_file.cpp @@ -4145,7 +4270,8 @@ msgstr "" "noyau" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "Instrument d'enregistrement des commandes de tchat." #: src/settings_translation_file.cpp @@ -4242,7 +4368,8 @@ msgid "Joystick button repetition interval" msgstr "Intervalle de répétition des boutons de la manette" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +#, fuzzy +msgid "Joystick dead zone" msgstr "Zone morte de la manette" #: src/settings_translation_file.cpp @@ -5357,7 +5484,8 @@ msgid "Map save interval" msgstr "Intervalle de sauvegarde de la carte" #: src/settings_translation_file.cpp -msgid "Map update time" +#, fuzzy +msgid "Map shadows update frames" msgstr "Intervalle de mise à jour de la carte" #: src/settings_translation_file.cpp @@ -5680,7 +5808,8 @@ msgid "Mod channels" msgstr "Canaux de mods" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +#, fuzzy +msgid "Modifies the size of the HUD elements." msgstr "Modifie la taille des éléments de la barre d'action principale." #: src/settings_translation_file.cpp @@ -5832,15 +5961,16 @@ msgstr "" "ATTENTION : augmenter le nombre de processus « emerge » accélère bien la\n" "création de terrain, mais cela peut nuire à la performance du jeu en " "interférant\n" -"avec d’autres processus, en particulier en mode solo et/ou lors de l’" -"exécution de\n" +"avec d’autres processus, en particulier en mode solo et/ou lors de " +"l’exécution de\n" "code Lua en mode « on_generated ». Pour beaucoup, le réglage optimal peut " "être « 1 »." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" "Nombre d'extra-mapblocks qui peuvent être chargés par « /clearobjects » dans " @@ -5872,6 +6002,10 @@ msgstr "" "Ouvre le menu pause lorsque la sélection de la fenêtre est perdue. Ne met " "pas en pause si un formspec est ouvert." +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -6048,11 +6182,12 @@ msgid "Prometheus listener address" msgstr "Adresse d'écoute pour Prometheus" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" "Adresse d'écoute pour Prometheus.\n" "Lorsque Minetest est compilé avec l'option ENABLE_PROMETHEUS, cette adresse " @@ -6138,8 +6273,8 @@ msgstr "" "CHAT_MESSAGES : 2 (désactive l'appel « send_chat_message côté » client)\n" "READ_ITEMDEFS : 4 (désactive l'appel « get_item_def côté » client)\n" "READ_NODEDEFS : 8 (désactive l'appel « get_node_def » côté client)\n" -"LOOKUP_NODES_LIMIT : 16 (limite l'appel « get_node » côté client à « " -"csm_restriction_noderange »)\n" +"LOOKUP_NODES_LIMIT : 16 (limite l'appel « get_node » côté client à " +"« csm_restriction_noderange »)\n" "READ_PLAYERINFO : 32 (désactive l'appel « get_player_names » côté client)" #: src/settings_translation_file.cpp @@ -6404,22 +6539,11 @@ msgstr "" "élevée signifie des ombres plus sombres." #: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" -"Définit le temps de mise à jour des ombres.\n" -"Une valeur plus faible signifie que les ombres et les mises à jour de la " -"carte sont plus rapides, mais cela consomme plus de ressources.\n" -"Valeur minimale 0,001 seconde et maximale 0,2 seconde." - -#: src/settings_translation_file.cpp +#, fuzzy msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" "Définit la taille du rayon de l'ombre douce.\n" "Les valeurs les plus faibles signifient des ombres plus nettes, les valeurs " @@ -6427,10 +6551,11 @@ msgstr "" "Valeur minimale 1,0 et maximale 10,0." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" "Définit l'inclinaison de l'orbite du soleil/lune en degrés.\n" "La valeur de 0 signifie aucune inclinaison/orbite verticale.\n" @@ -6543,7 +6668,8 @@ msgstr "" "Un redémarrage est nécessaire après cette modification." #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +#, fuzzy +msgid "Show name tag backgrounds by default" msgstr "Afficher l'arrière-plan des badges par défaut" #: src/settings_translation_file.cpp @@ -6559,8 +6685,8 @@ msgid "" "Altering this value is for special usage, leaving it unchanged is\n" "recommended." msgstr "" -"Taille des mapchunks générés à la création de terrain, définie en mapblocks (" -"16 nœuds).\n" +"Taille des mapchunks générés à la création de terrain, définie en mapblocks " +"(16 nœuds).\n" "ATTENTION ! : Il n’y a aucun avantage, et plusieurs dangers, à augmenter " "cette valeur au-dessus de 5.\n" "Réduire cette valeur augmente la densité de cavernes et de donjons.\n" @@ -6675,6 +6801,14 @@ msgstr "" "Les mods ou les parties peuvent fixer explicitement une pile pour certains " "items." +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6741,13 +6875,13 @@ msgstr "" "L'eau est désactivée par défaut et ne sera placée que si cette valeur est " "définie à plus de « mgv7_floatland_ymax » - « mgv7_floatland_taper » (début " "de l’effilage du haut).\n" -"***ATTENTION, DANGER POTENTIEL AU MONDES ET AUX PERFORMANCES DES SERVEURS*** " -":\n" +"***ATTENTION, DANGER POTENTIEL AU MONDES ET AUX PERFORMANCES DES " +"SERVEURS*** :\n" "Lorsque le placement de l'eau est activé, les terrains flottants doivent " -"être configurés et vérifiés pour être une couche solide en mettant « " -"mgv7_floatland_density » à 2,0 (ou autre valeur dépendante de « " -"mgv7_np_floatland »), pour éviter les chutes d'eaux énormes qui surchargent " -"les serveurs et pourraient inonder les terres en dessous." +"être configurés et vérifiés pour être une couche solide en mettant " +"« mgv7_floatland_density » à 2,0 (ou autre valeur dépendante de " +"« mgv7_np_floatland »), pour éviter les chutes d'eaux énormes qui " +"surchargent les serveurs et pourraient inonder les terres en dessous." #: src/settings_translation_file.cpp msgid "Synchronous SQLite" @@ -6806,10 +6940,11 @@ msgid "Texture path" msgstr "Chemin des textures" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" "Taille de la texture pour le rendu de la « shadow map ».\n" "Il doit s'agir d'une puissance de deux.\n" @@ -6838,7 +6973,8 @@ msgid "The URL for the content repository" msgstr "L'URL du dépôt de contenu en ligne" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +#, fuzzy +msgid "The dead zone of the joystick" msgstr "La zone morte de la manette" #: src/settings_translation_file.cpp @@ -6910,8 +7046,8 @@ msgid "" msgstr "" "Le rayon du volume de blocs autour de chaque joueur soumis au bloc actif, " "définie en mapblocks (16 nœuds).\n" -"Dans les blocs actifs, les objets sont chargés et les « ABMs » sont exécutés." -"\n" +"Dans les blocs actifs, les objets sont chargés et les « ABMs » sont " +"exécutés.\n" "C'est également la distance minimale dans laquelle les objets actifs (mobs) " "sont conservés.\n" "Ceci devrait être configuré avec « active_object_send_range_blocks »." @@ -6934,9 +7070,10 @@ msgstr "" "et OGLES2 (expérimental)" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" "Sensibilité des axes de la manette pour déplacer la vue en jeu autour du " "tronc." @@ -7145,8 +7282,9 @@ msgid "Use bilinear filtering when scaling textures." msgstr "Utilisation du filtrage bilinéaire." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -7355,6 +7493,11 @@ msgstr "Longueur d'onde des liquides ondulants" msgid "Waving plants" msgstr "Plantes ondulantes" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "Couleur des bords de sélection" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7379,12 +7522,13 @@ msgstr "" "matériel." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7412,8 +7556,9 @@ msgstr "" "remplacement." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" "Si l'arrière-plan des badges doit être affiché par défaut.\n" @@ -7484,8 +7629,8 @@ msgid "" "Contains the same information as the file debug.txt (default name)." msgstr "" "Systèmes Windows seulement : démarrer Minetest avec la fenêtre de ligne de " -"commande en arrière-plan. Contient les mêmes informations que le fichier « " -"debug.txt » (nom par défaut)." +"commande en arrière-plan. Contient les mêmes informations que le fichier " +"« debug.txt » (nom par défaut)." #: src/settings_translation_file.cpp msgid "" @@ -7573,38 +7718,6 @@ msgstr "Limite Y du plus bas terrain et des fonds marins." msgid "Y-level of seabed." msgstr "Limite Y du fond marin." -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Niveau de compression Zlib à utiliser lors de la sauvegarde des mapblocks " -"sur le disque.\n" -"-1 - niveau de compression de Zlib par défaut\n" -"0 - aucune compression, le plus rapide\n" -"9 - meilleure compression, le plus lent\n" -"(les niveaux 1–3 utilisent la méthode « rapide », 4–9 utilisent la méthode " -"normale)" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Niveau de compression Zlib à utiliser lors de l'envoi des mapblocks au " -"client.\n" -"-1 - niveau de compression de Zlib par défaut\n" -"0 - aucune compression, le plus rapide\n" -"9 - meilleure compression, le plus lent\n" -"(les niveaux 1–3 utilisent la méthode « rapide », 4–9 utilisent la méthode " -"normale)" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "Délai d'interruption de cURL lors d'un téléchargement de fichier" @@ -7808,6 +7921,9 @@ msgstr "Limite parallèle de cURL" #~ msgid "IPv6 support." #~ msgstr "Support IPv6." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Installation : fichier : « $1 »" + #~ msgid "Lava depth" #~ msgstr "Profondeur de lave" @@ -7912,6 +8028,17 @@ msgstr "Limite parallèle de cURL" #~ msgid "Select Package File:" #~ msgstr "Sélectionner le fichier du mod :" +#~ msgid "" +#~ "Set the shadow update time.\n" +#~ "Lower value means shadows and map updates faster, but it consume more " +#~ "resources.\n" +#~ "Minimun value 0.001 seconds max value 0.2 seconds" +#~ msgstr "" +#~ "Définit le temps de mise à jour des ombres.\n" +#~ "Une valeur plus faible signifie que les ombres et les mises à jour de la " +#~ "carte sont plus rapides, mais cela consomme plus de ressources.\n" +#~ "Valeur minimale 0,001 seconde et maximale 0,2 seconde." + #~ msgid "Shadow limit" #~ msgstr "Limite des ombres" @@ -7940,6 +8067,9 @@ msgstr "Limite parallèle de cURL" #~ msgid "This font will be used for certain languages." #~ msgstr "Cette police sera utilisée pour certaines langues." +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Pour activer les shaders, le pilote OpenGL doit être utilisé." + #~ msgid "Toggle Cinematic" #~ msgstr "Mode cinématique" @@ -7980,5 +8110,8 @@ msgstr "Limite parallèle de cURL" #~ msgid "Yes" #~ msgstr "Oui" +#~ msgid "You died." +#~ msgstr "Vous êtes mort." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/gd/minetest.po b/po/gd/minetest.po index 88aaa36d9..ad0acb1e0 100644 --- a/po/gd/minetest.po +++ b/po/gd/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-08-19 06:36+0000\n" "Last-Translator: GunChleoc \n" "Language-Team: Gaelic " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "" @@ -299,6 +299,12 @@ msgstr "" msgid "Install missing dependencies" msgstr "" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "" +"Stàladh: Faidhle dhen t-seòrsa “$1” ris nach eil taic no tasglann bhriste" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -624,7 +630,7 @@ msgid "Offset" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +msgid "Persistence" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -734,15 +740,6 @@ msgstr "" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" -"Stàladh: Faidhle dhen t-seòrsa “$1” ris nach eil taic no tasglann bhriste" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "" @@ -1109,12 +1106,6 @@ msgstr "" msgid "Texturing:" msgstr "" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" -"Airson sgàileadairean a chur an comas, feumaidh tu draibhear OpenGL a " -"chleachdadh." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "" @@ -1147,7 +1138,7 @@ msgstr "" msgid "Waving Plants" msgstr "" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "" @@ -1176,7 +1167,7 @@ msgid "Connection error (timed out?)" msgstr "" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +msgid "Could not find or load game: " msgstr "" #: src/client/clientlauncher.cpp @@ -1255,6 +1246,15 @@ msgstr " " msgid "- Server Name: " msgstr " " +#: src/client/game.cpp +msgid "A serialization error occurred:" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "" @@ -1263,6 +1263,22 @@ msgstr "" msgid "Automatic forward enabled" msgstr "" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "" @@ -1271,6 +1287,10 @@ msgstr "" msgid "Camera update enabled" msgstr "" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "" @@ -1283,6 +1303,10 @@ msgstr "" msgid "Cinematic mode enabled" msgstr "Tha am modh film an comas" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "" @@ -1291,6 +1315,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "" @@ -1328,6 +1356,11 @@ msgstr "" "- Cuibhle na luchaige: tagh nì\n" "- %s: cabadaich\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "" @@ -1522,6 +1555,21 @@ msgstr "" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "" @@ -1854,6 +1902,14 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/gui/guiChatConsole.cpp +msgid "Failed to open webpage" +msgstr "" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "" @@ -1862,7 +1918,7 @@ msgstr "" msgid "Register and Join" msgstr "" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2049,8 +2105,8 @@ msgid "Muted" msgstr "" #: src/gui/guiVolumeChange.cpp -#, fuzzy -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr " " #. ~ Imperative, as in "Enter/type in text". @@ -2265,6 +2321,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2538,6 +2598,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Tha a’ chabadaich ’ga shealltainn" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "" @@ -2571,8 +2636,9 @@ msgid "Chat toggle key" msgstr "" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "" +#, fuzzy +msgid "Chat weblinks" +msgstr "Tha a’ chabadaich ’ga shealltainn" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2590,6 +2656,12 @@ msgstr "" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "" @@ -2665,6 +2737,22 @@ msgstr "" msgid "Command key" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "" @@ -2756,7 +2844,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2833,8 +2921,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -2954,6 +3042,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -3000,7 +3092,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3028,13 +3127,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3437,10 +3529,11 @@ msgid "Global callbacks" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Buadhan gintinn mapa uile-choitcheann.\n" "Ann an gineadair nam mapa v6, stiùirichidh bratach “decorations” sgeadachadh " @@ -3898,7 +3991,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -3987,7 +4080,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4979,7 +5072,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5280,7 +5373,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5417,7 +5510,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5443,6 +5536,10 @@ msgstr "" "Fosgail clàr-taice a’ chuir ’na stad nuair a chailleas an uinneag am fòcas.\n" "Cha dèid a chur ’na stad nuair a bhios formspec fosgailte." +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5586,9 +5683,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5883,26 +5980,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5993,7 +6082,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -6105,6 +6194,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6230,7 +6327,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6248,7 +6345,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6320,7 +6417,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6487,7 +6584,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6672,6 +6769,10 @@ msgstr "" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6693,7 +6794,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6708,7 +6809,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6845,24 +6946,6 @@ msgstr "Àirde-Y a’ chrutha-thìre ìosal agus grunnd na mara." msgid "Y-level of seabed." msgstr "Àirde-Y aig grunnd na mara." -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6883,5 +6966,10 @@ msgstr "" #~ "Claonadh na h-èifeachd occlusion na paraileig air fheadh, seo sgèile/2 " #~ "mar as àbhaist." +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "" +#~ "Airson sgàileadairean a chur an comas, feumaidh tu draibhear OpenGL a " +#~ "chleachdadh." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/gl/minetest.po b/po/gl/minetest.po index a9afc1ac6..839b6d654 100644 --- a/po/gl/minetest.po +++ b/po/gl/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2020-07-08 20:47+0000\n" "Last-Translator: sfan5 \n" "Language-Team: Galician " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "" @@ -296,6 +295,10 @@ msgstr "" msgid "Install missing dependencies" msgstr "" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install: Unsupported file type or broken archive" +msgstr "" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -621,7 +624,7 @@ msgid "Offset" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +msgid "Persistence" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -731,14 +734,6 @@ msgstr "" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "" @@ -1102,10 +1097,6 @@ msgstr "" msgid "Texturing:" msgstr "" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "" @@ -1138,7 +1129,7 @@ msgstr "" msgid "Waving Plants" msgstr "" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "" @@ -1167,7 +1158,7 @@ msgid "Connection error (timed out?)" msgstr "" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +msgid "Could not find or load game: " msgstr "" #: src/client/clientlauncher.cpp @@ -1237,6 +1228,15 @@ msgstr "" msgid "- Server Name: " msgstr "" +#: src/client/game.cpp +msgid "A serialization error occurred:" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "" @@ -1245,6 +1245,22 @@ msgstr "" msgid "Automatic forward enabled" msgstr "" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "" @@ -1253,6 +1269,10 @@ msgstr "" msgid "Camera update enabled" msgstr "" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "" @@ -1265,6 +1285,10 @@ msgstr "" msgid "Cinematic mode enabled" msgstr "" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "" @@ -1273,6 +1297,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "" @@ -1296,6 +1324,11 @@ msgid "" "- %s: chat\n" msgstr "" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "" @@ -1490,6 +1523,21 @@ msgstr "" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "" @@ -1822,6 +1870,14 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/gui/guiChatConsole.cpp +msgid "Failed to open webpage" +msgstr "" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "" @@ -1830,7 +1886,7 @@ msgstr "" msgid "Register and Join" msgstr "" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2017,7 +2073,8 @@ msgid "Muted" msgstr "" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, c-format +msgid "Sound Volume: %d%%" msgstr "" #. ~ Imperative, as in "Enter/type in text". @@ -2224,6 +2281,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2490,6 +2551,10 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +msgid "Chat commands" +msgstr "" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "" @@ -2523,7 +2588,7 @@ msgid "Chat toggle key" msgstr "" #: src/settings_translation_file.cpp -msgid "Chatcommands" +msgid "Chat weblinks" msgstr "" #: src/settings_translation_file.cpp @@ -2542,6 +2607,12 @@ msgstr "" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "" @@ -2617,6 +2688,22 @@ msgstr "" msgid "Command key" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "" @@ -2708,7 +2795,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2785,8 +2872,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -2904,6 +2991,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -2950,7 +3041,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -2978,13 +3076,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3377,7 +3468,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3809,7 +3900,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -3893,7 +3984,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4722,7 +4813,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5015,7 +5106,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5147,7 +5238,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5171,6 +5262,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5311,9 +5406,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5606,26 +5701,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5716,7 +5803,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5821,6 +5908,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -5931,7 +6026,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -5949,7 +6044,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6018,7 +6113,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6181,7 +6276,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6364,6 +6459,10 @@ msgstr "" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6385,7 +6484,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6400,7 +6499,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6526,24 +6625,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6556,5 +6637,9 @@ msgstr "" msgid "cURL parallel limit" msgstr "" +#, fuzzy +#~ msgid "You died." +#~ msgstr "Morreches" + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/he/minetest.po b/po/he/minetest.po index 8bc1c5fef..90df304cc 100644 --- a/po/he/minetest.po +++ b/po/he/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Hebrew (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-04-17 07:27+0000\n" "Last-Translator: Omer I.S. \n" "Language-Team: Hebrew " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "אירעה שגיאה בתסריט Lua:" @@ -302,6 +301,11 @@ msgstr "התקנת $1" msgid "Install missing dependencies" msgstr "מתקין תלויות חסרות" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "התקנה: סוג קובץ לא נתמך \"$1\" או שהארכיב פגום" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -629,7 +633,8 @@ msgid "Offset" msgstr "היסט" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "התמדה" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -739,14 +744,6 @@ msgstr "התקנת שיפור: לא ניתן למצוא את שם השיפור msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "התקנת שיפור: לא ניתן למצוא שם תיקייה מתאים לערכת השיפורים $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "התקנה: סוג קובץ לא נתמך \"$1\" או שהארכיב פגום" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "התקנה: מקובץ: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "אין אפשרות למצוא שיפור או ערכת שיפורים במצב תקין" @@ -1119,10 +1116,6 @@ msgstr "החלקת תאורה" msgid "Texturing:" msgstr "טקסטורות:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "כדי לאפשר שיידרים יש להשתמש בדרייבר של OpenGL." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "מיפוי גוונים" @@ -1155,7 +1148,7 @@ msgstr "נוזלים עם גלים" msgid "Waving Plants" msgstr "צמחים מתנוענעים" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "זמן המתנה לחיבור אזל." @@ -1184,7 +1177,8 @@ msgid "Connection error (timed out?)" msgstr "בעיה בחיבור (נגמר זמן ההמתנה?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "לא מצליח למצוא או לטעון משחק \"" #: src/client/clientlauncher.cpp @@ -1256,6 +1250,16 @@ msgstr "- קרב: " msgid "- Server Name: " msgstr "- שם שרת: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "אירעה שגיאה:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "התקדמות אוטומטית קדימה מבוטלת" @@ -1264,6 +1268,22 @@ msgstr "התקדמות אוטומטית קדימה מבוטלת" msgid "Automatic forward enabled" msgstr "תנועה קדימה אוטומטית מופעל" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "עדכון מצלמה מבוטל" @@ -1272,6 +1292,10 @@ msgstr "עדכון מצלמה מבוטל" msgid "Camera update enabled" msgstr "עדכון מצלמה מופעל" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "שנה סיסמה" @@ -1284,6 +1308,11 @@ msgstr "מצב קולנועי מבוטל" msgid "Cinematic mode enabled" msgstr "מצב קולנועי מופעל" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "קלינט" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "סקריפטים בצד לקוח מבוטלים" @@ -1292,6 +1321,10 @@ msgstr "סקריפטים בצד לקוח מבוטלים" msgid "Connecting to server..." msgstr "מתחבר לשרת..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "המשך" @@ -1329,6 +1362,11 @@ msgstr "" "- גלגלת העכבר: כדי לבחור פריט\n" "- %s: כדי לפתוח את הצ׳אט\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "יוצר לקוח..." @@ -1536,6 +1574,21 @@ msgstr "מערכת שמע מופעלת" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "טווח ראיה השתנה ל %d" @@ -1868,6 +1921,15 @@ msgstr "מפה קטנה במצב שטח, זום x %d" msgid "Minimap in texture mode" msgstr "מפה קטנה במצב טקסטורה" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "הורדת $1 נכשלה" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "סיסמאות לא תואמות!" @@ -1876,7 +1938,7 @@ msgstr "סיסמאות לא תואמות!" msgid "Register and Join" msgstr "הרשם והצטרף" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2068,7 +2130,8 @@ msgid "Muted" msgstr "מושתק" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "עוצמת שמע: " #. ~ Imperative, as in "Enter/type in text". @@ -2318,6 +2381,10 @@ msgid "" "screens." msgstr "התאם את תצורת dpi למסך שלך (לא X11 / Android בלבד) למשל. למסכי 4k." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2612,6 +2679,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "סף בעיטה להודעות צ'אט" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "פקודות צ'אט" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "גודל גופן צ'אט" @@ -2645,8 +2717,9 @@ msgid "Chat toggle key" msgstr "מתג הפעלת צ'אט" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "פקודות צ'אט" +#, fuzzy +msgid "Chat weblinks" +msgstr "צ'אט מוצג" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2664,6 +2737,12 @@ msgstr "מקש מצב קולנועי" msgid "Clean transparent textures" msgstr "טקסטורות נקיות ושקופות" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "לקוח" @@ -2741,6 +2820,22 @@ msgstr "" msgid "Command key" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "" @@ -2832,7 +2927,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2909,8 +3004,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3030,6 +3125,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -3076,7 +3175,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3104,13 +3210,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "לאפשר חבלה ומוות של השחקנים." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3503,7 +3602,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3937,7 +4036,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -4021,7 +4120,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4850,7 +4949,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5149,7 +5248,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5281,7 +5380,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5305,6 +5404,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5446,9 +5549,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5741,26 +5844,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5854,7 +5949,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5959,6 +6054,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6069,7 +6172,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6087,7 +6190,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6156,7 +6259,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6319,7 +6422,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6505,6 +6608,10 @@ msgstr "אורך גל של נוזלים עם גלים" msgid "Waving plants" msgstr "צמחים מתנופפים" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6526,7 +6633,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6541,7 +6648,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6669,24 +6776,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "(cURL) זמן להורדה נגמר" @@ -6719,6 +6808,9 @@ msgstr "(cURL) מגבלה לפעולות במקביל" #~ msgid "Enable VBO" #~ msgstr "אפשר בכל" +#~ msgid "Install: file: \"$1\"" +#~ msgstr "התקנה: מקובץ: \"$1\"" + #~ msgid "Main menu style" #~ msgstr "סגנון התפריט הראשי" @@ -6741,11 +6833,18 @@ msgstr "(cURL) מגבלה לפעולות במקביל" #~ msgid "Special" #~ msgstr "מיוחד" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "כדי לאפשר שיידרים יש להשתמש בדרייבר של OpenGL." + #~ msgid "View" #~ msgstr "תצוגה" #~ msgid "Yes" #~ msgstr "כן" +#, fuzzy +#~ msgid "You died." +#~ msgstr "מתת" + #~ msgid "needs_fallback_font" #~ msgstr "yes" diff --git a/po/hi/minetest.po b/po/hi/minetest.po index 59326cf06..0b46e64ce 100644 --- a/po/hi/minetest.po +++ b/po/hi/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2020-10-06 14:26+0000\n" "Last-Translator: Eyekay49 \n" "Language-Team: Hindi " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Lua कोड में यह परेशानी हुई :" @@ -308,6 +307,11 @@ msgstr "इन्स्टाल करें" msgid "Install missing dependencies" msgstr "अनावश्यक निर्भरताएं :" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "इन्स्टाल : \"$1\" का फाईल टाईप अंजान है याफिर आरकाइव खराब है" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -635,7 +639,8 @@ msgid "Offset" msgstr "आफसेट" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "हठ (पर्सिस्टेन्स)" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -745,14 +750,6 @@ msgstr "इन्स्टाल मॉड: $1 का असल नाम नह msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "माॅड इन्स्टाल: माॅडपैक $1 के लिए सही फोल्डर नहीं ढूंढा जा सका" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "इन्स्टाल : \"$1\" का फाईल टाईप अंजान है याफिर आरकाइव खराब है" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "इन्स्टाल : फाईल : \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "सही माॅड या माॅडपैक नहीं ढूंढ पाया गया" @@ -1126,10 +1123,6 @@ msgstr "चिकना उजाला" msgid "Texturing:" msgstr "कला बनावट :" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "छाया बनावट कॆ लिये OpenGL ड्राईवर आवश्यक हैं|" - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "टोन मैपिंग" @@ -1162,7 +1155,7 @@ msgstr "पानी में लहरें बनें" msgid "Waving Plants" msgstr "पाैधे लहराएं" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "कनेक्शन समय अंत|" @@ -1191,7 +1184,8 @@ msgid "Connection error (timed out?)" msgstr "कनेक्शन खराबी (समय अंत?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "खेल ढूंढा ना जा सका या लोड नहीं किया जा सका \"" #: src/client/clientlauncher.cpp @@ -1263,6 +1257,16 @@ msgstr "- खिलाड़ियों में मारा-पीटी : " msgid "- Server Name: " msgstr "- सर्वर का नाम : " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "एक खराबी हो गयी :" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "स्वचाल रुका हुआ" @@ -1271,6 +1275,22 @@ msgstr "स्वचाल रुका हुआ" msgid "Automatic forward enabled" msgstr "स्वचाल चालू" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "कैमरा रुका हुआ" @@ -1279,6 +1299,10 @@ msgstr "कैमरा रुका हुआ" msgid "Camera update enabled" msgstr "कैमरा चालू" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "पासवर्ड बदलें" @@ -1291,6 +1315,10 @@ msgstr "सिनेमा चाल रुका हुआ" msgid "Cinematic mode enabled" msgstr "सिनेमा चाल चालू" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "क्लाइंट की तरफ से स्क्रिप्ट लगाना मना है" @@ -1299,6 +1327,10 @@ msgstr "क्लाइंट की तरफ से स्क्रिप् msgid "Connecting to server..." msgstr "सर्वर से कनेक्ट हुआ जा रहा है ..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "आगे बढ़ें" @@ -1336,6 +1368,11 @@ msgstr "" "- : माउस पहिया : वस्तु चुनें\n" "- %s : बात करने के लिए\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "क्लाइंट बनाया जा रहा है ..." @@ -1543,6 +1580,21 @@ msgstr "आवाज चालू" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "दृष्टि सीमा बदलकर %d है" @@ -1876,6 +1928,15 @@ msgstr "छोटा नक्शा जमीन मोड, 1 गुना ज msgid "Minimap in texture mode" msgstr "छोटा नक्शा जमीन मोड, 1 गुना ज़ूम" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "$1 का डाऊनलोड असफल हुआ" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "पासवर्ड अलग-अलग हैं!" @@ -1884,7 +1945,7 @@ msgstr "पासवर्ड अलग-अलग हैं!" msgid "Register and Join" msgstr "पंजीकरण व खेलें" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2077,7 +2138,8 @@ msgid "Muted" msgstr "चुप" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "आवाज " #. ~ Imperative, as in "Enter/type in text". @@ -2284,6 +2346,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2551,6 +2617,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "आज्ञा" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "" @@ -2584,8 +2655,9 @@ msgid "Chat toggle key" msgstr "" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "" +#, fuzzy +msgid "Chat weblinks" +msgstr "बातें दिखाई देंगी" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2603,6 +2675,12 @@ msgstr "" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "" @@ -2678,6 +2756,22 @@ msgstr "" msgid "Command key" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "" @@ -2769,7 +2863,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2846,8 +2940,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -2965,6 +3059,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -3011,7 +3109,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3039,13 +3144,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3441,7 +3539,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3883,7 +3981,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -3967,7 +4065,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4796,7 +4894,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5089,7 +5187,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5221,7 +5319,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5245,6 +5343,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5388,9 +5490,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5683,26 +5785,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5793,7 +5887,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5900,6 +5994,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6010,7 +6112,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6028,7 +6130,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6097,7 +6199,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6260,7 +6362,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6443,6 +6545,10 @@ msgstr "" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6464,7 +6570,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6479,7 +6585,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6605,24 +6711,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6665,6 +6753,9 @@ msgstr "" #~ msgid "Generate Normal Maps" #~ msgstr "मामूली नक्शे बनाएं" +#~ msgid "Install: file: \"$1\"" +#~ msgstr "इन्स्टाल : फाईल : \"$1\"" + #~ msgid "Main" #~ msgstr "मुख्य" @@ -6707,11 +6798,18 @@ msgstr "" #~ msgid "Start Singleplayer" #~ msgstr "एक-खिलाडी शुरू करें" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "छाया बनावट कॆ लिये OpenGL ड्राईवर आवश्यक हैं|" + #~ msgid "View" #~ msgstr "दृश्य" #~ msgid "Yes" #~ msgstr "हां" +#, fuzzy +#~ msgid "You died." +#~ msgstr "आपकी मौत हो गयी" + #~ msgid "needs_fallback_font" #~ msgstr "yes" diff --git a/po/hu/minetest.po b/po/hu/minetest.po index 571d1f62b..659daa73c 100644 --- a/po/hu/minetest.po +++ b/po/hu/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Hungarian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-07-27 23:16+0000\n" "Last-Translator: Ács Zoltán \n" "Language-Team: Hungarian " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Hiba történt egy Lua parancsfájlban:" @@ -293,6 +293,11 @@ msgstr "$1 telepítése" msgid "Install missing dependencies" msgstr "hiányzó függőségek telepitése" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "Telepítés: nem támogatott „$1” fájltípus, vagy sérült archívum" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -624,7 +629,8 @@ msgid "Offset" msgstr "Eltolás" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Folytonosság" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -735,14 +741,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" "Mod telepítése: nem található megfelelő mappanév ehhez a modcsomaghoz: $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Telepítés: nem támogatott „$1” fájltípus, vagy sérült archívum" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Fájl telepítése: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Nem található érvényes mod vagy modcsomag" @@ -1111,10 +1109,6 @@ msgstr "Simított megvilágítás" msgid "Texturing:" msgstr "Textúrázás:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Az árnyalók engedélyezéséhez OpenGL driver használata szükséges." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Tónus rajzolás" @@ -1147,7 +1141,7 @@ msgstr "Hullámzó folyadékok" msgid "Waving Plants" msgstr "Hullámzó növények" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Csatlakozási idő lejárt." @@ -1176,7 +1170,8 @@ msgid "Connection error (timed out?)" msgstr "Kapcsolódási hiba (időtúllépés?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Nem található vagy nem betölthető a játék" #: src/client/clientlauncher.cpp @@ -1248,6 +1243,16 @@ msgstr "- PvP: " msgid "- Server Name: " msgstr "- Kiszolgáló neve: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Hiba történt:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Automatikus előre kikapcsolva" @@ -1256,6 +1261,22 @@ msgstr "Automatikus előre kikapcsolva" msgid "Automatic forward enabled" msgstr "Automatikus előre engedélyezve" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Kamera frissítés letiltva" @@ -1264,6 +1285,10 @@ msgstr "Kamera frissítés letiltva" msgid "Camera update enabled" msgstr "Kamera frissítés engedélyezve" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Jelszó változtatása" @@ -1276,6 +1301,11 @@ msgstr "Filmszerű mód letiltva" msgid "Cinematic mode enabled" msgstr "Filmszerű mód engedélyezve" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Kliens modolás" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Kliens oldali szkriptek letiltva" @@ -1284,6 +1314,10 @@ msgstr "Kliens oldali szkriptek letiltva" msgid "Connecting to server..." msgstr "Kapcsolódás szerverhez..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Folytatás" @@ -1320,6 +1354,11 @@ msgstr "" "- Egérgörgő: tárgy kiválasztása\n" "- %s: csevegés\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Kliens létrehozása…" @@ -1526,6 +1565,21 @@ msgstr "Hang visszahangosítva" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "látótáv %d1" @@ -1858,6 +1912,15 @@ msgstr "kistérkép terület módban x%d" msgid "Minimap in texture mode" msgstr "Minimap textúra módban" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "$1 letöltése nem sikerült" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "A jelszavak nem egyeznek!" @@ -1866,7 +1929,7 @@ msgstr "A jelszavak nem egyeznek!" msgid "Register and Join" msgstr "Regisztráció és belépés" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2061,7 +2124,8 @@ msgid "Muted" msgstr "Némitva" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Hangerő: " #. ~ Imperative, as in "Enter/type in text". @@ -2295,6 +2359,10 @@ msgstr "" "Dpi konfiguráció igazítása a képernyődhöz (nem X11/csak Android) pl. 4k " "képernyőkhöz." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2572,6 +2640,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Csevegésparancs üzeneteinek küszöbe" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Parancsok" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "Chat betűméret" @@ -2605,8 +2678,9 @@ msgid "Chat toggle key" msgstr "Csevegés váltása gomb" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Parancsok" +#, fuzzy +msgid "Chat weblinks" +msgstr "Csevegés megjelenítése" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2624,6 +2698,12 @@ msgstr "Filmszerű mód gomb" msgid "Clean transparent textures" msgstr "Tiszta átlátszó textúrák" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Kliens" @@ -2706,6 +2786,22 @@ msgstr "" msgid "Command key" msgstr "Parancs gomb" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Üveg csatlakozása" @@ -2805,9 +2901,10 @@ msgid "Crosshair alpha" msgstr "Célkereszt átlátszóság" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" "Célkereszt átlátszóság (0 és 255 között).\n" "Az objektum célkereszt színét is meghatározza" @@ -2891,8 +2988,8 @@ msgstr "Alapértelmezett kötegméret" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3019,6 +3116,10 @@ msgstr "Csalás elleni védelem letiltása" msgid "Disallow empty passwords" msgstr "Üres jelszavak tiltása" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "A szerver domain neve, ami a szerverlistában megjelenik." @@ -3069,7 +3170,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3097,13 +3205,6 @@ msgstr "Mod biztonság engedélyezése" msgid "Enable players getting damage and dying." msgstr "Játékosok sérülésének és halálának engedélyezése." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3538,10 +3639,11 @@ msgid "Global callbacks" msgstr "Globális visszatérések" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Globális térképgenerálási jellemzők.\n" "A v6 térképgenerátorban a 'decorations' zászló szabályozza az összes\n" @@ -3904,8 +4006,8 @@ msgid "" "and\n" "descending." msgstr "" -"Ha engedélyezve van, az \"Aux1\"gomb lesz használatban a \"lopakodás\" " -"(sneak) helyett lefelé mászáskor, vagy ereszkedéskor." +"Ha engedélyezve van, az \"Aux1\"gomb lesz használatban a \"lopakodás" +"\" (sneak) helyett lefelé mászáskor, vagy ereszkedéskor." #: src/settings_translation_file.cpp msgid "" @@ -4014,7 +4116,8 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "Csevegésparancsok bemutatása regisztrációkor." #: src/settings_translation_file.cpp @@ -4104,7 +4207,8 @@ msgid "Joystick button repetition interval" msgstr "Joystick gomb ismétlési időköz" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +#, fuzzy +msgid "Joystick dead zone" msgstr "Joystick holtzóna" #: src/settings_translation_file.cpp @@ -5166,8 +5270,8 @@ msgstr "" "'altitude_chill': csökkenti a hőmérsékletet a magassággal.\n" "'humid_rivers': megnöveli a páratartalmat a folyók körül.\n" "'vary_river_depth': ha engedélyezve van, az alacsony páratalom és a magas\n" -"hőmérséklet hatására a folyók sekélyebbé válnak, és lehet, hogy kiszáradnak." -"\n" +"hőmérséklet hatására a folyók sekélyebbé válnak, és lehet, hogy " +"kiszáradnak.\n" "'altitude_dry': csökkenti a páratartalmat a magassággal." #: src/settings_translation_file.cpp @@ -5208,7 +5312,8 @@ msgid "Map save interval" msgstr "Térkép mentésének időköze" #: src/settings_translation_file.cpp -msgid "Map update time" +#, fuzzy +msgid "Map shadows update frames" msgstr "Térkép frissítési idő" #: src/settings_translation_file.cpp @@ -5516,7 +5621,8 @@ msgid "Mod channels" msgstr "Mod csatornák" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +#, fuzzy +msgid "Modifies the size of the HUD elements." msgstr "A hudbar elemméretét módosítja" #: src/settings_translation_file.cpp @@ -5653,7 +5759,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5677,6 +5783,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5826,9 +5936,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -6155,26 +6265,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -6281,7 +6383,8 @@ msgstr "" "A változtatás után a játék újraindítása szükséges." #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +#, fuzzy +msgid "Show name tag backgrounds by default" msgstr "Névcímke hátterek megjelenítése alapértelmezetten" #: src/settings_translation_file.cpp @@ -6389,6 +6492,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6500,7 +6611,7 @@ msgstr "Textúrák útvonala" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6518,7 +6629,8 @@ msgid "The URL for the content repository" msgstr "Az URL a tartalomtárhoz" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +#, fuzzy +msgid "The dead zone of the joystick" msgstr "A joystick holtzónája" #: src/settings_translation_file.cpp @@ -6590,7 +6702,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6766,7 +6878,7 @@ msgstr "Bilineáris szűrés a textúrák méretezésekor." #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6950,6 +7062,11 @@ msgstr "Hullámzó folyadékok hullámhossza" msgid "Waving plants" msgstr "Hullámzó növények" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "Kijelölő doboz színe" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6971,7 +7088,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6990,7 +7107,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -7124,24 +7241,6 @@ msgstr "Alacsony terep és tengerfenék Y szintje." msgid "Y-level of seabed." msgstr "Tengerfenék Y szintje." -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "cURL fájlletöltés időkorlát" @@ -7320,6 +7419,9 @@ msgstr "cURL párhuzamossági korlát" #~ msgid "IPv6 support." #~ msgstr "IPv6 támogatás." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Fájl telepítése: \"$1\"" + #, fuzzy #~ msgid "Lava depth" #~ msgstr "Nagy barlang mélység" @@ -7416,6 +7518,9 @@ msgstr "cURL párhuzamossági korlát" #~ msgid "This font will be used for certain languages." #~ msgstr "Ezt a betűtípust bizonyos nyelvek használják." +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Az árnyalók engedélyezéséhez OpenGL driver használata szükséges." + #~ msgid "Toggle Cinematic" #~ msgstr "Váltás „mozi” módba" @@ -7431,5 +7536,8 @@ msgstr "cURL párhuzamossági korlát" #~ msgid "Yes" #~ msgstr "Igen" +#~ msgid "You died." +#~ msgstr "Meghaltál." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/id/minetest.po b/po/id/minetest.po index 27a1019a0..8a034f510 100644 --- a/po/id/minetest.po +++ b/po/id/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Indonesian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-02-23 15:50+0000\n" "Last-Translator: Reza Almanda \n" "Language-Team: Indonesian " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Suatu galat terjadi pada suatu skrip Lua:" @@ -302,6 +301,11 @@ msgstr "Pasang $1" msgid "Install missing dependencies" msgstr "Pasang dependensi yang belum ada" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "Pemasangan: Tipe berkas \"$1\" tidak didukung atau arsip rusak" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -631,7 +635,8 @@ msgid "Offset" msgstr "Pergeseran" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Persistensi" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -743,14 +748,6 @@ msgstr "" "Pemasangan mod: Tidak dapat mencari nama folder yang sesuai untuk paket mod " "$1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Pemasangan: Tipe berkas \"$1\" tidak didukung atau arsip rusak" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Pemasangan: berkas: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Tidak dapat mencari mod atau paket mod yang sah" @@ -1125,10 +1122,6 @@ msgstr "Pencahayaan Halus" msgid "Texturing:" msgstr "Peneksturan:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Untuk menggunakan shader, pengandar OpenGL harus digunakan." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Pemetaan Nada" @@ -1161,7 +1154,7 @@ msgstr "Air Berombak" msgid "Waving Plants" msgstr "Tanaman Berayun" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Sambungan kehabisan waktu." @@ -1190,7 +1183,8 @@ msgid "Connection error (timed out?)" msgstr "Galat sambungan (terlalu lama?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Tidak dapat mencari atau memuat permainan \"" #: src/client/clientlauncher.cpp @@ -1262,6 +1256,16 @@ msgstr "- PvP: " msgid "- Server Name: " msgstr "- Nama Server: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Sebuah galat terjadi:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Maju otomatis dimatikan" @@ -1270,6 +1274,22 @@ msgstr "Maju otomatis dimatikan" msgid "Automatic forward enabled" msgstr "Maju otomatis dinyalakan" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Pembaruan kamera dimatikan" @@ -1278,6 +1298,10 @@ msgstr "Pembaruan kamera dimatikan" msgid "Camera update enabled" msgstr "Pembaruan kamera dinyalakan" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Ganti kata sandi" @@ -1290,6 +1314,11 @@ msgstr "Mode sinema dimatikan" msgid "Cinematic mode enabled" msgstr "Mode sinema dinyalakan" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Mod klien" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Skrip sisi klien dimatikan" @@ -1298,6 +1327,10 @@ msgstr "Skrip sisi klien dimatikan" msgid "Connecting to server..." msgstr "Menyambung ke server..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Lanjutkan" @@ -1335,6 +1368,11 @@ msgstr "" "- Roda tetikus: pilih barang\n" "- %s: obrolan\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Membuat klien..." @@ -1542,6 +1580,21 @@ msgstr "Suara dibunyikan" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Jarak pandang diubah menjadi %d" @@ -1874,6 +1927,15 @@ msgstr "Peta mini mode permukaan, perbesaran %dx" msgid "Minimap in texture mode" msgstr "Peta mini mode tekstur" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Gagal mengunduh $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Kata sandi tidak cocok!" @@ -1882,7 +1944,7 @@ msgstr "Kata sandi tidak cocok!" msgid "Register and Join" msgstr "Daftar dan Gabung" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2077,7 +2139,8 @@ msgid "Muted" msgstr "Dibisukan" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Volume Suara: " #. ~ Imperative, as in "Enter/type in text". @@ -2330,6 +2393,10 @@ msgstr "" "Atur konfigurasi dpi ke layar Anda (selain X11/Android saja) misalnya untuk " "layar 4K." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2625,6 +2692,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Ambang batas jumlah pesan sebelum ditendang keluar" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Perintah obrolan" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "Ukuran fon obrolan" @@ -2658,8 +2730,9 @@ msgid "Chat toggle key" msgstr "Tombol beralih obrolan" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Perintah obrolan" +#, fuzzy +msgid "Chat weblinks" +msgstr "Obrolan ditampilkan" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2677,6 +2750,12 @@ msgstr "Tombol mode sinema" msgid "Clean transparent textures" msgstr "Bersihkan tekstur transparan" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Klien" @@ -2767,6 +2846,34 @@ msgstr "" msgid "Command key" msgstr "Tombol perintah" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Tingkat kompresi ZLib saat pengiriman blok peta kepada klien.\n" +"-1 - tingkat kompresi Zlib bawaan\n" +"0 - tanpa kompresi, tercepat\n" +"9 - kompresi terbaik, terlambat\n" +"(tingkat 1-3 pakai metode \"cepat\" Zlib, 4-9 pakai metode normal)" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Tingkat kompresi ZLib saat penyimpanan blok peta kepada klien.\n" +"-1 - tingkat kompresi Zlib bawaan\n" +"0 - tanpa kompresi, tercepat\n" +"9 - kompresi terbaik, terlambat\n" +"(tingkat 1-3 pakai metode \"cepat\" Zlib, 4-9 pakai metode normal)" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Sambungkan kaca" @@ -2865,9 +2972,10 @@ msgid "Crosshair alpha" msgstr "Keburaman crosshair" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" "Keburaman crosshair (keopakan, dari 0 sampai 255).\n" "Juga mengatur warna crosshair objek" @@ -2950,8 +3058,8 @@ msgstr "Ukuran tumpukan bawaan" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3078,6 +3186,10 @@ msgstr "Matikan anticurang" msgid "Disallow empty passwords" msgstr "Larang kata sandi kosong" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "Nama domain dari server yang akan ditampilkan pada daftar server." @@ -3128,7 +3240,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3157,13 +3276,6 @@ msgstr "Nyalakan pengamanan mod" msgid "Enable players getting damage and dying." msgstr "Membolehkan pemain terkena kerusakan dan mati." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Gunakan masukan pengguna acak (hanya digunakan untuk pengujian)." @@ -3607,10 +3719,11 @@ msgid "Global callbacks" msgstr "Callback global" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Atribut pembuatan peta global.\n" "Dalam pembuat peta v6, flag \"decorations\" mengatur semua hiasan, kecuali\n" @@ -4112,7 +4225,8 @@ msgstr "" "Ini biasanya hanya dibutuhkan oleh kontributor inti/bawaan" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "Melengkapi perintah obrolan saat didaftarkan, dengan perkakas." #: src/settings_translation_file.cpp @@ -4206,7 +4320,8 @@ msgid "Joystick button repetition interval" msgstr "Jarak penekanan tombol joystick terus-menerus" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +#, fuzzy +msgid "Joystick dead zone" msgstr "Zona mati joystick" #: src/settings_translation_file.cpp @@ -5320,7 +5435,7 @@ msgstr "Selang waktu menyimpan peta" #: src/settings_translation_file.cpp #, fuzzy -msgid "Map update time" +msgid "Map shadows update frames" msgstr "Detikan pembaruan cairan" #: src/settings_translation_file.cpp @@ -5639,7 +5754,8 @@ msgid "Mod channels" msgstr "Saluran mod" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +#, fuzzy +msgid "Modifies the size of the HUD elements." msgstr "Mengubah ukuran dari elemen hudbar." #: src/settings_translation_file.cpp @@ -5792,9 +5908,10 @@ msgstr "" "\"1\"." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" "Jumlah dari blok tambahan yang dapat dimuat oleh /clearobjects dalam satu " @@ -5825,6 +5942,10 @@ msgstr "" "sedang \n" "dibuka." +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5989,11 +6110,12 @@ msgid "Prometheus listener address" msgstr "Alamat pendengar Prometheus" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" "Alamat pendengar Prometheus.\n" "Jika Minetest dikompilasi dengan pilihan ENABLE_PROMETHEUS dinyalakan,\n" @@ -6335,26 +6457,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -6465,7 +6579,7 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "Fon tebal bawaan" #: src/settings_translation_file.cpp @@ -6592,6 +6706,14 @@ msgstr "" "Catat bahwa mod dan permainan dapat mengatur tumpukan untuk sebagian (atau " "semua) barang." +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6724,7 +6846,7 @@ msgstr "Jalur tekstur" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6748,7 +6870,8 @@ msgid "The URL for the content repository" msgstr "URL dari gudang konten" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +#, fuzzy +msgid "The dead zone of the joystick" msgstr "Zona mati joystick yang digunakan" #: src/settings_translation_file.cpp @@ -6839,9 +6962,10 @@ msgstr "" "Shader didukung oleh OpenGL (khusus desktop) dan OGLES2 (tahap percobaan)" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" "Kepekaan dari sumbu joystick untuk menggerakkan batas\n" "tampilan dalam permainan." @@ -7038,8 +7162,9 @@ msgid "Use bilinear filtering when scaling textures." msgstr "Gunakan pemfilteran bilinear saat mengubah ukuran tekstur." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -7246,6 +7371,11 @@ msgstr "Panjang ombak air" msgid "Waving plants" msgstr "Tanaman berayun" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "Warna kotak pilihan" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7275,7 +7405,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7302,7 +7432,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -7454,34 +7584,6 @@ msgstr "Ketinggian Y dari medan yang lebih rendah dan dasar laut." msgid "Y-level of seabed." msgstr "Ketinggian Y dari dasar laut." -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Tingkat kompresi ZLib saat pengiriman blok peta kepada klien.\n" -"-1 - tingkat kompresi Zlib bawaan\n" -"0 - tanpa kompresi, tercepat\n" -"9 - kompresi terbaik, terlambat\n" -"(tingkat 1-3 pakai metode \"cepat\" Zlib, 4-9 pakai metode normal)" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Tingkat kompresi ZLib saat penyimpanan blok peta kepada klien.\n" -"-1 - tingkat kompresi Zlib bawaan\n" -"0 - tanpa kompresi, tercepat\n" -"9 - kompresi terbaik, terlambat\n" -"(tingkat 1-3 pakai metode \"cepat\" Zlib, 4-9 pakai metode normal)" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "Batas waktu cURL mengunduh berkas" @@ -7683,6 +7785,9 @@ msgstr "Batas cURL paralel" #~ msgid "IPv6 support." #~ msgstr "Dukungan IPv6." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Pemasangan: berkas: \"$1\"" + #~ msgid "Lava depth" #~ msgstr "Kedalaman lava" @@ -7813,6 +7918,9 @@ msgstr "Batas cURL paralel" #~ msgid "This font will be used for certain languages." #~ msgstr "Fon ini akan digunakan pada bahasa tertentu." +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Untuk menggunakan shader, pengandar OpenGL harus digunakan." + #~ msgid "Toggle Cinematic" #~ msgstr "Mode sinema" @@ -7851,5 +7959,9 @@ msgstr "Batas cURL paralel" #~ msgid "Yes" #~ msgstr "Ya" +#, fuzzy +#~ msgid "You died." +#~ msgstr "Anda mati" + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/it/minetest.po b/po/it/minetest.po index b4930bf85..d5622eacb 100644 --- a/po/it/minetest.po +++ b/po/it/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Italian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-03-25 17:29+0000\n" "Last-Translator: Alessandro Mandelli \n" "Language-Team: Italian " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Si è verificato un errore in uno script Lua:" @@ -302,6 +301,11 @@ msgstr "Installa $1" msgid "Install missing dependencies" msgstr "Installa le dipendenze mancanti" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "Installa: Tipo di file non supportato \"$1\" o archivio danneggiato" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -632,7 +636,8 @@ msgid "Offset" msgstr "Scarto" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Persistenza" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -744,14 +749,6 @@ msgstr "" "Installa mod: Impossibile trovare un nome cartella corretto per il pacchetto " "mod $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Installa: Tipo di file non supportato \"$1\" o archivio danneggiato" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Install: File: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Impossibile trovare un mod o un pacchetto mod validi" @@ -1126,10 +1123,6 @@ msgstr "Luce uniforme" msgid "Texturing:" msgstr "Resa immagini:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Per abilitare gli shader si deve usare il driver OpenGL." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Tone Mapping" @@ -1162,7 +1155,7 @@ msgstr "Liquidi ondeggianti" msgid "Waving Plants" msgstr "Piante ondeggianti" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Connessione scaduta." @@ -1191,7 +1184,8 @@ msgid "Connection error (timed out?)" msgstr "Errore di connessione (scaduta?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Impossibile trovare o caricare il gioco \"" #: src/client/clientlauncher.cpp @@ -1263,6 +1257,16 @@ msgstr "- PvP: " msgid "- Server Name: " msgstr "- Nome server: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Si è verificato un errore:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Avanzamento automatico disabilitato" @@ -1271,6 +1275,22 @@ msgstr "Avanzamento automatico disabilitato" msgid "Automatic forward enabled" msgstr "Avanzamento automatico abilitato" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Aggiornamento telecamera disabilitato" @@ -1279,6 +1299,10 @@ msgstr "Aggiornamento telecamera disabilitato" msgid "Camera update enabled" msgstr "Aggiornamento telecamera abilitato" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Cambia password" @@ -1291,6 +1315,11 @@ msgstr "Modalità cinematica disabilitata" msgid "Cinematic mode enabled" msgstr "Modalità cinematica abilitata" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Modifica del client" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Scripting su lato client disabilitato" @@ -1299,6 +1328,10 @@ msgstr "Scripting su lato client disabilitato" msgid "Connecting to server..." msgstr "Connessione al server..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Continua" @@ -1336,6 +1369,11 @@ msgstr "" "- Rotella mouse: scegli oggetto\n" "- %s: chat\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Creazione client..." @@ -1543,6 +1581,21 @@ msgstr "Suono attivato" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Raggio visivo cambiato a %d" @@ -1875,6 +1928,15 @@ msgstr "Minimappa in modalità superficie, ingrandimento x%d" msgid "Minimap in texture mode" msgstr "Minimappa in modalità texture" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Impossibile scaricare $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Le password non corrispondono!" @@ -1883,7 +1945,7 @@ msgstr "Le password non corrispondono!" msgid "Register and Join" msgstr "Registrati e accedi" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2077,7 +2139,8 @@ msgid "Muted" msgstr "Silenziato" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Volume suono: " #. ~ Imperative, as in "Enter/type in text". @@ -2342,6 +2405,10 @@ msgstr "" "Regola la configurazione dpi per il tuo schermo (solo non X11/Android) per " "es. per schermi 4K." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2642,6 +2709,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Limite dei messaggi di chat per l'espulsione" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Comandi della chat" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "Dimensione del carattere dell'area di messaggistica" @@ -2675,8 +2747,9 @@ msgid "Chat toggle key" msgstr "Tasto di (dis)attivazione della chat" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Comandi della chat" +#, fuzzy +msgid "Chat weblinks" +msgstr "Chat visualizzata" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2694,6 +2767,12 @@ msgstr "Tasto modalità cinematic" msgid "Clean transparent textures" msgstr "Pulizia delle texture trasparenti" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Client" @@ -2786,6 +2865,38 @@ msgstr "" msgid "Command key" msgstr "Tasto comando" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Livello di compressione ZLib da utilizzare quando si salvano i blocchi mappa " +"su disco.\n" +"-1 - Livello di compressione predefinito di Zlib\n" +"0 - nessuna compressione, più veloce\n" +"9 - migliore compressione, più lenta\n" +"(i livelli 1-3 usano il metodo \"veloce\" di Zlib, 4-9 usano il metodo " +"normale)" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Livello di compressione ZLib da utilizzare quando si inviano i blocchi mappa " +"al client.\n" +"-1 - Livello di compressione predefinito di Zlib\n" +"0 - nessuna compressione, più veloce\n" +"9 - migliore compressione, più lenta\n" +"(i livelli 1-3 usano il metodo \"veloce\" di Zlib, 4-9 usano il metodo " +"normale)" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Unire i vetri" @@ -2886,9 +2997,10 @@ msgid "Crosshair alpha" msgstr "Trasparenza del mirino" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" "Trasparenza del mirino (opacità, tra 0 e 255).\n" "Controlla anche il colore del mirino dell'oggetto" @@ -2971,8 +3083,8 @@ msgstr "Dimensione predefinita della pila" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3102,6 +3214,10 @@ msgstr "Disattiva anti-trucchi" msgid "Disallow empty passwords" msgstr "Rifiutare le password vuote" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "Nome di dominio del server, da mostrarsi nell'elenco dei server." @@ -3153,7 +3269,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3181,13 +3304,6 @@ msgstr "Abilita la sicurezza moduli" msgid "Enable players getting damage and dying." msgstr "Abilita il ferimento e la morte dei giocatori." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3654,10 +3770,11 @@ msgid "Global callbacks" msgstr "Callback globali" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Attributi globali di generazione della mappa.\n" "In Mapgen v6 il valore 'decorations' controlla tutte le decorazioni eccetto " @@ -4163,7 +4280,8 @@ msgstr "" "Questo normalmente serve solo ai contributori principali" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "Predisporre i comandi della chat alla registrazione." #: src/settings_translation_file.cpp @@ -4260,7 +4378,8 @@ msgid "Joystick button repetition interval" msgstr "Intervallo di ripetizione del pulsante del joystick" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +#, fuzzy +msgid "Joystick dead zone" msgstr "Deadzone joystick" #: src/settings_translation_file.cpp @@ -5387,7 +5506,7 @@ msgstr "Intervallo di salvataggio della mappa" #: src/settings_translation_file.cpp #, fuzzy -msgid "Map update time" +msgid "Map shadows update frames" msgstr "Scatto di aggiornamento del liquido" #: src/settings_translation_file.cpp @@ -5714,7 +5833,8 @@ msgid "Mod channels" msgstr "Canali mod" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +#, fuzzy +msgid "Modifies the size of the HUD elements." msgstr "Modifica la dimensione degli elementi della barra dell'HUD." #: src/settings_translation_file.cpp @@ -5872,9 +5992,10 @@ msgstr "" "Per molti utenti l'impostazione ottimale può essere '1'." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" "Numero di blocchi extra che possono essere caricati da /clearobjects in una " @@ -5905,6 +6026,10 @@ msgstr "" "Apre il menu di pausa quando si perde la messa a fuoco della finestra. Non\n" "mette in pausa se è aperta una finestra di dialogo." +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -6085,11 +6210,12 @@ msgid "Prometheus listener address" msgstr "Indirizzo del listener Prometheus" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" "Indirizzo del listener Prometheus.\n" "Se Minetest viene compilato con l'opzione ENABLE_PROMETHEUS abilitata,\n" @@ -6440,26 +6566,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -6570,7 +6688,8 @@ msgstr "" "È necessario riavviare dopo aver cambiato questo." #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +#, fuzzy +msgid "Show name tag backgrounds by default" msgstr "Mostra lo sfondo del nome per impostazione predefinita" #: src/settings_translation_file.cpp @@ -6701,6 +6820,14 @@ msgstr "" "Si noti che mod o giochi possono impostare esplicitamente una pila per " "alcuni (o tutti) gli oggetti." +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6839,7 +6966,7 @@ msgstr "Percorso delle texture" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6865,7 +6992,8 @@ msgid "The URL for the content repository" msgstr "L'URL per il deposito dei contenuti" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +#, fuzzy +msgid "The dead zone of the joystick" msgstr "La deadzone del joystick" #: src/settings_translation_file.cpp @@ -6958,9 +7086,10 @@ msgstr "" "Le shader sono supportate da OpenGL (solo su desktop) e OGLES2 (sperimentale)" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" "La sensibilità degli assi del joystick per spostare\n" "il campo visivo durante il gioco." @@ -7170,8 +7299,9 @@ msgid "Use bilinear filtering when scaling textures." msgstr "Usare il filtraggio bilineare quando si ridimensionano le texture." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -7382,6 +7512,11 @@ msgstr "Lunghezza d'onda dei liquidi ondulanti" msgid "Waving plants" msgstr "Piante ondeggianti" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "Colore del riquadro di selezione" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7412,7 +7547,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7444,8 +7579,9 @@ msgstr "" "Se disabilitati, si utilizzano invece i caratteri bitmap e XML vettoriali." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" "Se lo sfondo del nome deve essere mostrato per impostazione predefinita.\n" @@ -7610,38 +7746,6 @@ msgstr "Livello Y del terreno inferiore e del fondale marino." msgid "Y-level of seabed." msgstr "Livello Y del fondale marino." -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Livello di compressione ZLib da utilizzare quando si salvano i blocchi mappa " -"su disco.\n" -"-1 - Livello di compressione predefinito di Zlib\n" -"0 - nessuna compressione, più veloce\n" -"9 - migliore compressione, più lenta\n" -"(i livelli 1-3 usano il metodo \"veloce\" di Zlib, 4-9 usano il metodo " -"normale)" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Livello di compressione ZLib da utilizzare quando si inviano i blocchi mappa " -"al client.\n" -"-1 - Livello di compressione predefinito di Zlib\n" -"0 - nessuna compressione, più veloce\n" -"9 - migliore compressione, più lenta\n" -"(i livelli 1-3 usano il metodo \"veloce\" di Zlib, 4-9 usano il metodo " -"normale)" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "Scadenza cURL scaricamento file" @@ -7856,6 +7960,9 @@ msgstr "Limite parallelo cURL" #~ msgid "IPv6 support." #~ msgstr "Supporto IPv6." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Install: File: \"$1\"" + #~ msgid "Lava depth" #~ msgstr "Profondità della lava" @@ -7988,6 +8095,9 @@ msgstr "Limite parallelo cURL" #~ msgid "This font will be used for certain languages." #~ msgstr "Questo carattere sarà usato per certe Lingue." +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Per abilitare gli shader si deve usare il driver OpenGL." + #~ msgid "Toggle Cinematic" #~ msgstr "Scegli cinematica" @@ -8028,5 +8138,9 @@ msgstr "Limite parallelo cURL" #~ msgid "Yes" #~ msgstr "Sì" +#, fuzzy +#~ msgid "You died." +#~ msgstr "Sei morto" + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/ja/minetest.po b/po/ja/minetest.po index a5844c7b1..c813c1430 100644 --- a/po/ja/minetest.po +++ b/po/ja/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Japanese (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-07-17 13:33+0000\n" "Last-Translator: BreadW \n" "Language-Team: Japanese ' to get more information, or '.help all' to list everything." -msgstr "'.help ' を使用して詳細情報を取得するか、または '.help all' を使用してすべてを一覧表示します。" +msgstr "" +"'.help ' を使用して詳細情報を取得するか、または '.help all' を使用してす" +"べてを一覧表示します。" #: builtin/common/chatcommands.lua msgid "[all | ]" @@ -91,6 +89,11 @@ msgstr "[all | ]" msgid "OK" msgstr "OK" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "" +msgstr "コマンドは使用できません: " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Luaスクリプトでエラーが発生しました:" @@ -293,6 +296,11 @@ msgstr "$1 のインストール" msgid "Install missing dependencies" msgstr "不足依存Modインストール" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "インストール: \"$1\"は非対応のファイル形式か、壊れたアーカイブです" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -621,7 +629,8 @@ msgid "Offset" msgstr "オフセット" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "永続性" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -731,14 +740,6 @@ msgstr "Modインストール: 実際のMod名が見つかりません: $1" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "Modインストール: Modパック $1 に適したフォルダ名が見つかりません" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "インストール: \"$1\"は非対応のファイル形式か、壊れたアーカイブです" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "インストール: ファイル: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "有効なModまたはModパックが見つかりません" @@ -1104,10 +1105,6 @@ msgstr "滑らかな光" msgid "Texturing:" msgstr "テクスチャリング:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "シェーダーを有効にするにはOpenGLのドライバを使用する必要があります。" - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "トーンマッピング" @@ -1140,7 +1137,7 @@ msgstr "揺れる液体" msgid "Waving Plants" msgstr "揺れる草花" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "接続がタイムアウトしました。" @@ -1169,7 +1166,8 @@ msgid "Connection error (timed out?)" msgstr "接続エラー (タイムアウト?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "以下のゲームが見つからないか読み込めません \"" #: src/client/clientlauncher.cpp @@ -1241,6 +1239,16 @@ msgstr "- PvP: " msgid "- Server Name: " msgstr "- サーバー名: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "エラーが発生しました:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "自動前進 無効" @@ -1249,6 +1257,23 @@ msgstr "自動前進 無効" msgid "Automatic forward enabled" msgstr "自動前進 有効" +#: src/client/game.cpp +#, fuzzy +msgid "Block bounds hidden" +msgstr "ブロック境界線表示切替" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "カメラ更新 無効" @@ -1257,6 +1282,10 @@ msgstr "カメラ更新 無効" msgid "Camera update enabled" msgstr "カメラ更新 有効" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "パスワード変更" @@ -1269,6 +1298,11 @@ msgstr "映画風モード 無効" msgid "Cinematic mode enabled" msgstr "映画風モード 有効" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "クライアントの改造" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "クライアント側のスクリプトは無効" @@ -1277,6 +1311,10 @@ msgstr "クライアント側のスクリプトは無効" msgid "Connecting to server..." msgstr "サーバーに接続中..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "再開" @@ -1314,6 +1352,11 @@ msgstr "" "- マウスホイール: アイテム選択\n" "- %s: チャット\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "クライアントを作成中..." @@ -1520,6 +1563,21 @@ msgstr "消音 取り消し" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "視野を %d に変更" @@ -1852,6 +1910,15 @@ msgstr "ミニマップ 表面モード、ズーム x%d" msgid "Minimap in texture mode" msgstr "ミニマップ テクスチャモード" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "$1のダウンロードに失敗" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "パスワードが一致しません!" @@ -1860,7 +1927,7 @@ msgstr "パスワードが一致しません!" msgid "Register and Join" msgstr "参加登録" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -1870,8 +1937,10 @@ msgid "" "creation, or click 'Cancel' to abort." msgstr "" "あなたはこのサーバ ーに名前 \"%s\" ではじめて参加しようとしています。\n" -"続行する場合、あなたの情報が新しいアカウントとしてこのサーバーに作成されます。\n" -"あなたのパスワードを再入力してから '参加登録' をクリックしてアカウント作成するか、\n" +"続行する場合、あなたの情報が新しいアカウントとしてこのサーバーに作成されま" +"す。\n" +"あなたのパスワードを再入力してから '参加登録' をクリックしてアカウント作成す" +"るか、\n" "キャンセルをクリックして中断してください。" #: src/gui/guiFormSpecMenu.cpp @@ -2053,7 +2122,8 @@ msgid "Muted" msgstr "消音" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "音量: " #. ~ Imperative, as in "Enter/type in text". @@ -2301,6 +2371,10 @@ msgid "" msgstr "" "4kスクリーンなどのための、画面の解像度の設定です (非X11/Android環境のみ)。" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2594,6 +2668,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "チャットコマンド時間切れメッセージのしきい値" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "チャットコマンド" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "チャットのフォントサイズ" @@ -2627,8 +2706,9 @@ msgid "Chat toggle key" msgstr "チャット切替キー" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "チャットコマンド" +#, fuzzy +msgid "Chat weblinks" +msgstr "チャット 表示" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2646,6 +2726,12 @@ msgstr "映画風モード切り替えキー" msgid "Clean transparent textures" msgstr "テクスチャの透過を削除" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "クライアント" @@ -2733,6 +2819,34 @@ msgstr "" msgid "Command key" msgstr "コマンドキー" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"マップブロックをディスクに保存するときに使用する ZLib圧縮レベル。\n" +"-1 - Zlib の規定の圧縮レベル\n" +"0 - 圧縮なし、最速\n" +"9 - 最高の圧縮、最も遅い\n" +"(レベル 1〜3 はZlibの「高速」方式を使用し、4〜9 は通常方式を使用)" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"マップブロックをクライアントに送信するときに使用する ZLib圧縮レベル。\n" +"-1 - Zlib の規定の圧縮レベル\n" +"0 - 圧縮なし、最速\n" +"9 - 最高の圧縮、最も遅い\n" +"(レベル 1〜3 はZlibの「高速」方式を使用し、4〜9 は通常方式を使用)" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "ガラスを繋げる" @@ -2830,9 +2944,10 @@ msgid "Crosshair alpha" msgstr "十字カーソルの透過度" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" "十字カーソルの透過度(不透明、0~255の間)。\n" "オブジェクト十字カーソルの色も制御" @@ -2914,13 +3029,15 @@ msgid "Default stack size" msgstr "既定のスタック数" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" "影のフィルタリング品質定義\n" -"これは、PCFまたはポアソンディスクを適用することで、やわらない影効果をシミュレートするものです。\n" +"これは、PCFまたはポアソンディスクを適用することで、やわらない影効果をシミュ" +"レートするものです。\n" "しかし、より多くのリソースを消費します。" #: src/settings_translation_file.cpp @@ -3041,6 +3158,10 @@ msgstr "対チート機関無効化" msgid "Disallow empty passwords" msgstr "空のパスワードを許可しない" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "サーバー一覧に表示されるサーバーのドメイン名。" @@ -3090,8 +3211,20 @@ msgstr "" "このサポートは実験的であり、APIは変わることがあります。" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" +"ポアソンディスクによるフィルタリングを有効にします。\n" +"true の場合、ポアソンディスクを使用して「やわらない影」を作ります。それ以外の" +"場合は、PCFフィルタリングを使用します。" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" "色つきの影を有効にします。\n" @@ -3121,15 +3254,6 @@ msgstr "Modのセキュリティを有効化" msgid "Enable players getting damage and dying." msgstr "プレイヤーがダメージを受けて死亡するのを有効にします。" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" -"ポアソンディスクによるフィルタリングを有効にします。\n" -"true の場合、ポアソンディスクを使用して「やわらない影」を作ります。それ以外の場合は、PCFフィルタリングを使用します。" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "ランダムなユーザー入力を有効にします (テストにのみ使用)。" @@ -3577,10 +3701,11 @@ msgid "Global callbacks" msgstr "グローバルコールバック" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "グローバルマップ生成属性。\n" "マップジェネレータv6では、'decorations' フラグは木とジャングルの草を\n" @@ -4073,7 +4198,8 @@ msgstr "" "これは通常、コア/ビルトイン貢献者にのみ必要" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "チャットコマンドが登録されるとすぐに計測します。" #: src/settings_translation_file.cpp @@ -4167,7 +4293,8 @@ msgid "Joystick button repetition interval" msgstr "ジョイスティックボタンの繰り返し間隔" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +#, fuzzy +msgid "Joystick dead zone" msgstr "ジョイスティックのデッドゾーン" #: src/settings_translation_file.cpp @@ -5029,7 +5156,8 @@ msgid "" "Length of a server tick and the interval at which objects are generally " "updated over\n" "network." -msgstr "サーバーが時を刻む間隔とオブジェクトが通常ネットワーク上で更新される間隔。" +msgstr "" +"サーバーが時を刻む間隔とオブジェクトが通常ネットワーク上で更新される間隔。" #: src/settings_translation_file.cpp msgid "" @@ -5273,7 +5401,8 @@ msgid "Map save interval" msgstr "マップ保存間隔" #: src/settings_translation_file.cpp -msgid "Map update time" +#, fuzzy +msgid "Map shadows update frames" msgstr "マップの更新間隔" #: src/settings_translation_file.cpp @@ -5518,13 +5647,17 @@ msgstr "" msgid "" "Maximum time a file download (e.g. a mod download) may take, stated in " "milliseconds." -msgstr "ファイルダウンロード(Modのダウンロードなど)にかかる最大時間をミリ秒単位で指定します。" +msgstr "" +"ファイルダウンロード(Modのダウンロードなど)にかかる最大時間をミリ秒単位で指" +"定します。" #: src/settings_translation_file.cpp msgid "" "Maximum time an interactive request (e.g. server list fetch) may take, " "stated in milliseconds." -msgstr "インタラクティブリクエスト(サーバー一覧の取得など)にかかる最大時間をミリ秒単位で指定します。" +msgstr "" +"インタラクティブリクエスト(サーバー一覧の取得など)にかかる最大時間をミリ秒" +"単位で指定します。" #: src/settings_translation_file.cpp msgid "Maximum users" @@ -5587,7 +5720,8 @@ msgid "Mod channels" msgstr "Modチャンネル" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +#, fuzzy +msgid "Modifies the size of the HUD elements." msgstr "HUDバー要素のサイズを変更します。" #: src/settings_translation_file.cpp @@ -5740,9 +5874,10 @@ msgstr "" "多くのユーザーにとって最適な設定は '1' です。" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" "一度に /clearobjects によってロードできる追加ブロックの数。\n" @@ -5771,6 +5906,10 @@ msgstr "" "ウィンドウのフォーカスが失われたときにポーズメニューを開きます。\n" "フォームスペックが開かれているときはポーズメニューを開きません。" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5942,11 +6081,12 @@ msgid "Prometheus listener address" msgstr "プロメテウスリスナーのアドレス" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" "プロメテウスリスナーのアドレス。\n" "minetest が ENABLE_PROMETHEUS オプションを有効にしてコンパイルされている場" @@ -6291,31 +6431,22 @@ msgstr "" "値が小さいほど影が薄く、値が大きいほど影が濃くなります。" #: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" -"影の更新時間を設定します。\n" -"値が小さいほど影やマップの更新が速くなりますが、リソースを多く消費します。\n" -"最小値0.001秒、最大値0.2秒" - -#: src/settings_translation_file.cpp +#, fuzzy msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" "やわらない影の半径サイズを設定します。\n" "値が小さいほどシャープな影、大きいほどやわらない影になります。\n" "最小値1.0、最大値10.0" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" "太陽/月の軌道の傾きを度数で設定する\n" "0 は傾きのない垂直な軌道を意味します。\n" @@ -6427,7 +6558,8 @@ msgstr "" "変更後は再起動が必要です。" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +#, fuzzy +msgid "Show name tag backgrounds by default" msgstr "既定でネームタグの背景を表示" #: src/settings_translation_file.cpp @@ -6551,6 +6683,14 @@ msgstr "" "Mod またはゲームは、特定の(またはすべての)アイテムのスタック数を\n" "明示的に設定する場合があることに注意してください。" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6680,10 +6820,11 @@ msgid "Texture path" msgstr "テクスチャパス" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" "影投影を描画するためのテクスチャサイズです。\n" "これは2の累乗でなければなりません。\n" @@ -6711,7 +6852,8 @@ msgid "The URL for the content repository" msgstr "コンテンツリポジトリのURL" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +#, fuzzy +msgid "The dead zone of the joystick" msgstr "ジョイスティックのデッドゾーン" #: src/settings_translation_file.cpp @@ -6793,14 +6935,17 @@ msgid "" msgstr "" "レンダリングのバックエンドです。\n" "変更後は再起動が必要です。\n" -"注:Androidでは、不明な場合はOGRES1を使用してください!そうしないとアプリの起動に失敗することがあります。\n" +"注:Androidでは、不明な場合はOGRES1を使用してください!そうしないとアプリの起" +"動に失敗することがあります。\n" "その他のプラットフォームでは、OpenGLを推奨します。\n" -"シェーダーは、OpenGL(デスクトップのみ)とOGRES2(実験的)でサポートされています。" +"シェーダーは、OpenGL(デスクトップのみ)とOGRES2(実験的)でサポートされてい" +"ます。" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "ゲーム内の視錐台を動かすためのジョイスティック軸の感度。" #: src/settings_translation_file.cpp @@ -6987,8 +7132,9 @@ msgid "Use bilinear filtering when scaling textures." msgstr "テクスチャを拡大縮小する場合はバイリニアフィルタリングを使用します。" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -7194,6 +7340,11 @@ msgstr "揺れる液体の波長" msgid "Waving plants" msgstr "揺れる草花" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "選択ボックスの色" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7218,12 +7369,13 @@ msgstr "" "ビデオドライバのときは、古い拡大縮小方法に戻ります。" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7234,7 +7386,8 @@ msgstr "" "これは拡大されたテクスチャのための最小テクスチャサイズを設定します。\n" "より高い値はよりシャープに見えますが、より多くのメモリを必要とします。\n" "2のべき乗が推奨されます。この設定は、\n" -"バイリニア/トライリニア/異方性フィルタリングが有効の場合にのみ適用されます。\n" +"バイリニア/トライリニア/異方性フィルタリングが有効の場合にのみ適用されま" +"す。\n" "これは整列テクスチャの自動スケーリング用の基準ノードテクスチャサイズと\n" "しても使用されます。" @@ -7250,8 +7403,9 @@ msgstr "" "す。" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" "既定でネームタグの背景を表示するかどうかです。\n" @@ -7411,34 +7565,6 @@ msgstr "低い地形と海底のYレベル。" msgid "Y-level of seabed." msgstr "海底のYレベル。" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"マップブロックをディスクに保存するときに使用する ZLib圧縮レベル。\n" -"-1 - Zlib の規定の圧縮レベル\n" -"0 - 圧縮なし、最速\n" -"9 - 最高の圧縮、最も遅い\n" -"(レベル 1〜3 はZlibの「高速」方式を使用し、4〜9 は通常方式を使用)" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"マップブロックをクライアントに送信するときに使用する ZLib圧縮レベル。\n" -"-1 - Zlib の規定の圧縮レベル\n" -"0 - 圧縮なし、最速\n" -"9 - 最高の圧縮、最も遅い\n" -"(レベル 1〜3 はZlibの「高速」方式を使用し、4〜9 は通常方式を使用)" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "cURLファイルダウンロードタイムアウト" @@ -7644,6 +7770,9 @@ msgstr "cURL並行処理制限" #~ msgid "IPv6 support." #~ msgstr "IPv6 サポート。" +#~ msgid "Install: file: \"$1\"" +#~ msgstr "インストール: ファイル: \"$1\"" + #~ msgid "Lava depth" #~ msgstr "溶岩の深さ" @@ -7746,6 +7875,17 @@ msgstr "cURL並行処理制限" #~ msgid "Select Package File:" #~ msgstr "パッケージファイルを選択:" +#~ msgid "" +#~ "Set the shadow update time.\n" +#~ "Lower value means shadows and map updates faster, but it consume more " +#~ "resources.\n" +#~ "Minimun value 0.001 seconds max value 0.2 seconds" +#~ msgstr "" +#~ "影の更新時間を設定します。\n" +#~ "値が小さいほど影やマップの更新が速くなりますが、リソースを多く消費しま" +#~ "す。\n" +#~ "最小値0.001秒、最大値0.2秒" + #~ msgid "Shadow limit" #~ msgstr "影の制限" @@ -7774,6 +7914,10 @@ msgstr "cURL並行処理制限" #~ msgid "This font will be used for certain languages." #~ msgstr "このフォントは特定の言語で使用されます。" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "" +#~ "シェーダーを有効にするにはOpenGLのドライバを使用する必要があります。" + #~ msgid "Toggle Cinematic" #~ msgstr "映画風モード切替" @@ -7808,5 +7952,8 @@ msgstr "cURL並行処理制限" #~ msgid "Yes" #~ msgstr "はい" +#~ msgid "You died." +#~ msgstr "あなたは死にました。" + #~ msgid "needs_fallback_font" #~ msgstr "yes" diff --git a/po/jbo/minetest.po b/po/jbo/minetest.po index 1f6cc89aa..d700e624b 100644 --- a/po/jbo/minetest.po +++ b/po/jbo/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Lojban (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-02-13 08:50+0000\n" "Last-Translator: Wuzzy \n" "Language-Team: Lojban " +msgstr "" + #: builtin/fstk/ui.lua #, fuzzy msgid "An error occurred in a Lua script:" @@ -310,6 +309,10 @@ msgstr "samtcise'a" msgid "Install missing dependencies" msgstr "na'e se nitcu" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install: Unsupported file type or broken archive" +msgstr "" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -642,7 +645,7 @@ msgid "Offset" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +msgid "Persistence" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -754,14 +757,6 @@ msgstr "" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "" @@ -1145,10 +1140,6 @@ msgstr "lo xutla se gusni" msgid "Texturing:" msgstr "" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp #, fuzzy msgid "Tone Mapping" @@ -1185,7 +1176,7 @@ msgstr ".i ca'o samymo'i lo me la'o gy.node.gy." msgid "Waving Plants" msgstr "lo melbi pezli" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "" @@ -1219,7 +1210,8 @@ msgstr "" "toi" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "" ".i na cumki fa le nu le se kelci cu jai se facki je cu se samymo'i .i ky. du " "la'o zoi." @@ -1294,6 +1286,16 @@ msgstr "- kakne le ka simxu le ka xrani: " msgid "- Server Name: " msgstr "- cmene le samtcise'u: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr ".i da nabmi" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp #, fuzzy msgid "Automatic forward disabled" @@ -1304,6 +1306,22 @@ msgstr "za'i ca'u muvdu" msgid "Automatic forward enabled" msgstr "za'i ca'u muvdu" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "" @@ -1312,6 +1330,10 @@ msgstr "" msgid "Camera update enabled" msgstr "" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "basti fi le ka lerpoijaspu" @@ -1326,6 +1348,11 @@ msgstr "le nu finti kelci" msgid "Cinematic mode enabled" msgstr "le nu finti kelci" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "lo samtciselse'u" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "" @@ -1334,6 +1361,10 @@ msgstr "" msgid "Connecting to server..." msgstr ".i ca'o samjo'e le samse'u" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "ranji" @@ -1357,6 +1388,11 @@ msgid "" "- %s: chat\n" msgstr "" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr ".i ca'o cupra le samtciselse'u" @@ -1559,6 +1595,21 @@ msgstr "lo ni sance " #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "" @@ -1897,6 +1948,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr ".i da nabmi fi le nu kibycpa la'o zoi. $1 .zoi" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr ".i lu'i le re lerpoijaspu na simxu le ka mintu" @@ -1905,7 +1965,7 @@ msgstr ".i lu'i le re lerpoijaspu na simxu le ka mintu" msgid "Register and Join" msgstr "" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2107,8 +2167,8 @@ msgid "Muted" msgstr "ko da'ergau le batke" #: src/gui/guiVolumeChange.cpp -#, fuzzy -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "lo ni sance " #. ~ Imperative, as in "Enter/type in text". @@ -2316,6 +2376,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2586,6 +2650,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "minde" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "" @@ -2621,8 +2690,8 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy -msgid "Chatcommands" -msgstr "minde" +msgid "Chat weblinks" +msgstr ".i ca viska le tavla .uidje" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2642,6 +2711,12 @@ msgstr "le nu finti kelci" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "lo samtciselse'u" @@ -2722,6 +2797,22 @@ msgstr "" msgid "Command key" msgstr "minde" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp #, fuzzy msgid "Connect glass" @@ -2816,7 +2907,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2893,8 +2984,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3014,6 +3105,10 @@ msgstr "lo kantu" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -3060,7 +3155,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3088,13 +3190,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3489,7 +3584,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3921,7 +4016,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -4006,7 +4101,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4838,7 +4933,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5131,7 +5226,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5264,7 +5359,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5288,6 +5383,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5431,9 +5530,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5730,26 +5829,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5840,7 +5931,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5948,6 +6039,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6058,7 +6157,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6076,7 +6175,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6145,7 +6244,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6309,7 +6408,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6498,6 +6597,10 @@ msgstr "lo melbi pezli" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6519,7 +6622,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6534,7 +6637,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6661,24 +6764,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6749,5 +6834,9 @@ msgstr "" #~ msgid "Yes" #~ msgstr "go'i" +#, fuzzy +#~ msgid "You died." +#~ msgstr ".i do morsi" + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/kk/minetest.po b/po/kk/minetest.po index 504631104..2f2b90091 100644 --- a/po/kk/minetest.po +++ b/po/kk/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Kazakh (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2020-09-09 01:23+0000\n" "Last-Translator: Fontan 030 \n" "Language-Team: Kazakh " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Lua скриптінде қате кездесті:" @@ -294,6 +294,10 @@ msgstr "Жою" msgid "Install missing dependencies" msgstr "" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install: Unsupported file type or broken archive" +msgstr "" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -620,7 +624,7 @@ msgid "Offset" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +msgid "Persistence" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -730,14 +734,6 @@ msgstr "" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "" @@ -1102,10 +1098,6 @@ msgstr "" msgid "Texturing:" msgstr "Текстурлеу:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "" @@ -1138,7 +1130,7 @@ msgstr "" msgid "Waving Plants" msgstr "" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "" @@ -1167,7 +1159,7 @@ msgid "Connection error (timed out?)" msgstr "" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +msgid "Could not find or load game: " msgstr "" #: src/client/clientlauncher.cpp @@ -1237,6 +1229,16 @@ msgstr "" msgid "- Server Name: " msgstr "" +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Қате кездесті:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "" @@ -1245,6 +1247,22 @@ msgstr "" msgid "Automatic forward enabled" msgstr "" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "" @@ -1253,6 +1271,10 @@ msgstr "" msgid "Camera update enabled" msgstr "" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Құпия сөзді өзгерту" @@ -1265,6 +1287,10 @@ msgstr "" msgid "Cinematic mode enabled" msgstr "" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "" @@ -1273,6 +1299,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Жалғастыру" @@ -1296,6 +1326,11 @@ msgid "" "- %s: chat\n" msgstr "" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "" @@ -1491,6 +1526,21 @@ msgstr "" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "" @@ -1823,6 +1873,14 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/gui/guiChatConsole.cpp +msgid "Failed to open webpage" +msgstr "" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "" @@ -1831,7 +1889,7 @@ msgstr "" msgid "Register and Join" msgstr "" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2018,7 +2076,8 @@ msgid "Muted" msgstr "" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, c-format +msgid "Sound Volume: %d%%" msgstr "" #. ~ Imperative, as in "Enter/type in text". @@ -2225,6 +2284,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2491,6 +2554,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Чат көрсетілді" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "" @@ -2524,8 +2592,9 @@ msgid "Chat toggle key" msgstr "" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "" +#, fuzzy +msgid "Chat weblinks" +msgstr "Чат көрсетілді" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2543,6 +2612,12 @@ msgstr "" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "" @@ -2618,6 +2693,22 @@ msgstr "" msgid "Command key" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "" @@ -2709,7 +2800,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2786,8 +2877,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -2905,6 +2996,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -2951,7 +3046,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -2979,13 +3081,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3378,7 +3473,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3810,7 +3905,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -3894,7 +3989,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4723,7 +4818,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5016,7 +5111,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5148,7 +5243,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5172,6 +5267,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5312,9 +5411,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5607,26 +5706,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5717,7 +5808,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5822,6 +5913,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -5932,7 +6031,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -5950,7 +6049,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6019,7 +6118,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6182,7 +6281,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6365,6 +6464,10 @@ msgstr "" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6386,7 +6489,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6401,7 +6504,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6527,24 +6630,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" diff --git a/po/kn/minetest.po b/po/kn/minetest.po index 05a910c68..3b37dfc3b 100644 --- a/po/kn/minetest.po +++ b/po/kn/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Kannada (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-01-02 07:29+0000\n" "Last-Translator: Tejaswi Hegde \n" "Language-Team: Kannada " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "ಒಂದು ಲುವಾ ಸ್ಕ್ರಿಪ್ಟ್ ನಲ್ಲಿ ತಪ್ಪಾಗಿದೆ:" @@ -296,6 +295,10 @@ msgstr "ಇನ್ಸ್ಟಾಲ್" msgid "Install missing dependencies" msgstr "ಐಚ್ಛಿಕ ಅವಲಂಬನೆಗಳು:" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install: Unsupported file type or broken archive" +msgstr "" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -638,7 +641,7 @@ msgid "Offset" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +msgid "Persistence" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -748,14 +751,6 @@ msgstr "" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "" @@ -1121,10 +1116,6 @@ msgstr "" msgid "Texturing:" msgstr "" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "" @@ -1157,7 +1148,7 @@ msgstr "" msgid "Waving Plants" msgstr "" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "" @@ -1186,7 +1177,7 @@ msgid "Connection error (timed out?)" msgstr "" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +msgid "Could not find or load game: " msgstr "" #: src/client/clientlauncher.cpp @@ -1256,6 +1247,16 @@ msgstr "" msgid "- Server Name: " msgstr "" +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "ದೋಷ ವೊಂದು ಸಂಭವಿಸಿದೆ:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "" @@ -1264,6 +1265,22 @@ msgstr "" msgid "Automatic forward enabled" msgstr "" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "" @@ -1272,6 +1289,10 @@ msgstr "" msgid "Camera update enabled" msgstr "" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "" @@ -1284,6 +1305,10 @@ msgstr "" msgid "Cinematic mode enabled" msgstr "" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "" @@ -1292,6 +1317,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "" @@ -1315,6 +1344,11 @@ msgid "" "- %s: chat\n" msgstr "" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "" @@ -1509,6 +1543,21 @@ msgstr "" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "" @@ -1841,6 +1890,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "$1 ಡೌನ್ಲೋಡ್ ಮಾಡಲು ಆಗಿಲ್ಲ" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "" @@ -1849,7 +1907,7 @@ msgstr "" msgid "Register and Join" msgstr "" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2036,7 +2094,8 @@ msgid "Muted" msgstr "" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, c-format +msgid "Sound Volume: %d%%" msgstr "" #. ~ Imperative, as in "Enter/type in text". @@ -2243,6 +2302,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2509,6 +2572,10 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +msgid "Chat commands" +msgstr "" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "" @@ -2542,7 +2609,7 @@ msgid "Chat toggle key" msgstr "" #: src/settings_translation_file.cpp -msgid "Chatcommands" +msgid "Chat weblinks" msgstr "" #: src/settings_translation_file.cpp @@ -2561,6 +2628,12 @@ msgstr "" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "" @@ -2636,6 +2709,22 @@ msgstr "" msgid "Command key" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "" @@ -2727,7 +2816,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2804,8 +2893,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -2923,6 +3012,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -2969,7 +3062,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -2997,13 +3097,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3396,7 +3489,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3828,7 +3921,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -3912,7 +4005,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4741,7 +4834,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5034,7 +5127,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5166,7 +5259,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5190,6 +5283,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5330,9 +5427,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5625,26 +5722,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5735,7 +5824,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5840,6 +5929,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -5950,7 +6047,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -5968,7 +6065,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6037,7 +6134,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6200,7 +6297,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6383,6 +6480,10 @@ msgstr "" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6404,7 +6505,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6419,7 +6520,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6545,24 +6646,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6588,5 +6671,9 @@ msgstr "" #~ msgid "View" #~ msgstr "ತೋರಿಸು" +#, fuzzy +#~ msgid "You died." +#~ msgstr "ನೀನು ಸತ್ತುಹೋದೆ" + #~ msgid "needs_fallback_font" #~ msgstr "yes" diff --git a/po/ko/minetest.po b/po/ko/minetest.po index d13da4fcd..39536ed7a 100644 --- a/po/ko/minetest.po +++ b/po/ko/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Korean (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2020-12-05 15:29+0000\n" "Last-Translator: HunSeongPark \n" "Language-Team: Korean " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Lua 스크립트에서 오류가 발생했습니다:" @@ -304,6 +303,13 @@ msgstr "설치" msgid "Install missing dependencies" msgstr "종속성 선택:" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "" +"모드 설치: \"$1\"는(은) 지원 되지 않는 파일 형식 이거나 손상된 압축 파일입니" +"다" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -633,7 +639,8 @@ msgid "Offset" msgstr "오프셋" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "플레이어 전송 거리" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -743,16 +750,6 @@ msgstr "모드 설치: $1를(을) 찾을 수 없습니다" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "모드 설치: 모드 팩 $1 (이)의 올바른 폴더이름을 찾을 수 없습니다" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" -"모드 설치: \"$1\"는(은) 지원 되지 않는 파일 형식 이거나 손상된 압축 파일입니" -"다" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "모드 설치: 파일: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "설치 모드: 모드 팩 $1 (이)의 올바른 폴더이름을 찾을 수 없습니다" @@ -1128,10 +1125,6 @@ msgstr "부드러운 조명 효과" msgid "Texturing:" msgstr "질감:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "쉐이더를 사용하려면 OpenGL 드라이버를 사용할 필요가 있습니다." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "톤 매핑" @@ -1164,7 +1157,7 @@ msgstr "물 등의 물결효과" msgid "Waving Plants" msgstr "움직이는 식물 효과" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "연결 시간이 초과했습니다." @@ -1193,7 +1186,8 @@ msgid "Connection error (timed out?)" msgstr "연결 오류 (시간초과)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "게임을 찾지 못했거나 로딩할 수 없습니다\"" #: src/client/clientlauncher.cpp @@ -1265,6 +1259,16 @@ msgstr "- Player vs Player: " msgid "- Server Name: " msgstr "- 서버 이름: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "오류가 발생했습니다:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "자동 전진 비활성화" @@ -1273,6 +1277,22 @@ msgstr "자동 전진 비활성화" msgid "Automatic forward enabled" msgstr "자동 전진 활성화" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "카메라 업데이트 비활성화" @@ -1281,6 +1301,10 @@ msgstr "카메라 업데이트 비활성화" msgid "Camera update enabled" msgstr "카메라 업데이트 활성화" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "비밀번호 변경" @@ -1293,6 +1317,11 @@ msgstr "시네마틱 모드 비활성화" msgid "Cinematic mode enabled" msgstr "시네마틱 모드 활성화" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "클라이언트 모딩" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "클라이언트 스크립트가 비활성화됨" @@ -1301,6 +1330,10 @@ msgstr "클라이언트 스크립트가 비활성화됨" msgid "Connecting to server..." msgstr "서버 연결중..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "계속" @@ -1338,6 +1371,11 @@ msgstr "" "-마우스 휠:아이템 선택\n" "-%s: 채팅\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "클라이언트 만드는 중..." @@ -1545,6 +1583,21 @@ msgstr "음소거 해제" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "시야 범위 %d로 바꿈" @@ -1878,6 +1931,15 @@ msgstr "표면 모드의 미니맵, 1배 확대" msgid "Minimap in texture mode" msgstr "최소 텍스처 크기" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "$1을 다운로드하는 데에 실패했습니다" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "비밀번호가 맞지 않습니다!" @@ -1886,7 +1948,7 @@ msgstr "비밀번호가 맞지 않습니다!" msgid "Register and Join" msgstr "등록하고 참여" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2079,7 +2141,8 @@ msgid "Muted" msgstr "음소거" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "볼륨 조절: " #. ~ Imperative, as in "Enter/type in text". @@ -2330,6 +2393,10 @@ msgid "" msgstr "" "화면에 맞게 dpi 구성을 조정합니다 (X11 미지원 / Android 만 해당). 4k 화면 용." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2626,6 +2693,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "채팅 메세지 강제퇴장 임계값" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "채팅 명렁어" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "채팅 글자 크기" @@ -2659,8 +2731,9 @@ msgid "Chat toggle key" msgstr "채팅 스위치" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "채팅 명렁어" +#, fuzzy +msgid "Chat weblinks" +msgstr "채팅 보이기" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2678,6 +2751,12 @@ msgstr "시네마틱 모드 스위치" msgid "Clean transparent textures" msgstr "깨끗하고 투명한 텍스처" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "클라이언트" @@ -2766,6 +2845,22 @@ msgstr "" msgid "Command key" msgstr "명령 키" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "유리를 연결" @@ -2866,7 +2961,7 @@ msgstr "십자선 투명도" #, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "십자선 투명도 (불투명 함, 0과 255 사이)." #: src/settings_translation_file.cpp @@ -2945,8 +3040,8 @@ msgstr "기본 스택 크기" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3065,6 +3160,10 @@ msgstr "Anticheat를 사용 안함" msgid "Disallow empty passwords" msgstr "비밀번호 없으면 불가" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "도메인 서버의 이름은 서버리스트에 표시 됩니다." @@ -3111,7 +3210,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3140,13 +3246,6 @@ msgstr "모드 보안 적용" msgid "Enable players getting damage and dying." msgstr "플레이어는 데미지를 받고 죽을 수 있습니다." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "랜덤 사용자 입력 (테스트에 사용)를 사용 합니다." @@ -3557,7 +3656,7 @@ msgstr "글로벌 콜백" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3995,7 +4094,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -4079,7 +4178,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -5132,7 +5231,7 @@ msgid "Map save interval" msgstr "맵 저장 간격" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5431,7 +5530,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5568,7 +5667,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5592,6 +5691,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5742,9 +5845,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -6063,26 +6166,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -6191,7 +6286,7 @@ msgstr "" "설정 적용 후 재시작이 필요합니다." #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -6302,6 +6397,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6412,7 +6515,7 @@ msgstr "텍스처 경로" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6430,7 +6533,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6502,7 +6605,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6674,7 +6777,7 @@ msgstr "이중 선형 필터링은 질감 스케일링을 할 때 사용 합니 #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6859,6 +6962,11 @@ msgstr "물결 길이" msgid "Waving plants" msgstr "흔들리는 식물 효과" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "선택 박스 컬러" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6885,7 +6993,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6910,7 +7018,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -7041,24 +7149,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -7199,6 +7289,9 @@ msgstr "" #~ msgid "Generate normalmaps" #~ msgstr "Normalmaps 생성" +#~ msgid "Install: file: \"$1\"" +#~ msgstr "모드 설치: 파일: \"$1\"" + #, fuzzy #~ msgid "Lava depth" #~ msgstr "큰 동굴 깊이" @@ -7309,6 +7402,9 @@ msgstr "" #~ msgid "This font will be used for certain languages." #~ msgstr "이 글꼴은 특정 언어에 사용 됩니다." +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "쉐이더를 사용하려면 OpenGL 드라이버를 사용할 필요가 있습니다." + #~ msgid "Toggle Cinematic" #~ msgstr "시네마틱 스위치" @@ -7324,5 +7420,9 @@ msgstr "" #~ msgid "Yes" #~ msgstr "예" +#, fuzzy +#~ msgid "You died." +#~ msgstr "사망했습니다" + #~ msgid "needs_fallback_font" #~ msgstr "yes" diff --git a/po/ky/minetest.po b/po/ky/minetest.po index 504e878e1..d729c7cd3 100644 --- a/po/ky/minetest.po +++ b/po/ky/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Kyrgyz (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2019-11-10 15:04+0000\n" "Last-Translator: Krock \n" "Language-Team: Kyrgyz " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "" @@ -313,6 +312,10 @@ msgstr "" msgid "Install missing dependencies" msgstr "" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install: Unsupported file type or broken archive" +msgstr "" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -642,7 +645,7 @@ msgid "Offset" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +msgid "Persistence" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -757,14 +760,6 @@ msgstr "" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "" @@ -1163,10 +1158,6 @@ msgstr "Тегиз жарык" msgid "Texturing:" msgstr "" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp #, fuzzy msgid "Tone Mapping" @@ -1204,7 +1195,7 @@ msgstr "Кооз бактар" msgid "Waving Plants" msgstr "Кооз бактар" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp #, fuzzy msgid "Connection timed out." msgstr "Туташтыруу катасы (убактыңыз өтүп кеттиби?)" @@ -1236,7 +1227,8 @@ msgid "Connection error (timed out?)" msgstr "Туташтыруу катасы (убактыңыз өтүп кеттиби?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Оюнду табуу же жүктөө мүмкүн эмес \"" #: src/client/clientlauncher.cpp @@ -1312,6 +1304,15 @@ msgstr "" msgid "- Server Name: " msgstr "" +#: src/client/game.cpp +msgid "A serialization error occurred:" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp #, fuzzy msgid "Automatic forward disabled" @@ -1322,6 +1323,22 @@ msgstr "Алга" msgid "Automatic forward enabled" msgstr "Алга" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "" @@ -1331,6 +1348,10 @@ msgstr "" msgid "Camera update enabled" msgstr "күйгүзүлгөн" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Сырсөздү өзгөртүү" @@ -1345,6 +1366,10 @@ msgstr "Жаратуу режими" msgid "Cinematic mode enabled" msgstr "Жаратуу режими" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "" @@ -1353,6 +1378,10 @@ msgstr "" msgid "Connecting to server..." msgstr "Серверге туташтырылууда..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Улантуу" @@ -1387,6 +1416,11 @@ msgstr "" "- Чычкан дөңгөлөгү: буюмду тандоо\n" "- T: маек\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Клиент жаратылууда..." @@ -1596,6 +1630,21 @@ msgstr "Үн көлөмү" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "" @@ -1934,6 +1983,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Дүйнөнү инициалдаштыруу катасы" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Сырсөздөр дал келген жок!" @@ -1942,7 +2000,7 @@ msgstr "Сырсөздөр дал келген жок!" msgid "Register and Join" msgstr "" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2141,7 +2199,8 @@ msgid "Muted" msgstr "баскычты басыңыз" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Үн көлөмү: " #. ~ Imperative, as in "Enter/type in text". @@ -2349,6 +2408,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2622,6 +2685,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Команда" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "" @@ -2658,9 +2726,8 @@ msgid "Chat toggle key" msgstr "Баскычтарды өзгөртүү" #: src/settings_translation_file.cpp -#, fuzzy -msgid "Chatcommands" -msgstr "Команда" +msgid "Chat weblinks" +msgstr "" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2680,6 +2747,12 @@ msgstr "Жаратуу режими" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "" @@ -2758,6 +2831,22 @@ msgstr "" msgid "Command key" msgstr "Команда" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp #, fuzzy msgid "Connect glass" @@ -2857,7 +2946,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2936,8 +3025,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3058,6 +3147,10 @@ msgstr "Бөлүкчөлөрдү күйгүзүү" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -3104,7 +3197,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3132,13 +3232,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3534,7 +3627,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3969,7 +4062,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -4054,7 +4147,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4887,7 +4980,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5182,7 +5275,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5315,7 +5408,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5339,6 +5432,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5482,9 +5579,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5786,26 +5883,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5898,7 +5987,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -6006,6 +6095,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6116,7 +6213,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6134,7 +6231,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6203,7 +6300,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6367,7 +6464,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6556,6 +6653,10 @@ msgstr "Кооз бактар" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6577,7 +6678,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6592,7 +6693,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6719,24 +6820,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6835,5 +6918,9 @@ msgstr "" #~ msgid "Yes" #~ msgstr "Ооба" +#, fuzzy +#~ msgid "You died." +#~ msgstr "Сиз өлдүңүз." + #~ msgid "needs_fallback_font" #~ msgstr "yes" diff --git a/po/lt/minetest.po b/po/lt/minetest.po index d16babb11..24b46eb41 100644 --- a/po/lt/minetest.po +++ b/po/lt/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Lithuanian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-04-10 15:49+0000\n" "Last-Translator: Kornelijus Tvarijanavičius \n" "Language-Team: Lithuanian " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Įvyko klaida Lua skripte:" @@ -302,6 +301,12 @@ msgstr "Įdiegti" msgid "Install missing dependencies" msgstr "Inicijuojami mazgai" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "" +"Papildinio diegimas: nepalaikomas failo tipas „$1“ arba sugadintas archyvas" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -640,7 +645,7 @@ msgid "Offset" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +msgid "Persistence" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -757,16 +762,6 @@ msgstr "" "Papildinio diegimas: nepavyksta rasti tinkamo aplanko pavadinimo papildinio " "paketui $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" -"Papildinio diegimas: nepalaikomas failo tipas „$1“ arba sugadintas archyvas" - -#: builtin/mainmenu/pkgmgr.lua -#, fuzzy -msgid "Install: file: \"$1\"" -msgstr "Įdiegti papildinį: failas: „$1“" - #: builtin/mainmenu/pkgmgr.lua #, fuzzy msgid "Unable to find a valid mod or modpack" @@ -1166,10 +1161,6 @@ msgstr "Apšvietimo efektai" msgid "Texturing:" msgstr "" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "" @@ -1204,7 +1195,7 @@ msgstr "Nepermatomi lapai" msgid "Waving Plants" msgstr "" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Baigėsi prijungimo laikas." @@ -1233,7 +1224,8 @@ msgid "Connection error (timed out?)" msgstr "Ryšio klaida (baigėsi prijungimo laikas?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Nepavyko rasti ar įkelti žaidimo „" #: src/client/clientlauncher.cpp @@ -1306,6 +1298,16 @@ msgstr "" msgid "- Server Name: " msgstr "- Serverio pavadinimas: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Įvyko klaida:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp #, fuzzy msgid "Automatic forward disabled" @@ -1316,6 +1318,22 @@ msgstr "Pirmyn" msgid "Automatic forward enabled" msgstr "Pirmyn" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "" @@ -1325,6 +1343,10 @@ msgstr "" msgid "Camera update enabled" msgstr "Žalojimas įjungtas" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Keisti slaptažodį" @@ -1339,6 +1361,11 @@ msgstr "Kūrybinė veiksena" msgid "Cinematic mode enabled" msgstr "Kūrybinė veiksena" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Žaisti tinkle(klientas)" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "" @@ -1347,6 +1374,10 @@ msgstr "" msgid "Connecting to server..." msgstr "Jungiamasi prie serverio..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Tęsti" @@ -1384,6 +1415,11 @@ msgstr "" "- Pelės ratukas: pasirinkti elementą\n" "- %s: kalbėtis\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Kuriamas klientas..." @@ -1601,6 +1637,21 @@ msgstr "Garso lygis" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "" @@ -1941,6 +1992,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Nepavyko parsiųsti $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Slaptažodžiai nesutampa!" @@ -1949,7 +2009,7 @@ msgstr "Slaptažodžiai nesutampa!" msgid "Register and Join" msgstr "" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2148,7 +2208,8 @@ msgid "Muted" msgstr "paspauskite klavišą" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Garso lygis: " #. ~ Imperative, as in "Enter/type in text". @@ -2356,6 +2417,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2626,6 +2691,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Komanda" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "" @@ -2662,9 +2732,8 @@ msgid "Chat toggle key" msgstr "Nustatyti klavišus" #: src/settings_translation_file.cpp -#, fuzzy -msgid "Chatcommands" -msgstr "Komanda" +msgid "Chat weblinks" +msgstr "" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2684,6 +2753,12 @@ msgstr "Kūrybinė veiksena" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Žaisti tinkle(klientas)" @@ -2764,6 +2839,22 @@ msgstr "" msgid "Command key" msgstr "Komanda" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp #, fuzzy msgid "Connect glass" @@ -2860,7 +2951,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2941,8 +3032,8 @@ msgstr "keisti žaidimą" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3062,6 +3153,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -3108,7 +3203,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3137,13 +3239,6 @@ msgstr "Papildiniai internete" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3537,7 +3632,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3973,7 +4068,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -4058,7 +4153,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4891,7 +4986,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5194,7 +5289,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5327,7 +5422,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5351,6 +5446,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5493,9 +5592,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5798,26 +5897,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5909,7 +6000,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -6017,6 +6108,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6127,7 +6226,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6145,7 +6244,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6214,7 +6313,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6377,7 +6476,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6564,6 +6663,10 @@ msgstr "Nepermatomi lapai" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6585,7 +6688,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6600,7 +6703,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6727,24 +6830,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6790,6 +6875,10 @@ msgstr "" #~ msgid "Enables filmic tone mapping" #~ msgstr "Leisti sužeidimus" +#, fuzzy +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Įdiegti papildinį: failas: „$1“" + #~ msgid "Main" #~ msgstr "Pagrindinis" @@ -6840,5 +6929,9 @@ msgstr "" #~ msgid "Yes" #~ msgstr "Taip" +#, fuzzy +#~ msgid "You died." +#~ msgstr "Jūs numirėte" + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/lv/minetest.po b/po/lv/minetest.po index cf8a5f4f3..cd36faed8 100644 --- a/po/lv/minetest.po +++ b/po/lv/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-04-02 10:26+0000\n" "Last-Translator: Dainis \n" "Language-Team: Latvian " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Lua skriptā radās kļūme:" @@ -310,6 +309,11 @@ msgstr "Instalēt" msgid "Install missing dependencies" msgstr "Neobligātās atkarības:" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "Instalācija: Neatbalstīts faila tips “$1” vai arī sabojāts arhīvs" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -641,7 +645,8 @@ msgid "Offset" msgstr "Nobīde" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Noturība" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -753,14 +758,6 @@ msgstr "" "Moda instalācija: Neizdevās atrast derīgu mapes nosaukumu priekš modu " "komplekta “$1”" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Instalācija: Neatbalstīts faila tips “$1” vai arī sabojāts arhīvs" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Instalācija: fails: “$1”" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Neizdevās atrast derīgu modu vai modu komplektu" @@ -1136,10 +1133,6 @@ msgstr "Gluds apgaismojums" msgid "Texturing:" msgstr "Teksturēšana:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Lai iespējotu šeiderus, jāizmanto OpenGL draiveris." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Toņu atbilstība" @@ -1172,7 +1165,7 @@ msgstr "Viļņojoši šķidrumi" msgid "Waving Plants" msgstr "Viļņojoši augi" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Savienojuma noildze." @@ -1201,7 +1194,8 @@ msgid "Connection error (timed out?)" msgstr "Savienojuma kļūme (noildze?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Nevarēja atrast vai ielādēt spēli \"" #: src/client/clientlauncher.cpp @@ -1273,6 +1267,16 @@ msgstr "- PvP: " msgid "- Server Name: " msgstr "- Severa nosaukums: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Radās kļūme:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Automātiskā pārvietošanās izslēgta" @@ -1281,6 +1285,22 @@ msgstr "Automātiskā pārvietošanās izslēgta" msgid "Automatic forward enabled" msgstr "Automātiskā pārvietošanās ieslēgta" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Kameras atjaunošana atspējota" @@ -1289,6 +1309,10 @@ msgstr "Kameras atjaunošana atspējota" msgid "Camera update enabled" msgstr "Kameras atjaunošana iespējota" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Nomainīt paroli" @@ -1301,6 +1325,10 @@ msgstr "Kino režīms izslēgts" msgid "Cinematic mode enabled" msgstr "Kino režīms ieslēgts" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Klienta puses skriptēšana ir atspējota" @@ -1309,6 +1337,10 @@ msgstr "Klienta puses skriptēšana ir atspējota" msgid "Connecting to server..." msgstr "Savienojas ar serveri..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Turpināt" @@ -1346,6 +1378,11 @@ msgstr "" "- Peles rullītis: izvēlēties priekšmetu\n" "- %s: čats\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Izveido klientu..." @@ -1554,6 +1591,21 @@ msgstr "Skaņa ieslēgta" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Redzamības diapazons nomainīts uz %d" @@ -1887,6 +1939,15 @@ msgstr "Minikarte virsmas režīmā, palielinājums x1" msgid "Minimap in texture mode" msgstr "Minikarte virsmas režīmā, palielinājums x1" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Neizdevās lejuplādēt $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Paroles nesakrīt!" @@ -1895,7 +1956,7 @@ msgstr "Paroles nesakrīt!" msgid "Register and Join" msgstr "Reģistrēties un pievienoties" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2091,7 +2152,8 @@ msgid "Muted" msgstr "Apklusināts" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Skaņas skaļums: " #. ~ Imperative, as in "Enter/type in text". @@ -2298,6 +2360,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2564,6 +2630,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Komanda" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "" @@ -2597,8 +2668,9 @@ msgid "Chat toggle key" msgstr "" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "" +#, fuzzy +msgid "Chat weblinks" +msgstr "Čats parādīts" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2616,6 +2688,12 @@ msgstr "" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "" @@ -2691,6 +2769,22 @@ msgstr "" msgid "Command key" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "" @@ -2782,7 +2876,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2859,8 +2953,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -2978,6 +3072,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -3024,7 +3122,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3052,13 +3157,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3454,7 +3552,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3890,7 +3988,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -3974,7 +4072,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4803,7 +4901,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5096,7 +5194,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5228,7 +5326,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5252,6 +5350,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5394,9 +5496,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5689,26 +5791,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5799,7 +5893,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5904,6 +5998,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6014,7 +6116,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6032,7 +6134,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6101,7 +6203,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6264,7 +6366,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6447,6 +6549,10 @@ msgstr "" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6468,7 +6574,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6483,7 +6589,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6609,24 +6715,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6671,6 +6759,9 @@ msgstr "" #~ msgid "Generate Normal Maps" #~ msgstr "Izveidot normāl-kartes" +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Instalācija: fails: “$1”" + #~ msgid "Main" #~ msgstr "Galvenā izvēlne" @@ -6713,8 +6804,15 @@ msgstr "" #~ msgid "Start Singleplayer" #~ msgstr "Sākt viena spēlētāja spēli" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Lai iespējotu šeiderus, jāizmanto OpenGL draiveris." + #~ msgid "Yes" #~ msgstr "Jā" +#, fuzzy +#~ msgid "You died." +#~ msgstr "Jūs nomirāt" + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/minetest.pot b/po/minetest.pot index 53b706f5f..e40fc194d 100644 --- a/po/minetest.pot +++ b/po/minetest.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -53,10 +53,6 @@ msgstr "" msgid "The out chat queue is now empty." msgstr "" -#: builtin/client/death_formspec.lua -msgid "You died." -msgstr "" - #: builtin/client/death_formspec.lua src/client/game.cpp msgid "You died" msgstr "" @@ -94,6 +90,10 @@ msgstr "" msgid "OK" msgstr "" +#: builtin/fstk/ui.lua +msgid "" +msgstr "" + #: builtin/fstk/ui.lua msgid "The server has requested a reconnect:" msgstr "" @@ -243,6 +243,10 @@ msgstr "" msgid "Failed to download $1" msgstr "" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install: Unsupported file type or broken archive" +msgstr "" + #: builtin/mainmenu/dlg_contentstore.lua msgid "Already installed" msgstr "" @@ -617,7 +621,7 @@ msgid "Octaves" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +msgid "Persistence" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -743,14 +747,6 @@ msgstr "" msgid "Unable to install a game as a $1" msgstr "" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" - #: builtin/mainmenu/pkgmgr.lua msgid "$1 mods" msgstr "" @@ -845,18 +841,6 @@ msgstr "" msgid "Install games from ContentDB" msgstr "" -#: builtin/mainmenu/tab_local.lua -msgid "Select Mods" -msgstr "" - -#: builtin/mainmenu/tab_local.lua -msgid "New" -msgstr "" - -#: builtin/mainmenu/tab_local.lua -msgid "Select World:" -msgstr "" - #: builtin/mainmenu/tab_local.lua msgid "Creative Mode" msgstr "" @@ -869,6 +853,18 @@ msgstr "" msgid "Host Server" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Select Mods" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "New" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Select World:" +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "Host Game" msgstr "" @@ -1126,15 +1122,11 @@ msgstr "" msgid "Dynamic shadows" msgstr "" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - #: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "" @@ -1187,7 +1179,7 @@ msgid "Provided world path doesn't exist: " msgstr "" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +msgid "Could not find or load game: " msgstr "" #: src/client/clientlauncher.cpp @@ -1202,10 +1194,19 @@ msgstr "" msgid "Creating server..." msgstr "" +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Singleplayer" msgstr "" @@ -1218,10 +1219,29 @@ msgstr "" msgid "Resolving address..." msgstr "" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Item definitions..." msgstr "" @@ -1323,6 +1343,26 @@ msgstr "" msgid "Cinematic mode disabled" msgstr "" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward enabled" msgstr "" @@ -1376,7 +1416,7 @@ msgstr "" msgid "Viewing range is at maximum: %d" msgstr "" -#: src/client/game.cpp +#: src/client/game.cpp src/unittest/test_gettext.cpp #, c-format msgid "Viewing range changed to %d" msgstr "" @@ -1510,6 +1550,15 @@ msgstr "" msgid "- Server Name: " msgstr "" +#: src/client/game.cpp +#, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +msgid "A serialization error occurred:" +msgstr "" + #: src/client/game.cpp msgid "" "\n" @@ -1818,7 +1867,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + +#: src/gui/guiChatConsole.cpp +msgid "Failed to open webpage" +msgstr "" + +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2005,7 +2062,8 @@ msgid "Change" msgstr "" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, c-format +msgid "Sound Volume: %d%%" msgstr "" #: src/gui/guiVolumeChange.cpp @@ -2258,11 +2316,11 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -2272,7 +2330,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -3064,12 +3122,12 @@ msgid "Basic" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -3163,7 +3221,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -3214,7 +3272,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -3378,7 +3436,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -3398,8 +3456,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " "filtering." msgstr "" @@ -3409,8 +3467,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3420,20 +3478,20 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" msgstr "" #: src/settings_translation_file.cpp @@ -3443,8 +3501,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp @@ -3453,9 +3511,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -3803,7 +3861,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -3837,7 +3895,7 @@ msgid "HUD scale factor" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -4207,6 +4265,14 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp msgid "Enable console window" msgstr "" @@ -4256,6 +4322,24 @@ msgstr "" msgid "Client" msgstr "" +#: src/settings_translation_file.cpp +msgid "Chat weblinks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "Network" msgstr "" @@ -4288,9 +4372,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -4540,11 +4624,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" msgstr "" #: src/settings_translation_file.cpp @@ -5002,7 +5085,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5038,11 +5121,10 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" msgstr "" #: src/settings_translation_file.cpp @@ -5285,11 +5367,11 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Chatcommands" +msgid "Chat commands" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -5492,7 +5574,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -6551,12 +6633,3 @@ msgid "" "be queued.\n" "This should be lower than curl_parallel_limit." msgstr "" - -#: src/gui/guiChatConsole.cpp -msgid "Opening webpage" -msgstr "" - -#: src/gui/guiChatConsole.cpp -msgid "Failed to open webpage" -msgstr "" - diff --git a/po/mr/minetest.po b/po/mr/minetest.po index 7c7f189cd..aec436e98 100644 --- a/po/mr/minetest.po +++ b/po/mr/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-06-10 14:35+0000\n" "Last-Translator: Avyukt More \n" "Language-Team: Marathi " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "त्रुटी आढळली" @@ -296,6 +295,10 @@ msgstr "डाउनलोड $1" msgid "Install missing dependencies" msgstr "गहाळ अवलंबित्व डाउनलोड करा" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install: Unsupported file type or broken archive" +msgstr "" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -621,7 +624,7 @@ msgid "Offset" msgstr "ऑफसेट" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +msgid "Persistence" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -731,14 +734,6 @@ msgstr "" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "" @@ -1103,10 +1098,6 @@ msgstr "" msgid "Texturing:" msgstr "" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "" @@ -1139,7 +1130,7 @@ msgstr "" msgid "Waving Plants" msgstr "" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "" @@ -1168,7 +1159,7 @@ msgid "Connection error (timed out?)" msgstr "" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +msgid "Could not find or load game: " msgstr "" #: src/client/clientlauncher.cpp @@ -1238,6 +1229,16 @@ msgstr "" msgid "- Server Name: " msgstr "" +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "एक त्रुटी आली:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "" @@ -1246,6 +1247,22 @@ msgstr "" msgid "Automatic forward enabled" msgstr "" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "" @@ -1254,6 +1271,10 @@ msgstr "" msgid "Camera update enabled" msgstr "" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "" @@ -1266,6 +1287,10 @@ msgstr "" msgid "Cinematic mode enabled" msgstr "" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "" @@ -1274,6 +1299,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "" @@ -1297,6 +1326,11 @@ msgid "" "- %s: chat\n" msgstr "" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "" @@ -1491,6 +1525,21 @@ msgstr "" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "" @@ -1823,6 +1872,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "$१ डाउनलोड करू नाही शकत" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "" @@ -1831,7 +1889,7 @@ msgstr "" msgid "Register and Join" msgstr "" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2018,7 +2076,8 @@ msgid "Muted" msgstr "" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, c-format +msgid "Sound Volume: %d%%" msgstr "" #. ~ Imperative, as in "Enter/type in text". @@ -2225,6 +2284,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2491,6 +2554,10 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +msgid "Chat commands" +msgstr "" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "" @@ -2524,7 +2591,7 @@ msgid "Chat toggle key" msgstr "" #: src/settings_translation_file.cpp -msgid "Chatcommands" +msgid "Chat weblinks" msgstr "" #: src/settings_translation_file.cpp @@ -2543,6 +2610,12 @@ msgstr "" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "" @@ -2618,6 +2691,22 @@ msgstr "" msgid "Command key" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "" @@ -2709,7 +2798,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2786,8 +2875,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -2905,6 +2994,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -2951,7 +3044,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -2979,13 +3079,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3378,7 +3471,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3810,7 +3903,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -3894,7 +3987,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4723,7 +4816,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5016,7 +5109,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5148,7 +5241,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5172,6 +5265,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5312,9 +5409,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5607,26 +5704,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5717,7 +5806,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5822,6 +5911,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -5932,7 +6029,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -5950,7 +6047,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6019,7 +6116,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6182,7 +6279,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6365,6 +6462,10 @@ msgstr "" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6386,7 +6487,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6401,7 +6502,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6527,24 +6628,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6556,3 +6639,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "cURL parallel limit" msgstr "" + +#, fuzzy +#~ msgid "You died." +#~ msgstr "तू मेलास" diff --git a/po/ms/minetest.po b/po/ms/minetest.po index a7e5d7e87..22b7ad5df 100644 --- a/po/ms/minetest.po +++ b/po/ms/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Malay (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-06-16 19:05+0000\n" "Last-Translator: Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat " "Yasuyoshi \n" @@ -59,10 +59,6 @@ msgstr "Lahir semula" msgid "You died" msgstr "Anda telah meninggal" -#: builtin/client/death_formspec.lua -msgid "You died." -msgstr "Anda telah meninggal." - #: builtin/common/chatcommands.lua msgid "Available commands:" msgstr "Perintah tersedia:" @@ -94,6 +90,11 @@ msgstr "[all | ]" msgid "OK" msgstr "OK" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "" +msgstr "Perintah tidak tersedia: " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Berlakunya ralat dalam skrip Lua:" @@ -296,6 +297,11 @@ msgstr "Pasang $1" msgid "Install missing dependencies" msgstr "Pasang kebergantungan yang hilang" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "Pasang: Jenis fail \"$1\" tidak disokong atau arkib rosak" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -625,7 +631,8 @@ msgid "Offset" msgstr "Ofset" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Penerusan" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -735,14 +742,6 @@ msgstr "Pasang Mods: Gagal mencari nama mods sebenar untuk: $1" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "Pasang Mods: tidak jumpa nama folder yang sesuai untuk pek mods $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Pasang: Jenis fail \"$1\" tidak disokong atau arkib rosak" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Pasang: fail: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Tidak jumpa mods atau pek mods yang sah" @@ -1110,10 +1109,6 @@ msgstr "Pencahayaan Lembut" msgid "Texturing:" msgstr "Jalinan:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Untuk membolehkan pembayang, pemacu OpenGL mesti digunakan." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Pemetaan Tona" @@ -1146,7 +1141,7 @@ msgstr "Cecair Bergelora" msgid "Waving Plants" msgstr "Tumbuhan Bergoyang" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Sambungan tamat tempoh." @@ -1175,7 +1170,8 @@ msgid "Connection error (timed out?)" msgstr "Ralat dalam penyambungan (tamat tempoh?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Tidak jumpa atau tidak boleh muatkan permainan \"" #: src/client/clientlauncher.cpp @@ -1248,6 +1244,16 @@ msgstr "- PvP: " msgid "- Server Name: " msgstr "- Nama Pelayan: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Telah berlakunya ralat:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Pergerakan automatik dilumpuhkan" @@ -1256,6 +1262,23 @@ msgstr "Pergerakan automatik dilumpuhkan" msgid "Automatic forward enabled" msgstr "Pergerakan automatik dibolehkan" +#: src/client/game.cpp +#, fuzzy +msgid "Block bounds hidden" +msgstr "Batas blok" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Kemas kini kamera dilumpuhkan" @@ -1264,6 +1287,10 @@ msgstr "Kemas kini kamera dilumpuhkan" msgid "Camera update enabled" msgstr "Kemas kini kamera dibolehkan" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Tukar Kata Laluan" @@ -1276,6 +1303,11 @@ msgstr "Mod sinematik dilumpuhkan" msgid "Cinematic mode enabled" msgstr "Mod sinematik dibolehkan" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Mods klien" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Skrip pihak klien dilumpuhkan" @@ -1284,6 +1316,10 @@ msgstr "Skrip pihak klien dilumpuhkan" msgid "Connecting to server..." msgstr "Sedang menyambung kepada pelayan..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Teruskan" @@ -1321,6 +1357,11 @@ msgstr "" "- Roda tetikus: pilih item\n" "- %s: sembang\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Sedang mencipta klien..." @@ -1529,6 +1570,21 @@ msgstr "Bunyi dinyahbisukan" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Jarak pandang ditukar ke %d" @@ -1861,6 +1917,15 @@ msgstr "Peta mini dalam mod permukaan, Zum x%d" msgid "Minimap in texture mode" msgstr "Peta mini dalam mod tekstur" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Gagal memuat turun $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Kata laluan tidak padan!" @@ -1869,7 +1934,7 @@ msgstr "Kata laluan tidak padan!" msgid "Register and Join" msgstr "Daftar dan Sertai" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2063,7 +2128,8 @@ msgid "Muted" msgstr "Dibisukan" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Kekuatan Bunyi: " #. ~ Imperative, as in "Enter/type in text". @@ -2316,6 +2382,10 @@ msgstr "" "Laraskan konfigurasi DPI ke skrin anda (bukan X11/Android sahaja) cth. untuk " "skrin 4K." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2611,6 +2681,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Nilai ambang mesej masa perintah sembang" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Perintah sembang" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "Saiz fon sembang" @@ -2644,8 +2719,9 @@ msgid "Chat toggle key" msgstr "Kekunci togol sembang" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Perintah sembang" +#, fuzzy +msgid "Chat weblinks" +msgstr "Sembang ditunjukkan" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2663,6 +2739,12 @@ msgstr "Kekunci mod sinematik" msgid "Clean transparent textures" msgstr "Bersihkan tekstur lut sinar" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Klien" @@ -2753,6 +2835,35 @@ msgstr "" msgid "Command key" msgstr "Kekunci perintah" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Tahap pemampatan ZLib untuk digunakan apabila menyimpan blokpeta ke cakera.\n" +"-1 - tahap pemampatan lalai Zlib\n" +"0 - tiada pemampatan, paling laju\n" +"9 - pemampatan terbaik, paling lambat\n" +"(tahap 1-3 menggunakan kaedah \"fast\" Zlib, 4-9 menggunakan kaedah biasa)" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Tahap pemampatan ZLib untuk digunakan apabila menghantar blokpeta kepada " +"klien.\n" +"-1 - tahap pemampatan lalai Zlib\n" +"0 - tiada pemampatan, paling laju\n" +"9 - pemampatan terbaik, paling lambat\n" +"(tahap 1-3 menggunakan kaedah \"fast\" Zlib, 4-9 menggunakan kaedah biasa)" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Sambung kaca" @@ -2852,9 +2963,10 @@ msgid "Crosshair alpha" msgstr "Nilai alfa rerambut silang" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" "Nilai alfa rerambut silang (kelegapan, antara 0 dan 255).\n" "Juga mengawal warna rerambut silang objek" @@ -2937,9 +3049,10 @@ msgid "Default stack size" msgstr "Saiz tindanan lalai" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" "Mentakrifkan kualiti penapisan bayang\n" @@ -3071,6 +3184,10 @@ msgstr "Melumpuhkan antitipu" msgid "Disallow empty passwords" msgstr "Menolak kata laluan kosong" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "Nama domain pelayan, untuk dipaparkan dalam senarai pelayan." @@ -3121,8 +3238,20 @@ msgstr "" "Sokongan ini dalam ujikaji dan API boleh berubah." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" +"Membolehkan penapisan cakera poisson.\n" +"Jika dibenarkan, gunakan cakera poisson untuk membuat \"bayang lembut\". " +"Jika tidak, gunakan penapisan PCF." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" "Membolehkan bayang berwarna. \n" @@ -3153,16 +3282,6 @@ msgstr "Membolehkan keselamatan mods" msgid "Enable players getting damage and dying." msgstr "Membolehkan pemain menerima kecederaan dan mati." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" -"Membolehkan penapisan cakera poisson.\n" -"Jika dibenarkan, gunakan cakera poisson untuk membuat \"bayang lembut\". " -"Jika tidak, gunakan penapisan PCF." - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Membolehkan input pengguna secara rawak (hanya untuk percubaan)." @@ -3621,10 +3740,11 @@ msgid "Global callbacks" msgstr "Panggil balik sejagat" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Atribut penjanaan peta sejagat.\n" "Dalam janapeta v6, bendera 'decorations' mengawal semua hiasan kecuali " @@ -4132,7 +4252,8 @@ msgstr "" "Ini selalunya hanya diperlukan oleh penyumbang teras/terbina dalam" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "Memasang perintah sembang ketika pendaftaran." #: src/settings_translation_file.cpp @@ -4224,7 +4345,8 @@ msgid "Joystick button repetition interval" msgstr "Selang masa pengulangan butang kayu bedik" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +#, fuzzy +msgid "Joystick dead zone" msgstr "Zon mati kayu bedik" #: src/settings_translation_file.cpp @@ -5338,7 +5460,8 @@ msgid "Map save interval" msgstr "Selang masa penyimpanan peta" #: src/settings_translation_file.cpp -msgid "Map update time" +#, fuzzy +msgid "Map shadows update frames" msgstr "Masa kemas kini peta" #: src/settings_translation_file.cpp @@ -5660,7 +5783,8 @@ msgid "Mod channels" msgstr "Saluran mods" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +#, fuzzy +msgid "Modifies the size of the HUD elements." msgstr "Mengubah saiz elemen palang papar pandu (hudbar)." #: src/settings_translation_file.cpp @@ -5819,9 +5943,10 @@ msgstr "" "ialah '1'." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" "Jumlah blok-blok tambahan yang boleh dimuatkan oleh /clearobjects pada " @@ -5851,6 +5976,10 @@ msgstr "" "Buka menu jeda apabila fokus tetingkap hilang.\n" "Tidak jeda jika formspec dibuka." +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -6023,11 +6152,12 @@ msgid "Prometheus listener address" msgstr "Alamat pendengar Prometheus" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" "Alamat pendengar Prometheus.\n" "Jika minetest dikompil dengan tetapan ENABLE_PROMETHEUS dibolehkan,\n" @@ -6376,22 +6506,11 @@ msgstr "" "bayang lebih gelap." #: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" -"Menetapkan masa kemas kini bayang.\n" -"Nilai lebih rendah untuk kemas kini peta dan bayang lebih laju, tetapi " -"menggunakan lebih banyak sumber.\n" -"Nilai minimum 0.001 saat dan nilai maksimum 0.2 saat" - -#: src/settings_translation_file.cpp +#, fuzzy msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" "Menetapkan saiz jejari bayang lembut.\n" "Nilai lebih rendah untuk bayang lebih tajam dan nilai lebih tinggi untuk " @@ -6399,10 +6518,11 @@ msgstr "" "Nilai minimum 1.0 dan nilai maksimum 10.0" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" "Menetapkan kecondongan orbit Matahari/Bulan dalam unit darjah\n" "Nilai 0 untuk tidak condong / tiada orbit menegak.\n" @@ -6514,7 +6634,8 @@ msgstr "" "Anda perlu mulakan semula selepas mengubah tetapan ini." #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +#, fuzzy +msgid "Show name tag backgrounds by default" msgstr "Tunjuk latar belakang tag nama secara lalainya" #: src/settings_translation_file.cpp @@ -6641,6 +6762,14 @@ msgstr "" "Ambil perhatian bahawa mods atau permainan boleh tetapkan secara khusus " "tindanan untuk sesetengah (atau semua) item." +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6777,10 +6906,11 @@ msgid "Texture path" msgstr "Laluan tekstur" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" "Saiz tekstur yang akan digunakan untuk menerjemah peta bayang.\n" "Nilai ini mestilah hasil kuasa dua.\n" @@ -6811,7 +6941,8 @@ msgid "The URL for the content repository" msgstr "URL untuk repositori kandungan" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +#, fuzzy +msgid "The dead zone of the joystick" msgstr "Zon mati bagi kayu bedik yang digunakan" #: src/settings_translation_file.cpp @@ -6901,9 +7032,10 @@ msgstr "" "Pembayang disokong oleh OpenGL (komputer sahaja) dan OGLES2 (dalam ujikaji)" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" "Kepekaan paksi kayu bedik untuk menggerakkan\n" "frustum penglihatan dalam permainan." @@ -7103,8 +7235,9 @@ msgid "Use bilinear filtering when scaling textures." msgstr "Gunakan penapisan bilinear apabila menyesuaikan tekstur." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -7312,6 +7445,11 @@ msgstr "Panjang ombak cecair bergelora" msgid "Waving plants" msgstr "Tumbuhan bergoyang" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "Warna kotak pemilihan" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7342,12 +7480,13 @@ msgstr "" "perkakasan." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7360,8 +7499,8 @@ msgstr "" "tekstur\n" "minimum untuk tekstur yang disesuai-naikkan; nilai lebih tinggi tampak " "lebih\n" -"tajam, tetapi memerlukan memori yang lebih banyak. Nilai kuasa 2 digalakkan." -"\n" +"tajam, tetapi memerlukan memori yang lebih banyak. Nilai kuasa 2 " +"digalakkan.\n" "Tetapan ini HANYA digunakan jika penapisan bilinear/trilinear/anisotropik " "dibolehkan.\n" "Tetapan ini juga digunakan sebagai saiz tekstur nod asas untuk\n" @@ -7378,8 +7517,9 @@ msgstr "" "digunakan." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" "Sama ada latar belakang tag nama patut ditunjukkan secara lalainya.\n" @@ -7541,35 +7681,6 @@ msgstr "Aras Y untuk rupa bumi lebih rendah dan dasar laut." msgid "Y-level of seabed." msgstr "Aras Y untuk dasar laut." -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Tahap pemampatan ZLib untuk digunakan apabila menyimpan blokpeta ke cakera.\n" -"-1 - tahap pemampatan lalai Zlib\n" -"0 - tiada pemampatan, paling laju\n" -"9 - pemampatan terbaik, paling lambat\n" -"(tahap 1-3 menggunakan kaedah \"fast\" Zlib, 4-9 menggunakan kaedah biasa)" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Tahap pemampatan ZLib untuk digunakan apabila menghantar blokpeta kepada " -"klien.\n" -"-1 - tahap pemampatan lalai Zlib\n" -"0 - tiada pemampatan, paling laju\n" -"9 - pemampatan terbaik, paling lambat\n" -"(tahap 1-3 menggunakan kaedah \"fast\" Zlib, 4-9 menggunakan kaedah biasa)" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "Had masa muat turun fail cURL" @@ -7781,6 +7892,9 @@ msgstr "Had cURL selari" #~ msgid "IPv6 support." #~ msgstr "Sokongan IPv6." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Pasang: fail: \"$1\"" + #~ msgid "Lava depth" #~ msgstr "Kedalaman lava" @@ -7886,6 +8000,17 @@ msgstr "Had cURL selari" #~ msgid "Select Package File:" #~ msgstr "Pilih Fail Pakej:" +#~ msgid "" +#~ "Set the shadow update time.\n" +#~ "Lower value means shadows and map updates faster, but it consume more " +#~ "resources.\n" +#~ "Minimun value 0.001 seconds max value 0.2 seconds" +#~ msgstr "" +#~ "Menetapkan masa kemas kini bayang.\n" +#~ "Nilai lebih rendah untuk kemas kini peta dan bayang lebih laju, tetapi " +#~ "menggunakan lebih banyak sumber.\n" +#~ "Nilai minimum 0.001 saat dan nilai maksimum 0.2 saat" + #~ msgid "Shadow limit" #~ msgstr "Had bayang" @@ -7914,6 +8039,9 @@ msgstr "Had cURL selari" #~ msgid "This font will be used for certain languages." #~ msgstr "Fon ini akan digunakan untuk sesetengah bahasa." +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Untuk membolehkan pembayang, pemacu OpenGL mesti digunakan." + #~ msgid "Toggle Cinematic" #~ msgstr "Togol Sinematik" @@ -7953,5 +8081,8 @@ msgstr "Had cURL selari" #~ msgid "Yes" #~ msgstr "Ya" +#~ msgid "You died." +#~ msgstr "Anda telah meninggal." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/ms_Arab/minetest.po b/po/ms_Arab/minetest.po index 20e3d1120..5746ca478 100644 --- a/po/ms_Arab/minetest.po +++ b/po/ms_Arab/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2020-10-20 18:26+0000\n" "Last-Translator: Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat " "Yasuyoshi \n" @@ -69,11 +69,6 @@ msgstr "لاهير سمولا" msgid "You died" msgstr "اندا تله منيڠݢل" -#: builtin/client/death_formspec.lua -#, fuzzy -msgid "You died." -msgstr "اندا تله منيڠݢل" - #: builtin/common/chatcommands.lua #, fuzzy msgid "Available commands:" @@ -105,6 +100,10 @@ msgstr "" msgid "OK" msgstr "OK" +#: builtin/fstk/ui.lua +msgid "" +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "برلاکوڽ رالت دالم سکريڤ Lua:" @@ -310,6 +309,11 @@ msgstr "ڤاسڠ" msgid "Install missing dependencies" msgstr "کبرݢنتوڠن ڤيليهن:" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "ڤاسڠ: جنيس فايل \"$1\" تيدق دسوکوڠ اتاو ارکيب روسق" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -641,7 +645,8 @@ msgid "Offset" msgstr "اوفسيت" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "ڤنروسن" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -751,14 +756,6 @@ msgstr "ڤاسڠ مودس: ݢاݢل منچاري نام مودس سبنر اون msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "ڤاسڠ مودس: تيدق جومڤ نام فولدر يڠ سسواي اونتوق ڤيک مودس $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "ڤاسڠ: جنيس فايل \"$1\" تيدق دسوکوڠ اتاو ارکيب روسق" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "ڤاسڠ: فايل: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "تيدق جومڤ مودس اتاو ڤيک مودس يڠ صح" @@ -1134,10 +1131,6 @@ msgstr "ڤنچهاياٴن لمبوت" msgid "Texturing:" msgstr "جالينن:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "اونتوق ممبوليهکن ڤمبايڠ⹁ ڤماچو OpenGL مستي دݢوناکن." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "ڤمتاٴن تونا" @@ -1170,7 +1163,7 @@ msgstr "چچاٴير برݢلورا" msgid "Waving Plants" msgstr "تومبوهن برݢويڠ" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "سمبوڠن تامت تيمڤوه." @@ -1199,7 +1192,8 @@ msgid "Connection error (timed out?)" msgstr "رالت دالم ڤڽمبوڠن (تامت تيمڤوه؟)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "تيدق جومڤ اتاو تيدق بوليه مواتکن ڤرماٴينن \"" #: src/client/clientlauncher.cpp @@ -1271,6 +1265,16 @@ msgstr "- PvP: " msgid "- Server Name: " msgstr "- نام ڤلاين: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "تله برلاکوڽ رالت:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "ڤرݢرقن اٴوتوماتيک دلومڤوهکن" @@ -1279,6 +1283,22 @@ msgstr "ڤرݢرقن اٴوتوماتيک دلومڤوهکن" msgid "Automatic forward enabled" msgstr "ڤرݢرقن اٴوتوماتيک دبوليهکن" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "کمس کيني کاميرا دلومڤوهکن" @@ -1287,6 +1307,10 @@ msgstr "کمس کيني کاميرا دلومڤوهکن" msgid "Camera update enabled" msgstr "کمس کيني کاميرا دبوليهکن" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "توکر کات لالوان" @@ -1299,6 +1323,11 @@ msgstr "مود سينماتيک دلومڤوهکن" msgid "Cinematic mode enabled" msgstr "مود سينماتيک دبوليهکن" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "مودس کليئن" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "سکريڤ ڤيهق کليئن دلومڤوهکن" @@ -1307,6 +1336,10 @@ msgstr "سکريڤ ڤيهق کليئن دلومڤوهکن" msgid "Connecting to server..." msgstr "سدڠ مڽمبوڠ کڤد ڤلاين..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "تروسکن" @@ -1344,6 +1377,11 @@ msgstr "" "- رودا تتيکوس: ڤيليه ايتم\n" "- %s: سيمبڠ\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "سدڠ منچيڤت کليئن..." @@ -1551,6 +1589,21 @@ msgstr "بوڽي دڽهبيسوکن" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "جارق ڤندڠ دتوکر ک%d" @@ -1884,6 +1937,15 @@ msgstr "ڤتا ميني دالم مود ڤرموکاٴن⹁ زوم 1x" msgid "Minimap in texture mode" msgstr "سايز تيکستور مينيموم" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "ݢاݢل مموات تورون $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "کات لالوان تيدق ڤادن!" @@ -1892,7 +1954,7 @@ msgstr "کات لالوان تيدق ڤادن!" msgid "Register and Join" msgstr "دفتر دان سرتاٴي" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2085,7 +2147,8 @@ msgid "Muted" msgstr "دبيسوکن" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "ککواتن بوڽي: " #. ~ Imperative, as in "Enter/type in text". @@ -2324,6 +2387,10 @@ msgstr "" "لارسکن کونفيݢوراسي DPI کسکرين اندا (بوکن X11/Android سهاج) چونتوه اونتوق " "سکرين 4K." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2606,6 +2673,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "نيلاي امبڠ تندڠ ميسيج سيمبڠ" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "ارهن" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "سايز فون سيمبڠ" @@ -2639,8 +2711,9 @@ msgid "Chat toggle key" msgstr "ککونچي توݢول سيمبڠ" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "" +#, fuzzy +msgid "Chat weblinks" +msgstr "سيمبڠ دتونجوقکن" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2658,6 +2731,12 @@ msgstr "ککونچي مود سينماتيک" msgid "Clean transparent textures" msgstr "برسيهکن تيکستور لوت سينر" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "کليئن" @@ -2734,6 +2813,22 @@ msgstr "" msgid "Command key" msgstr "ککونچي ارهن" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "سمبوڠ کاچ" @@ -2832,7 +2927,7 @@ msgstr "نيلاي الفا ررمبوت سيلڠ" #, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "نيلاي الفا ررمبوت سيلڠ (کلݢڤن⹁ انتارا 0 دان 255)." #: src/settings_translation_file.cpp @@ -2911,8 +3006,8 @@ msgstr "ساٴيز تيندنن لالاي" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3038,6 +3133,10 @@ msgstr "ملومڤوهکن انتيتيڤو" msgid "Disallow empty passwords" msgstr "منولق کات لالوان کوسوڠ" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "نام دوماٴين ڤلاين ڤرماٴينن⹁ اونتوق دڤاڤرکن دالم سناراي ڤلاين ڤرماٴينن." @@ -3086,7 +3185,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3115,13 +3221,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "ممبوليهکن ڤماٴين منريما کچدراٴن دان ماتي." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "ممبوليهکن اينڤوت ڤڠݢونا سچارا راوق (هاڽ اونتوق ڤرچوباٴن)." @@ -3564,7 +3663,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -4028,7 +4127,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -4114,7 +4213,7 @@ msgstr "سلڠ ماس ڤڠاولڠن بوتڠ کايو بديق" #: src/settings_translation_file.cpp #, fuzzy -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "جنيس کايو بديق" #: src/settings_translation_file.cpp @@ -5168,7 +5267,7 @@ msgid "Map save interval" msgstr "سلڠ ماس ڤڽيمڤنن ڤتا" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5476,7 +5575,8 @@ msgid "Mod channels" msgstr "سالوران مودس" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +#, fuzzy +msgid "Modifies the size of the HUD elements." msgstr "مڠاوبه سايز ايليمن ڤالڠ ڤاڤر ڤندو (hudbar)." #: src/settings_translation_file.cpp @@ -5614,7 +5714,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5640,6 +5740,10 @@ msgstr "" "بوک مينو جيدا اڤابيلا فوکوس تتيڠکڤ هيلڠ.\n" "تيدق جيدا جيک فورمسڤيک دبوک." +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5805,11 +5909,12 @@ msgid "Prometheus listener address" msgstr "علامت ڤندڠر Prometheus" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" "علامت ڤندڠر Prometheus.\n" "جک minetest دکومڤيل دڠن تتڤن ENABLE_PROMETHEUS دبوليهکن,\n" @@ -6118,26 +6223,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -6244,7 +6341,7 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "فون تبل سچارا لالايڽ" #: src/settings_translation_file.cpp @@ -6364,6 +6461,14 @@ msgstr "" "امبيل ڤرهاتيان بهاوا مودس اتاو ڤرماٴينن بوليه تتڤکن سچارا خصوص تيندنن اونتوق " "سستڠه (اتاو سموا) ايتم." +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6480,7 +6585,7 @@ msgstr "لالوان تيکستور" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6505,7 +6610,7 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "ڤڠنل ڤستي کايو بديق يڠ دݢوناکن" #: src/settings_translation_file.cpp @@ -6592,9 +6697,10 @@ msgstr "" "دان اي اياله ساتو-ساتوڽ ڤماچو يڠ ممڤوڽاٴي سوکوڠن ڤمبايڠ کتيک اين." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" "کڤيکاٴن ڤکسي کايو بديق اونتوق مڠݢرقکن\n" "فروستوم ڤڠليهتن دالم ڤرماٴينن." @@ -6780,8 +6886,9 @@ msgid "Use bilinear filtering when scaling textures." msgstr "ݢوناکن ڤناڤيسن بيلينيار اڤابيلا مڽسوايکن تيکستور." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6970,6 +7077,11 @@ msgstr "ڤنجڠ اومبق چچاٴير برݢلورا" msgid "Waving plants" msgstr "تومبوهن برݢويڠ" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "ورنا کوتق ڤميليهن" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7000,7 +7112,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7026,7 +7138,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -7174,24 +7286,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -7303,6 +7397,9 @@ msgstr "" #~ msgid "Generate normalmaps" #~ msgstr "جان ڤتا نورمل" +#~ msgid "Install: file: \"$1\"" +#~ msgstr "ڤاسڠ: فايل: \"$1\"" + #~ msgid "Main" #~ msgstr "اوتام" @@ -7390,11 +7487,18 @@ msgstr "" #~ msgid "Strength of generated normalmaps." #~ msgstr "ککواتن ڤتا نورمل يڠ دجان." +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "اونتوق ممبوليهکن ڤمبايڠ⹁ ڤماچو OpenGL مستي دݢوناکن." + #~ msgid "View" #~ msgstr "ليهت" #~ msgid "Yes" #~ msgstr "ياٴ" +#, fuzzy +#~ msgid "You died." +#~ msgstr "اندا تله منيڠݢل" + #~ msgid "needs_fallback_font" #~ msgstr "yes" diff --git a/po/nb/minetest.po b/po/nb/minetest.po index 280bba7e4..653646a0f 100644 --- a/po/nb/minetest.po +++ b/po/nb/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Norwegian Bokmål (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-08-08 01:37+0000\n" "Last-Translator: Allan Nordhøy \n" "Language-Team: Norwegian Bokmål " +msgstr "Ikke tilgjengelig kommando: " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Det oppstod en feil i et Lua-skript:" @@ -302,6 +303,11 @@ msgstr "Installer" msgid "Install missing dependencies" msgstr "Valgfrie avhengigheter:" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "Installasjon: Ikke-støttet filtype \"$1\" eller ødelagt arkiv" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -631,7 +637,8 @@ msgid "Offset" msgstr "Forskyvning" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Bestandighet" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -741,14 +748,6 @@ msgstr "Installer mod: Klarte ikke å finne riktig mod-navn for: $1" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "Installer mod: Klarte ikke finne egnet mappenavn for mod-pakke $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Installasjon: Ikke-støttet filtype \"$1\" eller ødelagt arkiv" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Installasjon: fil \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Klarte ikke finne en gyldig mod eller modpakke" @@ -1126,10 +1125,6 @@ msgstr "Jevn belysning" msgid "Texturing:" msgstr "Teksturering:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "OpenGL-driveren må brukes for å aktivere skyggelegging." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Nyanseoversettelse (tone mapping)" @@ -1162,7 +1157,7 @@ msgstr "Skvulpende væsker" msgid "Waving Plants" msgstr "Bølgende planter" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Forbindelsen løp ut på tid." @@ -1191,7 +1186,8 @@ msgid "Connection error (timed out?)" msgstr "Tilkoblingsfeil (tidsavbrudd?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Klarte ikke finne eller laste inn spill «" #: src/client/clientlauncher.cpp @@ -1263,6 +1259,16 @@ msgstr "- Alle mot alle (PvP): " msgid "- Server Name: " msgstr "- Tjenernavn: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Det oppstod en feil:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Automatisk forover slått av" @@ -1271,6 +1277,22 @@ msgstr "Automatisk forover slått av" msgid "Automatic forward enabled" msgstr "Automatisk forover slått på" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Kameraoppdatering slått av" @@ -1279,6 +1301,10 @@ msgstr "Kameraoppdatering slått av" msgid "Camera update enabled" msgstr "Kameraoppdatering slått på" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Endre passord" @@ -1291,6 +1317,11 @@ msgstr "Filmatisk modus avskrudd" msgid "Cinematic mode enabled" msgstr "Filmatisk modus påskrudd" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Brukermodding" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Skripting er slått av på klientside" @@ -1299,6 +1330,10 @@ msgstr "Skripting er slått av på klientside" msgid "Connecting to server..." msgstr "Kobler til tjener…" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Fortsett" @@ -1336,6 +1371,11 @@ msgstr "" "- Musehjul: velg ting\n" "- %s: sludring\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Oppretter klient…" @@ -1544,6 +1584,21 @@ msgstr "Lyd på" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Synsrekkevidde endret til %d%%" @@ -1876,6 +1931,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Klarte ikke laste ned $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Passordene samsvarer ikke!" @@ -1884,7 +1948,7 @@ msgstr "Passordene samsvarer ikke!" msgid "Register and Join" msgstr "Registrer og logg inn" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2079,7 +2143,8 @@ msgid "Muted" msgstr "Av" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Lydstyrke: " #. ~ Imperative, as in "Enter/type in text". @@ -2333,6 +2398,10 @@ msgstr "" "Justér skjermens DPI-innstilling (ikke for X11/kun Android), f. eks. for 4k-" "skjermer." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2624,6 +2693,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Terskel for utvisning fra chat" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Sludrekommandoer" + #: src/settings_translation_file.cpp #, fuzzy msgid "Chat font size" @@ -2659,8 +2733,9 @@ msgid "Chat toggle key" msgstr "Tast for veksling av sludring" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Sludrekommandoer" +#, fuzzy +msgid "Chat weblinks" +msgstr "Viser chat" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2678,6 +2753,12 @@ msgstr "Tast for filmatisk tilstand" msgid "Clean transparent textures" msgstr "Rene, gjennomsiktige teksturer" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Klient" @@ -2765,6 +2846,22 @@ msgstr "" msgid "Command key" msgstr "Tast for chat og kommandoer" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Forbind glass" @@ -2861,9 +2958,10 @@ msgid "Crosshair alpha" msgstr "Trådkors-alpha" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" "Trådkors-alpha (ugjennomsiktighet, mellom 0 og 255).\n" "Kontrollerer også objektets trådkorsfarge" @@ -2943,8 +3041,8 @@ msgstr "Forvalgt spill" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3064,6 +3162,10 @@ msgstr "Skru av antijuksing" msgid "Disallow empty passwords" msgstr "Ikke tillatt tomme passord" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "Domenenavn for tjener, som vist i tjenerlisten." @@ -3111,7 +3213,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3139,13 +3248,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3547,7 +3649,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3979,7 +4081,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -4065,7 +4167,7 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "Spillstikketype" #: src/settings_translation_file.cpp @@ -5069,7 +5171,7 @@ msgid "Map save interval" msgstr "Lagringsintervall for kart" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5371,7 +5473,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5503,7 +5605,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5527,6 +5629,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5670,9 +5776,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5989,26 +6095,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -6112,7 +6210,7 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "Fet skrifttype som forvalg" #: src/settings_translation_file.cpp @@ -6223,6 +6321,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp #, fuzzy msgid "" @@ -6338,7 +6444,7 @@ msgstr "Filsti for teksturer" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6356,7 +6462,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6430,7 +6536,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6598,7 +6704,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6787,6 +6893,11 @@ msgstr "Bølgende vann" msgid "Waving plants" msgstr "Plantesvaiing" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "Farge på utvalgsfelt" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6808,7 +6919,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6823,7 +6934,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6953,24 +7064,6 @@ msgstr "Y-nivå for nedre terreng og sjøbunn." msgid "Y-level of seabed." msgstr "Y-nivå for havbunn." -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "Tidsutløp for filnedlasting med cURL" @@ -7054,6 +7147,9 @@ msgstr "Maksimal parallellisering i cURL" #~ msgid "IPv6 support." #~ msgstr "IPv6-støtte." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Installasjon: fil \"$1\"" + #~ msgid "Main" #~ msgstr "Hovedmeny" @@ -7097,6 +7193,9 @@ msgstr "Maksimal parallellisering i cURL" #~ msgid "Start Singleplayer" #~ msgstr "Start enkeltspiller" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "OpenGL-driveren må brukes for å aktivere skyggelegging." + #~ msgid "View" #~ msgstr "Vis" @@ -7109,5 +7208,8 @@ msgstr "Maksimal parallellisering i cURL" #~ msgid "Yes" #~ msgstr "Ja" +#~ msgid "You died." +#~ msgstr "Du døde." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/nl/minetest.po b/po/nl/minetest.po index c2b57af01..1bad56b64 100644 --- a/po/nl/minetest.po +++ b/po/nl/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Dutch (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-10-14 07:35+0000\n" "Last-Translator: Molly \n" "Language-Team: Dutch ]" msgid "OK" msgstr "Oke" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "" +msgstr "Instructie niet beschikbaar: " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Er is een fout opgetreden in een Lua script:" @@ -297,6 +298,11 @@ msgstr "Installeer $1" msgid "Install missing dependencies" msgstr "Installeer ontbrekende afhankelijkheden" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "Installeren: niet ondersteund bestandstype \"$1\" of defect archief" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -629,7 +635,8 @@ msgid "Offset" msgstr "afstand" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Persistentie" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -740,14 +747,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" "Mod installeren: kan geen geschikte map naam vinden voor mod verzameling $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Installeren: niet ondersteund bestandstype \"$1\" of defect archief" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Installeer: bestand: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Niet mogelijk om geschikte map-naam vinden voor modverzameling $1" @@ -1118,10 +1117,6 @@ msgstr "Vloeiende verlichting" msgid "Texturing:" msgstr "Textuur:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Om schaduwen mogelijk te maken moet OpenGL worden gebruikt." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Tone-mapping" @@ -1154,7 +1149,7 @@ msgstr "Golvende Vloeistoffen" msgid "Waving Plants" msgstr "Bewegende planten" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Time-out bij opzetten verbinding." @@ -1183,7 +1178,8 @@ msgid "Connection error (timed out?)" msgstr "Fout bij verbinden (time out?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Kan het spel niet laden of niet vinden \"" #: src/client/clientlauncher.cpp @@ -1255,6 +1251,16 @@ msgstr "- PvP: " msgid "- Server Name: " msgstr "- Server Naam: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Er is een fout opgetreden:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Automatisch vooruit uitgeschakeld" @@ -1263,6 +1269,23 @@ msgstr "Automatisch vooruit uitgeschakeld" msgid "Automatic forward enabled" msgstr "Automatisch vooruit ingeschakeld" +#: src/client/game.cpp +#, fuzzy +msgid "Block bounds hidden" +msgstr "Blok grenzen" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Camera-update uitgeschakeld" @@ -1271,6 +1294,10 @@ msgstr "Camera-update uitgeschakeld" msgid "Camera update enabled" msgstr "Camera-update ingeschakeld" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Verander wachtwoord" @@ -1283,6 +1310,11 @@ msgstr "Filmische modus uitgeschakeld" msgid "Cinematic mode enabled" msgstr "Filmische modus ingeschakeld" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Cliënt personalisatie (modding)" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Client-side scripting is uitgeschakeld" @@ -1291,6 +1323,10 @@ msgstr "Client-side scripting is uitgeschakeld" msgid "Connecting to server..." msgstr "Verbinding met de server wordt gemaakt..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Verder spelen" @@ -1328,6 +1364,11 @@ msgstr "" "- Muiswiel: item selecteren \n" "-%s: chat\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Gebruiker aanmaken..." @@ -1534,6 +1575,21 @@ msgstr "Geluid niet gedempt" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Kijkbereik gewijzigd naar %d" @@ -1866,6 +1922,15 @@ msgstr "Minimap in oppervlaktemodus, Zoom x%d" msgid "Minimap in texture mode" msgstr "Minimap textuur modus" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Installeren van mod $1 is mislukt" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "De wachtwoorden zijn niet gelijk!" @@ -1874,7 +1939,7 @@ msgstr "De wachtwoorden zijn niet gelijk!" msgid "Register and Join" msgstr "Registreer en doe mee" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2070,7 +2135,8 @@ msgid "Muted" msgstr "Gedempt" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Geluidsvolume: " #. ~ Imperative, as in "Enter/type in text". @@ -2332,6 +2398,10 @@ msgstr "" "Pas de dpi-configuratie aan op uw scherm (alleen niet X11 / Android), b.v. " "voor 4k-schermen." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2634,6 +2704,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Drempel voor kick van chatbericht" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Chat-commando's" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "Chat lettergrootte" @@ -2667,8 +2742,9 @@ msgid "Chat toggle key" msgstr "Toets voor tonen/verbergen chat" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Chat-commando's" +#, fuzzy +msgid "Chat weblinks" +msgstr "Chat weergegeven" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2686,6 +2762,12 @@ msgstr "Cinematic modus aan/uit toets" msgid "Clean transparent textures" msgstr "Schone transparante texturen" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Cliënt" @@ -2776,6 +2858,36 @@ msgstr "" msgid "Command key" msgstr "Commando-toets" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Zlib compressie niveau om mapblokken op de harde schijf te bewaren.\n" +"-1: Zlib's standaard compressie niveau\n" +"0: geen compressie, snelst\n" +"9: maximale compressie, traagst\n" +"(niveau's 1 tot 3 gebruiken Zlib's snelle methode, 4 tot 9 gebruiken de " +"normale methode)" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Zlib compressie niveau om mapblokken te versturen naar de client.\n" +"-1: Zlib's standaard compressie niveau\n" +"0: geen compressie, snelst\n" +"9: maximale compressie, traagst\n" +"(niveau's 1 tot 3 gebruiken Zlib's snelle methode, 4 tot 9 gebruiken de " +"normale methode)" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Verbind glas" @@ -2878,9 +2990,10 @@ msgid "Crosshair alpha" msgstr "Draadkruis-alphawaarde" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" "Draadkruis-alphawaarde (ondoorzichtigheid; tussen 0 en 255).\n" "Controleert ook het object draadkruis kleur" @@ -2962,9 +3075,10 @@ msgid "Default stack size" msgstr "Standaard voorwerpenstapel grootte" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" "Defineer schaduw filtering kwaliteit\n" @@ -3096,6 +3210,10 @@ msgstr "Valsspeelbescherming uitschakelen" msgid "Disallow empty passwords" msgstr "Lege wachtwoorden niet toestaan" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "Domeinnaam van de server; wordt getoond in de serverlijst." @@ -3146,7 +3264,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3174,13 +3299,6 @@ msgstr "Veilige modus voor mods aanzetten" msgid "Enable players getting damage and dying." msgstr "Schakel verwondingen en sterven van spelers aan." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Schakel willkeurige invoer aan (enkel voor testen)." @@ -3642,10 +3760,11 @@ msgid "Global callbacks" msgstr "Algemene callbacks" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Algemene wereldgenerator instellingen.\n" "De vlag 'decorations' bepaalt de aanwezigheid van alle decoraties, behalve\n" @@ -4158,7 +4277,8 @@ msgstr "" "het core/builtin-gedeelte van de server" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "Profileer chat-commando's bij het registreren." #: src/settings_translation_file.cpp @@ -4252,7 +4372,8 @@ msgid "Joystick button repetition interval" msgstr "Joystick-knop herhalingsinterval" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +#, fuzzy +msgid "Joystick dead zone" msgstr "Joystick dode zone" #: src/settings_translation_file.cpp @@ -5371,7 +5492,7 @@ msgstr "Interval voor opslaan wereld" #: src/settings_translation_file.cpp #, fuzzy -msgid "Map update time" +msgid "Map shadows update frames" msgstr "Vloeistof verspreidingssnelheid" #: src/settings_translation_file.cpp @@ -5701,7 +5822,8 @@ msgid "Mod channels" msgstr "Mod-kanalen" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +#, fuzzy +msgid "Modifies the size of the HUD elements." msgstr "Veranderd de grootte van de HUDbar elementen." #: src/settings_translation_file.cpp @@ -5866,9 +5988,10 @@ msgstr "" "'on_generated'. Voor veel gebruikers kan de optimale instelling '1' zijn." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" "Aantal extra blokken (van 16x16x16 nodes) dat door het commando '/" @@ -5902,6 +6025,10 @@ msgstr "" "Pauzemenu openen als het venster focus verliest. Pauzeert niet als er\n" "een formspec geopend is." +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -6078,11 +6205,12 @@ msgid "Prometheus listener address" msgstr "Adres om te luisteren naar Prometheus" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" "Adres om te luisteren naar Prometheus.\n" "Als Minetest is gecompileerd met de optie ENABLE_PROMETHEUS,\n" @@ -6426,26 +6554,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -6555,7 +6675,7 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "Standaard vetgedrukt" #: src/settings_translation_file.cpp @@ -6684,6 +6804,14 @@ msgstr "" "Merk op dat mods of spellen expliciet een stack kunnen maken voor sommige " "(of alle) items." +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6822,7 +6950,7 @@ msgstr "Textuur pad" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6850,7 +6978,8 @@ msgid "The URL for the content repository" msgstr "De URL voor de inhoudsrepository" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +#, fuzzy +msgid "The dead zone of the joystick" msgstr "De dode zone van de stuurknuppel die u gebruikt" #: src/settings_translation_file.cpp @@ -6945,9 +7074,10 @@ msgstr "" "drivers met shader-ondersteuning momenteel" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" "De gevoeligheid van de assen van de joystick voor het bewegen van de " "frustrum in het spel." @@ -7151,8 +7281,9 @@ msgid "Use bilinear filtering when scaling textures." msgstr "Gebruik bi-lineaire filtering bij het schalen van texturen." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -7359,6 +7490,11 @@ msgstr "Golflengte van water/vloeistoffen" msgid "Waving plants" msgstr "Bewegende planten" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "Kleur van selectie-randen" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7390,7 +7526,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7423,7 +7559,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -7588,36 +7724,6 @@ msgstr "Y-niveau van lager terrein en vijver/zee bodems." msgid "Y-level of seabed." msgstr "Y-niveau van zee bodem." -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Zlib compressie niveau om mapblokken op de harde schijf te bewaren.\n" -"-1: Zlib's standaard compressie niveau\n" -"0: geen compressie, snelst\n" -"9: maximale compressie, traagst\n" -"(niveau's 1 tot 3 gebruiken Zlib's snelle methode, 4 tot 9 gebruiken de " -"normale methode)" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Zlib compressie niveau om mapblokken te versturen naar de client.\n" -"-1: Zlib's standaard compressie niveau\n" -"0: geen compressie, snelst\n" -"9: maximale compressie, traagst\n" -"(niveau's 1 tot 3 gebruiken Zlib's snelle methode, 4 tot 9 gebruiken de " -"normale methode)" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "timeout voor cURL download" @@ -7817,6 +7923,9 @@ msgstr "Maximaal parallellisme in cURL" #~ msgid "IPv6 support." #~ msgstr "IPv6 ondersteuning." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Installeer: bestand: \"$1\"" + #, fuzzy #~ msgid "Lava depth" #~ msgstr "Diepte van grote grotten" @@ -7944,6 +8053,9 @@ msgstr "Maximaal parallellisme in cURL" #~ msgid "This font will be used for certain languages." #~ msgstr "Dit font wordt gebruikt voor bepaalde talen." +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Om schaduwen mogelijk te maken moet OpenGL worden gebruikt." + #~ msgid "Toggle Cinematic" #~ msgstr "Cinematic modus aan/uit" @@ -7980,5 +8092,8 @@ msgstr "Maximaal parallellisme in cURL" #~ msgid "Yes" #~ msgstr "Ja" +#~ msgid "You died." +#~ msgstr "Je bent gestorven." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/nn/minetest.po b/po/nn/minetest.po index 746ac0d00..b54d28093 100644 --- a/po/nn/minetest.po +++ b/po/nn/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Norwegian Nynorsk (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-02-20 05:50+0000\n" "Last-Translator: Tor Egil Hoftun Kvæstad \n" "Language-Team: Norwegian Nynorsk " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Ein feil oppstod i eit LUA-skript:" @@ -299,6 +298,12 @@ msgstr "Installer $1" msgid "Install missing dependencies" msgstr "Installer manglande avhengigheiter" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "" +"Installer: Ikkje-støtta dokument type \"$1\" eller så funker ikkje arkivet" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -628,7 +633,8 @@ msgid "Offset" msgstr "Forskyvning" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Persistens" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -742,16 +748,6 @@ msgstr "" "Installer modifikasjon: Klarte ikkje å finne ein passande katalog for " "modifikasjonspakke $1" -#: builtin/mainmenu/pkgmgr.lua -#, fuzzy -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" -"Installer: Ikkje-støtta dokument type \"$1\" eller så funker ikkje arkivet" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Installer: fil: «$1»" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Klarte ikkje å finne ein gyldig modifikasjon eller modifikasjonspakke" @@ -1133,11 +1129,6 @@ msgstr "Jevn belysning" msgid "Texturing:" msgstr "Teksturering:" -#: builtin/mainmenu/tab_settings.lua -#, fuzzy -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "For å aktivere skumrings-effekt så må OpenGL driveren være i bruk." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp #, fuzzy msgid "Tone Mapping" @@ -1174,7 +1165,7 @@ msgstr "Raslende lauv" msgid "Waving Plants" msgstr "Raslende planter" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Nett-kopling er brutt." @@ -1204,7 +1195,8 @@ msgid "Connection error (timed out?)" msgstr "Tilkoplingsfeil (Tidsavbrot?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Kunne ikkje finne eller laste spelet \"" #: src/client/clientlauncher.cpp @@ -1280,6 +1272,16 @@ msgstr "- Spelar mot spelar (PvP): " msgid "- Server Name: " msgstr "- Tenarnamn: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Det har skjedd ein feil:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Automatiske framsteg er avtatt" @@ -1288,6 +1290,22 @@ msgstr "Automatiske framsteg er avtatt" msgid "Automatic forward enabled" msgstr "Automatiske framsteg er i gang" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Kamera oppdatering er deaktivert" @@ -1296,6 +1314,10 @@ msgstr "Kamera oppdatering er deaktivert" msgid "Camera update enabled" msgstr "Kamera oppdatering er aktivert" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Byt kodeord" @@ -1308,6 +1330,10 @@ msgstr "Filmatisk modus er avtatt" msgid "Cinematic mode enabled" msgstr "Filmatisk modus er i gang" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Klient side-skildring er av" @@ -1316,6 +1342,10 @@ msgstr "Klient side-skildring er av" msgid "Connecting to server..." msgstr "Kopler til tenarmaskin..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Fortset" @@ -1353,6 +1383,11 @@ msgstr "" "- Musehjul: vel ting\n" "- %s: nettprat\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Skapar klient..." @@ -1561,6 +1596,21 @@ msgstr "Lyd e ikkje dempa lengre" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Utsiktsrekkjevidd er forandra til %d" @@ -1894,6 +1944,15 @@ msgstr "Minikart i overflatemodus, Zoom x%d" msgid "Minimap in texture mode" msgstr "Minikart i overflate modus, Zoom x1" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Klarte ikkje å laste ned $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Passorda passar ikkje!" @@ -1902,7 +1961,7 @@ msgstr "Passorda passar ikkje!" msgid "Register and Join" msgstr "Registrer og bli med" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, fuzzy, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2098,7 +2157,8 @@ msgid "Muted" msgstr "Målbindt" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Lydstyrke: " #. ~ Imperative, as in "Enter/type in text". @@ -2308,6 +2368,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2574,6 +2638,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Befaling" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "Tekststørrelse for nettprat" @@ -2607,8 +2676,9 @@ msgid "Chat toggle key" msgstr "" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "" +#, fuzzy +msgid "Chat weblinks" +msgstr "Skravlerøret er vist" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2626,6 +2696,12 @@ msgstr "" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Klient" @@ -2702,6 +2778,22 @@ msgstr "" msgid "Command key" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "" @@ -2793,7 +2885,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2872,8 +2964,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -2991,6 +3083,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -3037,7 +3133,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3065,13 +3168,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3464,7 +3560,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3896,7 +3992,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -3980,7 +4076,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4809,7 +4905,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5102,7 +5198,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5234,7 +5330,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5258,6 +5354,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5398,9 +5498,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5693,26 +5793,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5803,7 +5895,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5909,6 +6001,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6019,7 +6119,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6037,7 +6137,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6106,7 +6206,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6269,7 +6369,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6456,6 +6556,10 @@ msgstr "Bølgete vatn" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6477,7 +6581,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6492,7 +6596,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6618,24 +6722,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6678,6 +6764,9 @@ msgstr "" #~ msgid "Generate Normal Maps" #~ msgstr "Generér normale kart" +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Installer: fil: «$1»" + #~ msgid "Main" #~ msgstr "Hovud" @@ -6723,11 +6812,19 @@ msgstr "" #~ msgid "Start Singleplayer" #~ msgstr "Start enkeltspelar oppleving" +#, fuzzy +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "For å aktivere skumrings-effekt så må OpenGL driveren være i bruk." + #~ msgid "Toggle Cinematic" #~ msgstr "Slå på/av kameramodus" #~ msgid "Yes" #~ msgstr "Ja" +#, fuzzy +#~ msgid "You died." +#~ msgstr "Du døydde" + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/pl/minetest.po b/po/pl/minetest.po index 7e67d9e75..86a606fd2 100644 --- a/po/pl/minetest.po +++ b/po/pl/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Polish (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-08-25 16:34+0000\n" "Last-Translator: A M \n" "Language-Team: Polish ]" msgid "OK" msgstr "OK" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "" +msgstr "Komenda nie jest dostępna: " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Wystąpił błąd w skrypcie Lua:" @@ -304,6 +305,11 @@ msgstr "Zainstaluj $1" msgid "Install missing dependencies" msgstr "Zainstaluj brakujące zależności" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "Instalacja moda: nieznany typ pliku \"$1\" lub uszkodzone archiwum" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -645,7 +651,8 @@ msgid "Offset" msgstr "Margines" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Trwałość" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -756,14 +763,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" "Instalacja moda: nie można znaleźć odpowiedniego folderu dla paczki modów $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Instalacja moda: nieznany typ pliku \"$1\" lub uszkodzone archiwum" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Zainstaluj mod: plik: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Nie można znaleźć prawidłowego moda lub paczki modów" @@ -1151,10 +1150,6 @@ msgstr "Płynne oświetlenie" msgid "Texturing:" msgstr "Teksturowanie:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Sterownik OpenGL jest wymagany aby włączyć shadery." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Tone Mapping" @@ -1189,7 +1184,7 @@ msgstr "Fale (Ciecze)" msgid "Waving Plants" msgstr "Falujące rośliny" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Upłynął czas połączenia." @@ -1218,7 +1213,8 @@ msgid "Connection error (timed out?)" msgstr "Błąd połączenia (brak odpowiedzi?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Nie można znaleźć lub wczytać trybu gry \"" #: src/client/clientlauncher.cpp @@ -1290,6 +1286,16 @@ msgstr "Gracz przeciwko graczowi: " msgid "- Server Name: " msgstr "- Nazwa serwera: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Wystąpił błąd:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Automatyczne chodzenie do przodu wyłączone" @@ -1298,6 +1304,23 @@ msgstr "Automatyczne chodzenie do przodu wyłączone" msgid "Automatic forward enabled" msgstr "Automatyczne chodzenie do przodu włączone" +#: src/client/game.cpp +#, fuzzy +msgid "Block bounds hidden" +msgstr "Granice bloków" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Aktualizowanie kamery wyłączone" @@ -1306,6 +1329,10 @@ msgstr "Aktualizowanie kamery wyłączone" msgid "Camera update enabled" msgstr "Aktualizowanie kamery włączone" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Zmień hasło" @@ -1318,6 +1345,11 @@ msgstr "Tryb kinowy wyłączony" msgid "Cinematic mode enabled" msgstr "Tryb kinowy włączony" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Modyfikacja klienta" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Skryptowanie po stronie klienta jest wyłączone" @@ -1326,6 +1358,10 @@ msgstr "Skryptowanie po stronie klienta jest wyłączone" msgid "Connecting to server..." msgstr "Łączenie z serwerem..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Kontynuuj" @@ -1361,6 +1397,11 @@ msgstr "" "- Rolka myszy: wybierz przedmiot↵\n" "- %s: czatuj↵\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Tworzenie klienta..." @@ -1570,6 +1611,21 @@ msgstr "Głośność włączona ponownie" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Zmieniono zasięg widoczności na %d%%" @@ -1903,6 +1959,15 @@ msgstr "Minimapa w trybie powierzchniowym, powiększenie x%d" msgid "Minimap in texture mode" msgstr "Minimapa w trybie teksturowym" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Pobieranie $1 do $2 nie powiodło się :(" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Hasła nie są jednakowe!" @@ -1911,7 +1976,7 @@ msgstr "Hasła nie są jednakowe!" msgid "Register and Join" msgstr "Zarejestruj się i dołącz" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2109,7 +2174,8 @@ msgid "Muted" msgstr "Wyciszony" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Głośność: " #. ~ Imperative, as in "Enter/type in text". @@ -2373,7 +2439,11 @@ msgstr "" "ekranów 4k." #: src/settings_translation_file.cpp -#, c-format, fuzzy +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy, c-format msgid "" "Adjusts the density of the floatland layer.\n" "Increase value to increase density. Can be positive or negative.\n" @@ -2677,6 +2747,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Limit czasu komendy czatu" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Komenda" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "Rozmiar czcionki" @@ -2713,8 +2788,9 @@ msgid "Chat toggle key" msgstr "Klawisz przełączania czatu" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Komenda" +#, fuzzy +msgid "Chat weblinks" +msgstr "Chat widoczny" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2732,6 +2808,12 @@ msgstr "Klawisz trybu Cinematic" msgid "Clean transparent textures" msgstr "Czyste przeźroczyste tekstury" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Klient" @@ -2822,6 +2904,22 @@ msgstr "" msgid "Command key" msgstr "Klawisz komend" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Połączone szkło" @@ -2928,7 +3026,7 @@ msgstr "Kanał alfa celownika" #, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" "Kanał alfa celownika (pomiędzy 0 a 255).\n" "Wpływa również na kolor celownika obiektów" @@ -3015,8 +3113,8 @@ msgstr "Domyślny rozmiar stosu" #: src/settings_translation_file.cpp #, fuzzy msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" "Określa jakość filtrowania cieni\n" @@ -3153,6 +3251,10 @@ msgstr "Wyłącz anticheat" msgid "Disallow empty passwords" msgstr "Nie zezwalaj na puste hasła" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "Serwer DNS, wyświetlany na liście serwerów." @@ -3205,7 +3307,18 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" +"Włącz filtrowanie dysku poisson.\n" +"Jeśli włączone, to używa dysku poisson do \"miękkich cieni\". W przeciwnym " +"razie używa filtrowania PCF." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" "Włącza kolorowe cienie. \n" @@ -3237,17 +3350,6 @@ msgstr "Włącz tryb mod security" msgid "Enable players getting damage and dying." msgstr "Włącz obrażenia i umieranie graczy." -#: src/settings_translation_file.cpp -#, fuzzy -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" -"Włącz filtrowanie dysku poisson.\n" -"Jeśli włączone, to używa dysku poisson do \"miękkich cieni\". W przeciwnym " -"razie używa filtrowania PCF." - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Włącz losowe wejście użytkownika (tylko dla testowania)." @@ -3440,8 +3542,8 @@ msgid "" "the\n" "Multiplayer Tab." msgstr "" -"Plik w kliencie (lista serwerów), który zawiera ulubione serwery wyświetlane " -"\n" +"Plik w kliencie (lista serwerów), który zawiera ulubione serwery " +"wyświetlane \n" "w zakładce Trybu wieloosobowego." #: src/settings_translation_file.cpp @@ -3703,10 +3805,11 @@ msgid "Global callbacks" msgstr "Globalne wywołania zwrotne" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Globalne właściwości generowania map.\n" "W generatorze map v6 flaga \"decorations\" kontroluje wszystkie dekoracje z " @@ -4247,7 +4350,8 @@ msgstr "" "Najczęściej potrzebny tylko dla osób pracujących nad jądrem" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "Instrument poleceń czatu przy rejestracji." #: src/settings_translation_file.cpp @@ -4340,7 +4444,7 @@ msgstr "Interwał powtarzania przycisku joysticka" #: src/settings_translation_file.cpp #, fuzzy -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "Typ Joysticka" #: src/settings_translation_file.cpp @@ -5509,7 +5613,7 @@ msgstr "Interwał zapisu mapy" #: src/settings_translation_file.cpp #, fuzzy -msgid "Map update time" +msgid "Map shadows update frames" msgstr "Interwał czasowy aktualizacji cieczy" #: src/settings_translation_file.cpp @@ -5843,7 +5947,8 @@ msgid "Mod channels" msgstr "Kanały modów" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +#, fuzzy +msgid "Modifies the size of the HUD elements." msgstr "Modyfikuje rozmiar elementów paska HUD." #: src/settings_translation_file.cpp @@ -5984,9 +6089,10 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" "Ilość dodatkowych bloków, które mogą zostać wczytane naraz przez /" @@ -6017,6 +6123,10 @@ msgstr "" "Otwórz menu pauzy, gdy okno jest nieaktywne. Nie zatrzymuje gry jeśli " "formspec jest otwarty." +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -6182,9 +6292,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -6526,26 +6636,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -6657,7 +6759,7 @@ msgstr "" "Wymagany restart po zmianie ustawienia." #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -6776,6 +6878,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp #, fuzzy msgid "" @@ -6900,7 +7010,7 @@ msgstr "Paczki tekstur" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6920,7 +7030,7 @@ msgstr "Adres URL repozytorium zawartości" #: src/settings_translation_file.cpp #, fuzzy -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "Identyfikator użycia joysticka" #: src/settings_translation_file.cpp @@ -6994,9 +7104,10 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "Czułość osi joysticka, wpływa na drgania widoku." #: src/settings_translation_file.cpp @@ -7189,8 +7300,9 @@ msgid "Use bilinear filtering when scaling textures." msgstr "Włącz filtrowanie bilinearne podczas skalowania tekstur." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -7399,6 +7511,11 @@ msgstr "Długość fal wodnych" msgid "Waving plants" msgstr "Falujące rośliny" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "Kolor zaznaczenia" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7429,7 +7546,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7459,7 +7576,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -7600,24 +7717,6 @@ msgstr "Wysokość dolin oraz dna jezior." msgid "Y-level of seabed." msgstr "Wysokość dna jezior." -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "cURL przekroczono limit pobierania pliku" @@ -7817,6 +7916,9 @@ msgstr "Limit równoległy cURL" #~ msgid "IPv6 support." #~ msgstr "Wsparcie IPv6." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Zainstaluj mod: plik: \"$1\"" + #, fuzzy #~ msgid "Lava depth" #~ msgstr "Głębia dużej jaskini" @@ -7946,6 +8048,9 @@ msgstr "Limit równoległy cURL" #~ msgid "This font will be used for certain languages." #~ msgstr "Ta czcionka zostanie użyta w niektórych językach." +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Sterownik OpenGL jest wymagany aby włączyć shadery." + #~ msgid "Toggle Cinematic" #~ msgstr "Przełącz na tryb Cinematic" @@ -7982,5 +8087,8 @@ msgstr "Limit równoległy cURL" #~ msgid "Yes" #~ msgstr "Tak" +#~ msgid "You died." +#~ msgstr "Umarłeś." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/pt/minetest.po b/po/pt/minetest.po index 63f7ec39c..e04ddbbb9 100644 --- a/po/pt/minetest.po +++ b/po/pt/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Portuguese (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-05-10 16:33+0000\n" "Last-Translator: ssantos \n" "Language-Team: Portuguese " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Um erro ocorreu num script Lua:" @@ -303,6 +302,11 @@ msgstr "Instalar $1" msgid "Install missing dependencies" msgstr "Instalar dependências ausentes" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "Instalar: Tipo de ficheiro \"$1\" não suportado ou corrompido" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -632,7 +636,8 @@ msgid "Offset" msgstr "Deslocamento" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Persistência" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -745,14 +750,6 @@ msgstr "" "Instalação do Mod: não foi possível encontrar o nome da pasta adequado para " "o modpack $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Instalar: Tipo de ficheiro \"$1\" não suportado ou corrompido" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Instalar: ficheiro: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Incapaz de encontrar um módulo ou modpack válido" @@ -1127,10 +1124,6 @@ msgstr "Iluminação Suave" msgid "Texturing:" msgstr "Texturização:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Para ativar as sombras é necessário usar o controlador OpenGL." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Mapeamento de tons" @@ -1163,7 +1156,7 @@ msgstr "Líquidos ondulantes" msgid "Waving Plants" msgstr "Plantas ondulantes" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Erro de ligação (tempo excedido)." @@ -1192,7 +1185,8 @@ msgid "Connection error (timed out?)" msgstr "Erro de ligação (excedeu tempo?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Não foi possível encontrar ou carregar jogo \"" #: src/client/clientlauncher.cpp @@ -1264,6 +1258,16 @@ msgstr "- PvP: " msgid "- Server Name: " msgstr "Nome do servidor: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Ocorreu um erro:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Avanço automático desativado" @@ -1272,6 +1276,22 @@ msgstr "Avanço automático desativado" msgid "Automatic forward enabled" msgstr "Avanço automático para frente ativado" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Atualização da camera desativada" @@ -1280,6 +1300,10 @@ msgstr "Atualização da camera desativada" msgid "Camera update enabled" msgstr "Atualização da camera habilitada" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Mudar palavra-passe" @@ -1292,6 +1316,11 @@ msgstr "Modo cinemático desativado" msgid "Cinematic mode enabled" msgstr "Modo cinemático ativado" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Cliente" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "O scripting de cliente está desativado" @@ -1300,6 +1329,10 @@ msgstr "O scripting de cliente está desativado" msgid "Connecting to server..." msgstr "A conectar ao servidor..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Continuar" @@ -1337,6 +1370,11 @@ msgstr "" "- Roda do rato: selecionar item\n" "- %s: bate-papo\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "A criar cliente..." @@ -1544,6 +1582,21 @@ msgstr "Som desmutado" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Distancia de visualização alterado pra %d" @@ -1876,6 +1929,15 @@ msgstr "Minimapa em modo de superfície, ampliação %dx" msgid "Minimap in texture mode" msgstr "Minimapa em modo de textura" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Falhou em descarregar $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "As palavra-passes não correspondem!" @@ -1884,7 +1946,7 @@ msgstr "As palavra-passes não correspondem!" msgid "Register and Join" msgstr "Registrar e entrar" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2078,7 +2140,8 @@ msgid "Muted" msgstr "Mutado" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Volume do som: " #. ~ Imperative, as in "Enter/type in text". @@ -2338,6 +2401,10 @@ msgstr "" "Ajustar configuração de dpi ao seu ecrã (não aplicável a X11/Android) ex: " "para ecrãs 4K." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2636,6 +2703,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Limite da mensagem de expulsão" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Comandos do Chat" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "Tamanho da fonte do chat" @@ -2669,8 +2741,9 @@ msgid "Chat toggle key" msgstr "Tecla mostra/esconde conversação" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Comandos do Chat" +#, fuzzy +msgid "Chat weblinks" +msgstr "Conversa mostrada" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2688,6 +2761,12 @@ msgstr "Tecla para modo cinematográfico" msgid "Clean transparent textures" msgstr "Limpar texturas transparentes" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Cliente" @@ -2778,6 +2857,36 @@ msgstr "" msgid "Command key" msgstr "Tecla de comando" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Nível de compressão ZLib a ser usada ao gravar mapblocks no disco.\n" +"-1 - Nível de compressão padrão do Zlib\n" +"0 - Nenhuma compressão; o mais rápido\n" +"9 - Melhor compressão; o mais devagar\n" +"(níveis 1-3 usam método \"rápido\" do Zlib, enquanto que 4-9 usam método " +"normal)" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Nível de compressão ZLib a ser usada ao mandar mapblocks para o cliente.\n" +"-1 - Nível de compressão padrão do Zlib\n" +"0 - Nenhuma compressão; o mais rápido\n" +"9 - Melhor compressão; o mais devagar\n" +"(níveis 1-3 usam método \"rápido\" do Zlib, enquanto que 4-9 usam método " +"normal)" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Vidro conectado" @@ -2876,9 +2985,10 @@ msgid "Crosshair alpha" msgstr "Opacidade do cursor" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" "fAlpha do cursor (o quanto ele é opaco, níveis entre 0 e 255).\n" "Também controla a cor da cruz do objeto" @@ -2961,8 +3071,8 @@ msgstr "Tamanho de pilha predefinido" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3093,6 +3203,10 @@ msgstr "Desativar anti-batota" msgid "Disallow empty passwords" msgstr "Não permitir palavra-passes vazias" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "Nome de domínio do servidor, para ser mostrado na lista de servidores." @@ -3143,7 +3257,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3171,13 +3292,6 @@ msgstr "Ativar segurança de extras" msgid "Enable players getting damage and dying." msgstr "Ativar dano e morte dos jogadores." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Ativa a entrada de comandos aleatória (apenas usado para testes)." @@ -3632,10 +3746,11 @@ msgid "Global callbacks" msgstr "Chamadas de retorno Globais" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Atributos de geração de mapa globais.\n" "No gerador de mapa v6 a flag 'decorations' controla todas as decorações " @@ -4143,7 +4258,8 @@ msgstr "" "Isto é usualmente apenas nessesário por contribuidores core/builtin" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "Monitoração de comandos de chat quando registrados." #: src/settings_translation_file.cpp @@ -4238,7 +4354,8 @@ msgid "Joystick button repetition interval" msgstr "Intervalo de repetição do botão do Joystick" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +#, fuzzy +msgid "Joystick dead zone" msgstr "\"Zona morta\" do joystick" #: src/settings_translation_file.cpp @@ -5350,7 +5467,7 @@ msgstr "Intervalo de salvamento de mapa" #: src/settings_translation_file.cpp #, fuzzy -msgid "Map update time" +msgid "Map shadows update frames" msgstr "Período de atualização dos Líquidos" #: src/settings_translation_file.cpp @@ -5678,7 +5795,8 @@ msgid "Mod channels" msgstr "Canais de mod" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +#, fuzzy +msgid "Modifies the size of the HUD elements." msgstr "Modifica o tamanho dos elementos do hudbar." #: src/settings_translation_file.cpp @@ -5836,9 +5954,10 @@ msgstr "" "'on_generated'. Para muitos utilizadores, a configuração ideal pode ser '1'." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" "Número de blocos extras que pode ser carregados por /clearobjects ao mesmo " @@ -5868,6 +5987,10 @@ msgstr "" "Abre o menu de pausa quando o foco da janela é perdido.Não pausa se um " "formspec está aberto." +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -6040,11 +6163,12 @@ msgid "Prometheus listener address" msgstr "Endereço do Prometheus" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" "Endereço do Prometheus\n" "Se o minetest for compilado com a opção ENABLE_PROMETHEUS ativa,\n" @@ -6388,26 +6512,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -6517,7 +6633,7 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "Fonte em negrito por predefinição" #: src/settings_translation_file.cpp @@ -6644,6 +6760,14 @@ msgstr "" "Note que mods e games talvez definam explicitamente um tamanho para certos " "(ou todos) os itens." +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6780,7 +6904,7 @@ msgstr "Caminho para a pasta de texturas" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6805,7 +6929,8 @@ msgid "The URL for the content repository" msgstr "A url para o repositório de conteúdo" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +#, fuzzy +msgid "The dead zone of the joystick" msgstr "A zona morta do joystick" #: src/settings_translation_file.cpp @@ -6898,9 +7023,10 @@ msgstr "" "Shaders são suportados por OpenGL (somente desktop) e OGLES2 (experimental)" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" "A sensibilidade dos eixos do joystick para movimentar o \n" "frustum de exibição no jogo." @@ -7098,8 +7224,9 @@ msgid "Use bilinear filtering when scaling textures." msgstr "Usar filtragem bilinear ao dimensionamento de texturas." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -7309,6 +7436,11 @@ msgstr "Comprimento de balanço da água" msgid "Waving plants" msgstr "Balançar das Plantas" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "Cor da caixa de seleção" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7338,7 +7470,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7368,7 +7500,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -7530,36 +7662,6 @@ msgstr "Nível Y de terreno inferior e solo oceânico." msgid "Y-level of seabed." msgstr "Nível Y do fundo do mar." -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Nível de compressão ZLib a ser usada ao gravar mapblocks no disco.\n" -"-1 - Nível de compressão padrão do Zlib\n" -"0 - Nenhuma compressão; o mais rápido\n" -"9 - Melhor compressão; o mais devagar\n" -"(níveis 1-3 usam método \"rápido\" do Zlib, enquanto que 4-9 usam método " -"normal)" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Nível de compressão ZLib a ser usada ao mandar mapblocks para o cliente.\n" -"-1 - Nível de compressão padrão do Zlib\n" -"0 - Nenhuma compressão; o mais rápido\n" -"9 - Melhor compressão; o mais devagar\n" -"(níveis 1-3 usam método \"rápido\" do Zlib, enquanto que 4-9 usam método " -"normal)" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "Tempo limite de descarregamento de ficheiro via cURL" @@ -7771,6 +7873,9 @@ msgstr "limite paralelo de cURL" #~ msgid "IPv6 support." #~ msgstr "Suporte IPv6." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Instalar: ficheiro: \"$1\"" + #~ msgid "Lava depth" #~ msgstr "Profundidade da lava" @@ -7902,6 +8007,9 @@ msgstr "limite paralelo de cURL" #~ msgid "This font will be used for certain languages." #~ msgstr "Esta fonte será usada para determinados idiomas." +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Para ativar as sombras é necessário usar o controlador OpenGL." + #~ msgid "Toggle Cinematic" #~ msgstr "Ativar/Desativar câmera cinemática" @@ -7941,5 +8049,9 @@ msgstr "limite paralelo de cURL" #~ msgid "Yes" #~ msgstr "Sim" +#, fuzzy +#~ msgid "You died." +#~ msgstr "Você morreu" + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/pt_BR/minetest.po b/po/pt_BR/minetest.po index 50157b57c..f90ae9bf7 100644 --- a/po/pt_BR/minetest.po +++ b/po/pt_BR/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Portuguese (Brazil) (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-09-17 18:38+0000\n" "Last-Translator: Ronoaldo Pereira \n" "Language-Team: Portuguese (Brazil) ]" msgid "OK" msgstr "Ok" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "" +msgstr "Comando não disponível: " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Ocorreu um erro em um script Lua:" @@ -296,6 +297,11 @@ msgstr "Instalar $1" msgid "Install missing dependencies" msgstr "Instalar dependências ausentes" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "Instalação: Tipo de arquivo \"$1\" não suportado ou corrompido" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -625,7 +631,8 @@ msgid "Offset" msgstr "Deslocamento" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Persistência" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -737,14 +744,6 @@ msgstr "" "Instalação de mod: não foi possível encontrar o nome da pasta adequado para " "o modpack $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Instalação: Tipo de arquivo \"$1\" não suportado ou corrompido" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Instalação: arquivo: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Incapaz de encontrar um mod ou modpack válido" @@ -1113,10 +1112,6 @@ msgstr "Iluminação suave" msgid "Texturing:" msgstr "Texturização:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Para habilitar os sombreadores é necessário usar o driver OpenGL." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Tone mapping" @@ -1149,7 +1144,7 @@ msgstr "Líquidos com ondas" msgid "Waving Plants" msgstr "Plantas balançam" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Erro de conexão (tempo excedido)." @@ -1178,7 +1173,8 @@ msgid "Connection error (timed out?)" msgstr "Erro de conexão (tempo excedido?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Não foi possível localizar ou carregar jogo \"" #: src/client/clientlauncher.cpp @@ -1251,6 +1247,16 @@ msgstr "- PvP: " msgid "- Server Name: " msgstr "Nome do servidor: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Ocorreu um erro:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Avanço automático para frente desabilitado" @@ -1259,6 +1265,23 @@ msgstr "Avanço automático para frente desabilitado" msgid "Automatic forward enabled" msgstr "Avanço automático para frente habilitado" +#: src/client/game.cpp +#, fuzzy +msgid "Block bounds hidden" +msgstr "Limites de bloco" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Atualização da camera desabilitada" @@ -1267,6 +1290,10 @@ msgstr "Atualização da camera desabilitada" msgid "Camera update enabled" msgstr "Atualização da camera habilitada" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Alterar a senha" @@ -1279,6 +1306,11 @@ msgstr "Modo cinemático desabilitado" msgid "Cinematic mode enabled" msgstr "Modo cinemático habilitado" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Mods de Cliente Local" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Scripting de cliente está desabilitado" @@ -1287,6 +1319,10 @@ msgstr "Scripting de cliente está desabilitado" msgid "Connecting to server..." msgstr "Conectando ao servidor..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Continuar" @@ -1324,6 +1360,11 @@ msgstr "" "- Roda do mouse: selecionar item\n" "- %s: bate-papo\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Criando o cliente..." @@ -1530,6 +1571,21 @@ msgstr "Som desmutado" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Distancia de visualização alterado pra %d" @@ -1862,6 +1918,15 @@ msgstr "Minimapa em modo de superfície, Zoom %dx" msgid "Minimap in texture mode" msgstr "Minimapa em modo de textura" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Falha ao baixar $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "As senhas não correspondem!" @@ -1870,7 +1935,7 @@ msgstr "As senhas não correspondem!" msgid "Register and Join" msgstr "Registrar e entrar" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2066,7 +2131,8 @@ msgid "Muted" msgstr "Mutado" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Volume do som: " #. ~ Imperative, as in "Enter/type in text". @@ -2330,6 +2396,10 @@ msgstr "" "Ajustar configuração de dpi (profundidade de cor) para sua tela (apenas para " "quem não usa X11/Android) Ex para telas 4K." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2628,6 +2698,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Limite de mensagem de tempo de comando de bate-papo" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Comandos de Chat" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "Tamanho da fonte do chat" @@ -2661,8 +2736,9 @@ msgid "Chat toggle key" msgstr "Tecla comutadora de chat" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Comandos de Chat" +#, fuzzy +msgid "Chat weblinks" +msgstr "Conversa mostrada" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2680,6 +2756,12 @@ msgstr "Tecla para modo cinematográfico" msgid "Clean transparent textures" msgstr "Limpe as texturas transparentes" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Cliente" @@ -2769,6 +2851,36 @@ msgstr "" msgid "Command key" msgstr "Tecla de Comando" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Nível de compressão ZLib a ser usada ao salvar mapblocks no disco.\n" +"-1 - Nível de compressão padrão do Zlib\n" +"0 - Nenhuma compressão; o mais rápido\n" +"9 - Melhor compressão; o mais devagar\n" +"(níveis 1-3 usam método \"rápido\" do Zlib, enquanto que 4-9 usam método " +"normal)" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Nível de compressão ZLib a ser usada ao mandar mapblocks para o cliente.\n" +"-1 - Nível de compressão padrão do Zlib\n" +"0 - Nenhuma compressão; o mais rápido\n" +"9 - Melhor compressão; o mais devagar\n" +"(níveis 1-3 usam método \"rápido\" do Zlib, enquanto que 4-9 usam método " +"normal)" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Vidro conectado" @@ -2867,9 +2979,10 @@ msgid "Crosshair alpha" msgstr "Alpha do cursor" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" "Alpha do cursor (o quanto ele é opaco, níveis entre 0 e 255).\n" "Também controla a cor da cruz do objeto" @@ -2951,9 +3064,10 @@ msgid "Default stack size" msgstr "Tamanho padrão de stack" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" "Define a qualidade de filtragem de sombreamento\n" @@ -3086,6 +3200,10 @@ msgstr "Habilitar Anti-Hack" msgid "Disallow empty passwords" msgstr "Não permitir logar sem senha" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "Domínio do servidor, para ser mostrado na lista de servidores." @@ -3135,8 +3253,20 @@ msgstr "" "Esse suporte é experimental e a API pode mudar." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" +"Ativa filtragem de poisson disk.\n" +"Quando em true usa o poisson disk para fazer \"sombras suaves\". Caso " +"contrário usa filtragem PCF." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" "Ativa sombras coloridas.\n" @@ -3167,16 +3297,6 @@ msgstr "Habilitar Mod Security (Segurança nos mods)" msgid "Enable players getting damage and dying." msgstr "Permitir que os jogadores possam sofrer dano e morrer." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" -"Ativa filtragem de poisson disk.\n" -"Quando em true usa o poisson disk para fazer \"sombras suaves\". Caso " -"contrário usa filtragem PCF." - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Habilitar entrada de comandos aleatórios (apenas usado para testes)." @@ -3600,12 +3720,12 @@ msgid "" "to maintain active objects up to this distance in the direction the\n" "player is looking. (This can avoid mobs suddenly disappearing from view)" msgstr "" -"De quão longe clientes sabem sobre objetos declarados em mapblocks (16 nós)." -"\n" +"De quão longe clientes sabem sobre objetos declarados em mapblocks (16 " +"nós).\n" "\n" "Configurando isto maior do que o alcançe de bloco ativo vai fazer com que o " -"sevidor mantenha objetos ativos na distancia que o jogador está olhando.(" -"Isso pode evitar que mobs desapareçam da visão de repente)" +"sevidor mantenha objetos ativos na distancia que o jogador está olhando." +"(Isso pode evitar que mobs desapareçam da visão de repente)" #: src/settings_translation_file.cpp msgid "Full screen" @@ -3632,10 +3752,11 @@ msgid "Global callbacks" msgstr "Chamadas de retorno Globais" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Atributos de geração de mapa globais.\n" "No gerador de mapa v6 a flag 'decorations' controla todas as decorações " @@ -4143,7 +4264,8 @@ msgstr "" "Isto é necessário apenas por contribuidores core/builtin" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "Monitoração de comandos de chat quando registrados." #: src/settings_translation_file.cpp @@ -4238,7 +4360,8 @@ msgid "Joystick button repetition interval" msgstr "Intervalo de repetição do botão do Joystick" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +#, fuzzy +msgid "Joystick dead zone" msgstr "\"Zona morta\" do joystick" #: src/settings_translation_file.cpp @@ -5354,7 +5477,8 @@ msgid "Map save interval" msgstr "Intervalo de salvamento de mapa" #: src/settings_translation_file.cpp -msgid "Map update time" +#, fuzzy +msgid "Map shadows update frames" msgstr "Tempo de atualização do mapa" #: src/settings_translation_file.cpp @@ -5678,7 +5802,8 @@ msgid "Mod channels" msgstr "Canais de mod" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +#, fuzzy +msgid "Modifies the size of the HUD elements." msgstr "Modifica o tamanho dos elementos do hudbar." #: src/settings_translation_file.cpp @@ -5836,9 +5961,10 @@ msgstr "" "'on_generated'. Para muitos usuários, a configuração ideal pode ser '1'." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" "Número de blocos extras que pode ser carregados por /clearobjects ao mesmo " @@ -5869,6 +5995,10 @@ msgstr "" "formspec está\n" "aberto." +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -6040,11 +6170,12 @@ msgid "Prometheus listener address" msgstr "Endereço do Prometheus" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" "Endereço do Prometheus\n" "Se o minetest for compilado com a opção ENABLE_PROMETHEUS ativa,\n" @@ -6127,8 +6258,8 @@ msgstr "" "coloque 0\n" "para nenhuma restrição:\n" "LOAD_CLIENT_MODS: 1 (desabilita o carregamento de mods de cliente)\n" -"CHAT_MESSAGES: 2 (desabilita a chamada send_chat_message no lado do cliente)" -"\n" +"CHAT_MESSAGES: 2 (desabilita a chamada send_chat_message no lado do " +"cliente)\n" "READ_ITEMDEFS: 4 (desabilita a chamada get_item_def no lado do cliente)\n" "READ_NODEDEFS: 8 (desabilita a chamada get_node_def no lado do cliente)\n" "LOOKUP_NODES_LIMIT: 16 (limita a chamada get_node no lado do cliente para " @@ -6395,22 +6526,11 @@ msgstr "" "significam sombras mais fortes." #: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" -"Defina o tempo de atualização das sombras.\n" -"Valores mais baixos significam que sombras e mapa atualizam mais rápido, mas " -"consume mais recursos.\n" -"Valor mínimo 0.001 segundos e valor máximo 0.2 segundos" - -#: src/settings_translation_file.cpp +#, fuzzy msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" "Defina o tamanho do raio de sombras suaves.\n" "Valores mais baixos significam sombras mais nítidas e valores altos sombras " @@ -6418,10 +6538,11 @@ msgstr "" "Valor mínimo 1.0 e valor máximo 10.0" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" "Defina a inclinação da órbita do Sol/Lua em graus\n" "Valor 0 significa sem inclinação/ órbita vertical.\n" @@ -6534,7 +6655,8 @@ msgstr "" "É necessário reiniciar após alterar isso." #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +#, fuzzy +msgid "Show name tag backgrounds by default" msgstr "Mostrar plano de fundo da nametag por padrão" #: src/settings_translation_file.cpp @@ -6660,6 +6782,14 @@ msgstr "" "Note que mods e games talvez definam explicitamente um tamanho para certos " "(ou todos) os itens." +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6794,10 +6924,11 @@ msgid "Texture path" msgstr "Diretorio da textura" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" "Tamanho da textura em que o mapa de sombras será renderizado em.\n" "Deve ser um múltiplo de dois.\n" @@ -6825,7 +6956,8 @@ msgid "The URL for the content repository" msgstr "A url para o repositório de conteúdo" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +#, fuzzy +msgid "The dead zone of the joystick" msgstr "A zona morta do joystick" #: src/settings_translation_file.cpp @@ -6917,9 +7049,10 @@ msgstr "" "Shaders são suportados por OpenGL (somente desktop) e OGLES2 (experimental)" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" "A sensibilidade dos eixos do joystick para movimentar o frustum de exibição " "no jogo." @@ -7120,8 +7253,9 @@ msgid "Use bilinear filtering when scaling textures." msgstr "Usar filtragem bilinear ao dimensionamento de texturas." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -7332,6 +7466,11 @@ msgstr "Comprimento de balanço da água" msgid "Waving plants" msgstr "Balanço das plantas" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "Cor da caixa de seleção" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7361,7 +7500,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7390,8 +7529,9 @@ msgstr "" "Se desativado, fontes de bitmap e de vetores XML são usadas em seu lugar." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" "Se os planos de fundo das nametags devem ser mostradas por padrão.\n" @@ -7554,36 +7694,6 @@ msgstr "Nível Y de terreno inferior e solo oceânico." msgid "Y-level of seabed." msgstr "Nível Y do fundo do mar." -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Nível de compressão ZLib a ser usada ao salvar mapblocks no disco.\n" -"-1 - Nível de compressão padrão do Zlib\n" -"0 - Nenhuma compressão; o mais rápido\n" -"9 - Melhor compressão; o mais devagar\n" -"(níveis 1-3 usam método \"rápido\" do Zlib, enquanto que 4-9 usam método " -"normal)" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Nível de compressão ZLib a ser usada ao mandar mapblocks para o cliente.\n" -"-1 - Nível de compressão padrão do Zlib\n" -"0 - Nenhuma compressão; o mais rápido\n" -"9 - Melhor compressão; o mais devagar\n" -"(níveis 1-3 usam método \"rápido\" do Zlib, enquanto que 4-9 usam método " -"normal)" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "Tempo limite de download de arquivo via cURL" @@ -7788,6 +7898,9 @@ msgstr "limite paralelo de cURL" #~ msgid "IPv6 support." #~ msgstr "Suporte a IPv6." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Instalação: arquivo: \"$1\"" + #~ msgid "Lava depth" #~ msgstr "Profundidade da lava" @@ -7891,6 +8004,17 @@ msgstr "limite paralelo de cURL" #~ msgid "Select Package File:" #~ msgstr "Selecionar o arquivo do pacote:" +#~ msgid "" +#~ "Set the shadow update time.\n" +#~ "Lower value means shadows and map updates faster, but it consume more " +#~ "resources.\n" +#~ "Minimun value 0.001 seconds max value 0.2 seconds" +#~ msgstr "" +#~ "Defina o tempo de atualização das sombras.\n" +#~ "Valores mais baixos significam que sombras e mapa atualizam mais rápido, " +#~ "mas consume mais recursos.\n" +#~ "Valor mínimo 0.001 segundos e valor máximo 0.2 segundos" + #~ msgid "Shadow limit" #~ msgstr "Limite de mapblock" @@ -7919,6 +8043,9 @@ msgstr "limite paralelo de cURL" #~ msgid "This font will be used for certain languages." #~ msgstr "Esta fonte será usada para determinados idiomas." +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Para habilitar os sombreadores é necessário usar o driver OpenGL." + #~ msgid "Toggle Cinematic" #~ msgstr "Alternar modo de câmera cinemática" @@ -7958,5 +8085,8 @@ msgstr "limite paralelo de cURL" #~ msgid "Yes" #~ msgstr "Sim" +#~ msgid "You died." +#~ msgstr "Você morreu." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/ro/minetest.po b/po/ro/minetest.po index 9e5bf6e4d..4de3ad6b9 100644 --- a/po/ro/minetest.po +++ b/po/ro/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Romanian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-07-25 23:36+0000\n" "Last-Translator: Nicolae Crefelean \n" "Language-Team: Romanian ]" msgid "OK" msgstr "OK" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "" +msgstr "Comandă indisponibilă: " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "A apărut o eroare într-un script Lua:" @@ -296,6 +297,11 @@ msgstr "Instalează $1" msgid "Install missing dependencies" msgstr "Instalează dependințele opționale" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "Instalare: tipul de fișier neacceptat „$ 1” sau arhiva ruptă" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -626,7 +632,8 @@ msgid "Offset" msgstr "Decalaj" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Persistență" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -738,14 +745,6 @@ msgstr "" "Instalare Mod: nu se poate găsi nume de folder potrivit pentru pachetul de " "moduri $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Instalare: tipul de fișier neacceptat „$ 1” sau arhiva ruptă" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Instalare: fișier: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Nu se poate găsi un mod sau un pachet de moduri valid" @@ -1113,10 +1112,6 @@ msgstr "Lumină fină" msgid "Texturing:" msgstr "Texturare:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Pentru a permite shadere OpenGL trebuie să fie folosite." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Mapare ton" @@ -1149,7 +1144,7 @@ msgstr "Fluturarea lichidelor" msgid "Waving Plants" msgstr "Plante legănătoare" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Conexiunea a expirat." @@ -1178,7 +1173,8 @@ msgid "Connection error (timed out?)" msgstr "Eroare de conexiune (timeout?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Nu se poate găsi sau încărca jocul \"" #: src/client/clientlauncher.cpp @@ -1250,6 +1246,16 @@ msgstr "- Jucător vs jucător: " msgid "- Server Name: " msgstr "- Numele serverului: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "A apărut o eroare:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Redirecționare automată dezactivată" @@ -1258,6 +1264,22 @@ msgstr "Redirecționare automată dezactivată" msgid "Automatic forward enabled" msgstr "Redirecționare automată activată" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Actualizarea camerei este dezactivată" @@ -1266,6 +1288,10 @@ msgstr "Actualizarea camerei este dezactivată" msgid "Camera update enabled" msgstr "Actualizarea camerei este activată" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Schimbă Parola" @@ -1278,6 +1304,11 @@ msgstr "Modul cinematografic este dezactivat" msgid "Cinematic mode enabled" msgstr "Modul cinematografic activat" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Modare la client" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Scripturile din partea clientului sunt dezactivate" @@ -1286,6 +1317,10 @@ msgstr "Scripturile din partea clientului sunt dezactivate" msgid "Connecting to server..." msgstr "Se conectează la server..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Continuă" @@ -1323,6 +1358,11 @@ msgstr "" "- Roata mausului: selectare obiect\n" "- %s: chat\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Se creează clientul..." @@ -1530,6 +1570,21 @@ msgstr "Sunet activat" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Intervalul de vizualizare s-a modificat la %d" @@ -1862,6 +1917,15 @@ msgstr "Mini hartă în modul de suprafață, Zoom %dx" msgid "Minimap in texture mode" msgstr "Mini hartă în modul de textură" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Nu s-a putut descărca $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Parolele nu se potrivesc!" @@ -1870,7 +1934,7 @@ msgstr "Parolele nu se potrivesc!" msgid "Register and Join" msgstr "Înregistrează-te și Alătură-te" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2065,7 +2129,8 @@ msgid "Muted" msgstr "Amuțit" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Volum sunet: " #. ~ Imperative, as in "Enter/type in text". @@ -2326,6 +2391,10 @@ msgstr "" "Ajustați configurația dpi pe ecran (numai pentru x11/Android), de exemplu " "pentru ecrane 4k." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2627,6 +2696,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Pragul de lansare a mesajului de chat" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Comenzi de chat" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "Dimensiunea fontului din chat" @@ -2660,8 +2734,9 @@ msgid "Chat toggle key" msgstr "Cheia de comutare a chatului" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Comenzi de chat" +#, fuzzy +msgid "Chat weblinks" +msgstr "Chat afișat" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2679,6 +2754,12 @@ msgstr "Tasta modului cinematografic" msgid "Clean transparent textures" msgstr "Texturi transparente curate" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Client" @@ -2765,6 +2846,22 @@ msgstr "" msgid "Command key" msgstr "Tasta de comandă" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Sticla conectată" @@ -2856,7 +2953,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2933,8 +3030,8 @@ msgstr "Dimensiunea implicită a stivei" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3052,6 +3149,10 @@ msgstr "Dezactivează anticheatul" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -3098,7 +3199,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3126,13 +3234,6 @@ msgstr "Activați securitatea modului" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3525,7 +3626,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3957,7 +4058,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -4041,7 +4142,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4870,7 +4971,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5163,7 +5264,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5295,7 +5396,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5319,6 +5420,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5460,9 +5565,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5755,26 +5860,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5866,7 +5963,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5972,6 +6069,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6082,7 +6187,7 @@ msgstr "Calea texturii" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6100,7 +6205,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6169,7 +6274,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6332,7 +6437,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6515,6 +6620,10 @@ msgstr "Lungirea undei lichide" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6536,7 +6645,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6551,7 +6660,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6677,24 +6786,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6777,6 +6868,9 @@ msgstr "" #~ msgid "Generate Normal Maps" #~ msgstr "Generați Hărți Normale" +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Instalare: fișier: \"$1\"" + #~ msgid "Main" #~ msgstr "Principal" @@ -6829,6 +6923,9 @@ msgstr "" #~ msgid "Start Singleplayer" #~ msgstr "Începeți Jucător singur" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Pentru a permite shadere OpenGL trebuie să fie folosite." + #, fuzzy #~ msgid "Toggle Cinematic" #~ msgstr "Intră pe rapid" @@ -6839,5 +6936,8 @@ msgstr "" #~ msgid "Yes" #~ msgstr "Da" +#~ msgid "You died." +#~ msgstr "Ai murit." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/ru/minetest.po b/po/ru/minetest.po index ff9aff663..7cdc31e6e 100644 --- a/po/ru/minetest.po +++ b/po/ru/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Russian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-07-21 17:34+0000\n" "Last-Translator: Чтабс \n" "Language-Team: Russian ' to get more information, or '.help all' to list everything." msgstr "" -"Используйте '.help ' для получения дополнительной информации, или " -"'.help all' для перечисления всего списка." +"Используйте '.help ' для получения дополнительной информации, или '." +"help all' для перечисления всего списка." #: builtin/common/chatcommands.lua msgid "[all | ]" @@ -94,6 +90,11 @@ msgstr "[all | <команда>]" msgid "OK" msgstr "ОК" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "" +msgstr "Команда недоступна: " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Произошла ошибка в скрипте Lua:" @@ -296,6 +297,12 @@ msgstr "Установить $1" msgid "Install missing dependencies" msgstr "Установить недостающие зависимости" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "" +"Установка мода: неподдерживаемый тип файла или повреждённый архив \"$1\"" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -626,7 +633,8 @@ msgid "Offset" msgstr "Смещение" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Персистенция" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -737,15 +745,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" "Установка мода: не удаётся найти подходящей каталог для пакета модов «$1»" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" -"Установка мода: неподдерживаемый тип файла или повреждённый архив \"$1\"" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Установка мода: файл \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "" @@ -1113,10 +1112,6 @@ msgstr "Мягкое освещение" msgid "Texturing:" msgstr "Текстурирование:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Для включения шейдеров необходим драйвер OpenGL." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Тональное отображение" @@ -1149,7 +1144,7 @@ msgstr "Волнистые жидкости" msgid "Waving Plants" msgstr "Покачивание растений" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Тайм-аут соединения." @@ -1178,7 +1173,8 @@ msgid "Connection error (timed out?)" msgstr "Ошибка соединения (тайм-аут?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Невозможно найти или загрузить игру \"" #: src/client/clientlauncher.cpp @@ -1250,6 +1246,16 @@ msgstr "- PvP: " msgid "- Server Name: " msgstr "- Имя сервера: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Произошла ошибка:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Автобег отключён" @@ -1258,6 +1264,23 @@ msgstr "Автобег отключён" msgid "Automatic forward enabled" msgstr "Автобег включён" +#: src/client/game.cpp +#, fuzzy +msgid "Block bounds hidden" +msgstr "Границы блока" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Обновление камеры выключено" @@ -1266,6 +1289,10 @@ msgstr "Обновление камеры выключено" msgid "Camera update enabled" msgstr "Обновление камеры включено" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Изменить пароль" @@ -1278,6 +1305,11 @@ msgstr "Режим кино отключён" msgid "Cinematic mode enabled" msgstr "Режим кино включён" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Моддинг клиента" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Клиентские моды отключены" @@ -1286,6 +1318,10 @@ msgstr "Клиентские моды отключены" msgid "Connecting to server..." msgstr "Подключение к серверу..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Продолжить" @@ -1323,6 +1359,11 @@ msgstr "" "- Колесо мыши: выбор предмета\n" "- %s: чат\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Создание клиента..." @@ -1530,6 +1571,21 @@ msgstr "Звук включён" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Установлена видимость %dм" @@ -1862,6 +1918,15 @@ msgstr "Миникарта в поверхностном режиме, увел msgid "Minimap in texture mode" msgstr "Минимальный размер текстуры" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Не удалось загрузить $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Пароли не совпадают!" @@ -1870,7 +1935,7 @@ msgstr "Пароли не совпадают!" msgid "Register and Join" msgstr "Регистрация и подключение" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2065,7 +2130,8 @@ msgid "Muted" msgstr "Заглушить" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Громкость звука: " #. ~ Imperative, as in "Enter/type in text". @@ -2321,6 +2387,10 @@ msgstr "" "Настройка dpi (плотности точек на дюйм) для вашего экрана (не для X11, " "только для Android). Например для мониторов с разрешением в 4k." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2619,6 +2689,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Порог cообщения команды чата" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Команды в чате" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "Размер шрифта чата" @@ -2652,8 +2727,9 @@ msgid "Chat toggle key" msgstr "Кнопка переключения чата" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Команды в чате" +#, fuzzy +msgid "Chat weblinks" +msgstr "Отображение чата включено" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2671,6 +2747,12 @@ msgstr "Кнопка переключения в кинематографиче msgid "Clean transparent textures" msgstr "Очистить прозрачные текстуры" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Клиент" @@ -2759,6 +2841,35 @@ msgstr "" msgid "Command key" msgstr "Команда" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Уровень сжатия ZLib для использования при сохранении картографических блоков " +"на диске.\n" +"-1 - уровень сжатия Zlib по умолчанию\n" +"0 - без компрессора, самый быстрый\n" +"9 - лучшее сжатие, самое медленное\n" +"(уровни 1-3 используют \"быстрый\" метод Zlib, 4-9 используют обычный метод)" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Уровень сжатия ZLib для использования при отправке блоков карты клиенту.\n" +"-1 - уровень сжатия Zlib по умолчанию\n" +"0 - без компрессора, самый быстрый\n" +"9 - лучшее сжатие, самое медленное\n" +"(уровни 1-3 используют \"быстрый\" метод Zlib, 4-9 используют обычный метод)" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Стёкла без швов" @@ -2858,9 +2969,10 @@ msgid "Crosshair alpha" msgstr "Прозрачность перекрестия" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" "Прозрачность прицела (от 0 (прозрачно) до 255 (непрозрачно)).\n" "Также контролирует цвет перекрестия объекта" @@ -2942,9 +3054,10 @@ msgid "Default stack size" msgstr "Размер стака по умолчанию" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" "Определите качество фильтрации теней\n" @@ -3078,6 +3191,10 @@ msgstr "Отключить анти-чит" msgid "Disallow empty passwords" msgstr "Запретить пустой пароль" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "Доменное имя сервера, отображаемое в списке серверов." @@ -3127,8 +3244,20 @@ msgstr "" "Эта поддержка является экспериментальной и API может измениться." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" +"Включить фильтрацию диска Пуассона.\n" +"По истине использует диск Пуассона для создания \"мягких теней\". Иначе " +"используется фильтрация PCF." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" "Включить цветные тени.\n" @@ -3158,16 +3287,6 @@ msgstr "Включить защиту модов" msgid "Enable players getting damage and dying." msgstr "Включить получение игроками урона и их смерть." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" -"Включить фильтрацию диска Пуассона.\n" -"По истине использует диск Пуассона для создания \"мягких теней\". Иначе " -"используется фильтрация PCF." - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Включить случайный ввод пользователя (только для тестов)." @@ -3617,10 +3736,11 @@ msgid "Global callbacks" msgstr "Глобальные обратные вызовы" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Глобальные атрибуты генерации карт.\n" "В картогенераторе v6 флаг «decorations» не влияет на деревья и траву\n" @@ -4116,7 +4236,8 @@ msgstr "" "Обычно это нужно тем, кто пишет код для движка" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "Выполнять команды в чате при регистрации." #: src/settings_translation_file.cpp @@ -4206,7 +4327,8 @@ msgid "Joystick button repetition interval" msgstr "Интервал повторного клика кнопкой джойстика" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +#, fuzzy +msgid "Joystick dead zone" msgstr "Мертвая зона джойстика" #: src/settings_translation_file.cpp @@ -5321,7 +5443,8 @@ msgid "Map save interval" msgstr "Интервал сохранения карты" #: src/settings_translation_file.cpp -msgid "Map update time" +#, fuzzy +msgid "Map shadows update frames" msgstr "Время обновления карты" #: src/settings_translation_file.cpp @@ -5646,7 +5769,8 @@ msgid "Mod channels" msgstr "Каналы модификаций" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +#, fuzzy +msgid "Modifies the size of the HUD elements." msgstr "Изменяет размер элементов игрового интерфейса." #: src/settings_translation_file.cpp @@ -5799,9 +5923,10 @@ msgstr "" "Для большинства пользователей наилучшим значением может быть '1'." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" "Количество дополнительных блоков, которые могут сразу быть загружены /" @@ -5832,6 +5957,10 @@ msgstr "" "Открыть меню паузы при потере окном фокуса. Не срабатывает, если какая-либо\n" "форма уже открыта." +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -6003,11 +6132,12 @@ msgid "Prometheus listener address" msgstr "адрес приёмника Prometheus" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" "Адрес приёмника Prometheus.\n" "Если мой тест скомпилирован с включенной опцией ENABLE_PROMETHEUS,\n" @@ -6356,32 +6486,22 @@ msgstr "" "более тёмные тени." #: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" -"Установить время обновления теней.\n" -"Меньшее значение означает, что тени и карта обновляются быстрее, но это " -"потребляет больше ресурсов.\n" -"Минимальное значение 0,001 секунды, максимальное 0,2 секунды" - -#: src/settings_translation_file.cpp +#, fuzzy msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" "Установить размер радиуса мягкой тени.\n" "Меньшие значения означают более резкие тени, большие значения более мягкие.\n" "Минимальное значение 1,0 и максимальное 10,0" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" "Установка наклона орбиты Солнца/Луны в градусах.\n" "Значение 0 означает отсутствие наклона / вертикальную орбиту.\n" @@ -6494,7 +6614,8 @@ msgstr "" "Требует перезапуска после изменения." #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +#, fuzzy +msgid "Show name tag backgrounds by default" msgstr "Отображать фон у табличек с именами" #: src/settings_translation_file.cpp @@ -6623,6 +6744,14 @@ msgstr "" "Обратите внимание, что моды или игры могут явно установить стек для " "определенных (или всех) предметов." +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6757,10 +6886,11 @@ msgid "Texture path" msgstr "Путь к текстурам" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" "Размер текстуры для рендеринга карты теней.\n" "Это должно быть число, кратное двум.\n" @@ -6789,7 +6919,8 @@ msgid "The URL for the content repository" msgstr "Адрес сетевого репозитория" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +#, fuzzy +msgid "The dead zone of the joystick" msgstr "Мертвая зона джойстика" #: src/settings_translation_file.cpp @@ -6884,9 +7015,10 @@ msgstr "" "(экспериментальный)" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" "Чувствительность осей джойстика для перемещения\n" "взгляда в игре." @@ -7088,8 +7220,9 @@ msgid "Use bilinear filtering when scaling textures." msgstr "Использовать билинейную фильтрацию для масштабирования текстур." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -7298,6 +7431,11 @@ msgstr "Длина волн на воде" msgid "Waving plants" msgstr "Покачивание растений" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "Цвет выделения" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7323,12 +7461,13 @@ msgstr "" "правильно поддерживают загрузку текстур с аппаратного обеспечения." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7359,8 +7498,9 @@ msgstr "" "Если отключено, используются растровые и XML-векторные изображения." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" "Должен ли отображаться фон бирки по умолчанию.\n" @@ -7520,35 +7660,6 @@ msgstr "Y-уровень нижнего рельефа и морского дн msgid "Y-level of seabed." msgstr "Y-уровень морского дна." -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Уровень сжатия ZLib для использования при сохранении картографических блоков " -"на диске.\n" -"-1 - уровень сжатия Zlib по умолчанию\n" -"0 - без компрессора, самый быстрый\n" -"9 - лучшее сжатие, самое медленное\n" -"(уровни 1-3 используют \"быстрый\" метод Zlib, 4-9 используют обычный метод)" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Уровень сжатия ZLib для использования при отправке блоков карты клиенту.\n" -"-1 - уровень сжатия Zlib по умолчанию\n" -"0 - без компрессора, самый быстрый\n" -"9 - лучшее сжатие, самое медленное\n" -"(уровни 1-3 используют \"быстрый\" метод Zlib, 4-9 используют обычный метод)" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "Тайм-аут загрузки файла с помощью cURL" @@ -7760,6 +7871,9 @@ msgstr "Лимит одновременных соединений cURL" #~ msgid "IPv6 support." #~ msgstr "Поддержка IPv6." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Установка мода: файл \"$1\"" + #~ msgid "Lava depth" #~ msgstr "Глубина лавы" @@ -7863,6 +7977,17 @@ msgstr "Лимит одновременных соединений cURL" #~ msgid "Select Package File:" #~ msgstr "Выберите файл дополнения:" +#~ msgid "" +#~ "Set the shadow update time.\n" +#~ "Lower value means shadows and map updates faster, but it consume more " +#~ "resources.\n" +#~ "Minimun value 0.001 seconds max value 0.2 seconds" +#~ msgstr "" +#~ "Установить время обновления теней.\n" +#~ "Меньшее значение означает, что тени и карта обновляются быстрее, но это " +#~ "потребляет больше ресурсов.\n" +#~ "Минимальное значение 0,001 секунды, максимальное 0,2 секунды" + #~ msgid "Shadow limit" #~ msgstr "Лимит теней" @@ -7891,6 +8016,9 @@ msgstr "Лимит одновременных соединений cURL" #~ msgid "This font will be used for certain languages." #~ msgstr "Этот шрифт будет использован для некоторых языков." +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Для включения шейдеров необходим драйвер OpenGL." + #~ msgid "Toggle Cinematic" #~ msgstr "Кино" @@ -7927,5 +8055,8 @@ msgstr "Лимит одновременных соединений cURL" #~ msgid "Yes" #~ msgstr "Да" +#~ msgid "You died." +#~ msgstr "Ты умер." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/sk/minetest.po b/po/sk/minetest.po index 93af9ee63..6dd0652e3 100644 --- a/po/sk/minetest.po +++ b/po/sk/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-08-13 21:34+0000\n" "Last-Translator: Marian \n" "Language-Team: Slovak ]" msgid "OK" msgstr "OK" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "" +msgstr "Príkaz nie je k dispozícií: " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Chyba v lua skripte:" @@ -300,6 +301,11 @@ msgstr "Inštaluj $1" msgid "Install missing dependencies" msgstr "Nainštaluj chýbajúce závislosti" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "Inštalácia: Nepodporovaný typ súboru \"$1\", alebo poškodený archív" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -631,7 +637,8 @@ msgid "Offset" msgstr "Ofset" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Vytrvalosť" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -744,14 +751,6 @@ msgstr "" "Inštalácia rozšírenia: Nie je možné nájsť vhodný adresár pre balíček " "rozšírení $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Inštalácia: Nepodporovaný typ súboru \"$1\", alebo poškodený archív" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Inštalácia: súbor: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Nie je možné nájsť platné rozšírenie, alebo balíček rozšírení" @@ -1119,10 +1118,6 @@ msgstr "Jemné osvetlenie" msgid "Texturing:" msgstr "Textúrovanie:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Aby mohli byť aktivované shadery, musí sa použiť OpenGL." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Optim. farieb" @@ -1155,7 +1150,7 @@ msgstr "Vlniace sa kvapaliny" msgid "Waving Plants" msgstr "Vlniace sa rastliny" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Časový limit pripojenia vypršal." @@ -1184,7 +1179,8 @@ msgid "Connection error (timed out?)" msgstr "Chyba spojenia (časový limit?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Nie je možné nájsť alebo nahrať hru \"" #: src/client/clientlauncher.cpp @@ -1256,6 +1252,16 @@ msgstr "- PvP: " msgid "- Server Name: " msgstr "- Meno servera: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Chyba:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Automatický pohyb vpred je zakázaný" @@ -1264,6 +1270,23 @@ msgstr "Automatický pohyb vpred je zakázaný" msgid "Automatic forward enabled" msgstr "Automatický pohyb vpred je aktivovaný" +#: src/client/game.cpp +#, fuzzy +msgid "Block bounds hidden" +msgstr "Hranice bloku" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Aktualizácia kamery je zakázaná" @@ -1272,6 +1295,10 @@ msgstr "Aktualizácia kamery je zakázaná" msgid "Camera update enabled" msgstr "Aktualizácia kamery je aktivovaná" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Zmeniť heslo" @@ -1284,6 +1311,11 @@ msgstr "Filmový režim je zakázaný" msgid "Cinematic mode enabled" msgstr "Filmový režim je aktivovaný" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Úpravy (modding) cez klienta" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Skriptovanie na strane klienta je zakázané" @@ -1292,6 +1324,10 @@ msgstr "Skriptovanie na strane klienta je zakázané" msgid "Connecting to server..." msgstr "Pripájam sa k serveru..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Pokračuj" @@ -1329,6 +1365,11 @@ msgstr "" "- Myš koliesko: zvoľ si vec\n" "- %s: komunikácia\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Vytváram klienta..." @@ -1536,6 +1577,21 @@ msgstr "Zvuk je obnovený" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Dohľadnosť je zmenená na %d" @@ -1868,6 +1924,15 @@ msgstr "Minimapa v povrchovom režime, priblíženie x%d" msgid "Minimap in texture mode" msgstr "Minimapa v móde textúry" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Nepodarilo sa stiahnuť $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Hesla sa nezhodujú!" @@ -1876,7 +1941,7 @@ msgstr "Hesla sa nezhodujú!" msgid "Register and Join" msgstr "Registrovať a pripojiť sa" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2070,7 +2135,8 @@ msgid "Muted" msgstr "Zvuk stlmený" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Hlasitosť: " #. ~ Imperative, as in "Enter/type in text". @@ -2322,6 +2388,10 @@ msgstr "" "Nastav dpi konfiguráciu podľa svojej obrazovky (nie pre X11/len pre Android) " "napr. pre 4k obrazovky." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2616,6 +2686,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Časové obmedzenie príkazu v správe" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Komunikačné príkazy" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "Veľkosť komunikačného písma" @@ -2649,8 +2724,9 @@ msgid "Chat toggle key" msgstr "Tlačidlo Prepnutie komunikácie" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Komunikačné príkazy" +#, fuzzy +msgid "Chat weblinks" +msgstr "Komunikačná konzola je zobrazená" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2668,6 +2744,12 @@ msgstr "Tlačidlo Filmový režim" msgid "Clean transparent textures" msgstr "Vyčisti priehľadné textúry" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Klient" @@ -2755,6 +2837,36 @@ msgstr "" msgid "Command key" msgstr "Tlačidlo Príkaz" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Úroveň kompresie ZLib používaný pri ukladaní blokov mapy na disk.\n" +"-1 - predvolená úroveň kompresie Zlib\n" +"0 - bez kompresie, najrýchlejšie\n" +"9 - najlepšia kompresia, najpomalšie\n" +"(pre úrovne 1-3 používa Zlib \"rýchlu\" metódu, pre 4-9 používa normálnu " +"metódu)" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Úroveň kompresie ZLib používaný pri posielaní blokov mapy klientom.\n" +"-1 - predvolená úroveň kompresie Zlib\n" +"0 - bez kompresie, najrýchlejšie\n" +"9 - najlepšia kompresia, najpomalšie\n" +"(pre úrovne 1-3 používa Zlib \"rýchlu\" metódu, pre 4-9 používa normálnu " +"metódu)" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Prepojené sklo" @@ -2853,9 +2965,10 @@ msgid "Crosshair alpha" msgstr "Priehľadnosť zameriavača" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" "Priehľadnosť zameriavača (nepriehľadnosť, medzi 0 a 255).\n" "Tiež nastavuje farbu objektu zameriavača" @@ -2937,9 +3050,10 @@ msgid "Default stack size" msgstr "Štandardná veľkosť kôpky" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" "Definuje kvalitu filtrovania tieňov\n" @@ -3068,6 +3182,10 @@ msgstr "Zakáž anticheat" msgid "Disallow empty passwords" msgstr "Zakáž prázdne heslá" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "Doménové meno servera, ktoré bude zobrazené v zozname serverov." @@ -3117,8 +3235,20 @@ msgstr "" "Táto podpora je experimentálna a API sa môže zmeniť." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" +"Aktivuj poisson disk filtrovanie.\n" +"Ak je aktivované použije poisson disk pre vytvorenie \"mäkkých tieňov\". V " +"opačnom prípade sa použije PCF filtrovanie." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" "Aktivuj farebné tiene. \n" @@ -3148,16 +3278,6 @@ msgstr "Aktivuj rozšírenie pre zabezpečenie" msgid "Enable players getting damage and dying." msgstr "Aktivuje aby mohol byť hráč zranený a zomrieť." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" -"Aktivuj poisson disk filtrovanie.\n" -"Ak je aktivované použije poisson disk pre vytvorenie \"mäkkých tieňov\". V " -"opačnom prípade sa použije PCF filtrovanie." - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Aktivuje náhodný užívateľský vstup (používa sa len pre testovanie)." @@ -3614,10 +3734,11 @@ msgid "Global callbacks" msgstr "Globálne odozvy" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Globálne atribúty pre generovanie máp.\n" "V generátore v6 príznak 'decorations' riadi všetky dekorácie okrem stromov\n" @@ -4114,7 +4235,8 @@ msgstr "" "Toto je obvykle potrebné len pre core/builtin prispievateľov" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "Inštrumentuj komunikačné príkazy pri registrácií." #: src/settings_translation_file.cpp @@ -4204,7 +4326,8 @@ msgid "Joystick button repetition interval" msgstr "Interval opakovania tlačidla joysticku" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +#, fuzzy +msgid "Joystick dead zone" msgstr "Mŕtva zóna joysticku" #: src/settings_translation_file.cpp @@ -5320,7 +5443,8 @@ msgid "Map save interval" msgstr "Interval ukladania mapy" #: src/settings_translation_file.cpp -msgid "Map update time" +#, fuzzy +msgid "Map shadows update frames" msgstr "Aktualizačný čas mapy" #: src/settings_translation_file.cpp @@ -5643,7 +5767,8 @@ msgid "Mod channels" msgstr "Komunikačné kanály rozšírení" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +#, fuzzy +msgid "Modifies the size of the HUD elements." msgstr "Upraví veľkosť elementov v užívateľskom rozhraní." #: src/settings_translation_file.cpp @@ -5795,9 +5920,10 @@ msgstr "" "v 'on_generated'. Pre mnohých hráčov môže byť optimálne nastavenie '1'." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" "Počet extra blokov, ktoré môžu byť naraz nahrané pomocou /clearobjects.\n" @@ -5826,6 +5952,10 @@ msgstr "" "Otvorí menu pozastavenia, ak aktuálne okno hry nie je vybrané.\n" "Nepozastaví sa ak je otvorený formspec." +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5995,11 +6125,12 @@ msgid "Prometheus listener address" msgstr "Odpočúvacia adresa Promethea" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" "Odpočúvacia adresa Promethea.\n" "Ak je minetest skompilovaný s nastaveným ENABLE_PROMETHEUS,\n" @@ -6343,32 +6474,22 @@ msgstr "" "tiene." #: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" -"Nastav aktualizačný čas tieňov.\n" -"Nižšia hodnota znamená. že sa mapa a tiene aktualizujú rýchlejšie, ale " -"spotrebuje sa viac zdrojov.\n" -"Minimálna hodnota je 0.001 sekúnd max. hodnota je 0.2 sekundy" - -#: src/settings_translation_file.cpp +#, fuzzy msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" "Nastav dosah mäkkých tieňov.\n" "Nižšia hodnota znamená ostrejšie a vyššia jemnejšie tiene.\n" "Minimálna hodnota je 1.0 a max. hodnota je 10.0" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" "Nastav sklon orbity slnka/mesiaca v stupňoch\n" "Hodnota 0 znamená bez vertikálneho sklonu orbity.\n" @@ -6438,7 +6559,8 @@ msgstr "Kvalita filtra pre tiene" #: src/settings_translation_file.cpp msgid "Shadow map max distance in nodes to render shadows" -msgstr "Maximálna vzdialenosť v kockách, pre mapu tieňov na renderovanie tieňov" +msgstr "" +"Maximálna vzdialenosť v kockách, pre mapu tieňov na renderovanie tieňov" #: src/settings_translation_file.cpp msgid "Shadow map texture in 32 bits" @@ -6481,7 +6603,8 @@ msgstr "" "Po zmene je požadovaný reštart." #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +#, fuzzy +msgid "Show name tag backgrounds by default" msgstr "Pri mene zobraz štandardne pozadie" #: src/settings_translation_file.cpp @@ -6606,6 +6729,14 @@ msgstr "" "Ber v úvahu, že rozšírenia, alebo hry môžu explicitne nastaviť veľkosť pre " "určité (alebo všetky) typy." +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6738,10 +6869,11 @@ msgid "Texture path" msgstr "Cesta k textúram" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" "Veľkosť textúry pre renderovanie mapy tieňov.\n" "Toto musí byť mocnina dvoch.\n" @@ -6768,7 +6900,8 @@ msgid "The URL for the content repository" msgstr "Webová adresa (URL) k úložisku doplnkov" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +#, fuzzy +msgid "The dead zone of the joystick" msgstr "Mŕtva zóna joysticku" #: src/settings_translation_file.cpp @@ -6859,9 +6992,10 @@ msgstr "" "Shadery sú podporované v OpenGL (len pre desktop) a v OGLES2 (experimentálne)" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" "Citlivosť osí joysticku pre pohyb\n" "otáčania pohľadu v hre." @@ -7055,8 +7189,9 @@ msgid "Use bilinear filtering when scaling textures." msgstr "Použi bilineárne filtrovanie pri zmene mierky textúr." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -7261,6 +7396,11 @@ msgstr "Vlnová dĺžka vlniacich sa tekutín" msgid "Waving plants" msgstr "Vlniace sa rastliny" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "Farba obrysu bloku" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7284,12 +7424,13 @@ msgstr "" "nepodporujú sťahovanie textúr z hardvéru." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7316,8 +7457,9 @@ msgstr "" "Ak je zakázané, budú použité bitmapové a XML vektorové písma." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" "Či sa má pri mene zobraziť pozadie.\n" @@ -7471,36 +7613,6 @@ msgstr "Y-úroveň dolnej časti terénu a morského dna." msgid "Y-level of seabed." msgstr "Y-úroveň morského dna." -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Úroveň kompresie ZLib používaný pri ukladaní blokov mapy na disk.\n" -"-1 - predvolená úroveň kompresie Zlib\n" -"0 - bez kompresie, najrýchlejšie\n" -"9 - najlepšia kompresia, najpomalšie\n" -"(pre úrovne 1-3 používa Zlib \"rýchlu\" metódu, pre 4-9 používa normálnu " -"metódu)" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Úroveň kompresie ZLib používaný pri posielaní blokov mapy klientom.\n" -"-1 - predvolená úroveň kompresie Zlib\n" -"0 - bez kompresie, najrýchlejšie\n" -"9 - najlepšia kompresia, najpomalšie\n" -"(pre úrovne 1-3 používa Zlib \"rýchlu\" metódu, pre 4-9 používa normálnu " -"metódu)" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "cURL časový rámec sťahovania súborov" @@ -7637,6 +7749,9 @@ msgstr "Paralelný limit cURL" #~ msgid "High-precision FPU" #~ msgstr "Vysoko-presné FPU" +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Inštalácia: súbor: \"$1\"" + #~ msgid "Main" #~ msgstr "Hlavné" @@ -7711,6 +7826,17 @@ msgstr "Paralelný limit cURL" #~ msgid "Reset singleplayer world" #~ msgstr "Vynuluj svet jedného hráča" +#~ msgid "" +#~ "Set the shadow update time.\n" +#~ "Lower value means shadows and map updates faster, but it consume more " +#~ "resources.\n" +#~ "Minimun value 0.001 seconds max value 0.2 seconds" +#~ msgstr "" +#~ "Nastav aktualizačný čas tieňov.\n" +#~ "Nižšia hodnota znamená. že sa mapa a tiene aktualizujú rýchlejšie, ale " +#~ "spotrebuje sa viac zdrojov.\n" +#~ "Minimálna hodnota je 0.001 sekúnd max. hodnota je 0.2 sekundy" + #~ msgid "" #~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will " #~ "not be drawn." @@ -7730,11 +7856,17 @@ msgstr "Paralelný limit cURL" #~ msgid "Strength of generated normalmaps." #~ msgstr "Intenzita generovaných normálových máp." +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Aby mohli byť aktivované shadery, musí sa použiť OpenGL." + #~ msgid "View" #~ msgstr "Zobraziť" #~ msgid "Yes" #~ msgstr "Áno" +#~ msgid "You died." +#~ msgstr "Zomrel si." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/sl/minetest.po b/po/sl/minetest.po index c39836dd0..daa2278b0 100644 --- a/po/sl/minetest.po +++ b/po/sl/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Slovenian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2020-09-30 19:41+0000\n" "Last-Translator: Iztok Bajcar \n" "Language-Team: Slovenian " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Prišlo je do napake v Lua skripti:" @@ -308,6 +307,11 @@ msgstr "Namesti" msgid "Install missing dependencies" msgstr "Izbirne možnosti:" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "Nameščanje: nepodprta vrsta datoteke \"$1\" oziroma okvarjen arhiv" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -652,7 +656,8 @@ msgid "Offset" msgstr "Odmik" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Trajanje" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -765,14 +770,6 @@ msgstr "" "Namestitev prilagoditve: ni mogoče najti ustreznega imena mape za paket " "prilagoditev $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Nameščanje: nepodprta vrsta datoteke \"$1\" oziroma okvarjen arhiv" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Namesti: datoteka: »$1«" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Ni mogoče najti ustrezne prilagoditve ali paketa prilagoditev" @@ -1149,10 +1146,6 @@ msgstr "Gladko osvetljevanje" msgid "Texturing:" msgstr "Tekstura:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Za prikaz senčenja mora biti omogočen gonilnik OpenGL." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Barvno preslikavanje" @@ -1186,7 +1179,7 @@ msgstr "Valovanje tekočin" msgid "Waving Plants" msgstr "Pokaži nihanje rastlin" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Povezava je potekla." @@ -1215,7 +1208,8 @@ msgid "Connection error (timed out?)" msgstr "Napaka povezave (ali je dejanje časovno preteklo?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Ni mogoče najti oziroma naložiti igre »" #: src/client/clientlauncher.cpp @@ -1289,6 +1283,16 @@ msgstr "– Igra PvP: " msgid "- Server Name: " msgstr "– Ime strežnika: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Prišlo je do napake:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Samodejno premikanje naprej je onemogočeno" @@ -1297,6 +1301,22 @@ msgstr "Samodejno premikanje naprej je onemogočeno" msgid "Automatic forward enabled" msgstr "Samodejno premikanje naprej je omogočeno" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Posodabljanje kamere je onemogočeno" @@ -1305,6 +1325,10 @@ msgstr "Posodabljanje kamere je onemogočeno" msgid "Camera update enabled" msgstr "Posodabljanje kamere je omogočeno" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Spremeni geslo" @@ -1317,6 +1341,10 @@ msgstr "Filmski način(Cinematic mode) je onemogočen" msgid "Cinematic mode enabled" msgstr "Filmski način (Cinematic mode) je omogočen" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Skriptiranje s strani odjemalca je onemogočeno" @@ -1325,6 +1353,10 @@ msgstr "Skriptiranje s strani odjemalca je onemogočeno" msgid "Connecting to server..." msgstr "Poteka povezovanje s strežnikom ..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Nadaljuj" @@ -1362,6 +1394,11 @@ msgstr "" "- kolesce miške: izbere orodje iz zaloge\n" "- %s 9: omogoči klepet\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Ustvarjanje odjemalca ..." @@ -1575,6 +1612,21 @@ msgstr "Zvok ni utišan" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Doseg pogleda je nastavljena na %d %%" @@ -1916,6 +1968,15 @@ msgstr "Zemljevid (minimap) je v načinu prikazovanja površja, Zoom x1" msgid "Minimap in texture mode" msgstr "Zemljevid (minimap) je v načinu prikazovanja površja, Zoom x1" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Prenos $1 je spodletel" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Gesli se ne ujemata!" @@ -1924,7 +1985,7 @@ msgstr "Gesli se ne ujemata!" msgid "Register and Join" msgstr "Registriraj in prijavi se" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2120,7 +2181,8 @@ msgid "Muted" msgstr "Utišano" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Glasnost zvoka: " #. ~ Imperative, as in "Enter/type in text". @@ -2371,6 +2433,10 @@ msgstr "" "Nastavite dpi konfiguracijo (gostoto prikaza) svojemu ekranu (samo za ne-X11/" "Android), npr. za 4K ekrane." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2669,6 +2735,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Ukaz" + #: src/settings_translation_file.cpp #, fuzzy msgid "Chat font size" @@ -2705,8 +2776,9 @@ msgid "Chat toggle key" msgstr "Tipka za preklop na klepet" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "" +#, fuzzy +msgid "Chat weblinks" +msgstr "Pogovor je prikazan" #: src/settings_translation_file.cpp #, fuzzy @@ -2726,6 +2798,12 @@ msgstr "Tipka za filmski način" msgid "Clean transparent textures" msgstr "Čiste prosojne teksture" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Odjemalec" @@ -2802,6 +2880,22 @@ msgstr "" msgid "Command key" msgstr "Tipka Command" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Poveži steklo" @@ -2896,7 +2990,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2976,8 +3070,8 @@ msgstr "Privzeta igra" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3099,6 +3193,10 @@ msgstr "Onemogoči preprečevanje goljufanja" msgid "Disallow empty passwords" msgstr "Ne dovoli praznih gesel" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "Ime domene strežnika, ki se prikaže na seznamu strežnikov." @@ -3145,7 +3243,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3174,13 +3279,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "Omogoči, da igralci dobijo poškodbo in umrejo." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3584,7 +3682,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -4035,7 +4133,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -4120,7 +4218,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4949,7 +5047,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5243,7 +5341,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5375,7 +5473,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5399,6 +5497,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5543,9 +5645,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5839,26 +5941,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5949,7 +6043,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -6061,6 +6155,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6171,7 +6273,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6189,7 +6291,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6258,7 +6360,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6421,7 +6523,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6608,6 +6710,10 @@ msgstr "Pokaži valovanje vode" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6629,7 +6735,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6644,7 +6750,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6770,24 +6876,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6873,6 +6961,9 @@ msgstr "" #~ msgid "IPv6 support." #~ msgstr "IPv6 podpora." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Namesti: datoteka: »$1«" + #~ msgid "Main" #~ msgstr "Glavni" @@ -6928,6 +7019,9 @@ msgstr "" #~ msgid "Start Singleplayer" #~ msgstr "Zaženi samostojno igro" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Za prikaz senčenja mora biti omogočen gonilnik OpenGL." + #~ msgid "Toggle Cinematic" #~ msgstr "Preklopi gladek pogled" @@ -6938,5 +7032,9 @@ msgstr "" #~ msgid "Yes" #~ msgstr "Da" +#, fuzzy +#~ msgid "You died." +#~ msgstr "Umrl si" + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/sr_Cyrl/minetest.po b/po/sr_Cyrl/minetest.po index 86ab30434..ef8653763 100644 --- a/po/sr_Cyrl/minetest.po +++ b/po/sr_Cyrl/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Serbian (cyrillic) (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-07-20 14:34+0000\n" "Last-Translator: Stefan Vukanovic \n" "Language-Team: Serbian (cyrillic) ]" msgid "OK" msgstr "У реду" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "" +msgstr "Команда није доступна: " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Догодила се грешка у Lua скрипти:" @@ -303,6 +304,13 @@ msgstr "Инсталирај $1" msgid "Install missing dependencies" msgstr "Инсталирај недостајуће зависности" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "" +"\n" +"Инсталирај мод: неподржан тип фајла \"$1\" или оштећена архива" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -637,7 +645,8 @@ msgid "Offset" msgstr "Помак" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Упорност" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -756,18 +765,6 @@ msgstr "" "Инсталирај мод: не може се пронаћи одговарајуће име за фасциклу мод-паковања " "$1" -#: builtin/mainmenu/pkgmgr.lua -#, fuzzy -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" -"\n" -"Инсталирај мод: неподржан тип фајла \"$1\" или оштећена архива" - -#: builtin/mainmenu/pkgmgr.lua -#, fuzzy -msgid "Install: file: \"$1\"" -msgstr "Инсталирај мод: фајл: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua #, fuzzy msgid "Unable to find a valid mod or modpack" @@ -1161,10 +1158,6 @@ msgstr "Глатко осветљење" msgid "Texturing:" msgstr "Филтери за текстуре:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Да би се омогућили шејдери мора се користити OpenGL драјвер." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Тонско Мапирање" @@ -1199,7 +1192,7 @@ msgstr "Лепршајуће лишће" msgid "Waving Plants" msgstr "Лепршајуће биљке" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Конекцији је истекло време." @@ -1228,7 +1221,8 @@ msgid "Connection error (timed out?)" msgstr "Грешка у конекцији (истекло време?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Немогу пронаћи или учитати игру \"" #: src/client/clientlauncher.cpp @@ -1301,6 +1295,16 @@ msgstr "- Играч против играча: " msgid "- Server Name: " msgstr "- Име сервера: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Догодила се грешка:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp #, fuzzy msgid "Automatic forward disabled" @@ -1311,6 +1315,22 @@ msgstr "Кључ за синематски мод" msgid "Automatic forward enabled" msgstr "Кључ за синематски мод" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp #, fuzzy msgid "Camera update disabled" @@ -1321,6 +1341,10 @@ msgstr "Кључ за укључивање/искључивање освежав msgid "Camera update enabled" msgstr "Кључ за укључивање/искључивање освежавања камере" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Промени шифру" @@ -1335,6 +1359,11 @@ msgstr "Кључ за синематски мод" msgid "Cinematic mode enabled" msgstr "Кључ за синематски мод" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Модификовање клијента" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "" @@ -1343,6 +1372,10 @@ msgstr "" msgid "Connecting to server..." msgstr "Повезујем се на сервер..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Настави" @@ -1380,6 +1413,11 @@ msgstr "" "- Точкић миша: одабирање ставке\n" "- %s: причање\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Правим клијента..." @@ -1594,6 +1632,21 @@ msgid "Sound unmuted" msgstr "Јачина звука" #: src/client/game.cpp +#, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp #, fuzzy, c-format msgid "Viewing range changed to %d" msgstr "Јачина звука промењена на %d%%" @@ -1930,6 +1983,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Неуспело преузимање $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Шифре се не поклапају!" @@ -1938,7 +2000,7 @@ msgstr "Шифре се не поклапају!" msgid "Register and Join" msgstr "" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2137,7 +2199,8 @@ msgid "Muted" msgstr "Изкључи звук" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Јачина звука: " #. ~ Imperative, as in "Enter/type in text". @@ -2369,6 +2432,10 @@ msgstr "" "Подеси dpi конфигурацију за твој екран (само за оне који нису X11/Android) " "нпр. за 4k екране." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2651,6 +2718,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Граница пећине" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Чат команде" + #: src/settings_translation_file.cpp #, fuzzy msgid "Chat font size" @@ -2688,8 +2760,8 @@ msgid "Chat toggle key" msgstr "Кључ за укључивање чета" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Чат команде" +msgid "Chat weblinks" +msgstr "" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2707,6 +2779,12 @@ msgstr "Кључ за синематски мод" msgid "Clean transparent textures" msgstr "Очисти провидне трекстуре" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Клијент" @@ -2791,6 +2869,22 @@ msgstr "" msgid "Command key" msgstr "Кључ за команду" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Споји стакло" @@ -2888,7 +2982,7 @@ msgstr "Провидност нишана" #, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "Провидност нишана (видљивост, између 0 и 255)." #: src/settings_translation_file.cpp @@ -2969,8 +3063,8 @@ msgstr "Уобичајена игра" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3089,6 +3183,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -3136,7 +3234,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3164,13 +3269,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3567,7 +3665,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -4003,7 +4101,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -4087,7 +4185,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4917,7 +5015,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5216,7 +5314,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5348,7 +5446,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5372,6 +5470,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5517,9 +5619,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5834,26 +5936,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5945,7 +6039,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -6052,6 +6146,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6162,7 +6264,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6180,7 +6282,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6249,7 +6351,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6414,7 +6516,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6601,6 +6703,10 @@ msgstr "Веслајућа вода" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6622,7 +6728,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6637,7 +6743,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6765,24 +6871,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6858,6 +6946,10 @@ msgstr "" #~ msgid "Downloading and installing $1, please wait..." #~ msgstr "Преузима се $1, молим вас сачекајте..." +#, fuzzy +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Инсталирај мод: фајл: \"$1\"" + #~ msgid "Main" #~ msgstr "Главно" @@ -6901,11 +6993,17 @@ msgstr "" #~ msgid "Start Singleplayer" #~ msgstr "Започни игру за једног играча" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Да би се омогућили шејдери мора се користити OpenGL драјвер." + #~ msgid "Toggle Cinematic" #~ msgstr "Укључи/Искључи Cinematic мод" #~ msgid "Yes" #~ msgstr "Да" +#~ msgid "You died." +#~ msgstr "Умро/ла си." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/sr_Latn/minetest.po b/po/sr_Latn/minetest.po index b5d6c235d..87a06a01b 100644 --- a/po/sr_Latn/minetest.po +++ b/po/sr_Latn/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2020-08-15 23:32+0000\n" "Last-Translator: Milos \n" "Language-Team: Serbian (latin) " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Doslo je do greske u Lua skripti:" @@ -302,6 +301,10 @@ msgstr "Instalirati" msgid "Install missing dependencies" msgstr "Neobavezne zavisnosti:" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install: Unsupported file type or broken archive" +msgstr "" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -630,7 +633,7 @@ msgid "Offset" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +msgid "Persistence" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -740,14 +743,6 @@ msgstr "" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "" @@ -1115,10 +1110,6 @@ msgstr "" msgid "Texturing:" msgstr "" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "" @@ -1151,7 +1142,7 @@ msgstr "" msgid "Waving Plants" msgstr "" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "" @@ -1180,7 +1171,7 @@ msgid "Connection error (timed out?)" msgstr "" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +msgid "Could not find or load game: " msgstr "" #: src/client/clientlauncher.cpp @@ -1250,6 +1241,16 @@ msgstr "" msgid "- Server Name: " msgstr "" +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Doslo je do greske:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "" @@ -1258,6 +1259,22 @@ msgstr "" msgid "Automatic forward enabled" msgstr "" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "" @@ -1266,6 +1283,10 @@ msgstr "" msgid "Camera update enabled" msgstr "" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "" @@ -1278,6 +1299,10 @@ msgstr "" msgid "Cinematic mode enabled" msgstr "" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "" @@ -1286,6 +1311,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "" @@ -1309,6 +1338,11 @@ msgid "" "- %s: chat\n" msgstr "" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "" @@ -1503,6 +1537,21 @@ msgstr "" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "" @@ -1835,6 +1884,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Neuspelo preuzimanje $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "" @@ -1843,7 +1901,7 @@ msgstr "" msgid "Register and Join" msgstr "" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2030,7 +2088,8 @@ msgid "Muted" msgstr "" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, c-format +msgid "Sound Volume: %d%%" msgstr "" #. ~ Imperative, as in "Enter/type in text". @@ -2237,6 +2296,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2503,6 +2566,10 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +msgid "Chat commands" +msgstr "" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "" @@ -2536,7 +2603,7 @@ msgid "Chat toggle key" msgstr "" #: src/settings_translation_file.cpp -msgid "Chatcommands" +msgid "Chat weblinks" msgstr "" #: src/settings_translation_file.cpp @@ -2555,6 +2622,12 @@ msgstr "" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "" @@ -2630,6 +2703,22 @@ msgstr "" msgid "Command key" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "" @@ -2721,7 +2810,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2798,8 +2887,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -2917,6 +3006,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -2963,7 +3056,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -2991,13 +3091,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3390,7 +3483,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3822,7 +3915,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -3906,7 +3999,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4735,7 +4828,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5028,7 +5121,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5160,7 +5253,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5184,6 +5277,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5324,9 +5421,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5619,26 +5716,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5729,7 +5818,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5834,6 +5923,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -5944,7 +6041,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -5962,7 +6059,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6031,7 +6128,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6194,7 +6291,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6377,6 +6474,10 @@ msgstr "" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6398,7 +6499,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6413,7 +6514,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6539,24 +6640,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6572,5 +6655,9 @@ msgstr "" #~ msgid "View" #~ msgstr "Pogled" +#, fuzzy +#~ msgid "You died." +#~ msgstr "Umro/la si." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/sv/minetest.po b/po/sv/minetest.po index 02c14cf08..f5a6f9523 100644 --- a/po/sv/minetest.po +++ b/po/sv/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Swedish (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-11-27 18:30+0000\n" "Last-Translator: ROllerozxa \n" "Language-Team: Swedish ]" msgid "OK" msgstr "OK" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "" +msgstr "Kommando inte tillgängligt: " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Ett fel uppstod i ett Lua-skript:" @@ -295,6 +296,11 @@ msgstr "Installera $1" msgid "Install missing dependencies" msgstr "Installera saknade beroenden" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "Installation: ej stöd för filtyp \"$1\" eller trasigt arkiv" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -624,7 +630,8 @@ msgid "Offset" msgstr "Förskjutning" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Persistens" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -734,14 +741,6 @@ msgstr "Moddinstallation: Lyckades ej hitta riktiga moddnamnet för: $1" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "Moddinstallation: lyckas ej hitta lämpligt mappnamn för moddpaket $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Installation: ej stöd för filtyp \"$1\" eller trasigt arkiv" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Installera: fil: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Lyckades ej hitta lämplig modd eller moddpaket" @@ -1108,10 +1107,6 @@ msgstr "Utjämnad Belysning" msgid "Texturing:" msgstr "Texturering:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "För att aktivera shaders behöver OpenGL-drivern användas." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Tonmappning" @@ -1144,7 +1139,7 @@ msgstr "Vajande Vätskor" msgid "Waving Plants" msgstr "Vajande Växter" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Anslutningens tidsgräns nådd." @@ -1173,7 +1168,8 @@ msgid "Connection error (timed out?)" msgstr "Anslutningsfel (tidsgräns nådd?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Kunde inte hitta eller ladda spel \"" #: src/client/clientlauncher.cpp @@ -1245,6 +1241,16 @@ msgstr "- PvP: " msgid "- Server Name: " msgstr "- Servernamn: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Ett fel uppstod:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Automatiskt framåt inaktiverad" @@ -1253,6 +1259,23 @@ msgstr "Automatiskt framåt inaktiverad" msgid "Automatic forward enabled" msgstr "Automatiskt framåt aktiverat" +#: src/client/game.cpp +#, fuzzy +msgid "Block bounds hidden" +msgstr "Blockgränser" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Kamerauppdatering inaktiverad" @@ -1261,6 +1284,10 @@ msgstr "Kamerauppdatering inaktiverad" msgid "Camera update enabled" msgstr "Kamerauppdatering aktiverat" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Ändra Lösenord" @@ -1273,6 +1300,11 @@ msgstr "Filmiskt länge inaktiverad" msgid "Cinematic mode enabled" msgstr "Filmiskt länge aktiverat" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Klientmoddande" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Klientsidiga skriptar är inaktiverade" @@ -1281,6 +1313,10 @@ msgstr "Klientsidiga skriptar är inaktiverade" msgid "Connecting to server..." msgstr "Ansluter till server..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Fortsätt" @@ -1318,6 +1354,11 @@ msgstr "" "- Mushjul: välj föremål\n" "- %s: chatt\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Skapar klient..." @@ -1525,6 +1566,21 @@ msgstr "Ljudvolym" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Visningsområde ändrad till %d" @@ -1857,6 +1913,15 @@ msgstr "Minimapp i ytläge, Zoom x%d" msgid "Minimap in texture mode" msgstr "Minimapp i texturläge" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Misslyckades ladda ner $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Lösenorden matchar inte!" @@ -1865,7 +1930,7 @@ msgstr "Lösenorden matchar inte!" msgid "Register and Join" msgstr "Registrera och Anslut" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -1876,8 +1941,8 @@ msgid "" msgstr "" "Du håller på att ansluta till den här servern med namnet \"%s\" för den " "första gången.\n" -"Om du fortsätter kommer ett nytt konto med dina uppgifter skapas på servern." -"\n" +"Om du fortsätter kommer ett nytt konto med dina uppgifter skapas på " +"servern.\n" "Var snäll och fyll i ditt lösenord och tryck på 'Registrera och Anslut' för " "att bekräfta kontoregistrering, eller tryck \"Avbryt\" för att avbryta." @@ -2060,7 +2125,8 @@ msgid "Muted" msgstr "Tyst" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Ljudvolym: " #. ~ Imperative, as in "Enter/type in text". @@ -2295,6 +2361,10 @@ msgstr "" "Justera dpi-konfigurationen för din skärm (endast icke X11/Android) t.ex. " "för 4k-skärmar." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2573,6 +2643,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Chattkommando tidströskel" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Chattkommandon" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "Chattens typsnittsstorlek" @@ -2606,8 +2681,9 @@ msgid "Chat toggle key" msgstr "Chattangent Av/På" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Chattkommandon" +#, fuzzy +msgid "Chat weblinks" +msgstr "Chatt visas" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2625,6 +2701,12 @@ msgstr "Tangent för filmiskt länge" msgid "Clean transparent textures" msgstr "Rena transparenta texturer" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Klient" @@ -2706,6 +2788,22 @@ msgstr "" msgid "Command key" msgstr "Kommandotangent" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Sammankoppla glas" @@ -2799,9 +2897,10 @@ msgid "Crosshair alpha" msgstr "Hårkorsalpha" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" "Hårkorsalpha (ogenomskinlighet, mellan 0 och 255).\n" "Kontrollerar även objektets hårkorsfärg" @@ -2882,8 +2981,8 @@ msgstr "Standardstapelstorlekar" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3010,6 +3109,10 @@ msgstr "Inaktivera antifusk" msgid "Disallow empty passwords" msgstr "Tillåt inte tomma lösenord" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "Domännamn för server, att visas i serverlistan." @@ -3056,7 +3159,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3084,13 +3194,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3483,7 +3586,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3915,7 +4018,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -3999,7 +4102,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4828,7 +4931,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5125,7 +5228,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5257,7 +5360,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5281,6 +5384,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5424,9 +5531,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5740,26 +5847,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5851,7 +5950,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5958,6 +6057,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6069,7 +6176,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6087,7 +6194,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6156,7 +6263,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6320,7 +6427,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6507,6 +6614,10 @@ msgstr "Böljande Vatten" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6528,7 +6639,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6543,7 +6654,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6672,24 +6783,6 @@ msgstr "Y-nivå av lägre terräng och sjöbottnar." msgid "Y-level of seabed." msgstr "Y-nivå av sjöbotten." -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "cURL filhemladdning tidsgräns" @@ -6787,6 +6880,9 @@ msgstr "cURL parallellgräns" #~ msgid "Downloading and installing $1, please wait..." #~ msgstr "Laddar ner och installerar $1, vänligen vänta..." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Installera: fil: \"$1\"" + #~ msgid "Main" #~ msgstr "Huvudsaklig" @@ -6830,6 +6926,9 @@ msgstr "cURL parallellgräns" #~ msgid "Start Singleplayer" #~ msgstr "Starta Enspelarläge" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "För att aktivera shaders behöver OpenGL-drivern användas." + #~ msgid "Toggle Cinematic" #~ msgstr "Slå av/på Filmisk Kamera" @@ -6839,5 +6938,8 @@ msgstr "cURL parallellgräns" #~ msgid "Yes" #~ msgstr "Ja" +#~ msgid "You died." +#~ msgstr "Du dog." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/sw/minetest.po b/po/sw/minetest.po index e5ef46096..b8277d619 100644 --- a/po/sw/minetest.po +++ b/po/sw/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Swahili (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: Swahili " +msgstr "" + #: builtin/fstk/ui.lua #, fuzzy msgid "An error occurred in a Lua script:" @@ -314,6 +313,13 @@ msgstr "Sakinisha" msgid "Install missing dependencies" msgstr "Inaanzilisha fundo" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "" +"\n" +"Sakinisha Moduli: filetype visivyotegemezwa \"$1\" au nyaraka kuvunjwa" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -665,7 +671,7 @@ msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua #, fuzzy -msgid "Persistance" +msgid "Persistence" msgstr "Umbali wa uhamisho wa mchezaji" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -785,18 +791,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" "Sakinisha Moduli: haiwezi kupata foldername ya kufaa kwa ajili ya modpack $1" -#: builtin/mainmenu/pkgmgr.lua -#, fuzzy -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" -"\n" -"Sakinisha Moduli: filetype visivyotegemezwa \"$1\" au nyaraka kuvunjwa" - -#: builtin/mainmenu/pkgmgr.lua -#, fuzzy -msgid "Install: file: \"$1\"" -msgstr "Sakinisha Moduli: faili: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua #, fuzzy msgid "Unable to find a valid mod or modpack" @@ -1192,10 +1186,6 @@ msgstr "Taa laini" msgid "Texturing:" msgstr "Texturing:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Ili kuwezesha shaders OpenGL ya kiendeshaji inahitaji kutumiwa." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Ramani ya toni" @@ -1230,7 +1220,7 @@ msgstr "Waving fundo" msgid "Waving Plants" msgstr "Waving mimea" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Muunganisho limekatika." @@ -1259,7 +1249,8 @@ msgid "Connection error (timed out?)" msgstr "Kosa la muunganisho (wakati muafaka?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Haikuweza kupata wala kupakia mchezo\"" #: src/client/clientlauncher.cpp @@ -1338,6 +1329,16 @@ msgstr "" msgid "- Server Name: " msgstr "Jina la seva" +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Kosa limetokea:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp #, fuzzy msgid "Automatic forward disabled" @@ -1348,6 +1349,22 @@ msgstr "Ufunguo wa mbele" msgid "Automatic forward enabled" msgstr "Ufunguo wa mbele" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp #, fuzzy msgid "Camera update disabled" @@ -1358,6 +1375,10 @@ msgstr "Kibonye guro Usasishaji wa kamera" msgid "Camera update enabled" msgstr "Kibonye guro Usasishaji wa kamera" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Badilisha nywila" @@ -1372,6 +1393,11 @@ msgstr "Hali ya cinematic ufunguo" msgid "Cinematic mode enabled" msgstr "Hali ya cinematic ufunguo" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Mteja" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "" @@ -1380,6 +1406,10 @@ msgstr "" msgid "Connecting to server..." msgstr "Inaunganisha seva..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Kuendelea" @@ -1414,6 +1444,11 @@ msgstr "" "- kipanya gurudumu: Teua kipengee\n" "- T: mazungumzo\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Inaunda mteja..." @@ -1631,6 +1666,21 @@ msgid "Sound unmuted" msgstr "Kiwango cha sauti" #: src/client/game.cpp +#, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp #, fuzzy, c-format msgid "Viewing range changed to %d" msgstr "Kuonyesha masafa" @@ -1976,6 +2026,15 @@ msgstr "" msgid "Minimap in texture mode" msgstr "Unamu wa kima cha chini cha ukubwa wa Vichujio" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Imeshindwa kusakinisha $1 hadi $2" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "MaNenotambulishi hayaoani!" @@ -1984,7 +2043,7 @@ msgstr "MaNenotambulishi hayaoani!" msgid "Register and Join" msgstr "" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2185,7 +2244,8 @@ msgid "Muted" msgstr "Ufunguo wa matumizi" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Kiwango sauti:" #. ~ Imperative, as in "Enter/type in text". @@ -2420,6 +2480,10 @@ msgstr "" "Rekebisha usakinishaji wa dpi kwenye kiwamba chako (yasiyo X11/Android tu) " "mfano kwa 4 k skrini." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2710,6 +2774,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Kilele cha mlima gorofa Mwandishi ramani" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Amri majadiliano" + #: src/settings_translation_file.cpp #, fuzzy msgid "Chat font size" @@ -2747,8 +2816,8 @@ msgid "Chat toggle key" msgstr "Kibonye guro wa mazungumzo" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Amri majadiliano" +msgid "Chat weblinks" +msgstr "" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2766,6 +2835,12 @@ msgstr "Hali ya cinematic ufunguo" msgid "Clean transparent textures" msgstr "Unamu angavu safi" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Mteja" @@ -2849,6 +2924,22 @@ msgstr "" msgid "Command key" msgstr "Ufunguo wa amri" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Kuunganisha kioo" @@ -2948,7 +3039,7 @@ msgstr "Crosshair Alfa" #, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "Crosshair Alfa (opaqueness kati ya 0 na 255)." #: src/settings_translation_file.cpp @@ -3031,8 +3122,8 @@ msgstr "Chaguo-msingi mchezo" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3156,6 +3247,10 @@ msgstr "Lemaza anticheat" msgid "Disallow empty passwords" msgstr "Usiruhusu nywila tupu" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "Kikoa jina la seva, kuonyeshwa katika serverlist ya." @@ -3204,7 +3299,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3234,13 +3336,6 @@ msgstr "Kuwezesha usalama Moduli" msgid "Enable players getting damage and dying." msgstr "Wezesha wachezaji kupata uharibifu na kufa." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Wezesha ingizo la mtumiaji nasibu (kutumika tu kwa ajili ya kupima)." @@ -3684,7 +3779,7 @@ msgstr "Callbacks ya kimataifa" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Ramani ya kimataifa kizazi sifa.\n" "Katika Mwandishi ramani v6 bendera ya 'kienyeji' udhibiti mapambo yote " @@ -4178,7 +4273,8 @@ msgstr "" "Hii ni kawaida tu zinazohitajika kwa wachangiaji wa msingi/builtin" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "Chombo chatcommands kwenye usajili." #: src/settings_translation_file.cpp @@ -4268,7 +4364,7 @@ msgid "Joystick button repetition interval" msgstr "Kifimbocheza kitufe marudio nafasi" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -5427,7 +5523,7 @@ msgstr "Ramani hifadhi muda" #: src/settings_translation_file.cpp #, fuzzy -msgid "Map update time" +msgid "Map shadows update frames" msgstr "Pata sasishi kioevu" #: src/settings_translation_file.cpp @@ -5757,7 +5853,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5900,9 +5996,10 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" "Idadi ya vitalu ziada ambayo inaweza kupakiwa na /clearobjects mara moja.\n" @@ -5929,6 +6026,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -6082,9 +6183,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -6424,26 +6525,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -6557,7 +6650,7 @@ msgstr "" "Kuanza upya inahitajika baada ya kubadilisha hii." #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -6673,6 +6766,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6797,7 +6898,7 @@ msgstr "Njia ya unamu" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6815,7 +6916,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6890,9 +6991,10 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "Unyeti wa Jira kifimbocheza kwa kuzunguka Mwoneko ingame frustum." #: src/settings_translation_file.cpp @@ -7080,7 +7182,7 @@ msgstr "Tumia uchujaji bilinear wakati upimaji unamu." #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -7285,6 +7387,11 @@ msgstr "Waving maji urefu" msgid "Waving plants" msgstr "Waving mimea" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "Uteuzi kikasha rangi" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7314,7 +7421,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7339,7 +7446,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -7476,24 +7583,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "cURL muda wa upakuzi wa faili" @@ -7654,6 +7743,10 @@ msgstr "cURL kikomo sambamba" #~ msgid "IPv6 support." #~ msgstr "IPv6 msaada." +#, fuzzy +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Sakinisha Moduli: faili: \"$1\"" + #, fuzzy #~ msgid "Lava depth" #~ msgstr "Kina ya pango kubwa" @@ -7759,6 +7852,9 @@ msgstr "cURL kikomo sambamba" #~ msgid "This font will be used for certain languages." #~ msgstr "Fonti hii itatumika kwa lugha fulani." +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Ili kuwezesha shaders OpenGL ya kiendeshaji inahitaji kutumiwa." + #~ msgid "Toggle Cinematic" #~ msgstr "Togoa Cinematic" @@ -7775,5 +7871,9 @@ msgstr "cURL kikomo sambamba" #~ msgid "Yes" #~ msgstr "Ndio" +#, fuzzy +#~ msgid "You died." +#~ msgstr "Umekufa." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/th/minetest.po b/po/th/minetest.po index 54e3dfa35..f33078298 100644 --- a/po/th/minetest.po +++ b/po/th/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Thai (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2020-07-08 08:41+0000\n" "Last-Translator: TZTarzan \n" "Language-Team: Thai " +msgstr "" + #: builtin/fstk/ui.lua #, fuzzy msgid "An error occurred in a Lua script:" @@ -309,6 +308,11 @@ msgstr "ติดตั้ง" msgid "Install missing dependencies" msgstr "ไฟล์อ้างอิงที่เลือกใช้ได้:" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "ติดตั้ง: ชนิดแฟ้มที่ไม่สนับสนุน \"$1\" หรือเกิดการเสียหาย" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -643,7 +647,8 @@ msgid "Offset" msgstr "ค่าชดเชย" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "ความมีอยู่" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -753,14 +758,6 @@ msgstr "ติดตั้ง Mod: ไม่สามารถค้นหาช msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "ติดตั้ง Mod: ไม่สามารถค้นหาชื่อของโฟลเดอร์ที่เหมาะสมสำหรับ modpack $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "ติดตั้ง: ชนิดแฟ้มที่ไม่สนับสนุน \"$1\" หรือเกิดการเสียหาย" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "ติดตั้ง: ไฟล์: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "ค้าหาไม่พบ mod หรือ modpack" @@ -1137,10 +1134,6 @@ msgstr "โคมไฟเรียบ" msgid "Texturing:" msgstr "พื้นผิว:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "การเปิดใช้งานต้องมีโปรแกรมควบคุม OpenGL ของ shaders ใช้." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "การแมปโทน" @@ -1175,7 +1168,7 @@ msgstr "โบกโหนด" msgid "Waving Plants" msgstr "โบกไม้" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "การเชื่อมต่อหมดเวลา" @@ -1204,7 +1197,8 @@ msgid "Connection error (timed out?)" msgstr "ข้อผิดพลาดการเชื่อมต่อ (หมดเวลา?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "ไม่สามารถค้นหา หรือโหลดเกม" #: src/client/clientlauncher.cpp @@ -1278,6 +1272,16 @@ msgstr "- PvP: " msgid "- Server Name: " msgstr "-ชื่อเซิร์ฟเวอร์: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "เกิดข้อผิดพลาดขึ้น:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "ปิดใช้งานการส่งต่ออัตโนมัติ" @@ -1286,6 +1290,22 @@ msgstr "ปิดใช้งานการส่งต่ออัตโนม msgid "Automatic forward enabled" msgstr "เปิดใช้งานการส่งต่ออัตโนมัติ" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "ปิดใช้งานการอัปเดตกล้องแล้ว" @@ -1294,6 +1314,10 @@ msgstr "ปิดใช้งานการอัปเดตกล้องแ msgid "Camera update enabled" msgstr "เปิดใช้งานการอัปเดตกล้องแล้ว" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "เปลี่ยนรหัสผ่าน" @@ -1306,6 +1330,11 @@ msgstr "ปิดใช้งานโหมดภาพยนตร์" msgid "Cinematic mode enabled" msgstr "เปิดใช้งานโหมดภาพยนตร์" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "ลูกค้า modding" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "การเขียนสคริปต์ฝั่งไคลเอ็นต์ถูกปิดใช้งาน" @@ -1314,6 +1343,10 @@ msgstr "การเขียนสคริปต์ฝั่งไคลเอ msgid "Connecting to server..." msgstr "เชื่อมต่อกับเซิร์ฟเวอร์" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "ต่อ" @@ -1351,6 +1384,11 @@ msgstr "" "- ล้อเมาส์: เลือกรายการ\n" "-%s9: แชท\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "สร้างไคลเอ็นต์..." @@ -1559,6 +1597,21 @@ msgstr "เสียงไม่ปิดเสียง" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "ช่วงการดูเปลี่ยนเป็น %d1" @@ -1916,6 +1969,15 @@ msgstr "แผนที่ย่อในโหมด surface, ซูม x1" msgid "Minimap in texture mode" msgstr "ขนาดพื้นผิวขั้นต่ำ" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "ไม่สามารถดาวน์โหลด $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "รหัสผ่านไม่ตรงกับ!" @@ -1924,7 +1986,7 @@ msgstr "รหัสผ่านไม่ตรงกับ!" msgid "Register and Join" msgstr "ลงทะเบียน และเข้าร่วม" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, fuzzy, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2118,7 +2180,8 @@ msgid "Muted" msgstr "เสียง" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "ระดับเสียง " #. ~ Imperative, as in "Enter/type in text". @@ -2348,6 +2411,10 @@ msgstr "" "ปรับการกำหนดค่า dpi ให้กับหน้าจอของคุณ (ไม่ใช่ X11 / Android เท่านั้น) เช่น สำหรับหน้าจอ " "4k." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2627,6 +2694,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "คำสั่ง" + #: src/settings_translation_file.cpp #, fuzzy msgid "Chat font size" @@ -2663,8 +2735,9 @@ msgid "Chat toggle key" msgstr "ปุ่มสลับการแชท" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "" +#, fuzzy +msgid "Chat weblinks" +msgstr "สนทนาแสดง" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2682,6 +2755,12 @@ msgstr "ปุ่มโหมดโรงภาพยนตร์" msgid "Clean transparent textures" msgstr "ทำความสะอาดพื้นผิวโปร่งใส" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "ไคลเอนต์" @@ -2758,6 +2837,22 @@ msgstr "" msgid "Command key" msgstr "คีย์คำสั่ง" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "เชื่อมกระจก" @@ -2852,7 +2947,7 @@ msgstr "Crosshair อัลฟา" #, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "Crosshair อัลฟา (ความทึบแสงระหว่าง 0 ถึง 255)." #: src/settings_translation_file.cpp @@ -2932,8 +3027,8 @@ msgstr "เกมเริ่มต้น" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3054,6 +3149,10 @@ msgstr "ปิดใช้งาน anticheat" msgid "Disallow empty passwords" msgstr "ไม่อนุญาตรหัสผ่านที่ว่างเปล่า" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "ชื่อโดเมนของเซิร์ฟเวอร์ที่จะแสดงในรายการเซิร์ฟเวอร์." @@ -3102,7 +3201,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3131,13 +3237,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "ช่วยให้ผู้เล่นได้รับความเสียหายและกำลังจะตาย." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "เปิดใช้งานการป้อนข้อมูลผู้ใช้แบบสุ่ม (ใช้สำหรับการทดสอบเท่านั้น)." @@ -3560,7 +3659,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -4007,7 +4106,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -4094,7 +4193,7 @@ msgstr "ช่วงเวลาการทำซ้ำปุ่มจอยส #: src/settings_translation_file.cpp #, fuzzy -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "ประเภทของจอยสติ๊ก" #: src/settings_translation_file.cpp @@ -5154,7 +5253,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5461,7 +5560,8 @@ msgid "Mod channels" msgstr "ช่องทาง Mod" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +#, fuzzy +msgid "Modifies the size of the HUD elements." msgstr "ปรับเปลี่ยนขนาดขององค์ประกอบ Hudbar." #: src/settings_translation_file.cpp @@ -5599,7 +5699,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5623,6 +5723,10 @@ msgid "" "open." msgstr "เปิดเมนูหยุดชั่วคราวเมื่อโฟกัสของหน้าต่างหายไป ไม่หยุดถ้า formspec คือ เปิด." +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5772,9 +5876,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -6080,26 +6184,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -6208,7 +6304,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -6323,6 +6419,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp #, fuzzy msgid "" @@ -6437,7 +6541,7 @@ msgstr "เส้นทางพื้นผิว" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6462,7 +6566,7 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "ตัวระบุของจอยสติ๊กที่จะใช้" #: src/settings_translation_file.cpp @@ -6537,9 +6641,10 @@ msgstr "" "รองรับ shader ในขณะนี้" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" "ความไวของแกนจอยสติ๊กสำหรับการเลื่อน\n" "มุมมอง ingame frustum รอบ ๆ." @@ -6723,8 +6828,9 @@ msgid "Use bilinear filtering when scaling textures." msgstr "ใช้การกรอง bilinear เมื่อปรับขนาดพื้นผิว" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6920,6 +7026,11 @@ msgstr "โบกมือกันยาว" msgid "Waving plants" msgstr "โบกต้นไม้" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "สีของกล่องที่เลือก" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6949,7 +7060,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6975,7 +7086,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -7116,24 +7227,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -7275,6 +7368,9 @@ msgstr "" #~ msgid "Generate normalmaps" #~ msgstr "สร้างแผนที่ปกติ" +#~ msgid "Install: file: \"$1\"" +#~ msgstr "ติดตั้ง: ไฟล์: \"$1\"" + #~ msgid "Lightness sharpness" #~ msgstr "ความคมชัดของแสง" @@ -7383,6 +7479,9 @@ msgstr "" #~ msgid "This font will be used for certain languages." #~ msgstr "แบบอักษรนี้จะใช้สำหรับบางภาษา" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "การเปิดใช้งานต้องมีโปรแกรมควบคุม OpenGL ของ shaders ใช้." + #~ msgid "Toggle Cinematic" #~ msgstr "สลับโรงภาพยนตร์" @@ -7395,5 +7494,9 @@ msgstr "" #~ msgid "Yes" #~ msgstr "ใช่" +#, fuzzy +#~ msgid "You died." +#~ msgstr "คุณตายแล้ว" + #~ msgid "needs_fallback_font" #~ msgstr "yes" diff --git a/po/tr/minetest.po b/po/tr/minetest.po index cb74c20a9..0cf7c8f4f 100644 --- a/po/tr/minetest.po +++ b/po/tr/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Turkish (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-08-04 06:32+0000\n" "Last-Translator: Oğuz Ersen \n" "Language-Team: Turkish ' to get more information, or '.help all' to list everything." msgstr "" -"Daha fazla bilgi almak için '.help ' veya her şeyi listelemek için " -"'.help all' kullanın." +"Daha fazla bilgi almak için '.help ' veya her şeyi listelemek için '." +"help all' kullanın." #: builtin/common/chatcommands.lua msgid "[all | ]" @@ -93,6 +89,11 @@ msgstr "[all | ]" msgid "OK" msgstr "Tamam" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "" +msgstr "Komut kullanılamıyor: " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Lua betiğinde bir hata oluştu:" @@ -295,6 +296,11 @@ msgstr "$1 kur" msgid "Install missing dependencies" msgstr "Eksik bağımlılıkları kur" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "Kur: Desteklenmeyen dosya türü \"$1\" veya bozuk arşiv" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -624,7 +630,8 @@ msgid "Offset" msgstr "Kaydırma" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Süreklilik" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -734,14 +741,6 @@ msgstr "Mod Kur: $1 için gerçek mod adı bulunamadı" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "Mod Kur:$1 mod paketi için uygun bir klasör adı bulunamadı" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Kur: Desteklenmeyen dosya türü \"$1\" veya bozuk arşiv" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Kur: dosya: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Geçerli bir mod veya mod paketi bulunamadı" @@ -1109,10 +1108,6 @@ msgstr "Yumuşak Aydınlatma" msgid "Texturing:" msgstr "Doku:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "OpenGL sürücüleri seçilmeden gölgelemeler etkinleştirilemez." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Ton Eşleme" @@ -1145,7 +1140,7 @@ msgstr "Dalgalanan Sıvılar" msgid "Waving Plants" msgstr "Dalgalanan Bitkiler" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Bağlantı zaman aşımına uğradı." @@ -1174,7 +1169,8 @@ msgid "Connection error (timed out?)" msgstr "Bağlantı hatası (zaman aşımı?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Oyun bulunamıyor veya yüklenemiyor \"" #: src/client/clientlauncher.cpp @@ -1246,6 +1242,16 @@ msgstr "- Savaş (PvP): " msgid "- Server Name: " msgstr "- Sunucu Adı: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Bir hata oluştu:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Kendiliğinden ileri devre dışı" @@ -1254,6 +1260,23 @@ msgstr "Kendiliğinden ileri devre dışı" msgid "Automatic forward enabled" msgstr "Kendiliğinden ileri etkin" +#: src/client/game.cpp +#, fuzzy +msgid "Block bounds hidden" +msgstr "Blok sınırları" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Kamera güncelleme devre dışı" @@ -1262,6 +1285,10 @@ msgstr "Kamera güncelleme devre dışı" msgid "Camera update enabled" msgstr "Kamera güncelleme etkin" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Parola değiştir" @@ -1274,6 +1301,11 @@ msgstr "Sinematik kip devre dışı" msgid "Cinematic mode enabled" msgstr "Sinematik kip etkin" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "İstemci modlama" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "İstemci tarafı betik devre dışı" @@ -1282,6 +1314,10 @@ msgstr "İstemci tarafı betik devre dışı" msgid "Connecting to server..." msgstr "Sunucuya bağlanılıyor..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Devam et" @@ -1319,6 +1355,11 @@ msgstr "" "- Fare tekerleği: öge seç\n" "- %s: sohbet\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "İstemci yaratılıyor..." @@ -1525,6 +1566,21 @@ msgstr "Ses açık" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Görüntüleme uzaklığı değişti: %d" @@ -1857,6 +1913,15 @@ msgstr "Yüzey kipinde mini harita, Yakınlaştırma x%d" msgid "Minimap in texture mode" msgstr "Doku kipinde mini harita" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "$1 indirilemedi" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Parolalar eşleşmiyor!" @@ -1865,7 +1930,7 @@ msgstr "Parolalar eşleşmiyor!" msgid "Register and Join" msgstr "Kaydol ve Katıl" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2057,7 +2122,8 @@ msgid "Muted" msgstr "Ses Kısık" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Ses Seviyesi: " #. ~ Imperative, as in "Enter/type in text". @@ -2309,6 +2375,10 @@ msgstr "" "Ekranınızın (yalnızca Android/X11 olmayan) dpi yapılandırmasını ayarlayın " "ör: 4k ekranlar için." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2605,6 +2675,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "Sohbet komutu zaman iletisi eşiği" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Sohbet komutları" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "Sohbet yazı tipi boyutu" @@ -2638,8 +2713,9 @@ msgid "Chat toggle key" msgstr "Sohbet açma/kapama tuşu" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Sohbet komutları" +#, fuzzy +msgid "Chat weblinks" +msgstr "Sohbet gösteriliyor" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2657,6 +2733,12 @@ msgstr "Sinematik kip tuşu" msgid "Clean transparent textures" msgstr "Saydam dokuları temizle" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "İstemci" @@ -2744,6 +2826,35 @@ msgstr "" msgid "Command key" msgstr "Komut tuşu" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Harita kütlerini diske kaydederken kullanılacak ZLib sıkıştırma düzeyi.\n" +"-1 - Zlib'in varsayılan sıkıştırma düzeyi\n" +"0 - hiçbir sıkıştırma yok, en hızlı\n" +"9 - en iyi sıkıştırma, en yavaş\n" +"(seviye 1-3, Zlib'in \"hızlı\" , 4-9 sıradan yöntemi kullanır)" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" +"Harita kütlerini istemciye(client) gönderirken kullanılacak ZLib sıkıştırma " +"düzeyi.\n" +"-1 - Zlib'in varsayılan sıkıştırma düzeyi\n" +"0 - hiçbir sıkıştırma yok, en hızlı\n" +"9 - en iyi sıkıştırma, en yavaş\n" +"(seviye 1-3, Zlib'in \"hızlı\" , 4-9 sıradan yöntemi kullanır)" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "Bitişik cam" @@ -2843,9 +2954,10 @@ msgid "Crosshair alpha" msgstr "Artı saydamlığı" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" "Artı saydamlığı (solukluk, 0 ile 255 arasında).\n" "Ayrıca nesne artı rengini de denetler" @@ -2927,9 +3039,10 @@ msgid "Default stack size" msgstr "Öntanımlı yığın boyutu" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" "Gölge filtreleme kalitesini tanımla.\n" @@ -3063,6 +3176,10 @@ msgstr "Hile önleme devre dışı" msgid "Disallow empty passwords" msgstr "Boş parolalara izin verme" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "Sunucu listesinde görüntülenecek sunucu alan adı." @@ -3112,8 +3229,20 @@ msgstr "" "Bu destek deneyseldir ve API değişebilir." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" +"Poisson disk filtrelemeyi etkinleştir.\n" +"Doğru ise \"yumuşak gölgeler\" yapmak için poisson diski kullanır. Değilse " +"PCF filtreleme kullanır." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" "Renkli gölgeleri etkinleştir. \n" @@ -3144,16 +3273,6 @@ msgstr "Mod güvenliğini etkinleştir" msgid "Enable players getting damage and dying." msgstr "Oyuncuların hasar almasını ve ölmesini etkinleştir." -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" -"Poisson disk filtrelemeyi etkinleştir.\n" -"Doğru ise \"yumuşak gölgeler\" yapmak için poisson diski kullanır. Değilse " -"PCF filtreleme kullanır." - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "Rastgele kullanıcı girişini etkinleştir (yalnızca test için)." @@ -3603,10 +3722,11 @@ msgid "Global callbacks" msgstr "Genel geri çağrılar" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "Genel harita üretim özellikleri.\n" "Mapgen v6'da 'decorations' bayrağı ağaçlar ve cangıl çimi hariç tüm " @@ -4106,7 +4226,8 @@ msgstr "" "Genellikle bu yalnızca çekirdek/yerleşik katkıda bulunanlar için gereklidir" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "Kayıt sırasında sohbet komutlarını belgele." #: src/settings_translation_file.cpp @@ -4198,7 +4319,8 @@ msgid "Joystick button repetition interval" msgstr "Joystick düğmesi tekrarlama aralığı" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +#, fuzzy +msgid "Joystick dead zone" msgstr "Joystick ölü bölgesi" #: src/settings_translation_file.cpp @@ -5309,7 +5431,8 @@ msgid "Map save interval" msgstr "Harita kaydetme aralığı" #: src/settings_translation_file.cpp -msgid "Map update time" +#, fuzzy +msgid "Map shadows update frames" msgstr "Harita güncelleme zamanı" #: src/settings_translation_file.cpp @@ -5628,7 +5751,8 @@ msgid "Mod channels" msgstr "Mod kanalları" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +#, fuzzy +msgid "Modifies the size of the HUD elements." msgstr "Hudbar öğelerinin boyutunu değiştirir." #: src/settings_translation_file.cpp @@ -5781,9 +5905,10 @@ msgstr "" "Birçok kullanıcı için en iyi ayar '1' olabilir." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" "/clearobjects tarafında tek seferde yüklenebilecek ek blokların sayısı.\n" @@ -5814,6 +5939,10 @@ msgstr "" "Pencere odağı kaybolduğunda duraklat menüsünü aç. Bir formspec açıksa\n" "duraklamaz." +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5979,11 +6108,12 @@ msgid "Prometheus listener address" msgstr "Prometheus dinleyici adresi" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" "Prometheus dinleyici adresi.\n" "Minetest ENABLE_PROMETHEUS seçeneği etkin olarak derlenmişse,\n" @@ -6331,22 +6461,11 @@ msgstr "" "anlamına gelir." #: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" -"Gölge güncelleme zamanını ayarla.\n" -"Daha düşük değer, gölgeler ve harita güncellemelerinin daha hızlı olması " -"anlamına gelir, ancak daha fazla kaynak tüketir.\n" -"En düşük değer 0,001 saniye, en yüksek değer 0,2 saniyedir" - -#: src/settings_translation_file.cpp +#, fuzzy msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" "Yumuşak gölge yarıçapı boyutunu ayarla.\n" "Daha düşük değerler daha keskin, daha büyük değerler daha yumuşak gölgeler " @@ -6354,10 +6473,11 @@ msgstr "" "En düşük değer 1.0 ve en yüksek değer 10.0" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" "Güneş/Ay yörüngesinin eğimini derece olarak ayarla\n" "0 değeri, eğim / dikey yörünge olmadığı anlamına gelir.\n" @@ -6469,7 +6589,8 @@ msgstr "" "Bunu değiştirdikten sonra yeniden başlatma gerekir." #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +#, fuzzy +msgid "Show name tag backgrounds by default" msgstr "Ad etiketi arka planlarını öntanımlı olarak göster" #: src/settings_translation_file.cpp @@ -6593,6 +6714,14 @@ msgstr "" "Modların veya oyunların belirli (veya tüm) ögeler için açıkça bir yığın " "ayarlayabileceğini unutmayın." +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6724,10 +6853,11 @@ msgid "Texture path" msgstr "Doku konumu" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" "Gölge eşlemenin işleneceği doku boyutu.\n" "Bu, 2'nin bir kuvveti olmalıdır.\n" @@ -6755,7 +6885,8 @@ msgid "The URL for the content repository" msgstr "İçerik deposu için URL" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +#, fuzzy +msgid "The dead zone of the joystick" msgstr "Joystick ölü bölgesi" #: src/settings_translation_file.cpp @@ -6847,9 +6978,10 @@ msgstr "" "desteklenmektedir" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" "Oyun-içi görünüm frustum'unu hareket ettirirken\n" "joystick eksenlerinin hassasiyeti." @@ -7050,8 +7182,9 @@ msgid "Use bilinear filtering when scaling textures." msgstr "Dokuları boyutlandırırken bilineer filtreleme kullan." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -7257,6 +7390,11 @@ msgstr "Dalgalanan sıvılar dalga-boyu" msgid "Waving plants" msgstr "Dalgalanan bitkiler" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "Seçim kutusunu rengi" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7280,12 +7418,13 @@ msgstr "" "sürücüleri için, eski boyutlandırma yöntemini kullan." #: src/settings_translation_file.cpp +#, fuzzy msgid "" "When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7313,8 +7452,9 @@ msgstr "" "Devre dışı kılınırsa, yerine bitmap ve XML vektör yazı tipleri kullanılır." #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" "Ad etiketi arka planlarının öntanımlı olarak gösterilip gösterilmeyileceği.\n" @@ -7376,7 +7516,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "Width component of the initial window size. Ignored in fullscreen mode." -msgstr "İlk pencere boyutunun genişlik bileşeni. Tam ekran kipinde yok sayılır." +msgstr "" +"İlk pencere boyutunun genişlik bileşeni. Tam ekran kipinde yok sayılır." #: src/settings_translation_file.cpp msgid "Width of the selection box lines around nodes." @@ -7476,35 +7617,6 @@ msgstr "Daha alt arazinin ve göl yatağının Y-seviyesi." msgid "Y-level of seabed." msgstr "Deniz yatağının Y-seviyesi." -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Harita kütlerini diske kaydederken kullanılacak ZLib sıkıştırma düzeyi.\n" -"-1 - Zlib'in varsayılan sıkıştırma düzeyi\n" -"0 - hiçbir sıkıştırma yok, en hızlı\n" -"9 - en iyi sıkıştırma, en yavaş\n" -"(seviye 1-3, Zlib'in \"hızlı\" , 4-9 sıradan yöntemi kullanır)" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" -"Harita kütlerini istemciye(client) gönderirken kullanılacak ZLib sıkıştırma " -"düzeyi.\n" -"-1 - Zlib'in varsayılan sıkıştırma düzeyi\n" -"0 - hiçbir sıkıştırma yok, en hızlı\n" -"9 - en iyi sıkıştırma, en yavaş\n" -"(seviye 1-3, Zlib'in \"hızlı\" , 4-9 sıradan yöntemi kullanır)" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "cURL dosya indirme zaman aşımı" @@ -7716,6 +7828,9 @@ msgstr "cURL paralel sınırı" #~ msgid "IPv6 support." #~ msgstr "IPv6 desteği." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Kur: dosya: \"$1\"" + #~ msgid "Lava depth" #~ msgstr "Lav derinliği" @@ -7821,6 +7936,17 @@ msgstr "cURL paralel sınırı" #~ msgid "Select Package File:" #~ msgstr "Paket Dosyası Seç:" +#~ msgid "" +#~ "Set the shadow update time.\n" +#~ "Lower value means shadows and map updates faster, but it consume more " +#~ "resources.\n" +#~ "Minimun value 0.001 seconds max value 0.2 seconds" +#~ msgstr "" +#~ "Gölge güncelleme zamanını ayarla.\n" +#~ "Daha düşük değer, gölgeler ve harita güncellemelerinin daha hızlı olması " +#~ "anlamına gelir, ancak daha fazla kaynak tüketir.\n" +#~ "En düşük değer 0,001 saniye, en yüksek değer 0,2 saniyedir" + #~ msgid "Shadow limit" #~ msgstr "Gölge sınırı" @@ -7848,6 +7974,9 @@ msgstr "cURL paralel sınırı" #~ msgid "This font will be used for certain languages." #~ msgstr "Belirli diller için bu yazı tipi kullanılacak." +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "OpenGL sürücüleri seçilmeden gölgelemeler etkinleştirilemez." + #~ msgid "Toggle Cinematic" #~ msgstr "Sinematik Aç/Kapa" @@ -7885,5 +8014,8 @@ msgstr "cURL paralel sınırı" #~ msgid "Yes" #~ msgstr "Evet" +#~ msgid "You died." +#~ msgstr "Öldün." + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/tt/minetest.po b/po/tt/minetest.po index 2064907ff..e1fc70272 100644 --- a/po/tt/minetest.po +++ b/po/tt/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-04-08 18:26+0000\n" "Last-Translator: Timur Seber \n" "Language-Team: Tatar " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "" @@ -295,6 +294,10 @@ msgstr "" msgid "Install missing dependencies" msgstr "" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install: Unsupported file type or broken archive" +msgstr "" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -620,7 +623,7 @@ msgid "Offset" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +msgid "Persistence" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -730,14 +733,6 @@ msgstr "" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "" @@ -1101,10 +1096,6 @@ msgstr "" msgid "Texturing:" msgstr "" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "" @@ -1137,7 +1128,7 @@ msgstr "" msgid "Waving Plants" msgstr "" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "" @@ -1166,7 +1157,7 @@ msgid "Connection error (timed out?)" msgstr "" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +msgid "Could not find or load game: " msgstr "" #: src/client/clientlauncher.cpp @@ -1236,6 +1227,15 @@ msgstr "" msgid "- Server Name: " msgstr "" +#: src/client/game.cpp +msgid "A serialization error occurred:" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "" @@ -1244,6 +1244,22 @@ msgstr "" msgid "Automatic forward enabled" msgstr "" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "" @@ -1252,6 +1268,10 @@ msgstr "" msgid "Camera update enabled" msgstr "" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "" @@ -1264,6 +1284,10 @@ msgstr "" msgid "Cinematic mode enabled" msgstr "" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "" @@ -1272,6 +1296,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "" @@ -1295,6 +1323,11 @@ msgid "" "- %s: chat\n" msgstr "" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "" @@ -1489,6 +1522,21 @@ msgstr "" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "" @@ -1821,6 +1869,14 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/gui/guiChatConsole.cpp +msgid "Failed to open webpage" +msgstr "" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "" @@ -1829,7 +1885,7 @@ msgstr "" msgid "Register and Join" msgstr "" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2016,7 +2072,8 @@ msgid "Muted" msgstr "" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, c-format +msgid "Sound Volume: %d%%" msgstr "" #. ~ Imperative, as in "Enter/type in text". @@ -2223,6 +2280,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2489,6 +2550,10 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +msgid "Chat commands" +msgstr "" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "" @@ -2522,7 +2587,7 @@ msgid "Chat toggle key" msgstr "" #: src/settings_translation_file.cpp -msgid "Chatcommands" +msgid "Chat weblinks" msgstr "" #: src/settings_translation_file.cpp @@ -2541,6 +2606,12 @@ msgstr "" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "" @@ -2616,6 +2687,22 @@ msgstr "" msgid "Command key" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "" @@ -2707,7 +2794,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2784,8 +2871,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -2903,6 +2990,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -2949,7 +3040,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -2977,13 +3075,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3376,7 +3467,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3808,7 +3899,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -3892,7 +3983,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4721,7 +4812,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5014,7 +5105,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5146,7 +5237,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5170,6 +5261,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5310,9 +5405,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5605,26 +5700,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5715,7 +5802,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5820,6 +5907,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -5930,7 +6025,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -5948,7 +6043,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6017,7 +6112,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6180,7 +6275,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6363,6 +6458,10 @@ msgstr "" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6384,7 +6483,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6399,7 +6498,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6525,24 +6624,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6554,3 +6635,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "cURL parallel limit" msgstr "" + +#, fuzzy +#~ msgid "You died." +#~ msgstr "Сез үлдегез" diff --git a/po/uk/minetest.po b/po/uk/minetest.po index f36fddc27..bb2bdd80f 100644 --- a/po/uk/minetest.po +++ b/po/uk/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Ukrainian (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-06-07 14:33+0000\n" "Last-Translator: Andrij Mizyk \n" "Language-Team: Ukrainian " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Трапилася помилка у скрипті Lua:" @@ -302,6 +301,11 @@ msgstr "Встановити $1" msgid "Install missing dependencies" msgstr "Встановити відсутні залежності" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "Встановлення: тип файлу \"$1\" не підтримується або архів пошкоджено" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -630,7 +634,8 @@ msgid "Offset" msgstr "Зсув" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "Постійність" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -741,14 +746,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" "Встановлення мода: неможливо знайти відповідну назву теки для пакмоду $1" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "Встановлення: тип файлу \"$1\" не підтримується або архів пошкоджено" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "Встановлення: файл: \"$1\"" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "Неможливо знайти правильний мод або пакмод" @@ -1122,10 +1119,6 @@ msgstr "Згладжене освітлення" msgid "Texturing:" msgstr "Текстурування:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Для того, щоб увімкнути шейдери, потрібно мати драйвер OpenGL." - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "Тоновий шейдер" @@ -1158,7 +1151,7 @@ msgstr "Хвилясті Рідини" msgid "Waving Plants" msgstr "Коливати квіти" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "Час очікування вийшов." @@ -1187,7 +1180,8 @@ msgid "Connection error (timed out?)" msgstr "Помилка з'єднання (час вийшов?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "Неможливо знайти або завантажити гру \"" #: src/client/clientlauncher.cpp @@ -1259,6 +1253,16 @@ msgstr "- PvP (бої): " msgid "- Server Name: " msgstr "- Назва сервера: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Трапилася помилка:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "Автоматичний рух вперед вимкнено" @@ -1267,6 +1271,22 @@ msgstr "Автоматичний рух вперед вимкнено" msgid "Automatic forward enabled" msgstr "Автоматичний рух вперед увімкнено" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "Оновлення камери вимкнено" @@ -1275,6 +1295,10 @@ msgstr "Оновлення камери вимкнено" msgid "Camera update enabled" msgstr "Оновлення камери увімкнено" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "Змінити пароль" @@ -1287,6 +1311,11 @@ msgstr "Кінорежим вимкнено" msgid "Cinematic mode enabled" msgstr "Кінорежим увімкнено" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "Клієнт-моди" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "Клієнтосторонні скрипти на клієнті вимкнено" @@ -1295,6 +1324,10 @@ msgstr "Клієнтосторонні скрипти на клієнті вим msgid "Connecting to server..." msgstr "Підключення до сервера..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "Продовжити" @@ -1332,6 +1365,11 @@ msgstr "" "- Mouse wheel: вибір предмета\n" "- %s: чат\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "Створення клієнта..." @@ -1539,6 +1577,21 @@ msgstr "Звук увімкнено" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "Видимість змінено до %d" @@ -1872,6 +1925,15 @@ msgstr "Мінімапа в режимі поверхні. Наближення msgid "Minimap in texture mode" msgstr "Мінімапа в режимі поверхня. Наближення х1" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "Не вдалося завантажити $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Паролі не збігаються!" @@ -1880,7 +1942,7 @@ msgstr "Паролі не збігаються!" msgid "Register and Join" msgstr "Зареєструватися і увійти" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2075,7 +2137,8 @@ msgid "Muted" msgstr "Звук вимкнено" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "Гучність звуку: " #. ~ Imperative, as in "Enter/type in text". @@ -2330,6 +2393,10 @@ msgstr "" "Налаштувати dpi на вашому екрані (тільки не X11/Android), напр. для 4k-" "екранів." +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2613,6 +2680,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "Команди чату" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "Розмір шрифту чату" @@ -2646,8 +2718,9 @@ msgid "Chat toggle key" msgstr "Чат" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "Команди чату" +#, fuzzy +msgid "Chat weblinks" +msgstr "Чат увімкнено" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2665,6 +2738,12 @@ msgstr "Кінорежим" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "Клієнт" @@ -2741,6 +2820,22 @@ msgstr "" msgid "Command key" msgstr "Команда" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "З'єднувати скло" @@ -2833,7 +2928,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2913,8 +3008,8 @@ msgstr "Стандартна гра" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3033,6 +3128,10 @@ msgstr "Вимкнути античіт" msgid "Disallow empty passwords" msgstr "Заборонити порожні паролі" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "Доменне ім'я сервера, яке буде показуватися у списку серверів." @@ -3079,7 +3178,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3107,13 +3213,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3508,7 +3607,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3940,7 +4039,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -4025,7 +4124,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4854,7 +4953,7 @@ msgid "Map save interval" msgstr "Інтервал збереження мапи" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5154,7 +5253,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5286,7 +5385,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5310,6 +5409,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5453,9 +5556,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5752,26 +5855,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5866,7 +5961,7 @@ msgstr "" "Потрібен перезапуск після цієї зміни." #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5972,6 +6067,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6082,7 +6185,7 @@ msgstr "Шлях до текстури" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6100,7 +6203,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6169,7 +6272,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6332,7 +6435,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6519,6 +6622,10 @@ msgstr "Коливати воду" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6540,7 +6647,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6555,7 +6662,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6681,24 +6788,6 @@ msgstr "Y-Рівень нижнього рельєфу та морського msgid "Y-level of seabed." msgstr "Y-Рівень морського дна." -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6766,6 +6855,9 @@ msgstr "" #~ msgid "IPv6 support." #~ msgstr "Підтримка IPv6." +#~ msgid "Install: file: \"$1\"" +#~ msgstr "Встановлення: файл: \"$1\"" + #~ msgid "Lava depth" #~ msgstr "Глибина лави" @@ -6826,6 +6918,9 @@ msgstr "" #~ msgid "Start Singleplayer" #~ msgstr "Почати одиночну гру" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Для того, щоб увімкнути шейдери, потрібно мати драйвер OpenGL." + #~ msgid "Toggle Cinematic" #~ msgstr "Кінематографічний режим" @@ -6835,5 +6930,9 @@ msgstr "" #~ msgid "Yes" #~ msgstr "Так" +#, fuzzy +#~ msgid "You died." +#~ msgstr "Ви загинули" + #~ msgid "needs_fallback_font" #~ msgstr "no" diff --git a/po/vi/minetest.po b/po/vi/minetest.po index 60be1b239..70ee9b5f1 100644 --- a/po/vi/minetest.po +++ b/po/vi/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Vietnamese (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2020-06-13 21:08+0000\n" "Last-Translator: darkcloudcat \n" "Language-Team: Vietnamese " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Đã xảy ra lỗi trong tập lệnh Lua:" @@ -299,6 +298,10 @@ msgstr "" msgid "Install missing dependencies" msgstr "Phụ thuộc tùy chọn:" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install: Unsupported file type or broken archive" +msgstr "" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -624,7 +627,7 @@ msgid "Offset" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +msgid "Persistence" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -734,14 +737,6 @@ msgstr "" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "" @@ -1107,10 +1102,6 @@ msgstr "" msgid "Texturing:" msgstr "" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "" @@ -1143,7 +1134,7 @@ msgstr "" msgid "Waving Plants" msgstr "" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "" @@ -1172,7 +1163,7 @@ msgid "Connection error (timed out?)" msgstr "" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +msgid "Could not find or load game: " msgstr "" #: src/client/clientlauncher.cpp @@ -1242,6 +1233,16 @@ msgstr "" msgid "- Server Name: " msgstr "" +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "Xảy ra lỗi:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "" @@ -1250,6 +1251,22 @@ msgstr "" msgid "Automatic forward enabled" msgstr "" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "" @@ -1258,6 +1275,10 @@ msgstr "" msgid "Camera update enabled" msgstr "" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "" @@ -1270,6 +1291,10 @@ msgstr "" msgid "Cinematic mode enabled" msgstr "" +#: src/client/game.cpp +msgid "Client disconnected" +msgstr "" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "" @@ -1278,6 +1303,10 @@ msgstr "" msgid "Connecting to server..." msgstr "" +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "" @@ -1301,6 +1330,11 @@ msgid "" "- %s: chat\n" msgstr "" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "" @@ -1495,6 +1529,21 @@ msgstr "" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "" @@ -1827,6 +1876,14 @@ msgstr "" msgid "Minimap in texture mode" msgstr "" +#: src/gui/guiChatConsole.cpp +msgid "Failed to open webpage" +msgstr "" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "" @@ -1835,7 +1892,7 @@ msgstr "" msgid "Register and Join" msgstr "" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2022,7 +2079,8 @@ msgid "Muted" msgstr "" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, c-format +msgid "Sound Volume: %d%%" msgstr "" #. ~ Imperative, as in "Enter/type in text". @@ -2229,6 +2287,10 @@ msgid "" "screens." msgstr "" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2495,6 +2557,10 @@ msgstr "" msgid "Chat command time message threshold" msgstr "" +#: src/settings_translation_file.cpp +msgid "Chat commands" +msgstr "" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "" @@ -2528,7 +2594,7 @@ msgid "Chat toggle key" msgstr "" #: src/settings_translation_file.cpp -msgid "Chatcommands" +msgid "Chat weblinks" msgstr "" #: src/settings_translation_file.cpp @@ -2547,6 +2613,12 @@ msgstr "" msgid "Clean transparent textures" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "" @@ -2622,6 +2694,22 @@ msgstr "" msgid "Command key" msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "" @@ -2713,7 +2801,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" #: src/settings_translation_file.cpp @@ -2790,8 +2878,8 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -2909,6 +2997,10 @@ msgstr "" msgid "Disallow empty passwords" msgstr "" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "" @@ -2955,7 +3047,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -2983,13 +3082,6 @@ msgstr "" msgid "Enable players getting damage and dying." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "" @@ -3382,7 +3474,7 @@ msgstr "" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" #: src/settings_translation_file.cpp @@ -3814,7 +3906,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +msgid "Instrument chat commands on registration." msgstr "" #: src/settings_translation_file.cpp @@ -3898,7 +3990,7 @@ msgid "Joystick button repetition interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "" #: src/settings_translation_file.cpp @@ -4727,7 +4819,7 @@ msgid "Map save interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Map update time" +msgid "Map shadows update frames" msgstr "" #: src/settings_translation_file.cpp @@ -5020,7 +5112,7 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +msgid "Modifies the size of the HUD elements." msgstr "" #: src/settings_translation_file.cpp @@ -5152,7 +5244,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" @@ -5176,6 +5268,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5316,9 +5412,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -5611,26 +5707,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -5721,7 +5809,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -5826,6 +5914,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -5936,7 +6032,7 @@ msgstr "" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -5954,7 +6050,7 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp @@ -6023,7 +6119,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6186,7 +6282,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -6369,6 +6465,10 @@ msgstr "" msgid "Waving plants" msgstr "" +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -6390,7 +6490,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -6405,7 +6505,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -6531,24 +6631,6 @@ msgstr "" msgid "Y-level of seabed." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "" @@ -6563,3 +6645,7 @@ msgstr "" #~ msgid "Ok" #~ msgstr "Được" + +#, fuzzy +#~ msgid "You died." +#~ msgstr "Bạn đã chết" diff --git a/po/yue/minetest.po b/po/yue/minetest.po index 1b4bdd2f4..96cb1ca69 100644 --- a/po/yue/minetest.po +++ b/po/yue/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -17,92 +17,80 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: builtin/client/chatcommands.lua -msgid "Issued command: " +msgid "Clear the out chat queue" msgstr "" #: builtin/client/chatcommands.lua msgid "Empty command." msgstr "" +#: builtin/client/chatcommands.lua +msgid "Exit to main menu" +msgstr "" + #: builtin/client/chatcommands.lua msgid "Invalid command: " msgstr "" +#: builtin/client/chatcommands.lua +msgid "Issued command: " +msgstr "" + #: builtin/client/chatcommands.lua msgid "List online players" msgstr "" -#: builtin/client/chatcommands.lua -msgid "This command is disabled by server." -msgstr "" - #: builtin/client/chatcommands.lua msgid "Online players: " msgstr "" -#: builtin/client/chatcommands.lua -msgid "Exit to main menu" -msgstr "" - -#: builtin/client/chatcommands.lua -msgid "Clear the out chat queue" -msgstr "" - #: builtin/client/chatcommands.lua msgid "The out chat queue is now empty." msgstr "" -#: builtin/client/death_formspec.lua -msgid "You died." -msgstr "" - -#: builtin/client/death_formspec.lua src/client/game.cpp -msgid "You died" +#: builtin/client/chatcommands.lua +msgid "This command is disabled by server." msgstr "" #: builtin/client/death_formspec.lua src/client/game.cpp msgid "Respawn" msgstr "" +#: builtin/client/death_formspec.lua src/client/game.cpp +msgid "You died" +msgstr "" + +#: builtin/common/chatcommands.lua +msgid "Available commands:" +msgstr "" + #: builtin/common/chatcommands.lua msgid "Available commands: " msgstr "" +#: builtin/common/chatcommands.lua +msgid "Command not available: " +msgstr "" + +#: builtin/common/chatcommands.lua +msgid "Get help for commands" +msgstr "" + #: builtin/common/chatcommands.lua msgid "" "Use '.help ' to get more information, or '.help all' to list everything." msgstr "" -#: builtin/common/chatcommands.lua -msgid "Available commands:" -msgstr "" - -#: builtin/common/chatcommands.lua -msgid "Command not available: " -msgstr "" - #: builtin/common/chatcommands.lua msgid "[all | ]" msgstr "" -#: builtin/common/chatcommands.lua -msgid "Get help for commands" -msgstr "" - #: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp msgid "OK" msgstr "" #: builtin/fstk/ui.lua -msgid "The server has requested a reconnect:" -msgstr "" - -#: builtin/fstk/ui.lua -msgid "Reconnect" -msgstr "" - -#: builtin/fstk/ui.lua -msgid "Main menu" +msgid "" msgstr "" #: builtin/fstk/ui.lua @@ -113,8 +101,20 @@ msgstr "" msgid "An error occurred:" msgstr "" +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + #: builtin/mainmenu/common.lua -msgid "Server supports protocol versions between $1 and $2. " +msgid "Protocol version mismatch. " msgstr "" #: builtin/mainmenu/common.lua @@ -122,7 +122,7 @@ msgid "Server enforces protocol version $1. " msgstr "" #: builtin/mainmenu/common.lua -msgid "We support protocol versions between version $1 and $2." +msgid "Server supports protocol versions between $1 and $2. " msgstr "" #: builtin/mainmenu/common.lua @@ -130,49 +130,7 @@ msgid "We only support protocol version $1." msgstr "" #: builtin/mainmenu/common.lua -msgid "Protocol version mismatch. " -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua -msgid "World:" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua -msgid "No modpack description provided." -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua -msgid "No game description provided." -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua -msgid "Mod:" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua -msgid "No (optional) dependencies" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua -msgid "No hard dependencies" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua -msgid "Optional dependencies:" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua -#: builtin/mainmenu/tab_content.lua -msgid "Dependencies:" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua -msgid "No optional dependencies" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua -#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp -msgid "Save" +msgid "We support protocol versions between version $1 and $2." msgstr "" #: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua @@ -186,104 +144,76 @@ msgstr "" msgid "Cancel" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua -msgid "Find More Mods" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua -msgid "Disable modpack" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua -msgid "Enable modpack" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua -msgid "enabled" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/tab_content.lua +msgid "Dependencies:" msgstr "" #: builtin/mainmenu/dlg_config_world.lua msgid "Disable all" msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable modpack" +msgstr "" + #: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable modpack" +msgstr "" + #: builtin/mainmenu/dlg_config_world.lua msgid "" "Failed to enable mod \"$1\" as it contains disallowed characters. Only " "characters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_contentstore.lua -msgid "ContentDB is not available when Minetest was compiled without cURL" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Find More Mods" msgstr "" -#: builtin/mainmenu/dlg_contentstore.lua -msgid "All packages" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_contentstore.lua -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Games" +#: builtin/mainmenu/dlg_config_world.lua +msgid "No (optional) dependencies" msgstr "" -#: builtin/mainmenu/dlg_contentstore.lua -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Mods" +#: builtin/mainmenu/dlg_config_world.lua +msgid "No game description provided." msgstr "" -#: builtin/mainmenu/dlg_contentstore.lua -msgid "Texture packs" +#: builtin/mainmenu/dlg_config_world.lua +msgid "No hard dependencies" msgstr "" -#: builtin/mainmenu/dlg_contentstore.lua -msgid "Failed to download $1" +#: builtin/mainmenu/dlg_config_world.lua +msgid "No modpack description provided." msgstr "" -#: builtin/mainmenu/dlg_contentstore.lua -msgid "Already installed" +#: builtin/mainmenu/dlg_config_world.lua +msgid "No optional dependencies" msgstr "" -#: builtin/mainmenu/dlg_contentstore.lua -msgid "$1 by $2" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua +msgid "Optional dependencies:" msgstr "" -#: builtin/mainmenu/dlg_contentstore.lua -msgid "Not found" +#: builtin/mainmenu/dlg_config_world.lua +#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp +msgid "Save" msgstr "" -#: builtin/mainmenu/dlg_contentstore.lua -msgid "$1 and $2 dependencies will be installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" msgstr "" -#: builtin/mainmenu/dlg_contentstore.lua -msgid "$1 will be installed, and $2 dependencies will be skipped." -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "$1 required dependencies could not be found." -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "Please check that the base game is correct." -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "Install $1" -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "Base Game:" -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "Install missing dependencies" -msgstr "" - -#: builtin/mainmenu/dlg_contentstore.lua -msgid "Install" +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua @@ -291,11 +221,11 @@ msgid "\"$1\" already exists. Would you like to overwrite it?" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Overwrite" +msgid "$1 and $2 dependencies will be installed." msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Back to Main Menu" +msgid "$1 by $2" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua @@ -309,83 +239,189 @@ msgid "$1 downloading..." msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "No updates" +msgid "$1 required dependencies could not be found." msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Update All [$1]" +msgid "$1 will be installed, and $2 dependencies will be skipped." msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "No results" +msgid "All packages" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "No packages could be retrieved" +msgid "Already installed" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Back to Main Menu" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Base Game:" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "ContentDB is not available when Minetest was compiled without cURL" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua msgid "Downloading..." msgstr "" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Failed to download $1" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Games" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install $1" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install missing dependencies" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Install: Unsupported file type or broken archive" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Mods" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "No packages could be retrieved" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "No results" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "No updates" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Not found" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Overwrite" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Please check that the base game is correct." +msgstr "" + #: builtin/mainmenu/dlg_contentstore.lua msgid "Queued" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua -msgid "Update" +msgid "Texture packs" msgstr "" #: builtin/mainmenu/dlg_contentstore.lua msgid "Uninstall" msgstr "" +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Update" +msgstr "" + +#: builtin/mainmenu/dlg_contentstore.lua +msgid "Update All [$1]" +msgstr "" + #: builtin/mainmenu/dlg_contentstore.lua msgid "View more information in a web browser" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Caverns" +msgid "A world named \"$1\" already exists" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Very large caverns deep in the underground" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua -msgid "Sea level rivers" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua -msgid "Rivers" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua -msgid "Mountains" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua -msgid "Floatlands (experimental)" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua -msgid "Floating landmasses in the sky" +msgid "Additional terrain" msgstr "" #: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Altitude chill" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua -msgid "Reduces heat with altitude" -msgstr "" - #: builtin/mainmenu/dlg_create_world.lua msgid "Altitude dry" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Reduces humidity with altitude" +msgid "Biome blending" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Biomes" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caverns" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Caves" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Decorations" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a game, such as Minetest Game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Dungeons" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Flat terrain" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floating landmasses in the sky" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Floatlands (experimental)" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Generate non-fractal terrain: Oceans and underground" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Hills" msgstr "" #: builtin/mainmenu/dlg_create_world.lua @@ -397,35 +433,27 @@ msgid "Increases humidity around rivers" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Vary river depth" +msgid "Lakes" msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Low humidity and high heat causes shallow or dry rivers" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua -msgid "Hills" +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen flags" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Lakes" +msgid "Mapgen-specific flags" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Additional terrain" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua -msgid "Generate non-fractal terrain: Oceans and underground" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua -msgid "Trees and jungle grass" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua -msgid "Flat terrain" +msgid "Mountains" msgstr "" #: builtin/mainmenu/dlg_create_world.lua @@ -433,39 +461,36 @@ msgid "Mud flow" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Terrain surface erosion" +msgid "Network of tunnels and caves" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Temperate, Desert, Jungle, Tundra, Taiga" +msgid "No game selected" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Temperate, Desert, Jungle" +msgid "Reduces heat with altitude" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Temperate, Desert" +msgid "Reduces humidity with altitude" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "You have no games installed." +msgid "Rivers" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Download one from minetest.net" +msgid "Sea level rivers" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Caves" +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Seed" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Dungeons" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua -msgid "Decorations" +msgid "Smooth transition between biomes" msgstr "" #: builtin/mainmenu/dlg_create_world.lua @@ -479,64 +504,43 @@ msgid "Structures appearing on the terrain, typically trees and plants" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Network of tunnels and caves" +msgid "Temperate, Desert" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Biomes" +msgid "Temperate, Desert, Jungle" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Biome blending" +msgid "Temperate, Desert, Jungle, Tundra, Taiga" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Smooth transition between biomes" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp -msgid "Mapgen flags" +msgid "Terrain surface erosion" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -msgid "Mapgen-specific flags" +msgid "Trees and jungle grass" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Vary river depth" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Very large caverns deep in the underground" msgstr "" #: builtin/mainmenu/dlg_create_world.lua msgid "Warning: The Development Test is meant for developers." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua -msgid "Download a game, such as Minetest Game, from minetest.net" -msgstr "" - #: builtin/mainmenu/dlg_create_world.lua msgid "World name" msgstr "" #: builtin/mainmenu/dlg_create_world.lua -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Seed" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp -msgid "Mapgen" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp -msgid "Game" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua -msgid "Create" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua -msgid "A world named \"$1\" already exists" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua -msgid "No game selected" +msgid "You have no games installed." msgstr "" #: builtin/mainmenu/dlg_delete_content.lua @@ -565,42 +569,18 @@ msgstr "" msgid "Accept" msgstr "" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "" + #: builtin/mainmenu/dlg_rename_modpack.lua msgid "" "This modpack has an explicit name given in its modpack.conf which will " "override any renaming here." msgstr "" -#: builtin/mainmenu/dlg_rename_modpack.lua -msgid "Rename Modpack:" -msgstr "" - -#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua -msgid "Disabled" -msgstr "" - #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Enabled" -msgstr "" - -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Browse" -msgstr "" - -#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp -msgid "Offset" -msgstr "" - -#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp -msgid "Scale" -msgstr "" - -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "X spread" -msgstr "" - -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Y spread" +msgid "(No description of setting given)" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -608,19 +588,111 @@ msgid "2D Noise" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Z spread" +msgid "< Back to Settings page" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Browse" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua +msgid "Disabled" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Edit" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Enabled" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Lacunarity" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Octaves" msgstr "" -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp +msgid "Offset" msgstr "" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Lacunarity" +msgid "Persistence" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Please enter a valid integer." +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Please enter a valid number." +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp +msgid "Scale" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua +msgid "Search" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Select directory" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Select file" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Show technical names" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "The value must be at least $1." +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "The value must not be larger than $1." +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "X" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "X spread" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Y" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Y spread" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Z" +msgstr "" + +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "Z spread" +msgstr "" + +#. ~ "absvalue" is a noise parameter flag. +#. It is short for "absolute value". +#. It can be enabled in noise settings in +#. main menu -> "All Settings". +#: builtin/mainmenu/dlg_settings_advanced.lua +msgid "absvalue" msgstr "" #. ~ "defaults" is a noise parameter flag. @@ -638,80 +710,12 @@ msgstr "" msgid "eased" msgstr "" -#. ~ "absvalue" is a noise parameter flag. -#. It is short for "absolute value". -#. It can be enabled in noise settings in -#. main menu -> "All Settings". -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "absvalue" -msgstr "" - -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "X" -msgstr "" - -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Y" -msgstr "" - -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Z" -msgstr "" - -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "(No description of setting given)" -msgstr "" - -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Please enter a valid integer." -msgstr "" - -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "The value must be at least $1." -msgstr "" - -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "The value must not be larger than $1." -msgstr "" - -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Please enter a valid number." -msgstr "" - -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Select directory" -msgstr "" - -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Select file" -msgstr "" - -#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua -msgid "Search" -msgstr "" - -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "< Back to Settings page" -msgstr "" - -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Edit" -msgstr "" - -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Restore Default" -msgstr "" - -#: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Show technical names" -msgstr "" - #: builtin/mainmenu/pkgmgr.lua msgid "$1 (Enabled)" msgstr "" #: builtin/mainmenu/pkgmgr.lua -msgid "Unable to install a $1 as a texture pack" +msgid "$1 mods" msgstr "" #: builtin/mainmenu/pkgmgr.lua @@ -719,11 +723,7 @@ msgid "Failed to install $1 to $2" msgstr "" #: builtin/mainmenu/pkgmgr.lua -msgid "Unable to find a valid mod or modpack" -msgstr "" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Unable to install a modpack as a $1" +msgid "Install Mod: Unable to find real mod name for: $1" msgstr "" #: builtin/mainmenu/pkgmgr.lua @@ -731,11 +731,11 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "" #: builtin/mainmenu/pkgmgr.lua -msgid "Unable to install a mod as a $1" +msgid "Unable to find a valid mod or modpack" msgstr "" #: builtin/mainmenu/pkgmgr.lua -msgid "Install Mod: Unable to find real mod name for: $1" +msgid "Unable to install a $1 as a texture pack" msgstr "" #: builtin/mainmenu/pkgmgr.lua @@ -743,15 +743,11 @@ msgid "Unable to install a game as a $1" msgstr "" #: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" +msgid "Unable to install a mod as a $1" msgstr "" #: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "" - -#: builtin/mainmenu/pkgmgr.lua -msgid "$1 mods" +msgid "Unable to install a modpack as a $1" msgstr "" #: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp @@ -759,37 +755,33 @@ msgid "Loading..." msgstr "" #: builtin/mainmenu/serverlistmgr.lua -msgid "Try reenabling public serverlist and check your internet connection." +msgid "Public server list is disabled" msgstr "" #: builtin/mainmenu/serverlistmgr.lua -msgid "Public server list is disabled" +msgid "Try reenabling public serverlist and check your internet connection." msgstr "" #: builtin/mainmenu/tab_about.lua msgid "About" msgstr "" -#: builtin/mainmenu/tab_about.lua -msgid "Core Developers" -msgstr "" - #: builtin/mainmenu/tab_about.lua msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_about.lua -msgid "Previous Core Developers" -msgstr "" - -#: builtin/mainmenu/tab_about.lua -msgid "Previous Contributors" -msgstr "" - #: builtin/mainmenu/tab_about.lua msgid "Active renderer:" msgstr "" +#: builtin/mainmenu/tab_about.lua +msgid "Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "Open User Data Directory" +msgstr "" + #: builtin/mainmenu/tab_about.lua msgid "" "Opens the directory that contains user-provided worlds, games, mods,\n" @@ -797,7 +789,27 @@ msgid "" msgstr "" #: builtin/mainmenu/tab_about.lua -msgid "Open User Data Directory" +msgid "Previous Contributors" +msgstr "" + +#: builtin/mainmenu/tab_about.lua +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Browse online content" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Content" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Disable Texture Pack" +msgstr "" + +#: builtin/mainmenu/tab_content.lua +msgid "Information:" msgstr "" #: builtin/mainmenu/tab_content.lua @@ -805,7 +817,7 @@ msgid "Installed Packages:" msgstr "" #: builtin/mainmenu/tab_content.lua -msgid "Browse online content" +msgid "No dependencies." msgstr "" #: builtin/mainmenu/tab_content.lua @@ -817,43 +829,19 @@ msgid "Rename" msgstr "" #: builtin/mainmenu/tab_content.lua -msgid "No dependencies." -msgstr "" - -#: builtin/mainmenu/tab_content.lua -msgid "Disable Texture Pack" +msgid "Uninstall Package" msgstr "" #: builtin/mainmenu/tab_content.lua msgid "Use Texture Pack" msgstr "" -#: builtin/mainmenu/tab_content.lua -msgid "Information:" -msgstr "" - -#: builtin/mainmenu/tab_content.lua -msgid "Uninstall Package" -msgstr "" - -#: builtin/mainmenu/tab_content.lua -msgid "Content" +#: builtin/mainmenu/tab_local.lua +msgid "Announce Server" msgstr "" #: builtin/mainmenu/tab_local.lua -msgid "Install games from ContentDB" -msgstr "" - -#: builtin/mainmenu/tab_local.lua -msgid "Select Mods" -msgstr "" - -#: builtin/mainmenu/tab_local.lua -msgid "New" -msgstr "" - -#: builtin/mainmenu/tab_local.lua -msgid "Select World:" +msgid "Bind Address" msgstr "" #: builtin/mainmenu/tab_local.lua @@ -864,78 +852,70 @@ msgstr "" msgid "Enable Damage" msgstr "" -#: builtin/mainmenu/tab_local.lua -msgid "Host Server" -msgstr "" - #: builtin/mainmenu/tab_local.lua msgid "Host Game" msgstr "" #: builtin/mainmenu/tab_local.lua -msgid "Announce Server" +msgid "Host Server" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Install games from ContentDB" msgstr "" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua msgid "Name" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "New" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "No world created or selected!" +msgstr "" + #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua msgid "Password" msgstr "" #: builtin/mainmenu/tab_local.lua -msgid "Bind Address" +msgid "Play Game" msgstr "" #: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua msgid "Port" msgstr "" +#: builtin/mainmenu/tab_local.lua +msgid "Select Mods" +msgstr "" + +#: builtin/mainmenu/tab_local.lua +msgid "Select World:" +msgstr "" + #: builtin/mainmenu/tab_local.lua msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_local.lua -msgid "Play Game" -msgstr "" - -#: builtin/mainmenu/tab_local.lua -msgid "No world created or selected!" -msgstr "" - #: builtin/mainmenu/tab_local.lua msgid "Start Game" msgstr "" +#: builtin/mainmenu/tab_online.lua +msgid "Address" +msgstr "" + #: builtin/mainmenu/tab_online.lua src/client/keycode.cpp msgid "Clear" msgstr "" -#: builtin/mainmenu/tab_online.lua -msgid "Refresh" -msgstr "" - -#: builtin/mainmenu/tab_online.lua -msgid "Address" -msgstr "" - -#: builtin/mainmenu/tab_online.lua -msgid "Server Description" -msgstr "" - #: builtin/mainmenu/tab_online.lua msgid "Connect" msgstr "" -#: builtin/mainmenu/tab_online.lua -msgid "Del. Favorite" -msgstr "" - -#: builtin/mainmenu/tab_online.lua -msgid "Ping" -msgstr "" - #: builtin/mainmenu/tab_online.lua msgid "Creative mode" msgstr "" @@ -946,11 +926,11 @@ msgid "Damage / PvP" msgstr "" #: builtin/mainmenu/tab_online.lua -msgid "Favorites" +msgid "Del. Favorite" msgstr "" #: builtin/mainmenu/tab_online.lua -msgid "Public Servers" +msgid "Favorites" msgstr "" #: builtin/mainmenu/tab_online.lua @@ -961,58 +941,30 @@ msgstr "" msgid "Join Game" msgstr "" -#: builtin/mainmenu/tab_settings.lua -msgid "Opaque Leaves" +#: builtin/mainmenu/tab_online.lua +msgid "Ping" msgstr "" -#: builtin/mainmenu/tab_settings.lua -msgid "Simple Leaves" +#: builtin/mainmenu/tab_online.lua +msgid "Public Servers" msgstr "" -#: builtin/mainmenu/tab_settings.lua -msgid "Fancy Leaves" +#: builtin/mainmenu/tab_online.lua +msgid "Refresh" msgstr "" -#: builtin/mainmenu/tab_settings.lua -msgid "Node Outlining" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua -msgid "Node Highlighting" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua -msgid "None" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua -msgid "No Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua -msgid "Bilinear Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua -msgid "Trilinear Filter" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua -msgid "No Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua -msgid "Mipmap" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua -msgid "Mipmap + Aniso. Filter" +#: builtin/mainmenu/tab_online.lua +msgid "Server Description" msgstr "" #: builtin/mainmenu/tab_settings.lua msgid "2x" msgstr "" +#: builtin/mainmenu/tab_settings.lua +msgid "3D Clouds" +msgstr "" + #: builtin/mainmenu/tab_settings.lua msgid "4x" msgstr "" @@ -1022,7 +974,43 @@ msgid "8x" msgstr "" #: builtin/mainmenu/tab_settings.lua -msgid "Very Low" +msgid "All Settings" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Antialiasing:" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Autosave Screen Size" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Bilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua src/client/game.cpp +msgid "Change Keys" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Connected Glass" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp +msgid "Dynamic shadows" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Dynamic shadows: " +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Fancy Leaves" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "High" msgstr "" #: builtin/mainmenu/tab_settings.lua @@ -1034,23 +1022,35 @@ msgid "Medium" msgstr "" #: builtin/mainmenu/tab_settings.lua -msgid "High" +msgid "Mipmap" msgstr "" #: builtin/mainmenu/tab_settings.lua -msgid "Ultra High" +msgid "Mipmap + Aniso. Filter" msgstr "" #: builtin/mainmenu/tab_settings.lua -msgid "Smooth Lighting" +msgid "No Filter" msgstr "" #: builtin/mainmenu/tab_settings.lua -msgid "Particles" +msgid "No Mipmap" msgstr "" #: builtin/mainmenu/tab_settings.lua -msgid "3D Clouds" +msgid "Node Highlighting" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Node Outlining" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Opaque Leaves" msgstr "" #: builtin/mainmenu/tab_settings.lua @@ -1058,15 +1058,7 @@ msgid "Opaque Water" msgstr "" #: builtin/mainmenu/tab_settings.lua -msgid "Connected Glass" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua -msgid "Texturing:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua -msgid "Antialiasing:" +msgid "Particles" msgstr "" #: builtin/mainmenu/tab_settings.lua @@ -1074,7 +1066,7 @@ msgid "Screen:" msgstr "" #: builtin/mainmenu/tab_settings.lua -msgid "Autosave Screen Size" +msgid "Settings" msgstr "" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp @@ -1089,16 +1081,16 @@ msgstr "" msgid "Shaders (unavailable)" msgstr "" -#: builtin/mainmenu/tab_settings.lua src/client/game.cpp -msgid "Change Keys" +#: builtin/mainmenu/tab_settings.lua +msgid "Simple Leaves" msgstr "" #: builtin/mainmenu/tab_settings.lua -msgid "All Settings" +msgid "Smooth Lighting" msgstr "" #: builtin/mainmenu/tab_settings.lua -msgid "Touchthreshold: (px)" +msgid "Texturing:" msgstr "" #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp @@ -1106,35 +1098,47 @@ msgid "Tone Mapping" msgstr "" #: builtin/mainmenu/tab_settings.lua -msgid "Waving Liquids" +msgid "Touchthreshold: (px)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Trilinear Filter" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Ultra High" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Very Low" msgstr "" #: builtin/mainmenu/tab_settings.lua msgid "Waving Leaves" msgstr "" +#: builtin/mainmenu/tab_settings.lua +msgid "Waving Liquids" +msgstr "" + #: builtin/mainmenu/tab_settings.lua msgid "Waving Plants" msgstr "" -#: builtin/mainmenu/tab_settings.lua -msgid "Dynamic shadows: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp -msgid "Dynamic shadows" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - -#: builtin/mainmenu/tab_settings.lua -msgid "Settings" +#: src/client/client.cpp src/client/game.cpp +msgid "Connection timed out." msgstr "" #: src/client/client.cpp -msgid "Connection timed out." +msgid "Done!" +msgstr "" + +#: src/client/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client/client.cpp +msgid "Initializing nodes..." msgstr "" #: src/client/client.cpp @@ -1145,16 +1149,16 @@ msgstr "" msgid "Rebuilding shaders..." msgstr "" -#: src/client/client.cpp -msgid "Initializing nodes..." +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" msgstr "" -#: src/client/client.cpp -msgid "Initializing nodes" +#: src/client/clientlauncher.cpp +msgid "Could not find or load game: " msgstr "" -#: src/client/client.cpp -msgid "Done!" +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." msgstr "" #: src/client/clientlauncher.cpp @@ -1162,15 +1166,7 @@ msgid "Main Menu" msgstr "" #: src/client/clientlauncher.cpp -msgid "Connection error (timed out?)" -msgstr "" - -#: src/client/clientlauncher.cpp -msgid "Provided password file failed to open: " -msgstr "" - -#: src/client/clientlauncher.cpp -msgid "Please choose a name!" +msgid "No world selected and no address provided. Nothing to do." msgstr "" #: src/client/clientlauncher.cpp @@ -1178,152 +1174,63 @@ msgid "Player name too long." msgstr "" #: src/client/clientlauncher.cpp -msgid "No world selected and no address provided. Nothing to do." +msgid "Please choose a name!" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided password file failed to open: " msgstr "" #: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" -msgstr "" - -#: src/client/clientlauncher.cpp -msgid "Invalid gamespec." +#: src/client/game.cpp +msgid "" +"\n" +"Check debug.txt for details." msgstr "" #: src/client/game.cpp -msgid "Shutting down..." +msgid "- Address: " msgstr "" #: src/client/game.cpp -msgid "Creating server..." +msgid "- Creative Mode: " msgstr "" #: src/client/game.cpp -msgid "Creating client..." +msgid "- Damage: " msgstr "" #: src/client/game.cpp -msgid "Singleplayer" +msgid "- Mode: " msgstr "" #: src/client/game.cpp -msgid "Multiplayer" +msgid "- Port: " msgstr "" #: src/client/game.cpp -msgid "Resolving address..." +msgid "- Public: " +msgstr "" + +#. ~ PvP = Player versus Player +#: src/client/game.cpp +msgid "- PvP: " msgstr "" #: src/client/game.cpp -msgid "Connecting to server..." +msgid "- Server Name: " msgstr "" #: src/client/game.cpp -msgid "Item definitions..." -msgstr "" - -#: src/client/game.cpp -msgid "Node definitions..." -msgstr "" - -#: src/client/game.cpp -msgid "Media..." -msgstr "" - -#: src/client/game.cpp -msgid "KiB/s" -msgstr "" - -#: src/client/game.cpp -msgid "MiB/s" -msgstr "" - -#: src/client/game.cpp -msgid "Client side scripting is disabled" -msgstr "" - -#: src/client/game.cpp -msgid "Sound muted" -msgstr "" - -#: src/client/game.cpp -msgid "Sound unmuted" -msgstr "" - -#: src/client/game.cpp -msgid "Sound system is disabled" +msgid "A serialization error occurred:" msgstr "" #: src/client/game.cpp #, c-format -msgid "Volume changed to %d%%" -msgstr "" - -#: src/client/game.cpp -msgid "Sound system is not supported on this build" -msgstr "" - -#: src/client/game.cpp -msgid "ok" -msgstr "" - -#: src/client/game.cpp -msgid "Fly mode enabled" -msgstr "" - -#: src/client/game.cpp -msgid "Fly mode enabled (note: no 'fly' privilege)" -msgstr "" - -#: src/client/game.cpp -msgid "Fly mode disabled" -msgstr "" - -#: src/client/game.cpp -msgid "Pitch move mode enabled" -msgstr "" - -#: src/client/game.cpp -msgid "Pitch move mode disabled" -msgstr "" - -#: src/client/game.cpp -msgid "Fast mode enabled" -msgstr "" - -#: src/client/game.cpp -msgid "Fast mode enabled (note: no 'fast' privilege)" -msgstr "" - -#: src/client/game.cpp -msgid "Fast mode disabled" -msgstr "" - -#: src/client/game.cpp -msgid "Noclip mode enabled" -msgstr "" - -#: src/client/game.cpp -msgid "Noclip mode enabled (note: no 'noclip' privilege)" -msgstr "" - -#: src/client/game.cpp -msgid "Noclip mode disabled" -msgstr "" - -#: src/client/game.cpp -msgid "Cinematic mode enabled" -msgstr "" - -#: src/client/game.cpp -msgid "Cinematic mode disabled" -msgstr "" - -#: src/client/game.cpp -msgid "Automatic forward enabled" +msgid "Access denied. Reason: %s" msgstr "" #: src/client/game.cpp @@ -1331,35 +1238,23 @@ msgid "Automatic forward disabled" msgstr "" #: src/client/game.cpp -msgid "Minimap currently disabled by game or mod" +msgid "Automatic forward enabled" msgstr "" #: src/client/game.cpp -msgid "Fog disabled" +msgid "Block bounds hidden" msgstr "" #: src/client/game.cpp -msgid "Fog enabled" +msgid "Block bounds shown for all blocks" msgstr "" #: src/client/game.cpp -msgid "Debug info shown" +msgid "Block bounds shown for current block" msgstr "" #: src/client/game.cpp -msgid "Profiler graph shown" -msgstr "" - -#: src/client/game.cpp -msgid "Wireframe shown" -msgstr "" - -#: src/client/game.cpp -msgid "Debug info, profiler graph, and wireframe hidden" -msgstr "" - -#: src/client/game.cpp -msgid "Debug info and profiler graph hidden" +msgid "Block bounds shown for nearby blocks" msgstr "" #: src/client/game.cpp @@ -1371,46 +1266,39 @@ msgid "Camera update enabled" msgstr "" #: src/client/game.cpp -#, c-format -msgid "Viewing range is at maximum: %d" +msgid "Can't show block bounds (need 'basic_debug' privilege)" msgstr "" #: src/client/game.cpp -#, c-format -msgid "Viewing range changed to %d" +msgid "Change Password" msgstr "" #: src/client/game.cpp -#, c-format -msgid "Viewing range is at minimum: %d" +msgid "Cinematic mode disabled" msgstr "" #: src/client/game.cpp -msgid "Enabled unlimited viewing range" +msgid "Cinematic mode enabled" msgstr "" #: src/client/game.cpp -msgid "Disabled unlimited viewing range" +msgid "Client disconnected" msgstr "" #: src/client/game.cpp -msgid "Zoom currently disabled by game or mod" +msgid "Client side scripting is disabled" msgstr "" #: src/client/game.cpp -msgid "" -"Default Controls:\n" -"No menu visible:\n" -"- single tap: button activate\n" -"- double tap: place/use\n" -"- slide finger: look around\n" -"Menu/Inventory visible:\n" -"- double tap (outside):\n" -" -->close\n" -"- touch stack, touch slot:\n" -" --> move stack\n" -"- touch&drag, tap 2nd finger\n" -" --> place single item to slot\n" +msgid "Connecting to server..." +msgstr "" + +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + +#: src/client/game.cpp +msgid "Continue" msgstr "" #: src/client/game.cpp @@ -1433,19 +1321,52 @@ msgid "" msgstr "" #: src/client/game.cpp -msgid "Continue" +#, c-format +msgid "Couldn't resolve address: %s" msgstr "" #: src/client/game.cpp -msgid "Change Password" +msgid "Creating client..." msgstr "" #: src/client/game.cpp -msgid "Game paused" +msgid "Creating server..." msgstr "" #: src/client/game.cpp -msgid "Sound Volume" +msgid "Debug info and profiler graph hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Debug info shown" +msgstr "" + +#: src/client/game.cpp +msgid "Debug info, profiler graph, and wireframe hidden" +msgstr "" + +#: src/client/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" + +#: src/client/game.cpp +msgid "Disabled unlimited viewing range" +msgstr "" + +#: src/client/game.cpp +msgid "Enabled unlimited viewing range" msgstr "" #: src/client/game.cpp @@ -1456,20 +1377,44 @@ msgstr "" msgid "Exit to OS" msgstr "" +#: src/client/game.cpp +msgid "Fast mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fast mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fast mode enabled (note: no 'fast' privilege)" +msgstr "" + +#: src/client/game.cpp +msgid "Fly mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fly mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fly mode enabled (note: no 'fly' privilege)" +msgstr "" + +#: src/client/game.cpp +msgid "Fog disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Fog enabled" +msgstr "" + #: src/client/game.cpp msgid "Game info:" msgstr "" #: src/client/game.cpp -msgid "- Mode: " -msgstr "" - -#: src/client/game.cpp -msgid "Remote server" -msgstr "" - -#: src/client/game.cpp -msgid "- Address: " +msgid "Game paused" msgstr "" #: src/client/game.cpp @@ -1477,11 +1422,43 @@ msgid "Hosting server" msgstr "" #: src/client/game.cpp -msgid "- Port: " +msgid "Item definitions..." msgstr "" #: src/client/game.cpp -msgid "On" +msgid "KiB/s" +msgstr "" + +#: src/client/game.cpp +msgid "Media..." +msgstr "" + +#: src/client/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/client/game.cpp +msgid "Minimap currently disabled by game or mod" +msgstr "" + +#: src/client/game.cpp +msgid "Multiplayer" +msgstr "" + +#: src/client/game.cpp +msgid "Noclip mode disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Noclip mode enabled" +msgstr "" + +#: src/client/game.cpp +msgid "Noclip mode enabled (note: no 'noclip' privilege)" +msgstr "" + +#: src/client/game.cpp +msgid "Node definitions..." msgstr "" #: src/client/game.cpp @@ -1489,34 +1466,102 @@ msgid "Off" msgstr "" #: src/client/game.cpp -msgid "- Damage: " +msgid "On" msgstr "" #: src/client/game.cpp -msgid "- Creative Mode: " -msgstr "" - -#. ~ PvP = Player versus Player -#: src/client/game.cpp -msgid "- PvP: " +msgid "Pitch move mode disabled" msgstr "" #: src/client/game.cpp -msgid "- Public: " +msgid "Pitch move mode enabled" msgstr "" #: src/client/game.cpp -msgid "- Server Name: " +msgid "Profiler graph shown" msgstr "" #: src/client/game.cpp -msgid "" -"\n" -"Check debug.txt for details." +msgid "Remote server" msgstr "" -#: src/client/gameui.cpp -msgid "Chat shown" +#: src/client/game.cpp +msgid "Resolving address..." +msgstr "" + +#: src/client/game.cpp +msgid "Shutting down..." +msgstr "" + +#: src/client/game.cpp +msgid "Singleplayer" +msgstr "" + +#: src/client/game.cpp +msgid "Sound Volume" +msgstr "" + +#: src/client/game.cpp +msgid "Sound muted" +msgstr "" + +#: src/client/game.cpp +msgid "Sound system is disabled" +msgstr "" + +#: src/client/game.cpp +msgid "Sound system is not supported on this build" +msgstr "" + +#: src/client/game.cpp +msgid "Sound unmuted" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format +msgid "Viewing range changed to %d" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range is at maximum: %d" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Viewing range is at minimum: %d" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Volume changed to %d%%" +msgstr "" + +#: src/client/game.cpp +msgid "Wireframe shown" +msgstr "" + +#: src/client/game.cpp +msgid "Zoom currently disabled by game or mod" +msgstr "" + +#: src/client/game.cpp +msgid "ok" msgstr "" #: src/client/gameui.cpp @@ -1524,7 +1569,7 @@ msgid "Chat hidden" msgstr "" #: src/client/gameui.cpp -msgid "HUD shown" +msgid "Chat shown" msgstr "" #: src/client/gameui.cpp @@ -1532,32 +1577,20 @@ msgid "HUD hidden" msgstr "" #: src/client/gameui.cpp -#, c-format -msgid "Profiler shown (page %d of %d)" +msgid "HUD shown" msgstr "" #: src/client/gameui.cpp msgid "Profiler hidden" msgstr "" -#: src/client/keycode.cpp -msgid "Left Button" +#: src/client/gameui.cpp +#, c-format +msgid "Profiler shown (page %d of %d)" msgstr "" #: src/client/keycode.cpp -msgid "Right Button" -msgstr "" - -#: src/client/keycode.cpp -msgid "Middle Button" -msgstr "" - -#: src/client/keycode.cpp -msgid "X Button 1" -msgstr "" - -#: src/client/keycode.cpp -msgid "X Button 2" +msgid "Apps" msgstr "" #: src/client/keycode.cpp @@ -1565,102 +1598,116 @@ msgid "Backspace" msgstr "" #: src/client/keycode.cpp -msgid "Tab" -msgstr "" - -#: src/client/keycode.cpp -msgid "Return" -msgstr "" - -#: src/client/keycode.cpp -msgid "Shift" +msgid "Caps Lock" msgstr "" #: src/client/keycode.cpp msgid "Control" msgstr "" +#: src/client/keycode.cpp +msgid "Down" +msgstr "" + +#: src/client/keycode.cpp +msgid "End" +msgstr "" + +#: src/client/keycode.cpp +msgid "Erase EOF" +msgstr "" + +#: src/client/keycode.cpp +msgid "Execute" +msgstr "" + +#: src/client/keycode.cpp +msgid "Help" +msgstr "" + +#: src/client/keycode.cpp +msgid "Home" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Accept" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Convert" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Escape" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Mode Change" +msgstr "" + +#: src/client/keycode.cpp +msgid "IME Nonconvert" +msgstr "" + +#: src/client/keycode.cpp +msgid "Insert" +msgstr "" + +#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp +msgid "Left" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Button" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Control" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Menu" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Shift" +msgstr "" + +#: src/client/keycode.cpp +msgid "Left Windows" +msgstr "" + #. ~ Key name, common on Windows keyboards #: src/client/keycode.cpp msgid "Menu" msgstr "" #: src/client/keycode.cpp -msgid "Pause" +msgid "Middle Button" msgstr "" #: src/client/keycode.cpp -msgid "Caps Lock" +msgid "Num Lock" msgstr "" #: src/client/keycode.cpp -msgid "Space" +msgid "Numpad *" msgstr "" #: src/client/keycode.cpp -msgid "Page up" +msgid "Numpad +" msgstr "" #: src/client/keycode.cpp -msgid "Page down" +msgid "Numpad -" msgstr "" #: src/client/keycode.cpp -msgid "End" +msgid "Numpad ." msgstr "" #: src/client/keycode.cpp -msgid "Home" -msgstr "" - -#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp -msgid "Left" -msgstr "" - -#: src/client/keycode.cpp -msgid "Up" -msgstr "" - -#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp -msgid "Right" -msgstr "" - -#: src/client/keycode.cpp -msgid "Down" -msgstr "" - -#. ~ Key name -#: src/client/keycode.cpp -msgid "Select" -msgstr "" - -#. ~ "Print screen" key -#: src/client/keycode.cpp -msgid "Print" -msgstr "" - -#: src/client/keycode.cpp -msgid "Execute" -msgstr "" - -#: src/client/keycode.cpp -msgid "Snapshot" -msgstr "" - -#: src/client/keycode.cpp -msgid "Insert" -msgstr "" - -#: src/client/keycode.cpp -msgid "Help" -msgstr "" - -#: src/client/keycode.cpp -msgid "Left Windows" -msgstr "" - -#: src/client/keycode.cpp -msgid "Right Windows" +msgid "Numpad /" msgstr "" #: src/client/keycode.cpp @@ -1704,79 +1751,69 @@ msgid "Numpad 9" msgstr "" #: src/client/keycode.cpp -msgid "Numpad *" +msgid "OEM Clear" msgstr "" #: src/client/keycode.cpp -msgid "Numpad +" +msgid "Page down" msgstr "" #: src/client/keycode.cpp -msgid "Numpad ." +msgid "Page up" msgstr "" #: src/client/keycode.cpp -msgid "Numpad -" +msgid "Pause" msgstr "" #: src/client/keycode.cpp -msgid "Numpad /" +msgid "Play" +msgstr "" + +#. ~ "Print screen" key +#: src/client/keycode.cpp +msgid "Print" msgstr "" #: src/client/keycode.cpp -msgid "Num Lock" +msgid "Return" +msgstr "" + +#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp +msgid "Right" msgstr "" #: src/client/keycode.cpp -msgid "Scroll Lock" -msgstr "" - -#: src/client/keycode.cpp -msgid "Left Shift" -msgstr "" - -#: src/client/keycode.cpp -msgid "Right Shift" -msgstr "" - -#: src/client/keycode.cpp -msgid "Left Control" +msgid "Right Button" msgstr "" #: src/client/keycode.cpp msgid "Right Control" msgstr "" -#: src/client/keycode.cpp -msgid "Left Menu" -msgstr "" - #: src/client/keycode.cpp msgid "Right Menu" msgstr "" #: src/client/keycode.cpp -msgid "IME Escape" +msgid "Right Shift" msgstr "" #: src/client/keycode.cpp -msgid "IME Convert" +msgid "Right Windows" msgstr "" #: src/client/keycode.cpp -msgid "IME Nonconvert" +msgid "Scroll Lock" +msgstr "" + +#. ~ Key name +#: src/client/keycode.cpp +msgid "Select" msgstr "" #: src/client/keycode.cpp -msgid "IME Accept" -msgstr "" - -#: src/client/keycode.cpp -msgid "IME Mode Change" -msgstr "" - -#: src/client/keycode.cpp -msgid "Apps" +msgid "Shift" msgstr "" #: src/client/keycode.cpp @@ -1784,40 +1821,68 @@ msgid "Sleep" msgstr "" #: src/client/keycode.cpp -msgid "Erase EOF" +msgid "Snapshot" msgstr "" #: src/client/keycode.cpp -msgid "Play" +msgid "Space" +msgstr "" + +#: src/client/keycode.cpp +msgid "Tab" +msgstr "" + +#: src/client/keycode.cpp +msgid "Up" +msgstr "" + +#: src/client/keycode.cpp +msgid "X Button 1" +msgstr "" + +#: src/client/keycode.cpp +msgid "X Button 2" msgstr "" #: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp msgid "Zoom" msgstr "" -#: src/client/keycode.cpp -msgid "OEM Clear" -msgstr "" - #: src/client/minimap.cpp msgid "Minimap hidden" msgstr "" #: src/client/minimap.cpp #, c-format -msgid "Minimap in surface mode, Zoom x%d" +msgid "Minimap in radar mode, Zoom x%d" msgstr "" #: src/client/minimap.cpp #, c-format -msgid "Minimap in radar mode, Zoom x%d" +msgid "Minimap in surface mode, Zoom x%d" msgstr "" #: src/client/minimap.cpp msgid "Minimap in texture mode" msgstr "" +#: src/gui/guiChatConsole.cpp +msgid "Failed to open webpage" +msgstr "" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + +#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp +msgid "Passwords do not match!" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp +msgid "Register and Join" +msgstr "" + +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -1827,28 +1892,16 @@ msgid "" "creation, or click 'Cancel' to abort." msgstr "" -#: src/gui/guiConfirmRegistration.cpp -msgid "Register and Join" -msgstr "" - -#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp -msgid "Passwords do not match!" -msgstr "" - #: src/gui/guiFormSpecMenu.cpp msgid "Proceed" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "" - #: src/gui/guiKeyChangeMenu.cpp msgid "\"Aux1\" = climb down" msgstr "" #: src/gui/guiKeyChangeMenu.cpp -msgid "Double tap \"jump\" to toggle fly" +msgid "Autoforward" msgstr "" #: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp @@ -1856,15 +1909,7 @@ msgid "Automatic jumping" msgstr "" #: src/gui/guiKeyChangeMenu.cpp -msgid "Key already in use" -msgstr "" - -#: src/gui/guiKeyChangeMenu.cpp -msgid "press key" -msgstr "" - -#: src/gui/guiKeyChangeMenu.cpp -msgid "Forward" +msgid "Aux1" msgstr "" #: src/gui/guiKeyChangeMenu.cpp @@ -1872,107 +1917,95 @@ msgid "Backward" msgstr "" #: src/gui/guiKeyChangeMenu.cpp -msgid "Aux1" -msgstr "" - -#: src/gui/guiKeyChangeMenu.cpp -msgid "Jump" -msgstr "" - -#: src/gui/guiKeyChangeMenu.cpp -msgid "Sneak" -msgstr "" - -#: src/gui/guiKeyChangeMenu.cpp -msgid "Drop" -msgstr "" - -#: src/gui/guiKeyChangeMenu.cpp -msgid "Inventory" -msgstr "" - -#: src/gui/guiKeyChangeMenu.cpp -msgid "Prev. item" -msgstr "" - -#: src/gui/guiKeyChangeMenu.cpp -msgid "Next item" +msgid "Block bounds" msgstr "" #: src/gui/guiKeyChangeMenu.cpp msgid "Change camera" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp -msgid "Toggle minimap" -msgstr "" - -#: src/gui/guiKeyChangeMenu.cpp -msgid "Toggle fly" -msgstr "" - -#: src/gui/guiKeyChangeMenu.cpp -msgid "Toggle pitchmove" -msgstr "" - -#: src/gui/guiKeyChangeMenu.cpp -msgid "Toggle fast" -msgstr "" - -#: src/gui/guiKeyChangeMenu.cpp -msgid "Toggle noclip" -msgstr "" - -#: src/gui/guiKeyChangeMenu.cpp -msgid "Mute" -msgstr "" - -#: src/gui/guiKeyChangeMenu.cpp -msgid "Dec. volume" -msgstr "" - -#: src/gui/guiKeyChangeMenu.cpp -msgid "Inc. volume" -msgstr "" - -#: src/gui/guiKeyChangeMenu.cpp -msgid "Autoforward" -msgstr "" - #: src/gui/guiKeyChangeMenu.cpp msgid "Chat" msgstr "" -#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp -msgid "Screenshot" -msgstr "" - -#: src/gui/guiKeyChangeMenu.cpp -msgid "Range select" -msgstr "" - -#: src/gui/guiKeyChangeMenu.cpp -msgid "Dec. range" -msgstr "" - -#: src/gui/guiKeyChangeMenu.cpp -msgid "Inc. range" -msgstr "" - -#: src/gui/guiKeyChangeMenu.cpp -msgid "Console" -msgstr "" - #: src/gui/guiKeyChangeMenu.cpp msgid "Command" msgstr "" +#: src/gui/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Dec. range" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Dec. volume" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inc. range" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inc. volume" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" + #: src/gui/guiKeyChangeMenu.cpp msgid "Local command" msgstr "" #: src/gui/guiKeyChangeMenu.cpp -msgid "Block bounds" +msgid "Mute" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Next item" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Prev. item" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp +msgid "Screenshot" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Sneak" msgstr "" #: src/gui/guiKeyChangeMenu.cpp @@ -1983,16 +2016,36 @@ msgstr "" msgid "Toggle chat log" msgstr "" +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "" + #: src/gui/guiKeyChangeMenu.cpp msgid "Toggle fog" msgstr "" -#: src/gui/guiPasswordChange.cpp -msgid "Old Password" +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle minimap" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "Toggle pitchmove" +msgstr "" + +#: src/gui/guiKeyChangeMenu.cpp +msgid "press key" msgstr "" #: src/gui/guiPasswordChange.cpp -msgid "New Password" +msgid "Change" msgstr "" #: src/gui/guiPasswordChange.cpp @@ -2000,11 +2053,11 @@ msgid "Confirm Password" msgstr "" #: src/gui/guiPasswordChange.cpp -msgid "Change" +msgid "New Password" msgstr "" -#: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#: src/gui/guiPasswordChange.cpp +msgid "Old Password" msgstr "" #: src/gui/guiVolumeChange.cpp @@ -2015,6 +2068,11 @@ msgstr "" msgid "Muted" msgstr "" +#: src/gui/guiVolumeChange.cpp +#, c-format +msgid "Sound Volume: %d%%" +msgstr "" + #. ~ Imperative, as in "Enter/type in text". #. Don't forget the space. #: src/gui/modalMenu.cpp @@ -2028,197 +2086,12 @@ msgstr "" msgid "LANG_CODE" msgstr "" -#: src/settings_translation_file.cpp -msgid "Controls" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Build inside player" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"If enabled, you can place blocks at the position (feet + eye level) where " -"you stand.\n" -"This is helpful when working with nodeboxes in small areas." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Flying" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Player is able to fly without being affected by gravity.\n" -"This requires the \"fly\" privilege on the server." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Pitch move mode" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"If enabled, makes move directions relative to the player's pitch when flying " -"or swimming." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Fast movement" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Fast movement (via the \"Aux1\" key).\n" -"This requires the \"fast\" privilege on the server." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Noclip" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"If enabled together with fly mode, player is able to fly through solid " -"nodes.\n" -"This requires the \"noclip\" privilege on the server." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Cinematic mode" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Smooths camera when looking around. Also called look or mouse smoothing.\n" -"Useful for recording videos." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Camera smoothing" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Smooths rotation of camera. 0 to disable." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Camera smoothing in cinematic mode" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Smooths rotation of camera in cinematic mode. 0 to disable." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Invert mouse" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Invert vertical mouse movement." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mouse sensitivity" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mouse sensitivity multiplier." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Aux1 key for climbing/descending" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down " -"and\n" -"descending." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Double tap jump for fly" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Double-tapping the jump key toggles fly mode." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Always fly and fast" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n" -"enabled." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Place repetition interval" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"The time in seconds it takes between repeated node placements when holding\n" -"the place button." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Automatically jump up single-node obstacles." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Safe digging and placing" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Prevent digging and placing from repeating when holding the mouse buttons.\n" -"Enable this when you dig or place too often by accident." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Random input" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Enable random user input (only used for testing)." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Continuous forward" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Continuous forward movement, toggled by autoforward key.\n" -"Press the autoforward key again or the backwards movement to disable." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Touch screen threshold" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "The length in pixels it takes for touch screen interaction to start." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Fixed virtual joystick" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "(Android) Fixes the position of virtual joystick.\n" "If disabled, virtual joystick will center to first-touch's position." msgstr "" -#: src/settings_translation_file.cpp -msgid "Virtual joystick triggers Aux1 button" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "(Android) Use virtual joystick to trigger \"Aux1\" button.\n" @@ -2226,1471 +2099,103 @@ msgid "" "circle." msgstr "" -#: src/settings_translation_file.cpp -msgid "Enable joysticks" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Joystick ID" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "The identifier of the joystick to use" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Joystick type" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "The type of joystick" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Joystick button repetition interval" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"The time in seconds it takes between repeated events\n" -"when holding down a joystick button combination." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Joystick deadzone" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Joystick frustum sensitivity" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Forward key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for moving the player forward.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Backward key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for moving the player backward.\n" -"Will also disable autoforward, when active.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Left key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for moving the player left.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Right key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for moving the player right.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Jump key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for jumping.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Sneak key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for sneaking.\n" -"Also used for climbing down and descending in water if aux1_descends is " -"disabled.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Dig key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for digging.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Place key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for placing.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Inventory key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for opening the inventory.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Aux1 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for moving fast in fast mode.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Chat key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for opening the chat window.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Command key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for opening the chat window to type commands.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for opening the chat window to type local commands.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Range select key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for toggling unlimited view range.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Fly key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for toggling flying.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Pitch move key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for toggling pitch move mode.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Fast key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for toggling fast mode.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Noclip key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for toggling noclip mode.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar next key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the next item in the hotbar.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar previous key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the previous item in the hotbar.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mute key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for muting the game.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Inc. volume key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for increasing the volume.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Dec. volume key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for decreasing the volume.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Automatic forward key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for toggling autoforward.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Cinematic mode key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for toggling cinematic mode.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Minimap key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for toggling display of minimap.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for taking screenshots.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Drop item key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for dropping the currently selected item.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "View zoom key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key to use view zoom when possible.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 1 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the first hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 2 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the second hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 3 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the third hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 4 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the fourth hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 5 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the fifth hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 6 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the sixth hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 7 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the seventh hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 8 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the eighth hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 9 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the ninth hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 10 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the tenth hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 11 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the 11th hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 12 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the 12th hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 13 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the 13th hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 14 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the 14th hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 15 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the 15th hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 16 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the 16th hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 17 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the 17th hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 18 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the 18th hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 19 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the 19th hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 20 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the 20th hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 21 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the 21st hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 22 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the 22nd hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 23 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the 23rd hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 24 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the 24th hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 25 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the 25th hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 26 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the 26th hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 27 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the 27th hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 28 key" -msgstr "" - #: src/settings_translation_file.cpp msgid "" -"Key for selecting the 28th hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 29 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the 29th hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 30 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the 30th hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 31 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the 31st hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hotbar slot 32 key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for selecting the 32nd hotbar slot.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "HUD toggle key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for toggling the display of the HUD.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Chat toggle key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for toggling the display of chat.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Large chat console key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for toggling the display of the large chat console.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Fog toggle key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for toggling the display of fog.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Camera update toggle key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for toggling the camera update. Only used for development\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Debug info toggle key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for toggling the display of debug info.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Profiler toggle key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for toggling the display of the profiler. Used for development.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Toggle camera mode key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for switching between first- and third-person camera.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "View range increase key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for increasing the viewing range.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "View range decrease key" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Key for decreasing the viewing range.\n" -"See http://irrlicht.sourceforge.net/docu/namespaceirr." -"html#a54da2a0e231901735e3da1b0edf72eb3" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Graphics" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "In-Game" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Basic" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Whether nametag backgrounds should be shown by default.\n" -"Mods may still set a background." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "VBO" +"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n" +"Can be used to move a desired point to (0, 0) to create a\n" +"suitable spawn point, or to allow 'zooming in' on a desired\n" +"point by increasing 'scale'.\n" +"The default is tuned for a suitable spawn point for Mandelbrot\n" +"sets with default parameters, it may need altering in other\n" +"situations.\n" +"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes." msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable vertex buffer objects.\n" -"This should greatly improve graphics performance." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Fog" +"(X,Y,Z) scale of fractal in nodes.\n" +"Actual fractal size will be 2 to 3 times larger.\n" +"These numbers can be made very large, the fractal does\n" +"not have to fit inside the world.\n" +"Increase these to 'zoom' into the detail of the fractal.\n" +"Default is for a vertically-squashed shape suitable for\n" +"an island, set all 3 numbers equal for the raw shape." msgstr "" #: src/settings_translation_file.cpp -msgid "Whether to fog out the end of the visible area." +msgid "2D noise that controls the shape/size of ridged mountains." msgstr "" #: src/settings_translation_file.cpp -msgid "Leaves style" +msgid "2D noise that controls the shape/size of rolling hills." msgstr "" #: src/settings_translation_file.cpp -msgid "" -"Leaves style:\n" -"- Fancy: all faces visible\n" -"- Simple: only outer faces, if defined special_tiles are used\n" -"- Opaque: disable transparency" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Connect glass" +msgid "2D noise that controls the shape/size of step mountains." msgstr "" #: src/settings_translation_file.cpp -msgid "Connects glass if supported by node." +msgid "2D noise that controls the size/occurrence of ridged mountain ranges." msgstr "" #: src/settings_translation_file.cpp -msgid "Smooth lighting" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Enable smooth lighting with simple ambient occlusion.\n" -"Disable for speed or for different looks." +msgid "2D noise that controls the size/occurrence of rolling hills." msgstr "" #: src/settings_translation_file.cpp -msgid "Clouds" +msgid "2D noise that controls the size/occurrence of step mountain ranges." msgstr "" #: src/settings_translation_file.cpp -msgid "Clouds are a client side effect." +msgid "2D noise that locates the river valleys and channels." msgstr "" #: src/settings_translation_file.cpp msgid "3D clouds" msgstr "" -#: src/settings_translation_file.cpp -msgid "Use 3D cloud look instead of flat." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Node highlighting" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Method used to highlight selected object." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Digging particles" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Adds particles when digging a node." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Filtering" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mipmapping" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" -"especially when using a high resolution texture pack.\n" -"Gamma correct downscaling is not supported." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Anisotropic filtering" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Use anisotropic filtering when viewing at textures from an angle." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Bilinear filtering" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Use bilinear filtering when scaling textures." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Trilinear filtering" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Use trilinear filtering when scaling textures." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Clean transparent textures" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Filtered textures can blend RGB values with fully-transparent neighbors,\n" -"which PNG optimizers usually discard, often resulting in dark or\n" -"light edges to transparent textures. Apply a filter to clean that up\n" -"at texture load time. This is automatically enabled if mipmapping is enabled." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Minimum texture size" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" -"can be blurred, so automatically upscale them with nearest-neighbor\n" -"interpolation to preserve crisp pixels. This sets the minimum texture size\n" -"for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" -"bilinear/trilinear/anisotropic filtering is enabled.\n" -"This is also used as the base node texture size for world-aligned\n" -"texture autoscaling." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "FSAA" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Use multi-sample antialiasing (MSAA) to smooth out block edges.\n" -"This algorithm smooths out the 3D viewport while keeping the image sharp,\n" -"but it doesn't affect the insides of textures\n" -"(which is especially noticeable with transparent textures).\n" -"Visible spaces appear between nodes when shaders are disabled.\n" -"If set to 0, MSAA is disabled.\n" -"A restart is required after changing this option." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Undersampling" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Undersampling is similar to using a lower screen resolution, but it applies\n" -"to the game world only, keeping the GUI intact.\n" -"It should give a significant performance boost at the cost of less detailed " -"image.\n" -"Higher values result in a less detailed image." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Shaders allow advanced visual effects and may increase performance on some " -"video\n" -"cards.\n" -"This only works with the OpenGL video backend." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Shader path" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Path to shader directory. If no path is defined, default location will be " -"used." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Filmic tone mapping" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Enables Hable's 'Uncharted 2' filmic tone mapping.\n" -"Simulates the tone curve of photographic film and how this approximates the\n" -"appearance of high dynamic range images. Mid-range contrast is slightly\n" -"enhanced, highlights and shadows are gradually compressed." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Waving Nodes" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Waving liquids" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Set to true to enable waving liquids (like water).\n" -"Requires shaders to be enabled." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Waving liquids wave height" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"The maximum height of the surface of waving liquids.\n" -"4.0 = Wave height is two nodes.\n" -"0.0 = Wave doesn't move at all.\n" -"Default is 1.0 (1/2 node).\n" -"Requires waving liquids to be enabled." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Waving liquids wavelength" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Length of liquid waves.\n" -"Requires waving liquids to be enabled." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Waving liquids wave speed" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"How fast liquid waves will move. Higher = faster.\n" -"If negative, liquid waves will move backwards.\n" -"Requires waving liquids to be enabled." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Waving leaves" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Set to true to enable waving leaves.\n" -"Requires shaders to be enabled." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Waving plants" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Set to true to enable waving plants.\n" -"Requires shaders to be enabled." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Set to true to enable Shadow Mapping.\n" -"Requires shaders to be enabled." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Shadow strength" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow strength.\n" -"Lower value means lighter shadows, higher value means darker shadows." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Shadow map max distance in nodes to render shadows" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Maximum distance to render shadows." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Shadow map texture size" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Texture size to render the shadow map on.\n" -"This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Shadow map texture in 32 bits" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Sets shadow texture quality to 32 bits.\n" -"On false, 16 bits texture will be used.\n" -"This can cause much more artifacts in the shadow." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Poisson filtering" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Shadow filter quality" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" -"but also uses more resources." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Colored shadows" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Enable colored shadows. \n" -"On true translucent nodes cast colored shadows. This is expensive." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Map update time" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Soft shadow radius" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Sky Body Orbit Tilt" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" -"Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Advanced" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Arm inertia" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Arm inertia, gives a more realistic movement of\n" -"the arm when the camera moves." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Maximum FPS" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"If FPS would go higher than this, limit it by sleeping\n" -"to not waste CPU power for no benefit." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "FPS when unfocused or paused" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Maximum FPS when the window is not focused, or when the game is paused." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Pause on lost window focus" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Open the pause menu when the window's focus is lost. Does not pause if a " -"formspec is\n" -"open." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Viewing range" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "View distance in nodes." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Near plane" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Camera 'near clipping plane' distance in nodes, between 0 and 0.25\n" -"Only works on GLES platforms. Most users will not need to change this.\n" -"Increasing can reduce artifacting on weaker GPUs.\n" -"0.1 = Default, 0.25 = Good value for weaker tablets." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Screen width" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Width component of the initial window size. Ignored in fullscreen mode." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Screen height" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Height component of the initial window size. Ignored in fullscreen mode." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Autosave screen size" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Save window size automatically when modified." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Full screen" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Fullscreen mode." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "VSync" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Vertical screen synchronization." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Field of view" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Field of view in degrees." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Light curve gamma" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Alters the light curve by applying 'gamma correction' to it.\n" -"Higher values make middle and lower light levels brighter.\n" -"Value '1.0' leaves the light curve unaltered.\n" -"This only has significant effect on daylight and artificial\n" -"light, it has very little effect on natural night light." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Light curve low gradient" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Gradient of light curve at minimum light level.\n" -"Controls the contrast of the lowest light levels." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Light curve high gradient" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Gradient of light curve at maximum light level.\n" -"Controls the contrast of the highest light levels." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Light curve boost" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Strength of light curve boost.\n" -"The 3 'boost' parameters define a range of the light\n" -"curve that is boosted in brightness." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Light curve boost center" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Center of light curve boost range.\n" -"Where 0.0 is minimum light level, 1.0 is maximum light level." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Light curve boost spread" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Spread of light curve boost range.\n" -"Controls the width of the range to be boosted.\n" -"Standard deviation of the light curve boost Gaussian." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Texture path" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Path to texture directory. All textures are first searched from here." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Video driver" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"The rendering back-end.\n" -"A restart is required after changing this.\n" -"Note: On Android, stick with OGLES1 if unsure! App may fail to start " -"otherwise.\n" -"On other platforms, OpenGL is recommended.\n" -"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Cloud radius" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Radius of cloud area stated in number of 64 node cloud squares.\n" -"Values larger than 26 will start to produce sharp cutoffs at cloud area " -"corners." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "View bobbing factor" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Enable view bobbing and amount of view bobbing.\n" -"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Fall bobbing factor" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Multiplier for fall bobbing.\n" -"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." -msgstr "" - #: src/settings_translation_file.cpp msgid "3D mode" msgstr "" +#: src/settings_translation_file.cpp +msgid "3D mode parallax strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining giant caverns." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D noise defining mountain structure and height.\n" +"Also defines structure of floatland mountain terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D noise defining structure of floatlands.\n" +"If altered from the default, the noise 'scale' (0.7 by default) may need\n" +"to be adjusted, as floatland tapering functions best when this noise has\n" +"a value range of approximately -2.0 to 2.0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining structure of river canyon walls." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise defining terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D noise that determines number of dungeons per mapchunk." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "3D support.\n" @@ -3706,202 +2211,101 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "3D mode parallax strength" +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." msgstr "" #: src/settings_translation_file.cpp -msgid "Strength of 3D mode parallax." +msgid "A message to be displayed to all clients when the server crashes." msgstr "" #: src/settings_translation_file.cpp -msgid "Console height" +msgid "A message to be displayed to all clients when the server shuts down." msgstr "" #: src/settings_translation_file.cpp -msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)." +msgid "ABM interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Console color" +msgid "ABM time budget" msgstr "" #: src/settings_translation_file.cpp -msgid "In-game chat console background color (R,G,B)." +msgid "Absolute limit of queued blocks to emerge" msgstr "" #: src/settings_translation_file.cpp -msgid "Console alpha" +msgid "Acceleration in air" msgstr "" #: src/settings_translation_file.cpp -msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgid "Acceleration of gravity, in nodes per second per second." msgstr "" #: src/settings_translation_file.cpp -msgid "Formspec Full-Screen Background Opacity" +msgid "Active Block Modifiers" msgstr "" #: src/settings_translation_file.cpp -msgid "Formspec full-screen background opacity (between 0 and 255)." +msgid "Active block management interval" msgstr "" #: src/settings_translation_file.cpp -msgid "Formspec Full-Screen Background Color" +msgid "Active block range" msgstr "" #: src/settings_translation_file.cpp -msgid "Formspec full-screen background color (R,G,B)." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Formspec Default Background Opacity" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Formspec default background opacity (between 0 and 255)." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Formspec Default Background Color" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Formspec default background color (R,G,B)." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Selection box color" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Selection box border color (R,G,B)." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Selection box width" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Width of the selection box lines around nodes." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Crosshair color" +msgid "Active object send range" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Crosshair color (R,G,B).\n" -"Also controls the object crosshair color" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." msgstr "" #: src/settings_translation_file.cpp -msgid "Crosshair alpha" +msgid "Adds particles when digging a node." msgstr "" #: src/settings_translation_file.cpp msgid "" -"Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." msgstr "" #: src/settings_translation_file.cpp -msgid "Recent Chat Messages" +msgid "Adjust the detected display density, used for scaling UI elements." msgstr "" #: src/settings_translation_file.cpp -msgid "Maximum number of recent chat messages to show" +#, c-format +msgid "" +"Adjusts the density of the floatland layer.\n" +"Increase value to increase density. Can be positive or negative.\n" +"Value = 0.0: 50% of volume is floatland.\n" +"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n" +"to be sure) creates a solid floatland layer." msgstr "" #: src/settings_translation_file.cpp -msgid "Desynchronize block animation" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Whether node texture animations should be desynchronized per mapblock." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Maximum hotbar width" +msgid "Advanced" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Maximum proportion of current window to be used for hotbar.\n" -"Useful if there's something to be displayed right or left of hotbar." +"Alters the light curve by applying 'gamma correction' to it.\n" +"Higher values make middle and lower light levels brighter.\n" +"Value '1.0' leaves the light curve unaltered.\n" +"This only has significant effect on daylight and artificial\n" +"light, it has very little effect on natural night light." msgstr "" #: src/settings_translation_file.cpp -msgid "HUD scale factor" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mesh cache" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Enables caching of facedir rotated meshes." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generation delay" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Delay between mesh updates on the client in ms. Increasing this will slow\n" -"down the rate of mesh updates, thus reducing jitter on slower clients." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mapblock mesh generator's MapBlock cache size in MB" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Size of the MapBlock cache of the mesh generator. Increasing this will\n" -"increase the cache hit %, reducing the data being copied from the main\n" -"thread, thus reducing jitter." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Minimap" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Enables minimap." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Round minimap" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Shape of the minimap. Enabled = round, disabled = square." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Minimap scan height" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"True = 256\n" -"False = 128\n" -"Usable to make minimap smoother on slower machines." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Colored fog" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgid "Always fly and fast" msgstr "" #: src/settings_translation_file.cpp @@ -3909,129 +2313,23 @@ msgid "Ambient occlusion gamma" msgstr "" #: src/settings_translation_file.cpp -msgid "" -"The strength (darkness) of node ambient-occlusion shading.\n" -"Lower is darker, Higher is lighter. The valid range of values for this\n" -"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" -"set to the nearest valid value." +msgid "Amount of messages a player may send per 10 seconds." msgstr "" #: src/settings_translation_file.cpp -msgid "Inventory items animations" +msgid "Amplifies the valleys." msgstr "" #: src/settings_translation_file.cpp -msgid "Enables animation of inventory items." +msgid "Anisotropic filtering" msgstr "" #: src/settings_translation_file.cpp -msgid "Fog start" +msgid "Announce server" msgstr "" #: src/settings_translation_file.cpp -msgid "Fraction of the visible distance at which fog starts to be rendered" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Opaque liquids" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Makes all liquids opaque" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "World-aligned textures mode" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Textures on a node may be aligned either to the node or to the world.\n" -"The former mode suits better things like machines, furniture, etc., while\n" -"the latter makes stairs and microblocks fit surroundings better.\n" -"However, as this possibility is new, thus may not be used by older servers,\n" -"this option allows enforcing it for certain node types. Note though that\n" -"that is considered EXPERIMENTAL and may not work properly." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Autoscaling mode" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"World-aligned textures may be scaled to span several nodes. However,\n" -"the server may not send the scale you want, especially if you use\n" -"a specially-designed texture pack; with this option, the client tries\n" -"to determine the scale automatically basing on the texture size.\n" -"See also texture_min_size.\n" -"Warning: This option is EXPERIMENTAL!" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Show entity selection boxes" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Show entity selection boxes\n" -"A restart is required after changing this." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Menus" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Clouds in menu" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Use a cloud animation for the main menu background." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "GUI scaling" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Scale GUI by a user specified value.\n" -"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" -"This will smooth over some of the rough edges, and blend\n" -"pixels when scaling down, at the cost of blurring some\n" -"edge pixels when images are scaled by non-integer sizes." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "GUI scaling filter" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"When gui_scaling_filter is true, all GUI images need to be\n" -"filtered in software, but some images are generated directly\n" -"to hardware (e.g. render-to-texture for nodes in inventory)." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "GUI scaling filter txr2img" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"When gui_scaling_filter_txr2img is true, copy those images\n" -"from hardware to software for scaling. When false, fall back\n" -"to the old scaling method, for video drivers that don't\n" -"properly support downloading textures back from hardware." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Tooltip delay" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Delay showing tooltips, stated in milliseconds." +msgid "Announce to this serverlist." msgstr "" #: src/settings_translation_file.cpp @@ -4043,1093 +2341,23 @@ msgid "Append item name to tooltip." msgstr "" #: src/settings_translation_file.cpp -msgid "FreeType fonts" +msgid "Apple trees noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Arm inertia" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether FreeType fonts are used, requires FreeType support to be compiled " -"in.\n" -"If disabled, bitmap and XML vectors fonts are used instead." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Font bold by default" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Font italic by default" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Font shadow" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Shadow offset (in pixels) of the default font. If 0, then shadow will not be " -"drawn." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Font shadow alpha" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Font size" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Font size of the default font in point (pt)." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Regular font path" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Path to the default font.\n" -"If “freetype” setting is enabled: Must be a TrueType font.\n" -"If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" -"The fallback font will be used if the font cannot be loaded." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Bold font path" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Italic font path" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Bold and italic font path" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Monospace font size" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Font size of the monospace font in point (pt)." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Monospace font path" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Path to the monospace font.\n" -"If “freetype” setting is enabled: Must be a TrueType font.\n" -"If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" -"This font is used for e.g. the console and profiler screen." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Bold monospace font path" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Italic monospace font path" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Bold and italic monospace font path" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Fallback font path" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Path of the fallback font.\n" -"If “freetype” setting is enabled: Must be a TrueType font.\n" -"If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" -"This font will be used for certain languages or if the default font is " -"unavailable." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Chat font size" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Font size of the recent chat text and chat prompt in point (pt).\n" -"Value 0 will use the default font size." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Screenshot folder" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Path to save screenshots at. Can be an absolute or relative path.\n" -"The folder will be created if it doesn't already exist." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Screenshot format" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Format of screenshots." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Screenshot quality" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Screenshot quality. Only used for JPEG format.\n" -"1 means worst quality; 100 means best quality.\n" -"Use 0 for default quality." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "DPI" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " -"screens." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Enable console window" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Windows systems only: Start Minetest with the command line window in the " -"background.\n" -"Contains the same information as the file debug.txt (default name)." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Sound" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Enables the sound system.\n" -"If disabled, this completely disables all sounds everywhere and the in-game\n" -"sound controls will be non-functional.\n" -"Changing this setting requires a restart." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Volume" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Volume of all sounds.\n" -"Requires the sound system to be enabled." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mute sound" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Whether to mute sounds. You can unmute sounds at any time, unless the\n" -"sound system is disabled (enable_sound=false).\n" -"In-game, you can toggle the mute state with the mute key or by using the\n" -"pause menu." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Client" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Network" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Server address" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Address to connect to.\n" -"Leave this blank to start a local server.\n" -"Note that the address field in the main menu overrides this setting." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Remote port" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Port to connect to (UDP).\n" -"Note that the port field in the main menu overrides this setting." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Prometheus listener address" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" -"enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Saving map received from server" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Save the map received by the client on disk." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Connect to external media server" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Enable usage of remote media server (if provided by server).\n" -"Remote servers offer a significantly faster way to download media (e.g. " -"textures)\n" -"when connecting to the server." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Client modding" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Enable Lua modding support on client.\n" -"This support is experimental and API can change." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Serverlist URL" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "URL to the server list displayed in the Multiplayer Tab." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Serverlist file" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"File in client/serverlist/ that contains your favorite servers displayed in " -"the\n" -"Multiplayer Tab." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Maximum size of the out chat queue" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Maximum size of the out chat queue.\n" -"0 to disable queueing and -1 to make the queue size unlimited." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Enable register confirmation" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Enable register confirmation when connecting to server.\n" -"If disabled, new account will be registered automatically." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mapblock unload timeout" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Timeout for client to remove unused map data from memory." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mapblock limit" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Maximum number of mapblocks for client to be kept in memory.\n" -"Set to -1 for unlimited amount." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Show debug info" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Whether to show the client debug info (has the same effect as hitting F5)." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Server / Singleplayer" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Server name" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Name of the server, to be displayed when players join and in the serverlist." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Server description" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Description of server, to be displayed when players join and in the " -"serverlist." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Domain name of server, to be displayed in the serverlist." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Server URL" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Homepage of server, to be displayed in the serverlist." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Announce server" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Automatically report to the serverlist." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Announce to this serverlist." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Strip color codes" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Remove color codes from incoming chat messages\n" -"Use this to stop players from being able to use color in their messages" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Server port" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Network port to listen (UDP).\n" -"This value will be overridden when starting from the main menu." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Bind address" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "The network interface that the server listens on." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Strict protocol checking" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Enable to disallow old clients from connecting.\n" -"Older clients are compatible in the sense that they will not crash when " -"connecting\n" -"to new servers, but they may not support all new features that you are " -"expecting." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Remote media" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Specifies URL from which client fetches media instead of using UDP.\n" -"$filename should be accessible from $remote_media$filename via cURL\n" -"(obviously, remote_media should end with a slash).\n" -"Files that are not present will be fetched the usual way." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "IPv6 server" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Enable/disable running an IPv6 server.\n" -"Ignored if bind_address is set.\n" -"Needs enable_ipv6 to be enabled." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Maximum simultaneous block sends per client" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Maximum number of blocks that are simultaneously sent per client.\n" -"The maximum total count is calculated dynamically:\n" -"max_total = ceil((#clients + max_users) * per_client / 4)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Delay in sending blocks after building" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"To reduce lag, block transfers are slowed down when a player is building " -"something.\n" -"This determines how long they are slowed down after placing or removing a " -"node." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Max. packets per iteration" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Maximum number of packets sent per send step, if you have a slow connection\n" -"try reducing it, but don't reduce it to a number below double of targeted\n" -"client number." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Map Compression Level for Network Transfer" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Default game" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Default game when creating a new world.\n" -"This will be overridden when creating a world from the main menu." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Message of the day" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Message of the day displayed to players connecting." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Maximum users" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Maximum number of players that can be connected simultaneously." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Map directory" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"World directory (everything in the world is stored here).\n" -"Not needed if starting from the main menu." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Item entity TTL" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Time in seconds for item entity (dropped items) to live.\n" -"Setting it to -1 disables the feature." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Default stack size" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Specifies the default stack size of nodes, items and tools.\n" -"Note that mods or games may explicitly set a stack for certain (or all) " -"items." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Damage" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Enable players getting damage and dying." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Creative" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Enable creative mode for all players" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Fixed map seed" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"A chosen map seed for a new map, leave empty for random.\n" -"Will be overridden when creating a new world in the main menu." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Default password" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "New users need to input this password." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Default privileges" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"The privileges that new users automatically get.\n" -"See /privs in game for a full list on your server and mod configuration." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Basic privileges" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Privileges that players with basic_privs can grant" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Unlimited player transfer distance" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Whether players are shown to clients without any range limit.\n" -"Deprecated, use the setting player_transfer_distance instead." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Player transfer distance" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Player versus player" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Whether to allow players to damage and kill each other." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mod channels" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Enable mod channels support." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Static spawnpoint" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "If this is set, players will always (re)spawn at the given position." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Disallow empty passwords" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "If enabled, new players cannot join with an empty password." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Disable anticheat" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "If enabled, disable cheat prevention in multiplayer." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Rollback recording" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"If enabled, actions are recorded for rollback.\n" -"This option is only read when server starts." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Chat message format" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Format of player chat messages. The following strings are valid " -"placeholders:\n" -"@name, @message, @timestamp (optional)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Chat command time message threshold" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"If the execution of a chat command takes longer than this specified time in\n" -"seconds, add the time information to the chat command message" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Shutdown message" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "A message to be displayed to all clients when the server shuts down." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Crash message" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "A message to be displayed to all clients when the server crashes." +"Arm inertia, gives a more realistic movement of\n" +"the arm when the camera moves." msgstr "" #: src/settings_translation_file.cpp msgid "Ask to reconnect after crash" msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Whether to ask clients to reconnect after a (Lua) crash.\n" -"Set this to true if your server is set up to restart automatically." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Active object send range" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"From how far clients know about objects, stated in mapblocks (16 nodes).\n" -"\n" -"Setting this larger than active_block_range will also cause the server\n" -"to maintain active objects up to this distance in the direction the\n" -"player is looking. (This can avoid mobs suddenly disappearing from view)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Active block range" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"The radius of the volume of blocks around every player that is subject to " -"the\n" -"active block stuff, stated in mapblocks (16 nodes).\n" -"In active blocks objects are loaded and ABMs run.\n" -"This is also the minimum range in which active objects (mobs) are " -"maintained.\n" -"This should be configured together with active_object_send_range_blocks." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Max block send distance" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Maximum forceloaded blocks" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Maximum number of forceloaded mapblocks." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Time send interval" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Interval of sending time of day to clients." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Time speed" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Controls length of day/night cycle.\n" -"Examples:\n" -"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "World start time" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Time of day when a new world is started, in millihours (0-23999)." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Map save interval" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Interval of saving important changes in the world, stated in seconds." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Chat message max length" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Set the maximum character length of a chat message sent by clients." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Chat message count limit" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Amount of messages a player may send per 10 seconds." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Chat message kick threshold" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Kick players who sent more than X messages per 10 seconds." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Physics" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Default acceleration" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Horizontal and vertical acceleration on ground or when climbing,\n" -"in nodes per second per second." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Acceleration in air" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Horizontal acceleration in air when jumping or falling,\n" -"in nodes per second per second." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Fast mode acceleration" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Horizontal and vertical acceleration in fast mode,\n" -"in nodes per second per second." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Walking speed" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Walking and flying speed, in nodes per second." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Sneaking speed" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Sneaking speed, in nodes per second." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Fast mode speed" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Walking, flying and climbing speed in fast mode, in nodes per second." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Climbing speed" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Vertical climbing speed, in nodes per second." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Jumping speed" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Initial vertical speed when jumping, in nodes per second." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Liquid fluidity" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Decrease this to increase liquid resistance to movement." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Liquid fluidity smoothing" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Maximum liquid resistance. Controls deceleration when entering liquid at\n" -"high speed." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Liquid sinking" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Controls sinking speed in liquid." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Gravity" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Acceleration of gravity, in nodes per second per second." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Deprecated Lua API handling" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Handling for deprecated Lua API calls:\n" -"- none: Do not log deprecated calls\n" -"- log: mimic and log backtrace of deprecated call (default).\n" -"- error: abort on usage of deprecated call (suggested for mod developers)." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Max. clearobjects extra blocks" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" -"memory consumption (4096=100MB, as a rule of thumb)." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Unload unused server data" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"How much the server will wait before unloading unused mapblocks.\n" -"Higher value is smoother, but will use more RAM." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Maximum objects per block" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Maximum number of statically stored objects in a block." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Synchronous SQLite" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Map Compression Level for Disk Storage" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Dedicated server step" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Length of a server tick and the interval at which objects are generally " -"updated over\n" -"network." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Active block management interval" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Length of time between active block management cycles" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "ABM interval" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Length of time between Active Block Modifier (ABM) execution cycles" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "ABM time budget" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"The time budget allowed for ABMs to execute on each step\n" -"(as a fraction of the ABM Interval)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "NodeTimer interval" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Length of time between NodeTimer execution cycles" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Ignore world errors" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"If enabled, invalid world data won't cause the server to shut down.\n" -"Only enable this if you know what you are doing." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Liquid loop max" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Max liquids processed per step." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Liquid queue purge time" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"The time (in seconds) that the liquids queue may grow beyond processing\n" -"capacity until an attempt is made to decrease its size by dumping old queue\n" -"items. A value of 0 disables the functionality." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Liquid update tick" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Liquid update interval in seconds." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Block send optimize distance" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "At this distance the server will aggressively optimize which blocks are sent " @@ -5146,7 +2374,1410 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Server side occlusion culling" +msgid "Automatic forward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automatically jump up single-node obstacles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automatically report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Autosave screen size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Autoscaling mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Aux1 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Aux1 key for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Backward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Base ground level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Base terrain height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Basic privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Beach noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Beach noise threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bind address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Biome API temperature and humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Biome noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Block send optimize distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold and italic font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold and italic monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bold monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Builtin" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Camera 'near clipping plane' distance in nodes, between 0 and 0.25\n" +"Only works on GLES platforms. Most users will not need to change this.\n" +"Increasing can reduce artifacting on weaker GPUs.\n" +"0.1 = Default, 0.25 = Good value for weaker tablets." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise #1" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave noise #2" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave1 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cave2 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern taper" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cavern upper limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Center of light curve boost range.\n" +"Where 0.0 is minimum light level, 1.0 is maximum light level." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat command time message threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat commands" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message count limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message kick threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat message max length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat weblinks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cinematic mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client modding" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client side modding restrictions" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client side node lookup range restriction" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds in menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Colored shadows" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of flags to hide in the content repository.\n" +"\"nonfree\" can be used to hide packages which do not qualify as 'free " +"software',\n" +"as defined by the Free Software Foundation.\n" +"You can also specify content ratings.\n" +"These flags are independent from Minetest versions,\n" +"so see a full list at https://content.minetest.net/help/content_flags/" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of mods that are allowed to access HTTP APIs, which\n" +"allow them to upload and download data to/from the internet." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Command key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect glass" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect to external media server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB Flag Blacklist" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB Max Concurrent Downloads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "ContentDB URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Continuous forward movement, toggled by autoforward key.\n" +"Press the autoforward key again or the backwards movement to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples:\n" +"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls sinking speed in liquid." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls steepness/depth of lake depressions." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls steepness/height of hills." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls width of tunnels, a smaller value creates wider tunnels.\n" +"Value >= 10.0 completely disables generation of tunnels and avoids the\n" +"intensive noise calculations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Creative" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Crosshair alpha (opaqueness, between 0 and 255).\n" +"This also applies to the object crosshair." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Crosshair color (R,G,B).\n" +"Also controls the object crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Damage" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log file size threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dec. volume key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Decrease this to increase liquid resistance to movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default password" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default report format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default stack size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" +"but also uses more resources." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines areas where trees have apples." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines areas with sandy beaches." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines distribution of higher terrain and steepness of cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines distribution of higher terrain." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines full size of caverns, smaller values create larger caverns." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines large-scale river channel structure." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines location and terrain of optional hills and lakes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the base ground level." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the depth of the river channel." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the width of the river channel." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the width of the river valley." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines tree areas and tree density." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Delay between mesh updates on the client in ms. Increasing this will slow\n" +"down the rate of mesh updates, thus reducing jitter on slower clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay in sending blocks after building" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Depth below which you'll find giant caverns." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Depth below which you'll find large caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desert noise threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Deserts occur when np_biome exceeds this value.\n" +"When the 'snowbiomes' flag is enabled, this is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dig key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Digging particles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disable anticheat" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double tap jump for fly" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double-tapping the jump key toggles fly mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug information." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon maximum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon minimum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dungeon noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable IPv6 support (for both client and server).\n" +"Required for IPv6 connections to work at all." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable Lua modding support on client.\n" +"This support is experimental and API can change." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" +"On true translucent nodes cast colored shadows. This is expensive." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable console window" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable creative mode for all players" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable joysticks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod channels support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable register confirmation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable register confirmation when connecting to server.\n" +"If disabled, new account will be registered automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable vertex buffer objects.\n" +"This should greatly improve graphics performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable view bobbing and amount of view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server.\n" +"Ignored if bind_address is set.\n" +"Needs enable_ipv6 to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables Hable's 'Uncharted 2' filmic tone mapping.\n" +"Simulates the tone curve of photographic film and how this approximates the\n" +"appearance of high dynamic range images. Mid-range contrast is slightly\n" +"enhanced, highlights and shadows are gradually compressed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables animation of inventory items." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables minimap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables the sound system.\n" +"If disabled, this completely disables all sounds everywhere and the in-game\n" +"sound controls will be non-functional.\n" +"Changing this setting requires a restart." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Engine profiling data print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Entity methods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Exponent of the floatland tapering. Alters the tapering behaviour.\n" +"Value = 1.0 creates a uniform, linear tapering.\n" +"Values > 1.0 create a smooth tapering suitable for the default separated\n" +"floatlands.\n" +"Values < 1.0 (for example 0.25) create a more defined surface level with\n" +"flatter lowlands, suitable for a solid floatland layer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS when unfocused or paused" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Factor noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via the \"Aux1\" key).\n" +"This requires the \"fast\" privilege on the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the\n" +"Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filler depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filler depth noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filmic tone mapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, often resulting in dark or\n" +"light edges to transparent textures. Apply a filter to clean that up\n" +"at texture load time. This is automatically enabled if mipmapping is enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "First of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "First of two 3D noises that together define tunnels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fixed virtual joystick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland density" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland maximum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland minimum Y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland taper exponent" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland tapering distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Floatland water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog start" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font bold by default" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font italic by default" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the default font in point (pt)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size of the monospace font in point (pt)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Font size of the recent chat text and chat prompt in point (pt).\n" +"Value 0 will use the default font size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Format of player chat messages. The following strings are valid " +"placeholders:\n" +"@name, @message, @timestamp (optional)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Format of screenshots." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Default Background Color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Default Background Opacity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Full-Screen Background Color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec Full-Screen Background Opacity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec default background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec default background opacity (between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec full-screen background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Formspec full-screen background opacity (between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Forward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fourth of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fractal type" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fraction of the visible distance at which fog starts to be rendered" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FreeType fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes).\n" +"\n" +"Setting this larger than active_block_range will also cause the server\n" +"to maintain active objects up to this distance in the direction the\n" +"player is looking. (This can avoid mobs suddenly disappearing from view)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Global callbacks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" +"and jungle grass, in all other mapgens this flag controls all decorations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Gradient of light curve at maximum light level.\n" +"Controls the contrast of the highest light levels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Gradient of light curve at minimum light level.\n" +"Controls the contrast of the lowest light levels." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ground level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ground noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HTTP mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD scale factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated Lua API calls:\n" +"- none: Do not log deprecated calls\n" +"- log: mimic and log backtrace of deprecated call (default).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Have the profiler instrument itself:\n" +"* Instrument an empty function.\n" +"This estimates the overhead, that instrumentation is adding (+1 function " +"call).\n" +"* Instrument the sampler being used to update the statistics." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Heat blend noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Heat noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Height component of the initial window size. Ignored in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height select noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hill steepness" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hill threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness1 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness2 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness3 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hilliness4 noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Horizontal acceleration in air when jumping or falling,\n" +"in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Horizontal and vertical acceleration in fast mode,\n" +"in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Horizontal and vertical acceleration on ground or when climbing,\n" +"in nodes per second per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar next key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar previous key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 1 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 10 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 11 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 12 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 13 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 14 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 15 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 16 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 17 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 18 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 19 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 2 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 20 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 21 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 22 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 23 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 24 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 25 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 26 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 27 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 28 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 29 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 3 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 30 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 31 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 32 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 4 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 5 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 6 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 7 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 8 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Hotbar slot 9 key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How deep to make rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How fast liquid waves will move. Higher = faster.\n" +"If negative, liquid waves will move backwards.\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How wide to make rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity blend noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Humidity variation for biomes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n" +"enabled." msgstr "" #: src/settings_translation_file.cpp @@ -5159,7 +3790,1674 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Client side modding restrictions" +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the \"noclip\" privilege on the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down " +"and\n" +"descending." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, makes move directions relative to the player's pitch when flying " +"or swimming." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If the CSM restriction for node range is enabled, get_node calls are " +"limited\n" +"to this distance from the player to the node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If the execution of a chat command takes longer than this specified time in\n" +"seconds, add the time information to the chat command message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If the file size of debug.txt exceeds the number of megabytes specified in\n" +"this setting when it is opened, the file is moved to debug.txt.1,\n" +"deleting an older debug.txt.1 if it exists.\n" +"debug.txt is only moved if this setting is positive." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-Game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inc. volume key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Initial vertical speed when jumping, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument builtin.\n" +"This is usually only needed by core/builtin contributors" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrument chat commands on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument global callback functions on registration.\n" +"(anything you pass to a minetest.register_*() function)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument the action function of Active Block Modifiers on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Instrument the action function of Loading Block Modifiers on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrument the methods of entities on registration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Instrumentation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inventory items animations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inventory key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Italic font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Italic monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Iterations of the recursive function.\n" +"Increasing this increases the amount of fine detail, but also\n" +"increases processing load.\n" +"At iterations = 20 this mapgen has a similar load to mapgen V7." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick ID" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick button repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick dead zone" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick frustum sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Joystick type" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"W component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Has no effect on 3D fractals.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"X component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"Y component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Julia set only.\n" +"Z component of hypercomplex constant.\n" +"Alters the shape of the fractal.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia w" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia x" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia y" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Julia z" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jump key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the volume.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for digging.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the volume.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"Will also disable autoforward, when active.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for muting the game.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type local commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for placing.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 11th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 12th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 13th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 14th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 15th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 16th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 17th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 18th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 19th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 20th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 21st hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 22nd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 23rd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 24th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 25th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 26th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 27th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 28th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 29th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 30th hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 31st hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the 32nd hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the eighth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the fifth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the first hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the fourth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the next item in the hotbar.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the ninth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the previous item in the hotbar.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the second hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the seventh hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the sixth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the tenth hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for selecting the third hotbar slot.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling autoforward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling pitch move mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camera update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the large chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key to use view zoom when possible.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Kick players who sent more than X messages per 10 seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lake steepness" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lake threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave maximum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave minimum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large cave proportion flooded" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Large chat console key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Left key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over\n" +"network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of liquid waves.\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between Active Block Modifier (ABM) execution cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between NodeTimer execution cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Length of time between active block management cycles" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost center" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve boost spread" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve high gradient" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Light curve low gradient" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n" +"Only mapchunks completely within the mapgen limit are generated.\n" +"Value is stored per-world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sinking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Load the game profiler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Load the game profiler to collect game profiling data.\n" +"Provides a /profiler command to access the compiled profile.\n" +"Useful for mod developers and server operators." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Loading Block Modifiers" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lower Y limit of dungeons." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Lower Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu script" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes all liquids opaque" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map Compression Level for Disk Storage" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map Compression Level for Network Transfer" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation attributes specific to Mapgen Carpathian." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen Flat.\n" +"Occasional lakes and hills can be added to the flat world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen Fractal.\n" +"'terrain' enables the generation of non-fractal terrain:\n" +"ocean, islands and underground." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen Valleys.\n" +"'altitude_chill': Reduces heat with altitude.\n" +"'humid_rivers': Increases humidity around rivers.\n" +"'vary_river_depth': If enabled, low humidity and high heat causes rivers\n" +"to become shallower and occasionally dry.\n" +"'altitude_dry': Reduces humidity with altitude." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation attributes specific to Mapgen v5." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen v6.\n" +"The 'snowbiomes' flag enables the new 5 biome system.\n" +"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" +"the 'jungles' flag is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen v7.\n" +"'ridges': Rivers.\n" +"'floatlands': Floating land masses in the atmosphere.\n" +"'caverns': Giant caves deep underground." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map shadows update frames" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock mesh generation delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock mesh generator's MapBlock cache size in MB" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Carpathian" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Carpathian specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Flat" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Flat specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Fractal" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Fractal specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V5" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V5 specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V6 specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V7" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen V7 specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Valleys" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen Valleys specific flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when the window is not focused, or when the game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum distance to render shadows." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum limit of random number of large caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum limit of random number of small caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum liquid resistance. Controls deceleration when entering liquid at\n" +"high speed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks that are simultaneously sent per client.\n" +"The maximum total count is calculated dynamically:\n" +"max_total = ceil((#clients + max_users) * per_client / 4)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"This limit is enforced per player." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"This limit is enforced per player." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of concurrent downloads. Downloads exceeding this limit will " +"be queued.\n" +"This should be lower than curl_parallel_limit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can be connected simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of recent chat messages to show" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneous block sends per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum size of the out chat queue" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum size of the out chat queue.\n" +"0 to disable queueing and -1 to make the queue size unlimited." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum time a file download (e.g. a mod download) may take, stated in " +"milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum time an interactive request (e.g. server list fetch) may take, " +"stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Menus" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Method used to highlight selected object." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimal level of logging to be written to chat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum limit of random number of large caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum limit of random number of small caves per mapchunk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mipmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mod channels" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modifies the size of the HUD elements." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain height noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain variation noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mountain zero level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mud noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mute key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mute sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this.\n" +"Current mapgens in a highly unstable state:\n" +"- The optional floatlands of v7 (disabled by default)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Near plane" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "NodeTimer interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noises" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use.\n" +"Value 0:\n" +"- Automatic selection. The number of emerge threads will be\n" +"- 'number of processors - 2', with a lower limit of 1.\n" +"Any other value:\n" +"- Specifies the number of emerge threads, with a lower limit of 1.\n" +"WARNING: Increasing the number of emerge threads increases engine mapgen\n" +"speed, but this may harm game performance by interfering with other\n" +"processes, especially in singleplayer and/or when running Lua code in\n" +"'on_generated'. For many users the optimum setting may be '1'." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between SQLite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Online Content Repository" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Opaque liquids" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Open the pause menu when the window's focus is lost. Does not pause if a " +"formspec is\n" +"open." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path of the fallback font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" +"This font will be used for certain languages or if the default font is " +"unavailable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to save screenshots at. Can be an absolute or relative path.\n" +"The folder will be created if it doesn't already exist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to shader directory. If no path is defined, default location will be " +"used." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to the default font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" +"The fallback font will be used if the font cannot be loaded." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Path to the monospace font.\n" +"If “freetype” setting is enabled: Must be a TrueType font.\n" +"If “freetype” setting is disabled: Must be a bitmap or XML vectors font.\n" +"This font is used for e.g. the console and profiler screen." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Pause on lost window focus" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks load from disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Per-player limit of queued blocks to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Pitch move key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Pitch move mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Place key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Place repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the \"fly\" privilege on the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Poisson filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Prevent digging and placing from repeating when holding the mouse buttons.\n" +"Enable this when you dig or place too often by accident." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Print the engine's profiling data in regular intervals (in seconds).\n" +"0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Privileges that players with basic_privs can grant" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Prometheus listener address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Prometheus listener address.\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"enable metrics listener for Prometheus on that address.\n" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Proportion of large caves that contain liquid." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Raises terrain to make valleys around the rivers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Range select key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Recent Chat Messages" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Regular font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Remove color codes from incoming chat messages\n" +"Use this to stop players from being able to use color in their messages" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Report path" msgstr "" #: src/settings_translation_file.cpp @@ -5177,792 +5475,7 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Client side node lookup range restriction" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"If the CSM restriction for node range is enabled, get_node calls are " -"limited\n" -"to this distance from the player to the node." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Security" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Enable mod security" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Prevent mods from doing insecure things like running shell commands." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Trusted mods" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Comma-separated list of trusted mods that are allowed to access insecure\n" -"functions even when mod security is on (via request_insecure_environment())." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "HTTP mods" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Comma-separated list of mods that are allowed to access HTTP APIs, which\n" -"allow them to upload and download data to/from the internet." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Profiling" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Load the game profiler" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Load the game profiler to collect game profiling data.\n" -"Provides a /profiler command to access the compiled profile.\n" -"Useful for mod developers and server operators." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Default report format" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"The default format in which profiles are being saved,\n" -"when calling `/profiler save [format]` without format." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Report path" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"The file path relative to your worldpath in which profiles will be saved to." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Instrumentation" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Entity methods" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Instrument the methods of entities on registration." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Active Block Modifiers" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Instrument the action function of Active Block Modifiers on registration." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Loading Block Modifiers" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Instrument the action function of Loading Block Modifiers on registration." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Global callbacks" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Instrument global callback functions on registration.\n" -"(anything you pass to a minetest.register_*() function)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Builtin" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Instrument builtin.\n" -"This is usually only needed by core/builtin contributors" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Profiler" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Have the profiler instrument itself:\n" -"* Instrument an empty function.\n" -"This estimates the overhead, that instrumentation is adding (+1 function " -"call).\n" -"* Instrument the sampler being used to update the statistics." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Client and Server" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Player name" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Name of the player.\n" -"When running a server, clients connecting with this name are admins.\n" -"When starting from the main menu, this is overridden." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Language" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Set the language. Leave empty to use the system language.\n" -"A restart is required after changing this." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Debug log level" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Level of logging to be written to debug.txt:\n" -"- (no logging)\n" -"- none (messages with no level)\n" -"- error\n" -"- warning\n" -"- action\n" -"- info\n" -"- verbose" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Debug log file size threshold" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"If the file size of debug.txt exceeds the number of megabytes specified in\n" -"this setting when it is opened, the file is moved to debug.txt.1,\n" -"deleting an older debug.txt.1 if it exists.\n" -"debug.txt is only moved if this setting is positive." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Chat log level" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Minimal level of logging to be written to chat." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "IPv6" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Enable IPv6 support (for both client and server).\n" -"Required for IPv6 connections to work at all." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "cURL interactive timeout" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Maximum time an interactive request (e.g. server list fetch) may take, " -"stated in milliseconds." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "cURL parallel limit" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Limits number of parallel HTTP requests. Affects:\n" -"- Media fetch if server uses remote_media setting.\n" -"- Serverlist download and server announcement.\n" -"- Downloads performed by main menu (e.g. mod manager).\n" -"Only has an effect if compiled with cURL." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "cURL file download timeout" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Maximum time a file download (e.g. a mod download) may take, stated in " -"milliseconds." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Main menu script" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Replaces the default main menu with a custom one." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Engine profiling data print interval" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Print the engine's profiling data in regular intervals (in seconds).\n" -"0 = disable. Useful for developers." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mapgen name" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Name of map generator to be used when creating a new world.\n" -"Creating a world in the main menu will override this.\n" -"Current mapgens in a highly unstable state:\n" -"- The optional floatlands of v7 (disabled by default)." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Water level" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Water surface level of the world." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Max block generate distance" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"From how far blocks are generated for clients, stated in mapblocks (16 " -"nodes)." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Map generation limit" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n" -"Only mapchunks completely within the mapgen limit are generated.\n" -"Value is stored per-world." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Global map generation attributes.\n" -"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Biome API temperature and humidity noise parameters" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Heat noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Temperature variation for biomes." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Heat blend noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Small-scale temperature variation for blending biomes on borders." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Humidity noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Humidity variation for biomes." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Humidity blend noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Small-scale humidity variation for blending biomes on borders." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mapgen V5" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mapgen V5 specific flags" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Map generation attributes specific to Mapgen v5." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Cave width" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Controls width of tunnels, a smaller value creates wider tunnels.\n" -"Value >= 10.0 completely disables generation of tunnels and avoids the\n" -"intensive noise calculations." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Large cave depth" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Y of upper limit of large caves." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Small cave minimum number" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Minimum limit of random number of small caves per mapchunk." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Small cave maximum number" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Maximum limit of random number of small caves per mapchunk." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Large cave minimum number" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Minimum limit of random number of large caves per mapchunk." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Large cave maximum number" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Maximum limit of random number of large caves per mapchunk." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Large cave proportion flooded" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Proportion of large caves that contain liquid." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Cavern limit" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Y-level of cavern upper limit." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Cavern taper" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Y-distance over which caverns expand to full size." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Cavern threshold" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Defines full size of caverns, smaller values create larger caverns." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Dungeon minimum Y" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Lower Y limit of dungeons." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Dungeon maximum Y" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Upper Y limit of dungeons." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Noises" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Filler depth noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Variation of biome filler depth." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Factor noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Variation of terrain vertical scale.\n" -"When noise is < -0.55 terrain is near-flat." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Height noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Y-level of average terrain surface." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Cave1 noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "First of two 3D noises that together define tunnels." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Cave2 noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Second of two 3D noises that together define tunnels." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Cavern noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "3D noise defining giant caverns." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Ground noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "3D noise defining terrain." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Dungeon noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "3D noise that determines number of dungeons per mapchunk." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mapgen V6" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mapgen V6 specific flags" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Map generation attributes specific to Mapgen v6.\n" -"The 'snowbiomes' flag enables the new 5 biome system.\n" -"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n" -"the 'jungles' flag is ignored." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Desert noise threshold" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Deserts occur when np_biome exceeds this value.\n" -"When the 'snowbiomes' flag is enabled, this is ignored." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Beach noise threshold" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Sandy beaches occur when np_beach exceeds this value." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Terrain base noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Y-level of lower terrain and seabed." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Terrain higher noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Y-level of higher terrain that creates cliffs." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Steepness noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Varies steepness of cliffs." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Height select noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Defines distribution of higher terrain." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mud noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Varies depth of biome surface nodes." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Beach noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Defines areas with sandy beaches." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Biome noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Cave noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Variation of number of caves." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Trees noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Defines tree areas and tree density." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Apple trees noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Defines areas where trees have apples." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mapgen V7" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mapgen V7 specific flags" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Map generation attributes specific to Mapgen v7.\n" -"'ridges': Rivers.\n" -"'floatlands': Floating land masses in the atmosphere.\n" -"'caverns': Giant caves deep underground." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mountain zero level" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Y of mountain density gradient zero level. Used to shift mountains " -"vertically." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Floatland minimum Y" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Lower Y limit of floatlands." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Floatland maximum Y" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Upper Y limit of floatlands." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Floatland tapering distance" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Y-distance over which floatlands taper from full density to nothing.\n" -"Tapering starts at this distance from the Y limit.\n" -"For a solid floatland layer, this controls the height of hills/mountains.\n" -"Must be less than or equal to half the distance between the Y limits." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Floatland taper exponent" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Exponent of the floatland tapering. Alters the tapering behaviour.\n" -"Value = 1.0 creates a uniform, linear tapering.\n" -"Values > 1.0 create a smooth tapering suitable for the default separated\n" -"floatlands.\n" -"Values < 1.0 (for example 0.25) create a more defined surface level with\n" -"flatter lowlands, suitable for a solid floatland layer." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Floatland density" -msgstr "" - -#: src/settings_translation_file.cpp -#, c-format -msgid "" -"Adjusts the density of the floatland layer.\n" -"Increase value to increase density. Can be positive or negative.\n" -"Value = 0.0: 50% of volume is floatland.\n" -"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n" -"to be sure) creates a solid floatland layer." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Floatland water level" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Surface level of optional water placed on a solid floatland layer.\n" -"Water is disabled by default and will only be placed if this value is set\n" -"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n" -"upper tapering).\n" -"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n" -"When enabling water placement the floatlands must be configured and tested\n" -"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n" -"required value depending on 'mgv7_np_floatland'), to avoid\n" -"server-intensive extreme water flow and to avoid vast flooding of the\n" -"world surface below." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Terrain alternative noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Terrain persistence noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Varies roughness of terrain.\n" -"Defines the 'persistence' value for terrain_base and terrain_alt noises." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Defines distribution of higher terrain and steepness of cliffs." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mountain height noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Variation of maximum mountain height (in nodes)." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Ridge underwater noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Defines large-scale river channel structure." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mountain noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"3D noise defining mountain structure and height.\n" -"Also defines structure of floatland mountain terrain." +msgid "Ridge mountain spread noise" msgstr "" #: src/settings_translation_file.cpp @@ -5970,127 +5483,7 @@ msgid "Ridge noise" msgstr "" #: src/settings_translation_file.cpp -msgid "3D noise defining structure of river canyon walls." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Floatland noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"3D noise defining structure of floatlands.\n" -"If altered from the default, the noise 'scale' (0.7 by default) may need\n" -"to be adjusted, as floatland tapering functions best when this noise has\n" -"a value range of approximately -2.0 to 2.0." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mapgen Carpathian" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mapgen Carpathian specific flags" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Map generation attributes specific to Mapgen Carpathian." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Base ground level" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Defines the base ground level." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "River channel width" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Defines the width of the river channel." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "River channel depth" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Defines the depth of the river channel." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "River valley width" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Defines the width of the river valley." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hilliness1 noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "First of 4 2D noises that together define hill/mountain range height." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hilliness2 noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Second of 4 2D noises that together define hill/mountain range height." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hilliness3 noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Third of 4 2D noises that together define hill/mountain range height." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Hilliness4 noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Fourth of 4 2D noises that together define hill/mountain range height." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Rolling hills spread noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "2D noise that controls the size/occurrence of rolling hills." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Ridge mountain spread noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "2D noise that controls the size/occurrence of ridged mountain ranges." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Step mountain spread noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "2D noise that controls the size/occurrence of step mountain ranges." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Rolling hill size noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "2D noise that controls the shape/size of rolling hills." +msgid "Ridge underwater noise" msgstr "" #: src/settings_translation_file.cpp @@ -6098,15 +5491,19 @@ msgid "Ridged mountain size noise" msgstr "" #: src/settings_translation_file.cpp -msgid "2D noise that controls the shape/size of ridged mountains." +msgid "Right key" msgstr "" #: src/settings_translation_file.cpp -msgid "Step mountain size noise" +msgid "River channel depth" msgstr "" #: src/settings_translation_file.cpp -msgid "2D noise that controls the shape/size of step mountains." +msgid "River channel width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "River depth" msgstr "" #: src/settings_translation_file.cpp @@ -6114,102 +5511,115 @@ msgid "River noise" msgstr "" #: src/settings_translation_file.cpp -msgid "2D noise that locates the river valleys and channels." +msgid "River size" msgstr "" #: src/settings_translation_file.cpp -msgid "Mountain variation noise" +msgid "River valley width" msgstr "" #: src/settings_translation_file.cpp -msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations." +msgid "Rollback recording" msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen Flat" +msgid "Rolling hill size noise" msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen Flat specific flags" +msgid "Rolling hills spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Safe digging and placing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sandy beaches occur when np_beach exceeds this value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save window size automatically when modified." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Map generation attributes specific to Mapgen Flat.\n" -"Occasional lakes and hills can be added to the flat world." +"Scale GUI by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." msgstr "" #: src/settings_translation_file.cpp -msgid "Ground level" +msgid "Screen height" msgstr "" #: src/settings_translation_file.cpp -msgid "Y of flat ground." +msgid "Screen width" msgstr "" #: src/settings_translation_file.cpp -msgid "Lake threshold" +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot format" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot quality" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Terrain noise threshold for lakes.\n" -"Controls proportion of world area covered by lakes.\n" -"Adjust towards 0.0 for a larger proportion." +"Screenshot quality. Only used for JPEG format.\n" +"1 means worst quality; 100 means best quality.\n" +"Use 0 for default quality." msgstr "" #: src/settings_translation_file.cpp -msgid "Lake steepness" +msgid "Seabed noise" msgstr "" #: src/settings_translation_file.cpp -msgid "Controls steepness/depth of lake depressions." +msgid "Second of 4 2D noises that together define hill/mountain range height." msgstr "" #: src/settings_translation_file.cpp -msgid "Hill threshold" +msgid "Second of two 3D noises that together define tunnels." msgstr "" #: src/settings_translation_file.cpp -msgid "" -"Terrain noise threshold for hills.\n" -"Controls proportion of world area covered by hills.\n" -"Adjust towards 0.0 for a larger proportion." +msgid "Security" msgstr "" #: src/settings_translation_file.cpp -msgid "Hill steepness" +msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous" msgstr "" #: src/settings_translation_file.cpp -msgid "Controls steepness/height of hills." +msgid "Selection box border color (R,G,B)." msgstr "" #: src/settings_translation_file.cpp -msgid "Terrain noise" +msgid "Selection box color" msgstr "" #: src/settings_translation_file.cpp -msgid "Defines location and terrain of optional hills and lakes." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mapgen Fractal" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mapgen Fractal specific flags" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"Map generation attributes specific to Mapgen Fractal.\n" -"'terrain' enables the generation of non-fractal terrain:\n" -"ocean, islands and underground." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Fractal type" +msgid "Selection box width" msgstr "" #: src/settings_translation_file.cpp @@ -6236,217 +5646,164 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Iterations" +msgid "Server / Singleplayer" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server description" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server side occlusion culling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist file" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Iterations of the recursive function.\n" -"Increasing this increases the amount of fine detail, but also\n" -"increases processing load.\n" -"At iterations = 20 this mapgen has a similar load to mapgen V7." +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Set the maximum character length of a chat message sent by clients." msgstr "" #: src/settings_translation_file.cpp msgid "" -"(X,Y,Z) scale of fractal in nodes.\n" -"Actual fractal size will be 2 to 3 times larger.\n" -"These numbers can be made very large, the fractal does\n" -"not have to fit inside the world.\n" -"Increase these to 'zoom' into the detail of the fractal.\n" -"Default is for a vertically-squashed shape suitable for\n" -"an island, set all 3 numbers equal for the raw shape." +"Set the shadow strength.\n" +"Lower value means lighter shadows, higher value means darker shadows." msgstr "" #: src/settings_translation_file.cpp msgid "" -"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n" -"Can be used to move a desired point to (0, 0) to create a\n" -"suitable spawn point, or to allow 'zooming in' on a desired\n" -"point by increasing 'scale'.\n" -"The default is tuned for a suitable spawn point for Mandelbrot\n" -"sets with default parameters, it may need altering in other\n" -"situations.\n" -"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Slice w" +"Set the soft shadow radius size.\n" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"W coordinate of the generated 3D slice of a 4D fractal.\n" -"Determines which 3D slice of the 4D shape is generated.\n" -"Alters the shape of the fractal.\n" -"Has no effect on 3D fractals.\n" -"Range roughly -2 to 2." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Julia x" +"Set the tilt of Sun/Moon orbit in degrees.\n" +"Value of 0 means no tilt / vertical orbit.\n" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Julia set only.\n" -"X component of hypercomplex constant.\n" -"Alters the shape of the fractal.\n" -"Range roughly -2 to 2." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Julia y" +"Set to true to enable Shadow Mapping.\n" +"Requires shaders to be enabled." msgstr "" #: src/settings_translation_file.cpp msgid "" -"Julia set only.\n" -"Y component of hypercomplex constant.\n" -"Alters the shape of the fractal.\n" -"Range roughly -2 to 2." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Julia z" +"Set to true to enable waving leaves.\n" +"Requires shaders to be enabled." msgstr "" #: src/settings_translation_file.cpp msgid "" -"Julia set only.\n" -"Z component of hypercomplex constant.\n" -"Alters the shape of the fractal.\n" -"Range roughly -2 to 2." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Julia w" +"Set to true to enable waving liquids (like water).\n" +"Requires shaders to be enabled." msgstr "" #: src/settings_translation_file.cpp msgid "" -"Julia set only.\n" -"W component of hypercomplex constant.\n" -"Alters the shape of the fractal.\n" -"Has no effect on 3D fractals.\n" -"Range roughly -2 to 2." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Seabed noise" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Y-level of seabed." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mapgen Valleys" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Mapgen Valleys specific flags" +"Set to true to enable waving plants.\n" +"Requires shaders to be enabled." msgstr "" #: src/settings_translation_file.cpp msgid "" -"Map generation attributes specific to Mapgen Valleys.\n" -"'altitude_chill': Reduces heat with altitude.\n" -"'humid_rivers': Increases humidity around rivers.\n" -"'vary_river_depth': If enabled, low humidity and high heat causes rivers\n" -"to become shallower and occasionally dry.\n" -"'altitude_dry': Reduces humidity with altitude." +"Sets shadow texture quality to 32 bits.\n" +"On false, 16 bits texture will be used.\n" +"This can cause much more artifacts in the shadow." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shader path" msgstr "" #: src/settings_translation_file.cpp msgid "" -"The vertical distance over which heat drops by 20 if 'altitude_chill' is\n" -"enabled. Also the vertical distance over which humidity drops by 10 if\n" -"'altitude_dry' is enabled." +"Shaders allow advanced visual effects and may increase performance on some " +"video\n" +"cards.\n" +"This only works with the OpenGL video backend." msgstr "" #: src/settings_translation_file.cpp -msgid "Depth below which you'll find large caves." +msgid "Shadow filter quality" msgstr "" #: src/settings_translation_file.cpp -msgid "Cavern upper limit" +msgid "Shadow map max distance in nodes to render shadows" msgstr "" #: src/settings_translation_file.cpp -msgid "Depth below which you'll find giant caverns." +msgid "Shadow map texture in 32 bits" msgstr "" #: src/settings_translation_file.cpp -msgid "River depth" +msgid "Shadow map texture size" msgstr "" #: src/settings_translation_file.cpp -msgid "How deep to make rivers." +msgid "" +"Shadow offset (in pixels) of the default font. If 0, then shadow will not be " +"drawn." msgstr "" #: src/settings_translation_file.cpp -msgid "River size" +msgid "Shadow strength" msgstr "" #: src/settings_translation_file.cpp -msgid "How wide to make rivers." +msgid "Shape of the minimap. Enabled = round, disabled = square." msgstr "" #: src/settings_translation_file.cpp -msgid "Cave noise #1" +msgid "Show debug info" msgstr "" #: src/settings_translation_file.cpp -msgid "Cave noise #2" +msgid "Show entity selection boxes" msgstr "" #: src/settings_translation_file.cpp -msgid "Filler depth" +msgid "" +"Show entity selection boxes\n" +"A restart is required after changing this." msgstr "" #: src/settings_translation_file.cpp -msgid "The depth of dirt or other biome filler node." +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp -msgid "Terrain height" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Base terrain height." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Valley depth" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Raises terrain to make valleys around the rivers." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Valley fill" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Slope and fill work together to modify the heights." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Valley profile" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Amplifies the valleys." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Valley slope" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Chunk size" +msgid "Shutdown message" msgstr "" #: src/settings_translation_file.cpp @@ -6460,65 +5817,222 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp -msgid "Mapgen debug" +msgid "" +"Size of the MapBlock cache of the mesh generator. Increasing this will\n" +"increase the cache hit %, reducing the data being copied from the main\n" +"thread, thus reducing jitter." msgstr "" #: src/settings_translation_file.cpp -msgid "Dump the mapgen debug information." +msgid "Sky Body Orbit Tilt" msgstr "" #: src/settings_translation_file.cpp -msgid "Absolute limit of queued blocks to emerge" +msgid "Slice w" msgstr "" #: src/settings_translation_file.cpp -msgid "Maximum number of blocks that can be queued for loading." +msgid "Slope and fill work together to modify the heights." msgstr "" #: src/settings_translation_file.cpp -msgid "Per-player limit of queued blocks load from disk" +msgid "Small cave maximum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small cave minimum number" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small-scale humidity variation for blending biomes on borders." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Small-scale temperature variation for blending biomes on borders." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooth lighting" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Maximum number of blocks to be queued that are to be loaded from file.\n" -"This limit is enforced per player." +"Smooths camera when looking around. Also called look or mouse smoothing.\n" +"Useful for recording videos." msgstr "" #: src/settings_translation_file.cpp -msgid "Per-player limit of queued blocks to generate" +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneak key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneaking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneaking speed, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Soft shadow radius" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sound" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Maximum number of blocks to be queued that are to be generated.\n" -"This limit is enforced per player." -msgstr "" - -#: src/settings_translation_file.cpp -msgid "Number of emerge threads" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." msgstr "" #: src/settings_translation_file.cpp msgid "" -"Number of emerge threads to use.\n" -"Value 0:\n" -"- Automatic selection. The number of emerge threads will be\n" -"- 'number of processors - 2', with a lower limit of 1.\n" -"Any other value:\n" -"- Specifies the number of emerge threads, with a lower limit of 1.\n" -"WARNING: Increasing the number of emerge threads increases engine mapgen\n" -"speed, but this may harm game performance by interfering with other\n" -"processes, especially in singleplayer and/or when running Lua code in\n" -"'on_generated'. For many users the optimum setting may be '1'." +"Specifies the default stack size of nodes, items and tools.\n" +"Note that mods or games may explicitly set a stack for certain (or all) " +"items." msgstr "" #: src/settings_translation_file.cpp -msgid "Online Content Repository" +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" msgstr "" #: src/settings_translation_file.cpp -msgid "ContentDB URL" +msgid "" +"Spread of light curve boost range.\n" +"Controls the width of the range to be boosted.\n" +"Standard deviation of the light curve boost Gaussian." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Steepness noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Step mountain size noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Step mountain spread noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of 3D mode parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Strength of light curve boost.\n" +"The 3 'boost' parameters define a range of the light\n" +"curve that is boosted in brightness." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strip color codes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Surface level of optional water placed on a solid floatland layer.\n" +"Water is disabled by default and will only be placed if this value is set\n" +"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n" +"upper tapering).\n" +"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n" +"When enabling water placement the floatlands must be configured and tested\n" +"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n" +"required value depending on 'mgv7_np_floatland'), to avoid\n" +"server-intensive extreme water flow and to avoid vast flooding of the\n" +"world surface below." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Temperature variation for biomes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain alternative noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain base noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain higher noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Terrain noise threshold for hills.\n" +"Controls proportion of world area covered by hills.\n" +"Adjust towards 0.0 for a larger proportion." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Terrain noise threshold for lakes.\n" +"Controls proportion of world area covered by lakes.\n" +"Adjust towards 0.0 for a larger proportion." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Terrain persistence noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Texture path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Texture size to render the shadow map on.\n" +"This must be a power of two.\n" +"Bigger numbers create better shadows but it is also more expensive." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Textures on a node may be aligned either to the node or to the world.\n" +"The former mode suits better things like machines, furniture, etc., while\n" +"the latter makes stairs and microblocks fit surroundings better.\n" +"However, as this possibility is new, thus may not be used by older servers,\n" +"this option allows enforcing it for certain node types. Note though that\n" +"that is considered EXPERIMENTAL and may not work properly." msgstr "" #: src/settings_translation_file.cpp @@ -6526,27 +6040,595 @@ msgid "The URL for the content repository" msgstr "" #: src/settings_translation_file.cpp -msgid "ContentDB Flag Blacklist" +msgid "The dead zone of the joystick" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Comma-separated list of flags to hide in the content repository.\n" -"\"nonfree\" can be used to hide packages which do not qualify as 'free " -"software',\n" -"as defined by the Free Software Foundation.\n" -"You can also specify content ratings.\n" -"These flags are independent from Minetest versions,\n" -"so see a full list at https://content.minetest.net/help/content_flags/" +"The default format in which profiles are being saved,\n" +"when calling `/profiler save [format]` without format." msgstr "" #: src/settings_translation_file.cpp -msgid "ContentDB Max Concurrent Downloads" +msgid "The depth of dirt or other biome filler node." msgstr "" #: src/settings_translation_file.cpp msgid "" -"Maximum number of concurrent downloads. Downloads exceeding this limit will " -"be queued.\n" -"This should be lower than curl_parallel_limit." +"The file path relative to your worldpath in which profiles will be saved to." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The identifier of the joystick to use" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The length in pixels it takes for touch screen interaction to start." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The maximum height of the surface of waving liquids.\n" +"4.0 = Wave height is two nodes.\n" +"0.0 = Wave doesn't move at all.\n" +"Default is 1.0 (1/2 node).\n" +"Requires waving liquids to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The radius of the volume of blocks around every player that is subject to " +"the\n" +"active block stuff, stated in mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run.\n" +"This is also the minimum range in which active objects (mobs) are " +"maintained.\n" +"This should be configured together with active_object_send_range_blocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The rendering back-end.\n" +"A restart is required after changing this.\n" +"Note: On Android, stick with OGLES1 if unsure! App may fail to start " +"otherwise.\n" +"On other platforms, OpenGL is recommended.\n" +"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The sensitivity of the joystick axes for moving the\n" +"in-game view frustum around." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time budget allowed for ABMs to execute on each step\n" +"(as a fraction of the ABM Interval)" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated events\n" +"when holding down a joystick button combination." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated node placements when holding\n" +"the place button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The type of joystick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The vertical distance over which heat drops by 20 if 'altitude_chill' is\n" +"enabled. Also the vertical distance over which humidity drops by 10 if\n" +"'altitude_dry' is enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Third of 4 2D noises that together define hill/mountain range height." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time of day when a new world is started, in millihours (0-23999)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Touch screen threshold" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trees noise" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Usable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Undersampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Undersampling is similar to using a lower screen resolution, but it applies\n" +"to the game world only, keeping the GUI intact.\n" +"It should give a significant performance boost at the cost of less detailed " +"image.\n" +"Higher values result in a less detailed image." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Upper Y limit of dungeons." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Upper Y limit of floatlands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Use mipmapping to scale textures. May slightly increase performance,\n" +"especially when using a high resolution texture pack.\n" +"Gamma correct downscaling is not supported." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Use multi-sample antialiasing (MSAA) to smooth out block edges.\n" +"This algorithm smooths out the 3D viewport while keeping the image sharp,\n" +"but it doesn't affect the insides of textures\n" +"(which is especially noticeable with transparent textures).\n" +"Visible spaces appear between nodes when shaders are disabled.\n" +"If set to 0, MSAA is disabled.\n" +"A restart is required after changing this option." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "VBO" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "VSync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley depth" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley fill" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley profile" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Valley slope" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of biome filler depth." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of maximum mountain height (in nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Variation of number of caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Variation of terrain vertical scale.\n" +"When noise is < -0.55 terrain is near-flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Varies depth of biome surface nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Varies roughness of terrain.\n" +"Defines the 'persistence' value for terrain_base and terrain_alt noises." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Varies steepness of cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical climbing speed, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing factor" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View distance in nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View zoom key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Virtual joystick triggers Aux1 button" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volume" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Volume of all sounds.\n" +"Requires the sound system to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"W coordinate of the generated 3D slice of a 4D fractal.\n" +"Determines which 3D slice of the 4D shape is generated.\n" +"Alters the shape of the fractal.\n" +"Has no effect on 3D fractals.\n" +"Range roughly -2 to 2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking and flying speed, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking, flying and climbing speed in fast mode, in nodes per second." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving Nodes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving leaves" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wave height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wave speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving liquids wavelength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Weblink color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"properly support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" +"bilinear/trilinear/anisotropic filtering is enabled.\n" +"This is also used as the base node texture size for world-aligned\n" +"texture autoscaling." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether FreeType fonts are used, requires FreeType support to be compiled " +"in.\n" +"If disabled, bitmap and XML vectors fonts are used instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether name tag backgrounds should be shown by default.\n" +"Mods may still set a background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to mute sounds. You can unmute sounds at any time, unless the\n" +"sound system is disabled (enable_sound=false).\n" +"In-game, you can toggle the mute state with the mute key or by using the\n" +"pause menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width component of the initial window size. Ignored in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selection box lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Windows systems only: Start Minetest with the command line window in the " +"background.\n" +"Contains the same information as the file debug.txt (default name)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "World start time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World-aligned textures may be scaled to span several nodes. However,\n" +"the server may not send the scale you want, especially if you use\n" +"a specially-designed texture pack; with this option, the client tries\n" +"to determine the scale automatically basing on the texture size.\n" +"See also texture_min_size.\n" +"Warning: This option is EXPERIMENTAL!" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "World-aligned textures mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y of flat ground." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Y of mountain density gradient zero level. Used to shift mountains " +"vertically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y of upper limit of large caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-distance over which caverns expand to full size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Y-distance over which floatlands taper from full density to nothing.\n" +"Tapering starts at this distance from the Y limit.\n" +"For a solid floatland layer, this controls the height of hills/mountains.\n" +"Must be less than or equal to half the distance between the Y limits." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of average terrain surface." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of cavern upper limit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of higher terrain that creates cliffs." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of lower terrain and seabed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Y-level of seabed." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL interactive timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" msgstr "" diff --git a/po/zh_CN/minetest.po b/po/zh_CN/minetest.po index 75c2c49cb..0af489f7e 100644 --- a/po/zh_CN/minetest.po +++ b/po/zh_CN/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Chinese (Simplified) (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-08-13 21:34+0000\n" "Last-Translator: Zhaolin Lau \n" "Language-Team: Chinese (Simplified) ' to get more information, or '.help all' to list everything." -msgstr "使用 '.help ' 获取该命令的更多信息,或使用 '.help all' 列出所有内容。" +msgstr "" +"使用 '.help ' 获取该命令的更多信息,或使用 '.help all' 列出所有内容。" #: builtin/common/chatcommands.lua msgid "[all | ]" @@ -91,6 +88,11 @@ msgstr "[all | <命令>]" msgid "OK" msgstr "OK" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "" +msgstr "命令不可用: " + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Lua 脚本发生错误:" @@ -291,6 +293,11 @@ msgstr "安装$1" msgid "Install missing dependencies" msgstr "安装缺失的依赖项" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "安装:“$1“为不支持的文件类型或已损坏" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -617,7 +624,8 @@ msgid "Offset" msgstr "补偿" #: builtin/mainmenu/dlg_settings_advanced.lua -msgid "Persistance" +#, fuzzy +msgid "Persistence" msgstr "持续性" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -727,14 +735,6 @@ msgstr "安装mod:无法找到$1的真实mod名称" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "安装mod:无法找到mod包$1的合适文件夹名" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "安装:“$1“为不支持的文件类型或已损坏" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "安装:文件:”$1“" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "无法找到mod或mod包" @@ -1100,10 +1100,6 @@ msgstr "平滑光照" msgid "Texturing:" msgstr "材质:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "启用着色器需要使用OpenGL驱动。" - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "色调映射" @@ -1136,7 +1132,7 @@ msgstr "摇动流体" msgid "Waving Plants" msgstr "摇摆植物" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "连接超时。" @@ -1165,7 +1161,8 @@ msgid "Connection error (timed out?)" msgstr "连接出错(超时?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "无法找到或者载入游戏 \"" #: src/client/clientlauncher.cpp @@ -1237,6 +1234,16 @@ msgstr "- 玩家对战: " msgid "- Server Name: " msgstr "- 服务器名称: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "发生了错误:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "自动前进已禁用" @@ -1245,6 +1252,23 @@ msgstr "自动前进已禁用" msgid "Automatic forward enabled" msgstr "自动前进已启用" +#: src/client/game.cpp +#, fuzzy +msgid "Block bounds hidden" +msgstr "地图块边界" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "已禁用镜头更新" @@ -1253,6 +1277,10 @@ msgstr "已禁用镜头更新" msgid "Camera update enabled" msgstr "已启用镜头更新" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "更改密码" @@ -1265,6 +1293,11 @@ msgstr "电影模式已禁用" msgid "Cinematic mode enabled" msgstr "电影模式已启用" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "客户端mod" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "客户端脚本已禁用" @@ -1273,6 +1306,10 @@ msgstr "客户端脚本已禁用" msgid "Connecting to server..." msgstr "正在连接服务器..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "继续" @@ -1310,6 +1347,11 @@ msgstr "" "- 鼠标滚轮: 选择物品\n" "- %s:聊天\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "正在建立客户端..." @@ -1516,6 +1558,21 @@ msgstr "已取消静音" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "视野范围已改变至%d" @@ -1848,6 +1905,15 @@ msgstr "地表模式小地图, 放大至%d倍" msgid "Minimap in texture mode" msgstr "材质模式小地图" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "下载 $1 失败" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "密码不匹配!" @@ -1856,7 +1922,7 @@ msgstr "密码不匹配!" msgid "Register and Join" msgstr "注册并加入" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2046,7 +2112,8 @@ msgid "Muted" msgstr "静音" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "音量: " #. ~ Imperative, as in "Enter/type in text". @@ -2293,6 +2360,10 @@ msgid "" "screens." msgstr "为支持4K等屏幕,调节像素点密度(非 X11/Android 环境才有效)。" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2585,6 +2656,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "显示聊天消息执行时间的阀值(秒)" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "聊天命令" + #: src/settings_translation_file.cpp msgid "Chat font size" msgstr "聊天字体大小" @@ -2618,8 +2694,9 @@ msgid "Chat toggle key" msgstr "聊天启用/禁用键" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "聊天命令" +#, fuzzy +msgid "Chat weblinks" +msgstr "聊天已显示" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2637,6 +2714,12 @@ msgstr "电影模式键" msgid "Clean transparent textures" msgstr "干净透明材质" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "客户端" @@ -2722,6 +2805,22 @@ msgstr "" msgid "Command key" msgstr "命令键" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "连接玻璃" @@ -2819,9 +2918,10 @@ msgid "Crosshair alpha" msgstr "准星透明" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "" "准星透明度(0-255)。\n" "还控制对象准星的颜色" @@ -2903,9 +3003,10 @@ msgid "Default stack size" msgstr "默认栈大小" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" "定阴影滤镜的质量\n" @@ -3030,6 +3131,10 @@ msgstr "禁用反作弊" msgid "Disallow empty passwords" msgstr "禁止使用空密码" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "服务器域名,将显示在服务器列表。" @@ -3079,8 +3184,19 @@ msgstr "" "该功能是实验性的,且API会变动。" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" +"启用poisson disk滤镜.\n" +"使用poisson disk来产生\"软阴影\",否则将使用PCF 滤镜." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" "启用彩色阴影。\n" @@ -3110,15 +3226,6 @@ msgstr "启用 mod 安全" msgid "Enable players getting damage and dying." msgstr "启用玩家受到伤害和死亡。" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" -"启用poisson disk滤镜.\n" -"使用poisson disk来产生\"软阴影\",否则将使用PCF 滤镜." - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "启用随机用户输入(仅用于测试)。" @@ -3555,10 +3662,11 @@ msgid "Global callbacks" msgstr "全局回调" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "全局地图生成属性。\n" "在地图生成器 v6 中‘decorations’标签控制除树木和丛林草外所有装饰物。\n" @@ -3985,7 +4093,9 @@ msgstr "" msgid "" "If the execution of a chat command takes longer than this specified time in\n" "seconds, add the time information to the chat command message" -msgstr "如果聊天命令的执行时间长于此指定以秒为单位时间,请将时间信息添加到聊天命令消息中。" +msgstr "" +"如果聊天命令的执行时间长于此指定以秒为单位时间,请将时间信息添加到聊天命令消" +"息中。" #: src/settings_translation_file.cpp msgid "" @@ -4040,7 +4150,8 @@ msgstr "" "通常只有核心/内部构建者需要" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "登录时的聊天命令。" #: src/settings_translation_file.cpp @@ -4130,7 +4241,8 @@ msgid "Joystick button repetition interval" msgstr "摇杆按钮重复间隔" #: src/settings_translation_file.cpp -msgid "Joystick deadzone" +#, fuzzy +msgid "Joystick dead zone" msgstr "摇杆无效区" #: src/settings_translation_file.cpp @@ -5240,7 +5352,7 @@ msgstr "地图保存间隔" #: src/settings_translation_file.cpp #, fuzzy -msgid "Map update time" +msgid "Map shadows update frames" msgstr "液体更新时钟间隔" #: src/settings_translation_file.cpp @@ -5414,7 +5526,9 @@ msgid "" "Maximum number of concurrent downloads. Downloads exceeding this limit will " "be queued.\n" "This should be lower than curl_parallel_limit." -msgstr "最大并发下载数。 超过此限制的下载将排队。 这应该低于 curl_parallel_limit(卷曲平行限制)。" +msgstr "" +"最大并发下载数。 超过此限制的下载将排队。 这应该低于 curl_parallel_limit(卷" +"曲平行限制)。" #: src/settings_translation_file.cpp msgid "Maximum number of forceloaded mapblocks." @@ -5552,7 +5666,8 @@ msgid "Mod channels" msgstr "mod频道" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +#, fuzzy +msgid "Modifies the size of the HUD elements." msgstr "更改hud栏元素大小。" #: src/settings_translation_file.cpp @@ -5703,9 +5818,10 @@ msgstr "" "佳值为'1'。" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" "/clearobjects每次能加载的额外方块数。\n" @@ -5734,6 +5850,10 @@ msgstr "" "当窗口焦点丢失是打开暂停菜单。如果游戏内窗口打开,\n" "则不暂停。" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5896,11 +6016,12 @@ msgid "Prometheus listener address" msgstr "Prometheus 监听器地址" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" "Prometheus 监听器地址。\n" "如果minetest是在启用ENABLE_PROMETHEUS选项的情况下编译的,\n" @@ -6243,31 +6364,22 @@ msgstr "" "较低的值表示较亮的阴影,较高的值表示较暗的阴影。" #: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" -"设置阴影更新时间。\n" -"较低的值意味着阴影和贴图更新更快,但会消耗更多资源。\n" -"最小值 0.001 秒 最大值 0.2 秒" - -#: src/settings_translation_file.cpp +#, fuzzy msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" "设置软阴影半径大小。\n" "较低的值意味着更清晰的阴影更大的值更柔和。\n" "最小值 1.0 和最大值 10.0" #: src/settings_translation_file.cpp +#, fuzzy msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" "以度为单位设置太阳/月亮轨道的倾斜度\n" "值 0 表示没有倾斜/垂直轨道。\n" @@ -6381,7 +6493,8 @@ msgstr "" "变更后须重新启动。" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +#, fuzzy +msgid "Show name tag backgrounds by default" msgstr "默认显示名称标签背景" #: src/settings_translation_file.cpp @@ -6504,6 +6617,14 @@ msgstr "" "指定节点、物品和工具的默认堆叠数量。\n" "请注意,mod或游戏可能会为某些(或所有)项目明确设置堆栈。" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6636,7 +6757,7 @@ msgstr "材质路径" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6654,7 +6775,8 @@ msgid "The URL for the content repository" msgstr "内容存储库的 URL" #: src/settings_translation_file.cpp -msgid "The deadzone of the joystick" +#, fuzzy +msgid "The dead zone of the joystick" msgstr "摇杆的无效区" #: src/settings_translation_file.cpp @@ -6725,7 +6847,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" #: src/settings_translation_file.cpp @@ -6897,7 +7019,7 @@ msgstr "缩放材质时使用双线过滤。" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -7086,6 +7208,11 @@ msgstr "波动液体波动长度" msgid "Waving plants" msgstr "摇动植物" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "选择框颜色" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7107,7 +7234,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7122,7 +7249,7 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -7255,24 +7382,6 @@ msgstr "较低地形与海底的Y坐标。" msgid "Y-level of seabed." msgstr "海底的Y坐标。" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "cURL 文件下载超时" @@ -7459,6 +7568,9 @@ msgstr "cURL 并发限制" #~ msgid "IPv6 support." #~ msgstr "IPv6 支持。" +#~ msgid "Install: file: \"$1\"" +#~ msgstr "安装:文件:”$1“" + #, fuzzy #~ msgid "Lava depth" #~ msgstr "巨大洞穴深度" @@ -7555,6 +7667,16 @@ msgstr "cURL 并发限制" #~ msgid "Select Package File:" #~ msgstr "选择包文件:" +#~ msgid "" +#~ "Set the shadow update time.\n" +#~ "Lower value means shadows and map updates faster, but it consume more " +#~ "resources.\n" +#~ "Minimun value 0.001 seconds max value 0.2 seconds" +#~ msgstr "" +#~ "设置阴影更新时间。\n" +#~ "较低的值意味着阴影和贴图更新更快,但会消耗更多资源。\n" +#~ "最小值 0.001 秒 最大值 0.2 秒" + #, fuzzy #~ msgid "Shadow limit" #~ msgstr "地图块限制" @@ -7579,6 +7701,9 @@ msgstr "cURL 并发限制" #~ msgid "This font will be used for certain languages." #~ msgstr "用于特定语言的字体。" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "启用着色器需要使用OpenGL驱动。" + #~ msgid "Toggle Cinematic" #~ msgstr "切换电影模式" @@ -7598,5 +7723,8 @@ msgstr "cURL 并发限制" #~ msgid "Yes" #~ msgstr "是" +#~ msgid "You died." +#~ msgstr "您已经死亡." + #~ msgid "needs_fallback_font" #~ msgstr "yes" diff --git a/po/zh_TW/minetest.po b/po/zh_TW/minetest.po index 8d6d22ae3..804f663f4 100644 --- a/po/zh_TW/minetest.po +++ b/po/zh_TW/minetest.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Chinese (Traditional) (Minetest)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-16 18:27+0200\n" +"POT-Creation-Date: 2021-11-27 19:42+0100\n" "PO-Revision-Date: 2021-05-20 14:34+0000\n" "Last-Translator: Yiu Man Ho \n" "Language-Team: Chinese (Traditional) " +msgstr "" + #: builtin/fstk/ui.lua msgid "An error occurred in a Lua script:" msgstr "Lua 指令稿發生錯誤:" @@ -302,6 +301,11 @@ msgstr "安裝 $1" msgid "Install missing dependencies" msgstr "安裝缺少的依賴" +#: builtin/mainmenu/dlg_contentstore.lua +#, fuzzy +msgid "Install: Unsupported file type or broken archive" +msgstr "安裝:「%1」檔案類型不支援,或是封存檔損壞" + #: builtin/mainmenu/dlg_contentstore.lua #: builtin/mainmenu/dlg_settings_advanced.lua msgid "Mods" @@ -641,7 +645,7 @@ msgstr "補償" #: builtin/mainmenu/dlg_settings_advanced.lua #, fuzzy -msgid "Persistance" +msgid "Persistence" msgstr "暫留" #: builtin/mainmenu/dlg_settings_advanced.lua @@ -751,14 +755,6 @@ msgstr "安裝 Mod:找不到下述項目的真實 Mod 名稱:$1" msgid "Install Mod: Unable to find suitable folder name for modpack $1" msgstr "安裝 Mod:找不到 $1 Mod 包適合的資料夾名稱" -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: Unsupported file type \"$1\" or broken archive" -msgstr "安裝:「%1」檔案類型不支援,或是封存檔損壞" - -#: builtin/mainmenu/pkgmgr.lua -msgid "Install: file: \"$1\"" -msgstr "安裝:檔案:「$1」" - #: builtin/mainmenu/pkgmgr.lua msgid "Unable to find a valid mod or modpack" msgstr "找不到有效的 Mod 或 Mod 包" @@ -1135,10 +1131,6 @@ msgstr "平滑光線" msgid "Texturing:" msgstr "紋理:" -#: builtin/mainmenu/tab_settings.lua -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "要啟用著色器,必須使用 OpenGL 驅動程式。" - #: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp msgid "Tone Mapping" msgstr "色調映射" @@ -1171,7 +1163,7 @@ msgstr "擺動液體" msgid "Waving Plants" msgstr "植物擺動" -#: src/client/client.cpp +#: src/client/client.cpp src/client/game.cpp msgid "Connection timed out." msgstr "連線逾時。" @@ -1200,7 +1192,8 @@ msgid "Connection error (timed out?)" msgstr "連線錯誤(逾時?)" #: src/client/clientlauncher.cpp -msgid "Could not find or load game \"" +#, fuzzy +msgid "Could not find or load game: " msgstr "找不到或無法載入遊戲 \"" #: src/client/clientlauncher.cpp @@ -1272,6 +1265,16 @@ msgstr "- PvP: " msgid "- Server Name: " msgstr "- 伺服器名稱: " +#: src/client/game.cpp +#, fuzzy +msgid "A serialization error occurred:" +msgstr "發生錯誤:" + +#: src/client/game.cpp +#, c-format +msgid "Access denied. Reason: %s" +msgstr "" + #: src/client/game.cpp msgid "Automatic forward disabled" msgstr "已停用自動前進" @@ -1280,6 +1283,22 @@ msgstr "已停用自動前進" msgid "Automatic forward enabled" msgstr "已啟用自動前進" +#: src/client/game.cpp +msgid "Block bounds hidden" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for all blocks" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for current block" +msgstr "" + +#: src/client/game.cpp +msgid "Block bounds shown for nearby blocks" +msgstr "" + #: src/client/game.cpp msgid "Camera update disabled" msgstr "已停用相機更新" @@ -1288,6 +1307,10 @@ msgstr "已停用相機更新" msgid "Camera update enabled" msgstr "已啟用相機更新" +#: src/client/game.cpp +msgid "Can't show block bounds (need 'basic_debug' privilege)" +msgstr "" + #: src/client/game.cpp msgid "Change Password" msgstr "變更密碼" @@ -1300,6 +1323,11 @@ msgstr "已停用電影模式" msgid "Cinematic mode enabled" msgstr "已啟用電影模式" +#: src/client/game.cpp +#, fuzzy +msgid "Client disconnected" +msgstr "用戶端修改" + #: src/client/game.cpp msgid "Client side scripting is disabled" msgstr "已停用用戶端指令稿" @@ -1308,6 +1336,10 @@ msgstr "已停用用戶端指令稿" msgid "Connecting to server..." msgstr "正在連線至伺服器..." +#: src/client/game.cpp +msgid "Connection failed for unknown reason" +msgstr "" + #: src/client/game.cpp msgid "Continue" msgstr "繼續" @@ -1345,6 +1377,11 @@ msgstr "" "- 滑鼠滾輪:選取物品\n" "- %s:聊天\n" +#: src/client/game.cpp +#, c-format +msgid "Couldn't resolve address: %s" +msgstr "" + #: src/client/game.cpp msgid "Creating client..." msgstr "正在建立用戶端..." @@ -1553,6 +1590,21 @@ msgstr "已取消靜音" #: src/client/game.cpp #, c-format +msgid "The server is probably running a different version of %s." +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to connect to %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp +#, c-format +msgid "Unable to listen on %s because IPv6 is disabled" +msgstr "" + +#: src/client/game.cpp src/unittest/test_gettext.cpp +#, c-format msgid "Viewing range changed to %d" msgstr "已調整視野至 %d" @@ -1886,6 +1938,15 @@ msgstr "表面模式的迷你地圖,放大 1 倍" msgid "Minimap in texture mode" msgstr "過濾器的最大材質大小" +#: src/gui/guiChatConsole.cpp +#, fuzzy +msgid "Failed to open webpage" +msgstr "無法下載 $1" + +#: src/gui/guiChatConsole.cpp +msgid "Opening webpage" +msgstr "" + #: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "密碼不符合!" @@ -1894,7 +1955,7 @@ msgstr "密碼不符合!" msgid "Register and Join" msgstr "註冊並加入" -#: src/gui/guiConfirmRegistration.cpp +#: src/gui/guiConfirmRegistration.cpp src/unittest/test_gettext.cpp #, c-format msgid "" "You are about to join this server with the name \"%s\" for the first time.\n" @@ -2085,7 +2146,8 @@ msgid "Muted" msgstr "已靜音" #: src/gui/guiVolumeChange.cpp -msgid "Sound Volume: " +#, fuzzy, c-format +msgid "Sound Volume: %d%%" msgstr "音量: " #. ~ Imperative, as in "Enter/type in text". @@ -2321,6 +2383,10 @@ msgid "" "screens." msgstr "調整您螢幕的 DPI 設定(並不只有 X11/Android)例如 4K 螢幕。" +#: src/settings_translation_file.cpp +msgid "Adjust the detected display density, used for scaling UI elements." +msgstr "" + #: src/settings_translation_file.cpp #, c-format msgid "" @@ -2609,6 +2675,11 @@ msgstr "" msgid "Chat command time message threshold" msgstr "聊天訊息踢出閾值" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat commands" +msgstr "聊天指令" + #: src/settings_translation_file.cpp #, fuzzy msgid "Chat font size" @@ -2644,8 +2715,9 @@ msgid "Chat toggle key" msgstr "聊天切換按鍵" #: src/settings_translation_file.cpp -msgid "Chatcommands" -msgstr "聊天指令" +#, fuzzy +msgid "Chat weblinks" +msgstr "顯示聊天室" #: src/settings_translation_file.cpp msgid "Chunk size" @@ -2663,6 +2735,12 @@ msgstr "電影模式按鍵" msgid "Clean transparent textures" msgstr "清除透明材質" +#: src/settings_translation_file.cpp +msgid "" +"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console " +"output." +msgstr "" + #: src/settings_translation_file.cpp msgid "Client" msgstr "用戶端" @@ -2744,6 +2822,22 @@ msgstr "" msgid "Command key" msgstr "指令按鍵" +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when saving mapblocks to disk.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Compression level to use when sending mapblocks to the client.\n" +"-1 - use default compression level\n" +"0 - least compression, fastest\n" +"9 - best compression, slowest" +msgstr "" + #: src/settings_translation_file.cpp msgid "Connect glass" msgstr "連接玻璃" @@ -2840,7 +2934,7 @@ msgstr "十字 alpha 值" #, fuzzy msgid "" "Crosshair alpha (opaqueness, between 0 and 255).\n" -"Also controls the object crosshair color" +"This also applies to the object crosshair." msgstr "十字 alpha 值(不透明,0 至 255間)。" #: src/settings_translation_file.cpp @@ -2921,8 +3015,8 @@ msgstr "預設遊戲" #: src/settings_translation_file.cpp msgid "" -"Define shadow filtering quality\n" -"This simulates the soft shadows effect by applying a PCF or poisson disk\n" +"Define shadow filtering quality.\n" +"This simulates the soft shadows effect by applying a PCF or Poisson disk\n" "but also uses more resources." msgstr "" @@ -3053,6 +3147,10 @@ msgstr "停用反作弊" msgid "Disallow empty passwords" msgstr "不允許空密碼" +#: src/settings_translation_file.cpp +msgid "Display Density Scaling Factor" +msgstr "" + #: src/settings_translation_file.cpp msgid "Domain name of server, to be displayed in the serverlist." msgstr "伺服器的域名,將會在伺服器列表中顯示。" @@ -3102,7 +3200,14 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" -"Enable colored shadows. \n" +"Enable Poisson disk filtering.\n" +"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF " +"filtering." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable colored shadows.\n" "On true translucent nodes cast colored shadows. This is expensive." msgstr "" @@ -3133,13 +3238,6 @@ msgstr "啟用 mod 安全性" msgid "Enable players getting damage and dying." msgstr "啟用玩家傷害及瀕死。" -#: src/settings_translation_file.cpp -msgid "" -"Enable poisson disk filtering.\n" -"On true uses poisson disk to make \"soft shadows\". Otherwise uses PCF " -"filtering." -msgstr "" - #: src/settings_translation_file.cpp msgid "Enable random user input (only used for testing)." msgstr "啟用隨機使用者輸入(僅供測試使用)。" @@ -3574,7 +3672,7 @@ msgstr "全域回呼" msgid "" "Global map generation attributes.\n" "In Mapgen v6 the 'decorations' flag controls all decorations except trees\n" -"and junglegrass, in all other mapgens this flag controls all decorations." +"and jungle grass, in all other mapgens this flag controls all decorations." msgstr "" "全域地圖產生屬性。\n" "在 Mapgen v6 中,「decorations」旗標控制所有除了樹木\n" @@ -4044,7 +4142,8 @@ msgstr "" "這通常僅被核心/內建貢獻者需要" #: src/settings_translation_file.cpp -msgid "Instrument chatcommands on registration." +#, fuzzy +msgid "Instrument chat commands on registration." msgstr "分析登錄的聊天指令。" #: src/settings_translation_file.cpp @@ -4133,7 +4232,7 @@ msgstr "搖桿按鈕重覆間隔" #: src/settings_translation_file.cpp #, fuzzy -msgid "Joystick deadzone" +msgid "Joystick dead zone" msgstr "搖桿類型" #: src/settings_translation_file.cpp @@ -5251,7 +5350,7 @@ msgstr "地圖儲存間隔" #: src/settings_translation_file.cpp #, fuzzy -msgid "Map update time" +msgid "Map shadows update frames" msgstr "液體更新 tick" #: src/settings_translation_file.cpp @@ -5575,7 +5674,8 @@ msgid "Mod channels" msgstr "" #: src/settings_translation_file.cpp -msgid "Modifies the size of the hudbar elements." +#, fuzzy +msgid "Modifies the size of the HUD elements." msgstr "修改 hudbar 元素的大小。" #: src/settings_translation_file.cpp @@ -5713,9 +5813,10 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "Number of extra blocks that can be loaded by /clearobjects at once.\n" -"This is a trade-off between sqlite transaction overhead and\n" +"This is a trade-off between SQLite transaction overhead and\n" "memory consumption (4096=100MB, as a rule of thumb)." msgstr "" "可被 /clearobjects 一次載入的額外區塊數量。\n" @@ -5742,6 +5843,10 @@ msgid "" "open." msgstr "" +#: src/settings_translation_file.cpp +msgid "Optional override for chat weblink color." +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Path of the fallback font.\n" @@ -5893,9 +5998,9 @@ msgstr "" #: src/settings_translation_file.cpp msgid "" "Prometheus listener address.\n" -"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" +"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n" "enable metrics listener for Prometheus on that address.\n" -"Metrics can be fetch on http://127.0.0.1:30000/metrics" +"Metrics can be fetched on http://127.0.0.1:30000/metrics" msgstr "" #: src/settings_translation_file.cpp @@ -6231,26 +6336,18 @@ msgid "" "Lower value means lighter shadows, higher value means darker shadows." msgstr "" -#: src/settings_translation_file.cpp -msgid "" -"Set the shadow update time.\n" -"Lower value means shadows and map updates faster, but it consume more " -"resources.\n" -"Minimun value 0.001 seconds max value 0.2 seconds" -msgstr "" - #: src/settings_translation_file.cpp msgid "" "Set the soft shadow radius size.\n" -"Lower values mean sharper shadows bigger values softer.\n" -"Minimun value 1.0 and max value 10.0" +"Lower values mean sharper shadows, bigger values mean softer shadows.\n" +"Minimum value: 1.0; maximum value: 10.0" msgstr "" #: src/settings_translation_file.cpp msgid "" -"Set the tilt of Sun/Moon orbit in degrees\n" +"Set the tilt of Sun/Moon orbit in degrees.\n" "Value of 0 means no tilt / vertical orbit.\n" -"Minimun value 0.0 and max value 60.0" +"Minimum value: 0.0; maximum value: 60.0" msgstr "" #: src/settings_translation_file.cpp @@ -6362,7 +6459,7 @@ msgstr "" "變更後必須重新啟動以使其生效。" #: src/settings_translation_file.cpp -msgid "Show nametag backgrounds by default" +msgid "Show name tag backgrounds by default" msgstr "" #: src/settings_translation_file.cpp @@ -6479,6 +6576,14 @@ msgid "" "items." msgstr "" +#: src/settings_translation_file.cpp +msgid "" +"Spread a complete update of shadow map over given amount of frames.\n" +"Higher values might make shadows laggy, lower values\n" +"will consume more resources.\n" +"Minimum value: 1; maximum value: 16" +msgstr "" + #: src/settings_translation_file.cpp msgid "" "Spread of light curve boost range.\n" @@ -6599,7 +6704,7 @@ msgstr "材質路徑" msgid "" "Texture size to render the shadow map on.\n" "This must be a power of two.\n" -"Bigger numbers create better shadowsbut it is also more expensive." +"Bigger numbers create better shadows but it is also more expensive." msgstr "" #: src/settings_translation_file.cpp @@ -6618,7 +6723,7 @@ msgstr "" #: src/settings_translation_file.cpp #, fuzzy -msgid "The deadzone of the joystick" +msgid "The dead zone of the joystick" msgstr "要使用的搖桿的識別碼" #: src/settings_translation_file.cpp @@ -6690,9 +6795,10 @@ msgid "" msgstr "" #: src/settings_translation_file.cpp +#, fuzzy msgid "" "The sensitivity of the joystick axes for moving the\n" -"ingame view frustum around." +"in-game view frustum around." msgstr "" "在遊戲中,視野四處移動時的\n" "搖桿靈敏度。" @@ -6881,7 +6987,7 @@ msgstr "當縮放材質時使用雙線性過濾。" #: src/settings_translation_file.cpp msgid "" -"Use mip mapping to scale textures. May slightly increase performance,\n" +"Use mipmapping to scale textures. May slightly increase performance,\n" "especially when using a high resolution texture pack.\n" "Gamma correct downscaling is not supported." msgstr "" @@ -7085,6 +7191,11 @@ msgstr "波動的水長度" msgid "Waving plants" msgstr "植物擺動" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Weblink color" +msgstr "色彩選取框" + #: src/settings_translation_file.cpp msgid "" "When gui_scaling_filter is true, all GUI images need to be\n" @@ -7114,7 +7225,7 @@ msgid "" "can be blurred, so automatically upscale them with nearest-neighbor\n" "interpolation to preserve crisp pixels. This sets the minimum texture size\n" "for the upscaled textures; higher values look sharper, but require more\n" -"memory. Powers of 2 are recommended. This setting is ONLY applies if\n" +"memory. Powers of 2 are recommended. This setting is ONLY applied if\n" "bilinear/trilinear/anisotropic filtering is enabled.\n" "This is also used as the base node texture size for world-aligned\n" "texture autoscaling." @@ -7137,7 +7248,7 @@ msgstr "是否使用 freetype 字型,需要將 freetype 支援編譯進來。" #: src/settings_translation_file.cpp msgid "" -"Whether nametag backgrounds should be shown by default.\n" +"Whether name tag backgrounds should be shown by default.\n" "Mods may still set a background." msgstr "" @@ -7277,24 +7388,6 @@ msgstr "較低地形與湖底的 Y 高度。" msgid "Y-level of seabed." msgstr "海底的 Y 高度。" -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when saving mapblocks to disk.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - -#: src/settings_translation_file.cpp -msgid "" -"ZLib compression level to use when sending mapblocks to the client.\n" -"-1 - Zlib's default compression level\n" -"0 - no compresson, fastest\n" -"9 - best compression, slowest\n" -"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)" -msgstr "" - #: src/settings_translation_file.cpp msgid "cURL file download timeout" msgstr "cURL 檔案下載逾時" @@ -7468,6 +7561,9 @@ msgstr "cURL 並行限制" #~ msgid "IPv6 support." #~ msgstr "IPv6 支援。" +#~ msgid "Install: file: \"$1\"" +#~ msgstr "安裝:檔案:「$1」" + #, fuzzy #~ msgid "Lava depth" #~ msgstr "大型洞穴深度" @@ -7587,6 +7683,9 @@ msgstr "cURL 並行限制" #~ msgid "This font will be used for certain languages." #~ msgstr "這個字型將會被用於特定的語言。" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "要啟用著色器,必須使用 OpenGL 驅動程式。" + #~ msgid "Toggle Cinematic" #~ msgstr "切換過場動畫" @@ -7620,5 +7719,9 @@ msgstr "cURL 並行限制" #~ msgid "Yes" #~ msgstr "是" +#, fuzzy +#~ msgid "You died." +#~ msgstr "您已死亡" + #~ msgid "needs_fallback_font" #~ msgstr "yes" From 57a59ae92d4bbfa4fdd60d7acd72c6440f63a49c Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Wed, 1 Dec 2021 20:22:33 +0100 Subject: [PATCH 116/412] Network: Delete copy constructor and use std::move instead (#11642) This is a follow-up change which disables class copies where possible to avoid unnecessary memory movements. --- src/client/client.cpp | 2 +- src/network/connection.cpp | 445 ++++++++++++++++++------------ src/network/connection.h | 416 ++++++++++++---------------- src/network/connectionthreads.cpp | 190 ++++++------- src/network/connectionthreads.h | 31 ++- src/unittest/test_connection.cpp | 10 +- src/util/pointer.h | 58 ++-- 7 files changed, 600 insertions(+), 552 deletions(-) diff --git a/src/client/client.cpp b/src/client/client.cpp index 45cc62a33..3ee1298ff 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -877,7 +877,7 @@ void Client::ProcessData(NetworkPacket *pkt) */ if(sender_peer_id != PEER_ID_SERVER) { infostream << "Client::ProcessData(): Discarding data not " - "coming from server: peer_id=" << sender_peer_id + "coming from server: peer_id=" << sender_peer_id << " command=" << pkt->getCommand() << std::endl; return; } diff --git a/src/network/connection.cpp b/src/network/connection.cpp index 548b2e3a0..2d3cf6e88 100644 --- a/src/network/connection.cpp +++ b/src/network/connection.cpp @@ -62,18 +62,27 @@ namespace con #define PING_TIMEOUT 5.0 -BufferedPacket makePacket(Address &address, const SharedBuffer &data, +u16 BufferedPacket::getSeqnum() const +{ + if (size() < BASE_HEADER_SIZE + 3) + return 0; // should never happen + + return readU16(&data[BASE_HEADER_SIZE + 1]); +} + +BufferedPacketPtr makePacket(Address &address, const SharedBuffer &data, u32 protocol_id, session_t sender_peer_id, u8 channel) { u32 packet_size = data.getSize() + BASE_HEADER_SIZE; - BufferedPacket p(packet_size); - p.address = address; - writeU32(&p.data[0], protocol_id); - writeU16(&p.data[4], sender_peer_id); - writeU8(&p.data[6], channel); + BufferedPacketPtr p(new BufferedPacket(packet_size)); + p->address = address; - memcpy(&p.data[BASE_HEADER_SIZE], *data, data.getSize()); + writeU32(&p->data[0], protocol_id); + writeU16(&p->data[4], sender_peer_id); + writeU8(&p->data[6], channel); + + memcpy(&p->data[BASE_HEADER_SIZE], *data, data.getSize()); return p; } @@ -169,9 +178,8 @@ void ReliablePacketBuffer::print() MutexAutoLock listlock(m_list_mutex); LOG(dout_con<<"Dump of ReliablePacketBuffer:" << std::endl); unsigned int index = 0; - for (BufferedPacket &bufferedPacket : m_list) { - u16 s = readU16(&(bufferedPacket.data[BASE_HEADER_SIZE+1])); - LOG(dout_con<getSeqnum() << std::endl); index++; } } @@ -188,16 +196,13 @@ u32 ReliablePacketBuffer::size() return m_list.size(); } -RPBSearchResult ReliablePacketBuffer::findPacket(u16 seqnum) +RPBSearchResult ReliablePacketBuffer::findPacketNoLock(u16 seqnum) { - std::list::iterator i = m_list.begin(); - for(; i != m_list.end(); ++i) - { - u16 s = readU16(&(i->data[BASE_HEADER_SIZE+1])); - if (s == seqnum) - break; + for (auto it = m_list.begin(); it != m_list.end(); ++it) { + if ((*it)->getSeqnum() == seqnum) + return it; } - return i; + return m_list.end(); } bool ReliablePacketBuffer::getFirstSeqnum(u16& result) @@ -205,54 +210,54 @@ bool ReliablePacketBuffer::getFirstSeqnum(u16& result) MutexAutoLock listlock(m_list_mutex); if (m_list.empty()) return false; - const BufferedPacket &p = m_list.front(); - result = readU16(&p.data[BASE_HEADER_SIZE + 1]); + result = m_list.front()->getSeqnum(); return true; } -BufferedPacket ReliablePacketBuffer::popFirst() +BufferedPacketPtr ReliablePacketBuffer::popFirst() { MutexAutoLock listlock(m_list_mutex); if (m_list.empty()) throw NotFoundException("Buffer is empty"); - BufferedPacket p = std::move(m_list.front()); + + BufferedPacketPtr p(m_list.front()); m_list.pop_front(); if (m_list.empty()) { m_oldest_non_answered_ack = 0; } else { - m_oldest_non_answered_ack = - readU16(&m_list.front().data[BASE_HEADER_SIZE + 1]); + m_oldest_non_answered_ack = m_list.front()->getSeqnum(); } return p; } -BufferedPacket ReliablePacketBuffer::popSeqnum(u16 seqnum) +BufferedPacketPtr ReliablePacketBuffer::popSeqnum(u16 seqnum) { MutexAutoLock listlock(m_list_mutex); - RPBSearchResult r = findPacket(seqnum); - if (r == notFound()) { + RPBSearchResult r = findPacketNoLock(seqnum); + if (r == m_list.end()) { LOG(dout_con<<"Sequence number: " << seqnum << " not found in reliable buffer"<getSeqnum(); } return p; } -void ReliablePacketBuffer::insert(const BufferedPacket &p, u16 next_expected) +void ReliablePacketBuffer::insert(BufferedPacketPtr &p_ptr, u16 next_expected) { MutexAutoLock listlock(m_list_mutex); - if (p.data.getSize() < BASE_HEADER_SIZE + 3) { + const BufferedPacket &p = *p_ptr; + + if (p.size() < BASE_HEADER_SIZE + 3) { errorstream << "ReliablePacketBuffer::insert(): Invalid data size for " "reliable packet" << std::endl; return; @@ -263,7 +268,7 @@ void ReliablePacketBuffer::insert(const BufferedPacket &p, u16 next_expected) << std::endl; return; } - u16 seqnum = readU16(&p.data[BASE_HEADER_SIZE + 1]); + const u16 seqnum = p.getSeqnum(); if (!seqnum_in_window(seqnum, next_expected, MAX_RELIABLE_WINDOW_SIZE)) { errorstream << "ReliablePacketBuffer::insert(): seqnum is outside of " @@ -280,44 +285,44 @@ void ReliablePacketBuffer::insert(const BufferedPacket &p, u16 next_expected) // Find the right place for the packet and insert it there // If list is empty, just add it - if (m_list.empty()) - { - m_list.push_back(p); + if (m_list.empty()) { + m_list.push_back(p_ptr); m_oldest_non_answered_ack = seqnum; // Done. return; } // Otherwise find the right place - std::list::iterator i = m_list.begin(); + auto it = m_list.begin(); // Find the first packet in the list which has a higher seqnum - u16 s = readU16(&(i->data[BASE_HEADER_SIZE+1])); + u16 s = (*it)->getSeqnum(); /* case seqnum is smaller then next_expected seqnum */ /* this is true e.g. on wrap around */ if (seqnum < next_expected) { - while(((s < seqnum) || (s >= next_expected)) && (i != m_list.end())) { - ++i; - if (i != m_list.end()) - s = readU16(&(i->data[BASE_HEADER_SIZE+1])); + while(((s < seqnum) || (s >= next_expected)) && (it != m_list.end())) { + ++it; + if (it != m_list.end()) + s = (*it)->getSeqnum(); } } /* non wrap around case (at least for incoming and next_expected */ else { - while(((s < seqnum) && (s >= next_expected)) && (i != m_list.end())) { - ++i; - if (i != m_list.end()) - s = readU16(&(i->data[BASE_HEADER_SIZE+1])); + while(((s < seqnum) && (s >= next_expected)) && (it != m_list.end())) { + ++it; + if (it != m_list.end()) + s = (*it)->getSeqnum(); } } if (s == seqnum) { /* nothing to do this seems to be a resent packet */ /* for paranoia reason data should be compared */ + auto &i = *it; if ( - (readU16(&(i->data[BASE_HEADER_SIZE+1])) != seqnum) || - (i->data.getSize() != p.data.getSize()) || + (i->getSeqnum() != seqnum) || + (i->size() != p.size()) || (i->address != p.address) ) { @@ -325,51 +330,52 @@ void ReliablePacketBuffer::insert(const BufferedPacket &p, u16 next_expected) fprintf(stderr, "Duplicated seqnum %d non matching packet detected:\n", seqnum); - fprintf(stderr, "Old: seqnum: %05d size: %04d, address: %s\n", - readU16(&(i->data[BASE_HEADER_SIZE+1])),i->data.getSize(), + fprintf(stderr, "Old: seqnum: %05d size: %04zu, address: %s\n", + i->getSeqnum(), i->size(), i->address.serializeString().c_str()); - fprintf(stderr, "New: seqnum: %05d size: %04u, address: %s\n", - readU16(&(p.data[BASE_HEADER_SIZE+1])),p.data.getSize(), + fprintf(stderr, "New: seqnum: %05d size: %04zu, address: %s\n", + p.getSeqnum(), p.size(), p.address.serializeString().c_str()); throw IncomingDataCorruption("duplicated packet isn't same as original one"); } } /* insert or push back */ - else if (i != m_list.end()) { - m_list.insert(i, p); + else if (it != m_list.end()) { + m_list.insert(it, p_ptr); } else { - m_list.push_back(p); + m_list.push_back(p_ptr); } /* update last packet number */ - m_oldest_non_answered_ack = readU16(&m_list.front().data[BASE_HEADER_SIZE+1]); + m_oldest_non_answered_ack = m_list.front()->getSeqnum(); } void ReliablePacketBuffer::incrementTimeouts(float dtime) { MutexAutoLock listlock(m_list_mutex); - for (BufferedPacket &bufferedPacket : m_list) { - bufferedPacket.time += dtime; - bufferedPacket.totaltime += dtime; + for (auto &packet : m_list) { + packet->time += dtime; + packet->totaltime += dtime; } } -std::list +std::list> ReliablePacketBuffer::getTimedOuts(float timeout, u32 max_packets) { MutexAutoLock listlock(m_list_mutex); - std::list timed_outs; - for (BufferedPacket &bufferedPacket : m_list) { - if (bufferedPacket.time >= timeout) { - // caller will resend packet so reset time and increase counter - bufferedPacket.time = 0.0f; - bufferedPacket.resend_count++; + std::list> timed_outs; + for (auto &packet : m_list) { + if (packet->time < timeout) + continue; - timed_outs.push_back(bufferedPacket); + // caller will resend packet so reset time and increase counter + packet->time = 0.0f; + packet->resend_count++; - if (timed_outs.size() >= max_packets) - break; - } + timed_outs.emplace_back(packet); + + if (timed_outs.size() >= max_packets) + break; } return timed_outs; } @@ -428,11 +434,13 @@ IncomingSplitBuffer::~IncomingSplitBuffer() } } -SharedBuffer IncomingSplitBuffer::insert(const BufferedPacket &p, bool reliable) +SharedBuffer IncomingSplitBuffer::insert(BufferedPacketPtr &p_ptr, bool reliable) { MutexAutoLock listlock(m_map_mutex); + const BufferedPacket &p = *p_ptr; + u32 headersize = BASE_HEADER_SIZE + 7; - if (p.data.getSize() < headersize) { + if (p.size() < headersize) { errorstream << "Invalid data size for split packet" << std::endl; return SharedBuffer(); } @@ -473,7 +481,7 @@ SharedBuffer IncomingSplitBuffer::insert(const BufferedPacket &p, bool relia < chunkdata(chunkdatasize); memcpy(*chunkdata, &(p.data[headersize]), chunkdatasize); @@ -520,14 +528,67 @@ void IncomingSplitBuffer::removeUnreliableTimedOuts(float dtime, float timeout) ConnectionCommand */ -void ConnectionCommand::send(session_t peer_id_, u8 channelnum_, NetworkPacket *pkt, - bool reliable_) +ConnectionCommandPtr ConnectionCommand::create(ConnectionCommandType type) { - type = CONNCMD_SEND; - peer_id = peer_id_; - channelnum = channelnum_; - data = pkt->oldForgePacket(); - reliable = reliable_; + return ConnectionCommandPtr(new ConnectionCommand(type)); +} + +ConnectionCommandPtr ConnectionCommand::serve(Address address) +{ + auto c = create(CONNCMD_SERVE); + c->address = address; + return c; +} + +ConnectionCommandPtr ConnectionCommand::connect(Address address) +{ + auto c = create(CONNCMD_CONNECT); + c->address = address; + return c; +} + +ConnectionCommandPtr ConnectionCommand::disconnect() +{ + return create(CONNCMD_DISCONNECT); +} + +ConnectionCommandPtr ConnectionCommand::disconnect_peer(session_t peer_id) +{ + auto c = create(CONNCMD_DISCONNECT_PEER); + c->peer_id = peer_id; + return c; +} + +ConnectionCommandPtr ConnectionCommand::send(session_t peer_id, u8 channelnum, + NetworkPacket *pkt, bool reliable) +{ + auto c = create(CONNCMD_SEND); + c->peer_id = peer_id; + c->channelnum = channelnum; + c->reliable = reliable; + c->data = pkt->oldForgePacket(); + return c; +} + +ConnectionCommandPtr ConnectionCommand::ack(session_t peer_id, u8 channelnum, const Buffer &data) +{ + auto c = create(CONCMD_ACK); + c->peer_id = peer_id; + c->channelnum = channelnum; + c->reliable = false; + data.copyTo(c->data); + return c; +} + +ConnectionCommandPtr ConnectionCommand::createPeer(session_t peer_id, const Buffer &data) +{ + auto c = create(CONCMD_CREATE_PEER); + c->peer_id = peer_id; + c->channelnum = 0; + c->reliable = true; + c->raw = true; + data.copyTo(c->data); + return c; } /* @@ -562,39 +623,38 @@ void Channel::setNextSplitSeqNum(u16 seqnum) u16 Channel::getOutgoingSequenceNumber(bool& successful) { MutexAutoLock internal(m_internal_mutex); + u16 retval = next_outgoing_seqnum; - u16 lowest_unacked_seqnumber; + successful = false; /* shortcut if there ain't any packet in outgoing list */ - if (outgoing_reliables_sent.empty()) - { + if (outgoing_reliables_sent.empty()) { + successful = true; next_outgoing_seqnum++; return retval; } - if (outgoing_reliables_sent.getFirstSeqnum(lowest_unacked_seqnumber)) - { + u16 lowest_unacked_seqnumber; + if (outgoing_reliables_sent.getFirstSeqnum(lowest_unacked_seqnumber)) { if (lowest_unacked_seqnumber < next_outgoing_seqnum) { // ugly cast but this one is required in order to tell compiler we // know about difference of two unsigned may be negative in general // but we already made sure it won't happen in this case if (((u16)(next_outgoing_seqnum - lowest_unacked_seqnumber)) > m_window_size) { - successful = false; return 0; } - } - else { + } else { // ugly cast but this one is required in order to tell compiler we // know about difference of two unsigned may be negative in general // but we already made sure it won't happen in this case if ((next_outgoing_seqnum + (u16)(SEQNUM_MAX - lowest_unacked_seqnumber)) > m_window_size) { - successful = false; return 0; } } } + successful = true; next_outgoing_seqnum++; return retval; } @@ -946,45 +1006,45 @@ bool UDPPeer::Ping(float dtime,SharedBuffer& data) return false; } -void UDPPeer::PutReliableSendCommand(ConnectionCommand &c, +void UDPPeer::PutReliableSendCommand(ConnectionCommandPtr &c, unsigned int max_packet_size) { if (m_pending_disconnect) return; - Channel &chan = channels[c.channelnum]; + Channel &chan = channels[c->channelnum]; if (chan.queued_commands.empty() && /* don't queue more packets then window size */ - (chan.queued_reliables.size() < chan.getWindowSize() / 2)) { + (chan.queued_reliables.size() + 1 < chan.getWindowSize() / 2)) { LOG(dout_con<getDesc() - <<" processing reliable command for peer id: " << c.peer_id - <<" data size: " << c.data.getSize() << std::endl); - if (!processReliableSendCommand(c,max_packet_size)) { - chan.queued_commands.push_back(c); - } - } - else { + <<" processing reliable command for peer id: " << c->peer_id + <<" data size: " << c->data.getSize() << std::endl); + if (processReliableSendCommand(c, max_packet_size)) + return; + } else { LOG(dout_con<getDesc() - <<" Queueing reliable command for peer id: " << c.peer_id - <<" data size: " << c.data.getSize() <= chan.getWindowSize() / 2) { + <<" Queueing reliable command for peer id: " << c->peer_id + <<" data size: " << c->data.getSize() <= chan.getWindowSize() / 2) { LOG(derr_con << m_connection->getDesc() - << "Possible packet stall to peer id: " << c.peer_id + << "Possible packet stall to peer id: " << c->peer_id << " queued_commands=" << chan.queued_commands.size() << std::endl); } } + chan.queued_commands.push_back(c); } bool UDPPeer::processReliableSendCommand( - ConnectionCommand &c, + ConnectionCommandPtr &c_ptr, unsigned int max_packet_size) { if (m_pending_disconnect) return true; + const auto &c = *c_ptr; Channel &chan = channels[c.channelnum]; u32 chunksize_max = max_packet_size @@ -1003,9 +1063,9 @@ bool UDPPeer::processReliableSendCommand( chan.setNextSplitSeqNum(split_sequence_number); } - bool have_sequence_number = true; + bool have_sequence_number = false; bool have_initial_sequence_number = false; - std::queue toadd; + std::queue toadd; volatile u16 initial_sequence_number = 0; for (SharedBuffer &original : originals) { @@ -1024,25 +1084,23 @@ bool UDPPeer::processReliableSendCommand( SharedBuffer reliable = makeReliablePacket(original, seqnum); // Add base headers and make a packet - BufferedPacket p = con::makePacket(address, reliable, + BufferedPacketPtr p = con::makePacket(address, reliable, m_connection->GetProtocolID(), m_connection->GetPeerID(), c.channelnum); - toadd.push(std::move(p)); + toadd.push(p); } if (have_sequence_number) { - volatile u16 pcount = 0; while (!toadd.empty()) { - BufferedPacket p = std::move(toadd.front()); + BufferedPacketPtr p = toadd.front(); toadd.pop(); // LOG(dout_con<getDesc() // << " queuing reliable packet for peer_id: " << c.peer_id // << " channel: " << (c.channelnum&0xFF) // << " seqnum: " << readU16(&p.data[BASE_HEADER_SIZE+1]) // << std::endl) - chan.queued_reliables.push(std::move(p)); - pcount++; + chan.queued_reliables.push(p); } sanity_check(chan.queued_reliables.size() < 0xFFFF); return true; @@ -1051,6 +1109,7 @@ bool UDPPeer::processReliableSendCommand( volatile u16 packets_available = toadd.size(); /* we didn't get a single sequence number no need to fill queue */ if (!have_initial_sequence_number) { + LOG(derr_con << m_connection->getDesc() << "Ran out of sequence numbers!" << std::endl); return false; } @@ -1096,18 +1155,18 @@ void UDPPeer::RunCommandQueues( (channel.queued_reliables.size() < maxtransfer) && (commands_processed < maxcommands)) { try { - ConnectionCommand c = channel.queued_commands.front(); + ConnectionCommandPtr c = channel.queued_commands.front(); LOG(dout_con << m_connection->getDesc() << " processing queued reliable command " << std::endl); // Packet is processed, remove it from queue - if (processReliableSendCommand(c,max_packet_size)) { + if (processReliableSendCommand(c, max_packet_size)) { channel.queued_commands.pop_front(); } else { LOG(dout_con << m_connection->getDesc() - << " Failed to queue packets for peer_id: " << c.peer_id - << ", delaying sending of " << c.data.getSize() + << " Failed to queue packets for peer_id: " << c->peer_id + << ", delaying sending of " << c->data.getSize() << " bytes" << std::endl); } } @@ -1130,13 +1189,70 @@ void UDPPeer::setNextSplitSequenceNumber(u8 channel, u16 seqnum) channels[channel].setNextSplitSeqNum(seqnum); } -SharedBuffer UDPPeer::addSplitPacket(u8 channel, const BufferedPacket &toadd, +SharedBuffer UDPPeer::addSplitPacket(u8 channel, BufferedPacketPtr &toadd, bool reliable) { assert(channel < CHANNEL_COUNT); // Pre-condition return channels[channel].incoming_splits.insert(toadd, reliable); } +/* + ConnectionEvent +*/ + +const char *ConnectionEvent::describe() const +{ + switch(type) { + case CONNEVENT_NONE: + return "CONNEVENT_NONE"; + case CONNEVENT_DATA_RECEIVED: + return "CONNEVENT_DATA_RECEIVED"; + case CONNEVENT_PEER_ADDED: + return "CONNEVENT_PEER_ADDED"; + case CONNEVENT_PEER_REMOVED: + return "CONNEVENT_PEER_REMOVED"; + case CONNEVENT_BIND_FAILED: + return "CONNEVENT_BIND_FAILED"; + } + return "Invalid ConnectionEvent"; +} + + +ConnectionEventPtr ConnectionEvent::create(ConnectionEventType type) +{ + return std::shared_ptr(new ConnectionEvent(type)); +} + +ConnectionEventPtr ConnectionEvent::dataReceived(session_t peer_id, const Buffer &data) +{ + auto e = create(CONNEVENT_DATA_RECEIVED); + e->peer_id = peer_id; + data.copyTo(e->data); + return e; +} + +ConnectionEventPtr ConnectionEvent::peerAdded(session_t peer_id, Address address) +{ + auto e = create(CONNEVENT_PEER_ADDED); + e->peer_id = peer_id; + e->address = address; + return e; +} + +ConnectionEventPtr ConnectionEvent::peerRemoved(session_t peer_id, bool is_timeout, Address address) +{ + auto e = create(CONNEVENT_PEER_REMOVED); + e->peer_id = peer_id; + e->timeout = is_timeout; + e->address = address; + return e; +} + +ConnectionEventPtr ConnectionEvent::bindFailed() +{ + return create(CONNEVENT_BIND_FAILED); +} + /* Connection */ @@ -1186,18 +1302,12 @@ Connection::~Connection() /* Internal stuff */ -void Connection::putEvent(const ConnectionEvent &e) +void Connection::putEvent(ConnectionEventPtr e) { - assert(e.type != CONNEVENT_NONE); // Pre-condition + assert(e->type != CONNEVENT_NONE); // Pre-condition m_event_queue.push_back(e); } -void Connection::putEvent(ConnectionEvent &&e) -{ - assert(e.type != CONNEVENT_NONE); // Pre-condition - m_event_queue.push_back(std::move(e)); -} - void Connection::TriggerSend() { m_sendThread->Trigger(); @@ -1260,11 +1370,9 @@ bool Connection::deletePeer(session_t peer_id, bool timeout) Address peer_address; //any peer has a primary address this never fails! peer->getAddress(MTP_PRIMARY, peer_address); - // Create event - ConnectionEvent e; - e.peerRemoved(peer_id, timeout, peer_address); - putEvent(e); + // Create event + putEvent(ConnectionEvent::peerRemoved(peer_id, timeout, peer_address)); peer->Drop(); return true; @@ -1272,18 +1380,16 @@ bool Connection::deletePeer(session_t peer_id, bool timeout) /* Interface */ -ConnectionEvent Connection::waitEvent(u32 timeout_ms) +ConnectionEventPtr Connection::waitEvent(u32 timeout_ms) { try { return m_event_queue.pop_front(timeout_ms); } catch(ItemNotFoundException &ex) { - ConnectionEvent e; - e.type = CONNEVENT_NONE; - return e; + return ConnectionEvent::create(CONNEVENT_NONE); } } -void Connection::putCommand(const ConnectionCommand &c) +void Connection::putCommand(ConnectionCommandPtr c) { if (!m_shutting_down) { m_command_queue.push_back(c); @@ -1291,26 +1397,14 @@ void Connection::putCommand(const ConnectionCommand &c) } } -void Connection::putCommand(ConnectionCommand &&c) -{ - if (!m_shutting_down) { - m_command_queue.push_back(std::move(c)); - m_sendThread->Trigger(); - } -} - void Connection::Serve(Address bind_addr) { - ConnectionCommand c; - c.serve(bind_addr); - putCommand(c); + putCommand(ConnectionCommand::serve(bind_addr)); } void Connection::Connect(Address address) { - ConnectionCommand c; - c.connect(address); - putCommand(c); + putCommand(ConnectionCommand::connect(address)); } bool Connection::Connected() @@ -1332,9 +1426,7 @@ bool Connection::Connected() void Connection::Disconnect() { - ConnectionCommand c; - c.disconnect(); - putCommand(c); + putCommand(ConnectionCommand::disconnect()); } bool Connection::Receive(NetworkPacket *pkt, u32 timeout) @@ -1345,11 +1437,15 @@ bool Connection::Receive(NetworkPacket *pkt, u32 timeout) This is not considered to be a problem (is it?) */ for(;;) { - ConnectionEvent e = waitEvent(timeout); - if (e.type != CONNEVENT_NONE) + ConnectionEventPtr e_ptr = waitEvent(timeout); + const ConnectionEvent &e = *e_ptr; + + if (e.type != CONNEVENT_NONE) { LOG(dout_con << getDesc() << ": Receive: got event: " << e.describe() << std::endl); - switch(e.type) { + } + + switch (e.type) { case CONNEVENT_NONE: return false; case CONNEVENT_DATA_RECEIVED: @@ -1397,10 +1493,7 @@ void Connection::Send(session_t peer_id, u8 channelnum, { assert(channelnum < CHANNEL_COUNT); // Pre-condition - ConnectionCommand c; - - c.send(peer_id, channelnum, pkt, reliable); - putCommand(std::move(c)); + putCommand(ConnectionCommand::send(peer_id, channelnum, pkt, reliable)); } Address Connection::GetPeerAddress(session_t peer_id) @@ -1499,41 +1592,31 @@ u16 Connection::createPeer(Address& sender, MTProtocols protocol, int fd) LOG(dout_con << getDesc() << "createPeer(): giving peer_id=" << peer_id_new << std::endl); - ConnectionCommand cmd; - Buffer reply(4); - writeU8(&reply[0], PACKET_TYPE_CONTROL); - writeU8(&reply[1], CONTROLTYPE_SET_PEER_ID); - writeU16(&reply[2], peer_id_new); - cmd.createPeer(peer_id_new,reply); - putCommand(std::move(cmd)); + { + Buffer reply(4); + writeU8(&reply[0], PACKET_TYPE_CONTROL); + writeU8(&reply[1], CONTROLTYPE_SET_PEER_ID); + writeU16(&reply[2], peer_id_new); + putCommand(ConnectionCommand::createPeer(peer_id_new, reply)); + } // Create peer addition event - ConnectionEvent e; - e.peerAdded(peer_id_new, sender); - putEvent(e); + putEvent(ConnectionEvent::peerAdded(peer_id_new, sender)); // We're now talking to a valid peer_id return peer_id_new; } -void Connection::PrintInfo(std::ostream &out) -{ - m_info_mutex.lock(); - out< ack(4); writeU8(&ack[0], PACKET_TYPE_CONTROL); writeU8(&ack[1], CONTROLTYPE_ACK); writeU16(&ack[2], seqnum); - c.ack(peer_id, channelnum, ack); - putCommand(std::move(c)); + putCommand(ConnectionCommand::ack(peer_id, channelnum, ack)); m_sendThread->Trigger(); } diff --git a/src/network/connection.h b/src/network/connection.h index ea74ffb1c..1afb4ae84 100644 --- a/src/network/connection.h +++ b/src/network/connection.h @@ -32,6 +32,95 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include +#define MAX_UDP_PEERS 65535 + +/* +=== NOTES === + +A packet is sent through a channel to a peer with a basic header: + Header (7 bytes): + [0] u32 protocol_id + [4] session_t sender_peer_id + [6] u8 channel +sender_peer_id: + Unique to each peer. + value 0 (PEER_ID_INEXISTENT) is reserved for making new connections + value 1 (PEER_ID_SERVER) is reserved for server + these constants are defined in constants.h +channel: + Channel numbers have no intrinsic meaning. Currently only 0, 1, 2 exist. +*/ +#define BASE_HEADER_SIZE 7 +#define CHANNEL_COUNT 3 + +/* +Packet types: + +CONTROL: This is a packet used by the protocol. +- When this is processed, nothing is handed to the user. + Header (2 byte): + [0] u8 type + [1] u8 controltype +controltype and data description: + CONTROLTYPE_ACK + [2] u16 seqnum + CONTROLTYPE_SET_PEER_ID + [2] session_t peer_id_new + CONTROLTYPE_PING + - There is no actual reply, but this can be sent in a reliable + packet to get a reply + CONTROLTYPE_DISCO +*/ +enum ControlType : u8 { + CONTROLTYPE_ACK = 0, + CONTROLTYPE_SET_PEER_ID = 1, + CONTROLTYPE_PING = 2, + CONTROLTYPE_DISCO = 3, +}; + +/* +ORIGINAL: This is a plain packet with no control and no error +checking at all. +- When this is processed, it is directly handed to the user. + Header (1 byte): + [0] u8 type +*/ +//#define TYPE_ORIGINAL 1 +#define ORIGINAL_HEADER_SIZE 1 + +/* +SPLIT: These are sequences of packets forming one bigger piece of +data. +- When processed and all the packet_nums 0...packet_count-1 are + present (this should be buffered), the resulting data shall be + directly handed to the user. +- If the data fails to come up in a reasonable time, the buffer shall + be silently discarded. +- These can be sent as-is or atop of a RELIABLE packet stream. + Header (7 bytes): + [0] u8 type + [1] u16 seqnum + [3] u16 chunk_count + [5] u16 chunk_num +*/ +//#define TYPE_SPLIT 2 + +/* +RELIABLE: Delivery of all RELIABLE packets shall be forced by ACKs, +and they shall be delivered in the same order as sent. This is done +with a buffer in the receiving and transmitting end. +- When this is processed, the contents of each packet is recursively + processed as packets. + Header (3 bytes): + [0] u8 type + [1] u16 seqnum + +*/ +//#define TYPE_RELIABLE 3 +#define RELIABLE_HEADER_SIZE 3 +#define SEQNUM_INITIAL 65500 +#define SEQNUM_MAX 65535 + class NetworkPacket; namespace con @@ -46,9 +135,13 @@ typedef enum MTProtocols { MTP_MINETEST_RELIABLE_UDP } MTProtocols; -#define MAX_UDP_PEERS 65535 - -#define SEQNUM_MAX 65535 +enum PacketType : u8 { + PACKET_TYPE_CONTROL = 0, + PACKET_TYPE_ORIGINAL = 1, + PACKET_TYPE_SPLIT = 2, + PACKET_TYPE_RELIABLE = 3, + PACKET_TYPE_MAX +}; inline bool seqnum_higher(u16 totest, u16 base) { @@ -85,24 +178,40 @@ static inline float CALC_DTIME(u64 lasttime, u64 curtime) return MYMAX(MYMIN(value,0.1),0.0); } -struct BufferedPacket -{ - BufferedPacket(u8 *a_data, u32 a_size): - data(a_data, a_size) - {} - BufferedPacket(u32 a_size): - data(a_size) - {} - Buffer data; // Data of the packet, including headers +/* + Struct for all kinds of packets. Includes following data: + BASE_HEADER + u8[] packet data (usually copied from SharedBuffer) +*/ +struct BufferedPacket { + BufferedPacket(u32 a_size) + { + m_data.resize(a_size); + data = &m_data[0]; + } + + DISABLE_CLASS_COPY(BufferedPacket) + + u16 getSeqnum() const; + + inline const size_t size() const { return m_data.size(); } + + u8 *data; // Direct memory access float time = 0.0f; // Seconds from buffering the packet or re-sending float totaltime = 0.0f; // Seconds from buffering the packet u64 absolute_send_time = -1; Address address; // Sender or destination unsigned int resend_count = 0; + +private: + std::vector m_data; // Data of the packet, including headers }; +typedef std::shared_ptr BufferedPacketPtr; + + // This adds the base headers to the data and makes a packet out of it -BufferedPacket makePacket(Address &address, const SharedBuffer &data, +BufferedPacketPtr makePacket(Address &address, const SharedBuffer &data, u32 protocol_id, session_t sender_peer_id, u8 channel); // Depending on size, make a TYPE_ORIGINAL or TYPE_SPLIT packet @@ -136,101 +245,12 @@ private: std::map> chunks; }; -/* -=== NOTES === - -A packet is sent through a channel to a peer with a basic header: - Header (7 bytes): - [0] u32 protocol_id - [4] session_t sender_peer_id - [6] u8 channel -sender_peer_id: - Unique to each peer. - value 0 (PEER_ID_INEXISTENT) is reserved for making new connections - value 1 (PEER_ID_SERVER) is reserved for server - these constants are defined in constants.h -channel: - Channel numbers have no intrinsic meaning. Currently only 0, 1, 2 exist. -*/ -#define BASE_HEADER_SIZE 7 -#define CHANNEL_COUNT 3 -/* -Packet types: - -CONTROL: This is a packet used by the protocol. -- When this is processed, nothing is handed to the user. - Header (2 byte): - [0] u8 type - [1] u8 controltype -controltype and data description: - CONTROLTYPE_ACK - [2] u16 seqnum - CONTROLTYPE_SET_PEER_ID - [2] session_t peer_id_new - CONTROLTYPE_PING - - There is no actual reply, but this can be sent in a reliable - packet to get a reply - CONTROLTYPE_DISCO -*/ -//#define TYPE_CONTROL 0 -#define CONTROLTYPE_ACK 0 -#define CONTROLTYPE_SET_PEER_ID 1 -#define CONTROLTYPE_PING 2 -#define CONTROLTYPE_DISCO 3 - -/* -ORIGINAL: This is a plain packet with no control and no error -checking at all. -- When this is processed, it is directly handed to the user. - Header (1 byte): - [0] u8 type -*/ -//#define TYPE_ORIGINAL 1 -#define ORIGINAL_HEADER_SIZE 1 -/* -SPLIT: These are sequences of packets forming one bigger piece of -data. -- When processed and all the packet_nums 0...packet_count-1 are - present (this should be buffered), the resulting data shall be - directly handed to the user. -- If the data fails to come up in a reasonable time, the buffer shall - be silently discarded. -- These can be sent as-is or atop of a RELIABLE packet stream. - Header (7 bytes): - [0] u8 type - [1] u16 seqnum - [3] u16 chunk_count - [5] u16 chunk_num -*/ -//#define TYPE_SPLIT 2 -/* -RELIABLE: Delivery of all RELIABLE packets shall be forced by ACKs, -and they shall be delivered in the same order as sent. This is done -with a buffer in the receiving and transmitting end. -- When this is processed, the contents of each packet is recursively - processed as packets. - Header (3 bytes): - [0] u8 type - [1] u16 seqnum - -*/ -//#define TYPE_RELIABLE 3 -#define RELIABLE_HEADER_SIZE 3 -#define SEQNUM_INITIAL 65500 - -enum PacketType: u8 { - PACKET_TYPE_CONTROL = 0, - PACKET_TYPE_ORIGINAL = 1, - PACKET_TYPE_SPLIT = 2, - PACKET_TYPE_RELIABLE = 3, - PACKET_TYPE_MAX -}; /* A buffer which stores reliable packets and sorts them internally for fast access to the smallest one. */ -typedef std::list::iterator RPBSearchResult; +typedef std::list::iterator RPBSearchResult; class ReliablePacketBuffer { @@ -239,12 +259,12 @@ public: bool getFirstSeqnum(u16& result); - BufferedPacket popFirst(); - BufferedPacket popSeqnum(u16 seqnum); - void insert(const BufferedPacket &p, u16 next_expected); + BufferedPacketPtr popFirst(); + BufferedPacketPtr popSeqnum(u16 seqnum); + void insert(BufferedPacketPtr &p_ptr, u16 next_expected); void incrementTimeouts(float dtime); - std::list getTimedOuts(float timeout, u32 max_packets); + std::list> getTimedOuts(float timeout, u32 max_packets); void print(); bool empty(); @@ -252,10 +272,9 @@ public: private: - RPBSearchResult findPacket(u16 seqnum); // does not perform locking - inline RPBSearchResult notFound() { return m_list.end(); } + RPBSearchResult findPacketNoLock(u16 seqnum); - std::list m_list; + std::list m_list; u16 m_oldest_non_answered_ack; @@ -274,7 +293,7 @@ public: Returns a reference counted buffer of length != 0 when a full split packet is constructed. If not, returns one of length 0. */ - SharedBuffer insert(const BufferedPacket &p, bool reliable); + SharedBuffer insert(BufferedPacketPtr &p_ptr, bool reliable); void removeUnreliableTimedOuts(float dtime, float timeout); @@ -285,25 +304,6 @@ private: std::mutex m_map_mutex; }; -struct OutgoingPacket -{ - session_t peer_id; - u8 channelnum; - SharedBuffer data; - bool reliable; - bool ack; - - OutgoingPacket(session_t peer_id_, u8 channelnum_, const SharedBuffer &data_, - bool reliable_,bool ack_=false): - peer_id(peer_id_), - channelnum(channelnum_), - data(data_), - reliable(reliable_), - ack(ack_) - { - } -}; - enum ConnectionCommandType{ CONNCMD_NONE, CONNCMD_SERVE, @@ -316,9 +316,13 @@ enum ConnectionCommandType{ CONCMD_CREATE_PEER }; +struct ConnectionCommand; +typedef std::shared_ptr ConnectionCommandPtr; + +// This is very similar to ConnectionEvent struct ConnectionCommand { - enum ConnectionCommandType type = CONNCMD_NONE; + const ConnectionCommandType type; Address address; session_t peer_id = PEER_ID_INEXISTENT; u8 channelnum = 0; @@ -326,48 +330,21 @@ struct ConnectionCommand bool reliable = false; bool raw = false; - ConnectionCommand() = default; + DISABLE_CLASS_COPY(ConnectionCommand); - void serve(Address address_) - { - type = CONNCMD_SERVE; - address = address_; - } - void connect(Address address_) - { - type = CONNCMD_CONNECT; - address = address_; - } - void disconnect() - { - type = CONNCMD_DISCONNECT; - } - void disconnect_peer(session_t peer_id_) - { - type = CONNCMD_DISCONNECT_PEER; - peer_id = peer_id_; - } + static ConnectionCommandPtr serve(Address address); + static ConnectionCommandPtr connect(Address address); + static ConnectionCommandPtr disconnect(); + static ConnectionCommandPtr disconnect_peer(session_t peer_id); + static ConnectionCommandPtr send(session_t peer_id, u8 channelnum, NetworkPacket *pkt, bool reliable); + static ConnectionCommandPtr ack(session_t peer_id, u8 channelnum, const Buffer &data); + static ConnectionCommandPtr createPeer(session_t peer_id, const Buffer &data); - void send(session_t peer_id_, u8 channelnum_, NetworkPacket *pkt, bool reliable_); +private: + ConnectionCommand(ConnectionCommandType type_) : + type(type_) {} - void ack(session_t peer_id_, u8 channelnum_, const Buffer &data_) - { - type = CONCMD_ACK; - peer_id = peer_id_; - channelnum = channelnum_; - data = data_; - reliable = false; - } - - void createPeer(session_t peer_id_, const Buffer &data_) - { - type = CONCMD_CREATE_PEER; - peer_id = peer_id_; - data = data_; - channelnum = 0; - reliable = true; - raw = true; - } + static ConnectionCommandPtr create(ConnectionCommandType type); }; /* maximum window size to use, 0xFFFF is theoretical maximum. don't think about @@ -402,10 +379,10 @@ public: ReliablePacketBuffer outgoing_reliables_sent; //queued reliable packets - std::queue queued_reliables; + std::queue queued_reliables; //queue commands prior splitting to packets - std::deque queued_commands; + std::deque queued_commands; IncomingSplitBuffer incoming_splits; @@ -514,7 +491,7 @@ class Peer { public: friend class PeerHelper; - Peer(Address address_,u16 id_,Connection* connection) : + Peer(Address address_,session_t id_,Connection* connection) : id(id_), m_connection(connection), address(address_), @@ -528,11 +505,11 @@ class Peer { }; // Unique id of the peer - u16 id; + const session_t id; void Drop(); - virtual void PutReliableSendCommand(ConnectionCommand &c, + virtual void PutReliableSendCommand(ConnectionCommandPtr &c, unsigned int max_packet_size) {}; virtual bool getAddress(MTProtocols type, Address& toset) = 0; @@ -549,7 +526,7 @@ class Peer { virtual u16 getNextSplitSequenceNumber(u8 channel) { return 0; }; virtual void setNextSplitSequenceNumber(u8 channel, u16 seqnum) {}; - virtual SharedBuffer addSplitPacket(u8 channel, const BufferedPacket &toadd, + virtual SharedBuffer addSplitPacket(u8 channel, BufferedPacketPtr &toadd, bool reliable) { errorstream << "Peer::addSplitPacket called," @@ -586,7 +563,7 @@ class Peer { bool IncUseCount(); void DecUseCount(); - std::mutex m_exclusive_access_mutex; + mutable std::mutex m_exclusive_access_mutex; bool m_pending_deletion = false; @@ -634,7 +611,7 @@ public: UDPPeer(u16 a_id, Address a_address, Connection* connection); virtual ~UDPPeer() = default; - void PutReliableSendCommand(ConnectionCommand &c, + void PutReliableSendCommand(ConnectionCommandPtr &c, unsigned int max_packet_size); bool getAddress(MTProtocols type, Address& toset); @@ -642,7 +619,7 @@ public: u16 getNextSplitSequenceNumber(u8 channel); void setNextSplitSequenceNumber(u8 channel, u16 seqnum); - SharedBuffer addSplitPacket(u8 channel, const BufferedPacket &toadd, + SharedBuffer addSplitPacket(u8 channel, BufferedPacketPtr &toadd, bool reliable); protected: @@ -671,7 +648,7 @@ private: float resend_timeout = 0.5; bool processReliableSendCommand( - ConnectionCommand &c, + ConnectionCommandPtr &c_ptr, unsigned int max_packet_size); }; @@ -679,7 +656,7 @@ private: Connection */ -enum ConnectionEventType{ +enum ConnectionEventType { CONNEVENT_NONE, CONNEVENT_DATA_RECEIVED, CONNEVENT_PEER_ADDED, @@ -687,56 +664,32 @@ enum ConnectionEventType{ CONNEVENT_BIND_FAILED, }; +struct ConnectionEvent; +typedef std::shared_ptr ConnectionEventPtr; + +// This is very similar to ConnectionCommand struct ConnectionEvent { - enum ConnectionEventType type = CONNEVENT_NONE; + const ConnectionEventType type; session_t peer_id = 0; Buffer data; bool timeout = false; Address address; - ConnectionEvent() = default; + // We don't want to copy "data" + DISABLE_CLASS_COPY(ConnectionEvent); - const char *describe() const - { - switch(type) { - case CONNEVENT_NONE: - return "CONNEVENT_NONE"; - case CONNEVENT_DATA_RECEIVED: - return "CONNEVENT_DATA_RECEIVED"; - case CONNEVENT_PEER_ADDED: - return "CONNEVENT_PEER_ADDED"; - case CONNEVENT_PEER_REMOVED: - return "CONNEVENT_PEER_REMOVED"; - case CONNEVENT_BIND_FAILED: - return "CONNEVENT_BIND_FAILED"; - } - return "Invalid ConnectionEvent"; - } + static ConnectionEventPtr create(ConnectionEventType type); + static ConnectionEventPtr dataReceived(session_t peer_id, const Buffer &data); + static ConnectionEventPtr peerAdded(session_t peer_id, Address address); + static ConnectionEventPtr peerRemoved(session_t peer_id, bool is_timeout, Address address); + static ConnectionEventPtr bindFailed(); - void dataReceived(session_t peer_id_, const Buffer &data_) - { - type = CONNEVENT_DATA_RECEIVED; - peer_id = peer_id_; - data = data_; - } - void peerAdded(session_t peer_id_, Address address_) - { - type = CONNEVENT_PEER_ADDED; - peer_id = peer_id_; - address = address_; - } - void peerRemoved(session_t peer_id_, bool timeout_, Address address_) - { - type = CONNEVENT_PEER_REMOVED; - peer_id = peer_id_; - timeout = timeout_; - address = address_; - } - void bindFailed() - { - type = CONNEVENT_BIND_FAILED; - } + const char *describe() const; + +private: + ConnectionEvent(ConnectionEventType type_) : + type(type_) {} }; class PeerHandler; @@ -752,10 +705,9 @@ public: ~Connection(); /* Interface */ - ConnectionEvent waitEvent(u32 timeout_ms); - // Warning: creates an unnecessary copy, prefer putCommand(T&&) if possible - void putCommand(const ConnectionCommand &c); - void putCommand(ConnectionCommand &&c); + ConnectionEventPtr waitEvent(u32 timeout_ms); + + void putCommand(ConnectionCommandPtr c); void SetTimeoutMs(u32 timeout) { m_bc_receive_timeout = timeout; } void Serve(Address bind_addr); @@ -785,8 +737,6 @@ protected: void sendAck(session_t peer_id, u8 channelnum, u16 seqnum); - void PrintInfo(std::ostream &out); - std::vector getPeerIDs() { MutexAutoLock peerlock(m_peers_mutex); @@ -795,13 +745,11 @@ protected: UDPSocket m_udpSocket; // Command queue: user -> SendThread - MutexedQueue m_command_queue; + MutexedQueue m_command_queue; bool Receive(NetworkPacket *pkt, u32 timeout); - // Warning: creates an unnecessary copy, prefer putEvent(T&&) if possible - void putEvent(const ConnectionEvent &e); - void putEvent(ConnectionEvent &&e); + void putEvent(ConnectionEventPtr e); void TriggerSend(); @@ -811,7 +759,7 @@ protected: } private: // Event queue: ReceiveThread -> user - MutexedQueue m_event_queue; + MutexedQueue m_event_queue; session_t m_peer_id = 0; u32 m_protocol_id; @@ -823,7 +771,7 @@ private: std::unique_ptr m_sendThread; std::unique_ptr m_receiveThread; - std::mutex m_info_mutex; + mutable std::mutex m_info_mutex; // Backwards compatibility PeerHandler *m_bc_peerhandler; diff --git a/src/network/connectionthreads.cpp b/src/network/connectionthreads.cpp index a306ced9b..dca065ae1 100644 --- a/src/network/connectionthreads.cpp +++ b/src/network/connectionthreads.cpp @@ -50,11 +50,11 @@ std::mutex log_conthread_mutex; #define WINDOW_SIZE 5 -static session_t readPeerId(u8 *packetdata) +static session_t readPeerId(const u8 *packetdata) { return readU16(&packetdata[4]); } -static u8 readChannel(u8 *packetdata) +static u8 readChannel(const u8 *packetdata) { return readU8(&packetdata[6]); } @@ -114,9 +114,9 @@ void *ConnectionSendThread::run() } /* translate commands to packets */ - ConnectionCommand c = m_connection->m_command_queue.pop_frontNoEx(0); - while (c.type != CONNCMD_NONE) { - if (c.reliable) + auto c = m_connection->m_command_queue.pop_frontNoEx(0); + while (c && c->type != CONNCMD_NONE) { + if (c->reliable) processReliableCommand(c); else processNonReliableCommand(c); @@ -227,21 +227,21 @@ void ConnectionSendThread::runTimeouts(float dtime) m_iteration_packets_avaialble -= timed_outs.size(); for (const auto &k : timed_outs) { - u8 channelnum = readChannel(*k.data); - u16 seqnum = readU16(&(k.data[BASE_HEADER_SIZE + 1])); + u8 channelnum = readChannel(k->data); + u16 seqnum = k->getSeqnum(); - channel.UpdateBytesLost(k.data.getSize()); + channel.UpdateBytesLost(k->size()); LOG(derr_con << m_connection->getDesc() << "RE-SENDING timed-out RELIABLE to " - << k.address.serializeString() + << k->address.serializeString() << "(t/o=" << resend_timeout << "): " - << "count=" << k.resend_count + << "count=" << k->resend_count << ", channel=" << ((int) channelnum & 0xff) << ", seqnum=" << seqnum << std::endl); - rawSend(k); + rawSend(k.get()); // do not handle rtt here as we can't decide if this packet was // lost or really takes more time to transmit @@ -274,25 +274,24 @@ void ConnectionSendThread::runTimeouts(float dtime) } } -void ConnectionSendThread::rawSend(const BufferedPacket &packet) +void ConnectionSendThread::rawSend(const BufferedPacket *p) { try { - m_connection->m_udpSocket.Send(packet.address, *packet.data, - packet.data.getSize()); + m_connection->m_udpSocket.Send(p->address, p->data, p->size()); LOG(dout_con << m_connection->getDesc() - << " rawSend: " << packet.data.getSize() + << " rawSend: " << p->size() << " bytes sent" << std::endl); } catch (SendFailedException &e) { LOG(derr_con << m_connection->getDesc() << "Connection::rawSend(): SendFailedException: " - << packet.address.serializeString() << std::endl); + << p->address.serializeString() << std::endl); } } -void ConnectionSendThread::sendAsPacketReliable(BufferedPacket &p, Channel *channel) +void ConnectionSendThread::sendAsPacketReliable(BufferedPacketPtr &p, Channel *channel) { try { - p.absolute_send_time = porting::getTimeMs(); + p->absolute_send_time = porting::getTimeMs(); // Buffer the packet channel->outgoing_reliables_sent.insert(p, (channel->readOutgoingSequenceNumber() - MAX_RELIABLE_WINDOW_SIZE) @@ -305,7 +304,7 @@ void ConnectionSendThread::sendAsPacketReliable(BufferedPacket &p, Channel *chan } // Send the packet - rawSend(p); + rawSend(p.get()); } bool ConnectionSendThread::rawSendAsPacket(session_t peer_id, u8 channelnum, @@ -321,11 +320,10 @@ bool ConnectionSendThread::rawSendAsPacket(session_t peer_id, u8 channelnum, Channel *channel = &(dynamic_cast(&peer)->channels[channelnum]); if (reliable) { - bool have_sequence_number_for_raw_packet = true; - u16 seqnum = - channel->getOutgoingSequenceNumber(have_sequence_number_for_raw_packet); + bool have_seqnum = false; + const u16 seqnum = channel->getOutgoingSequenceNumber(have_seqnum); - if (!have_sequence_number_for_raw_packet) + if (!have_seqnum) return false; SharedBuffer reliable = makeReliablePacket(data, seqnum); @@ -333,13 +331,12 @@ bool ConnectionSendThread::rawSendAsPacket(session_t peer_id, u8 channelnum, peer->getAddress(MTP_MINETEST_RELIABLE_UDP, peer_address); // Add base headers and make a packet - BufferedPacket p = con::makePacket(peer_address, reliable, + BufferedPacketPtr p = con::makePacket(peer_address, reliable, m_connection->GetProtocolID(), m_connection->GetPeerID(), channelnum); // first check if our send window is already maxed out - if (channel->outgoing_reliables_sent.size() - < channel->getWindowSize()) { + if (channel->outgoing_reliables_sent.size() < channel->getWindowSize()) { LOG(dout_con << m_connection->getDesc() << " INFO: sending a reliable packet to peer_id " << peer_id << " channel: " << (u32)channelnum @@ -352,19 +349,19 @@ bool ConnectionSendThread::rawSendAsPacket(session_t peer_id, u8 channelnum, << " INFO: queueing reliable packet for peer_id: " << peer_id << " channel: " << (u32)channelnum << " seqnum: " << seqnum << std::endl); - channel->queued_reliables.push(std::move(p)); + channel->queued_reliables.push(p); return false; } Address peer_address; if (peer->getAddress(MTP_UDP, peer_address)) { // Add base headers and make a packet - BufferedPacket p = con::makePacket(peer_address, data, + BufferedPacketPtr p = con::makePacket(peer_address, data, m_connection->GetProtocolID(), m_connection->GetPeerID(), channelnum); // Send the packet - rawSend(p); + rawSend(p.get()); return true; } @@ -374,11 +371,11 @@ bool ConnectionSendThread::rawSendAsPacket(session_t peer_id, u8 channelnum, return false; } -void ConnectionSendThread::processReliableCommand(ConnectionCommand &c) +void ConnectionSendThread::processReliableCommand(ConnectionCommandPtr &c) { - assert(c.reliable); // Pre-condition + assert(c->reliable); // Pre-condition - switch (c.type) { + switch (c->type) { case CONNCMD_NONE: LOG(dout_con << m_connection->getDesc() << "UDP processing reliable CONNCMD_NONE" << std::endl); @@ -399,7 +396,7 @@ void ConnectionSendThread::processReliableCommand(ConnectionCommand &c) case CONCMD_CREATE_PEER: LOG(dout_con << m_connection->getDesc() << "UDP processing reliable CONCMD_CREATE_PEER" << std::endl); - if (!rawSendAsPacket(c.peer_id, c.channelnum, c.data, c.reliable)) { + if (!rawSendAsPacket(c->peer_id, c->channelnum, c->data, c->reliable)) { /* put to queue if we couldn't send it immediately */ sendReliable(c); } @@ -412,13 +409,14 @@ void ConnectionSendThread::processReliableCommand(ConnectionCommand &c) FATAL_ERROR("Got command that shouldn't be reliable as reliable command"); default: LOG(dout_con << m_connection->getDesc() - << " Invalid reliable command type: " << c.type << std::endl); + << " Invalid reliable command type: " << c->type << std::endl); } } -void ConnectionSendThread::processNonReliableCommand(ConnectionCommand &c) +void ConnectionSendThread::processNonReliableCommand(ConnectionCommandPtr &c_ptr) { + const ConnectionCommand &c = *c_ptr; assert(!c.reliable); // Pre-condition switch (c.type) { @@ -480,9 +478,7 @@ void ConnectionSendThread::serve(Address bind_address) } catch (SocketException &e) { // Create event - ConnectionEvent ce; - ce.bindFailed(); - m_connection->putEvent(ce); + m_connection->putEvent(ConnectionEvent::bindFailed()); } } @@ -495,9 +491,7 @@ void ConnectionSendThread::connect(Address address) UDPPeer *peer = m_connection->createServerPeer(address); // Create event - ConnectionEvent e; - e.peerAdded(peer->id, peer->address); - m_connection->putEvent(e); + m_connection->putEvent(ConnectionEvent::peerAdded(peer->id, peer->address)); Address bind_addr; @@ -586,9 +580,9 @@ void ConnectionSendThread::send(session_t peer_id, u8 channelnum, } } -void ConnectionSendThread::sendReliable(ConnectionCommand &c) +void ConnectionSendThread::sendReliable(ConnectionCommandPtr &c) { - PeerHelper peer = m_connection->getPeerNoEx(c.peer_id); + PeerHelper peer = m_connection->getPeerNoEx(c->peer_id); if (!peer) return; @@ -604,7 +598,7 @@ void ConnectionSendThread::sendToAll(u8 channelnum, const SharedBuffer &data } } -void ConnectionSendThread::sendToAllReliable(ConnectionCommand &c) +void ConnectionSendThread::sendToAllReliable(ConnectionCommandPtr &c) { std::vector peerids = m_connection->getPeerIDs(); @@ -663,8 +657,12 @@ void ConnectionSendThread::sendPackets(float dtime) // first send queued reliable packets for all peers (if possible) for (unsigned int i = 0; i < CHANNEL_COUNT; i++) { Channel &channel = udpPeer->channels[i]; - u16 next_to_ack = 0; + // Reduces logging verbosity + if (channel.queued_reliables.empty()) + continue; + + u16 next_to_ack = 0; channel.outgoing_reliables_sent.getFirstSeqnum(next_to_ack); u16 next_to_receive = 0; channel.incoming_reliables.getFirstSeqnum(next_to_receive); @@ -694,13 +692,13 @@ void ConnectionSendThread::sendPackets(float dtime) channel.outgoing_reliables_sent.size() < channel.getWindowSize() && peer->m_increment_packets_remaining > 0) { - BufferedPacket p = std::move(channel.queued_reliables.front()); + BufferedPacketPtr p = channel.queued_reliables.front(); channel.queued_reliables.pop(); LOG(dout_con << m_connection->getDesc() << " INFO: sending a queued reliable packet " << " channel: " << i - << ", seqnum: " << readU16(&p.data[BASE_HEADER_SIZE + 1]) + << ", seqnum: " << p->getSeqnum() << std::endl); sendAsPacketReliable(p, &channel); @@ -881,17 +879,14 @@ void ConnectionReceiveThread::receive(SharedBuffer &packetdata, try { // First, see if there any buffered packets we can process now if (packet_queued) { - bool data_left = true; session_t peer_id; SharedBuffer resultdata; - while (data_left) { + while (true) { try { - data_left = getFromBuffers(peer_id, resultdata); - if (data_left) { - ConnectionEvent e; - e.dataReceived(peer_id, resultdata); - m_connection->putEvent(std::move(e)); - } + if (!getFromBuffers(peer_id, resultdata)) + break; + + m_connection->putEvent(ConnectionEvent::dataReceived(peer_id, resultdata)); } catch (ProcessedSilentlyException &e) { /* try reading again */ @@ -908,7 +903,7 @@ void ConnectionReceiveThread::receive(SharedBuffer &packetdata, return; if ((received_size < BASE_HEADER_SIZE) || - (readU32(&packetdata[0]) != m_connection->GetProtocolID())) { + (readU32(&packetdata[0]) != m_connection->GetProtocolID())) { LOG(derr_con << m_connection->getDesc() << "Receive(): Invalid incoming packet, " << "size: " << received_size @@ -999,9 +994,7 @@ void ConnectionReceiveThread::receive(SharedBuffer &packetdata, << ", channel: " << (u32)channelnum << ", returned " << resultdata.getSize() << " bytes" << std::endl); - ConnectionEvent e; - e.dataReceived(peer_id, resultdata); - m_connection->putEvent(std::move(e)); + m_connection->putEvent(ConnectionEvent::dataReceived(peer_id, resultdata)); } catch (ProcessedSilentlyException &e) { } @@ -1026,10 +1019,11 @@ bool ConnectionReceiveThread::getFromBuffers(session_t &peer_id, SharedBuffer(&peer) == 0) + UDPPeer *p = dynamic_cast(&peer); + if (!p) continue; - for (Channel &channel : (dynamic_cast(&peer))->channels) { + for (Channel &channel : p->channels) { if (checkIncomingBuffers(&channel, peer_id, dst)) { return true; } @@ -1042,32 +1036,34 @@ bool ConnectionReceiveThread::checkIncomingBuffers(Channel *channel, session_t &peer_id, SharedBuffer &dst) { u16 firstseqnum = 0; - if (channel->incoming_reliables.getFirstSeqnum(firstseqnum)) { - if (firstseqnum == channel->readNextIncomingSeqNum()) { - BufferedPacket p = channel->incoming_reliables.popFirst(); - peer_id = readPeerId(*p.data); - u8 channelnum = readChannel(*p.data); - u16 seqnum = readU16(&p.data[BASE_HEADER_SIZE + 1]); + if (!channel->incoming_reliables.getFirstSeqnum(firstseqnum)) + return false; - LOG(dout_con << m_connection->getDesc() - << "UNBUFFERING TYPE_RELIABLE" - << " seqnum=" << seqnum - << " peer_id=" << peer_id - << " channel=" << ((int) channelnum & 0xff) - << std::endl); + if (firstseqnum != channel->readNextIncomingSeqNum()) + return false; - channel->incNextIncomingSeqNum(); + BufferedPacketPtr p = channel->incoming_reliables.popFirst(); - u32 headers_size = BASE_HEADER_SIZE + RELIABLE_HEADER_SIZE; - // Get out the inside packet and re-process it - SharedBuffer payload(p.data.getSize() - headers_size); - memcpy(*payload, &p.data[headers_size], payload.getSize()); + peer_id = readPeerId(p->data); // Carried over to caller function + u8 channelnum = readChannel(p->data); + u16 seqnum = p->getSeqnum(); - dst = processPacket(channel, payload, peer_id, channelnum, true); - return true; - } - } - return false; + LOG(dout_con << m_connection->getDesc() + << "UNBUFFERING TYPE_RELIABLE" + << " seqnum=" << seqnum + << " peer_id=" << peer_id + << " channel=" << ((int) channelnum & 0xff) + << std::endl); + + channel->incNextIncomingSeqNum(); + + u32 headers_size = BASE_HEADER_SIZE + RELIABLE_HEADER_SIZE; + // Get out the inside packet and re-process it + SharedBuffer payload(p->size() - headers_size); + memcpy(*payload, &p->data[headers_size], payload.getSize()); + + dst = processPacket(channel, payload, peer_id, channelnum, true); + return true; } SharedBuffer ConnectionReceiveThread::processPacket(Channel *channel, @@ -1115,7 +1111,7 @@ SharedBuffer ConnectionReceiveThread::handlePacketType_Control(Channel *chan if (packetdata.getSize() < 2) throw InvalidIncomingDataException("packetdata.getSize() < 2"); - u8 controltype = readU8(&(packetdata[1])); + ControlType controltype = (ControlType)readU8(&(packetdata[1])); if (controltype == CONTROLTYPE_ACK) { assert(channel != NULL); @@ -1131,7 +1127,7 @@ SharedBuffer ConnectionReceiveThread::handlePacketType_Control(Channel *chan << seqnum << " ]" << std::endl); try { - BufferedPacket p = channel->outgoing_reliables_sent.popSeqnum(seqnum); + BufferedPacketPtr p = channel->outgoing_reliables_sent.popSeqnum(seqnum); // the rtt calculation will be a bit off for re-sent packets but that's okay { @@ -1140,14 +1136,14 @@ SharedBuffer ConnectionReceiveThread::handlePacketType_Control(Channel *chan // a overflow is quite unlikely but as it'd result in major // rtt miscalculation we handle it here - if (current_time > p.absolute_send_time) { - float rtt = (current_time - p.absolute_send_time) / 1000.0; + if (current_time > p->absolute_send_time) { + float rtt = (current_time - p->absolute_send_time) / 1000.0; // Let peer calculate stuff according to it // (avg_rtt and resend_timeout) dynamic_cast(peer)->reportRTT(rtt); - } else if (p.totaltime > 0) { - float rtt = p.totaltime; + } else if (p->totaltime > 0) { + float rtt = p->totaltime; // Let peer calculate stuff according to it // (avg_rtt and resend_timeout) @@ -1156,7 +1152,7 @@ SharedBuffer ConnectionReceiveThread::handlePacketType_Control(Channel *chan } // put bytes for max bandwidth calculation - channel->UpdateBytesSent(p.data.getSize(), 1); + channel->UpdateBytesSent(p->size(), 1); if (channel->outgoing_reliables_sent.size() == 0) m_connection->TriggerSend(); } catch (NotFoundException &e) { @@ -1204,7 +1200,7 @@ SharedBuffer ConnectionReceiveThread::handlePacketType_Control(Channel *chan throw ProcessedSilentlyException("Got a DISCO"); } else { LOG(derr_con << m_connection->getDesc() - << "INVALID TYPE_CONTROL: invalid controltype=" + << "INVALID controltype=" << ((int) controltype & 0xff) << std::endl); throw InvalidIncomingDataException("Invalid control type"); } @@ -1232,7 +1228,7 @@ SharedBuffer ConnectionReceiveThread::handlePacketType_Split(Channel *channe if (peer->getAddress(MTP_UDP, peer_address)) { // We have to create a packet again for buffering // This isn't actually too bad an idea. - BufferedPacket packet = makePacket(peer_address, + BufferedPacketPtr packet = con::makePacket(peer_address, packetdata, m_connection->GetProtocolID(), peer->id, @@ -1267,7 +1263,7 @@ SharedBuffer ConnectionReceiveThread::handlePacketType_Reliable(Channel *cha if (packetdata.getSize() < RELIABLE_HEADER_SIZE) throw InvalidIncomingDataException("packetdata.getSize() < RELIABLE_HEADER_SIZE"); - u16 seqnum = readU16(&packetdata[1]); + const u16 seqnum = readU16(&packetdata[1]); bool is_future_packet = false; bool is_old_packet = false; @@ -1311,7 +1307,7 @@ SharedBuffer ConnectionReceiveThread::handlePacketType_Reliable(Channel *cha // This one comes later, buffer it. // Actually we have to make a packet to buffer one. // Well, we have all the ingredients, so just do it. - BufferedPacket packet = con::makePacket( + BufferedPacketPtr packet = con::makePacket( peer_address, packetdata, m_connection->GetProtocolID(), @@ -1328,9 +1324,7 @@ SharedBuffer ConnectionReceiveThread::handlePacketType_Reliable(Channel *cha throw ProcessedQueued("Buffered future reliable packet"); } catch (AlreadyExistsException &e) { } catch (IncomingDataCorruption &e) { - ConnectionCommand discon; - discon.disconnect_peer(peer->id); - m_connection->putCommand(discon); + m_connection->putCommand(ConnectionCommand::disconnect_peer(peer->id)); LOG(derr_con << m_connection->getDesc() << "INVALID, TYPE_RELIABLE peer_id: " << peer->id @@ -1351,7 +1345,7 @@ SharedBuffer ConnectionReceiveThread::handlePacketType_Reliable(Channel *cha u16 queued_seqnum = 0; if (channel->incoming_reliables.getFirstSeqnum(queued_seqnum)) { if (queued_seqnum == seqnum) { - BufferedPacket queued_packet = channel->incoming_reliables.popFirst(); + BufferedPacketPtr queued_packet = channel->incoming_reliables.popFirst(); /** TODO find a way to verify the new against the old packet */ } } diff --git a/src/network/connectionthreads.h b/src/network/connectionthreads.h index 612407c3b..c2e2dae12 100644 --- a/src/network/connectionthreads.h +++ b/src/network/connectionthreads.h @@ -29,6 +29,25 @@ namespace con class Connection; +struct OutgoingPacket +{ + session_t peer_id; + u8 channelnum; + SharedBuffer data; + bool reliable; + bool ack; + + OutgoingPacket(session_t peer_id_, u8 channelnum_, const SharedBuffer &data_, + bool reliable_,bool ack_=false): + peer_id(peer_id_), + channelnum(channelnum_), + data(data_), + reliable(reliable_), + ack(ack_) + { + } +}; + class ConnectionSendThread : public Thread { @@ -51,27 +70,27 @@ public: private: void runTimeouts(float dtime); - void rawSend(const BufferedPacket &packet); + void rawSend(const BufferedPacket *p); bool rawSendAsPacket(session_t peer_id, u8 channelnum, const SharedBuffer &data, bool reliable); - void processReliableCommand(ConnectionCommand &c); - void processNonReliableCommand(ConnectionCommand &c); + void processReliableCommand(ConnectionCommandPtr &c); + void processNonReliableCommand(ConnectionCommandPtr &c); void serve(Address bind_address); void connect(Address address); void disconnect(); void disconnect_peer(session_t peer_id); void send(session_t peer_id, u8 channelnum, const SharedBuffer &data); - void sendReliable(ConnectionCommand &c); + void sendReliable(ConnectionCommandPtr &c); void sendToAll(u8 channelnum, const SharedBuffer &data); - void sendToAllReliable(ConnectionCommand &c); + void sendToAllReliable(ConnectionCommandPtr &c); void sendPackets(float dtime); void sendAsPacket(session_t peer_id, u8 channelnum, const SharedBuffer &data, bool ack = false); - void sendAsPacketReliable(BufferedPacket &p, Channel *channel); + void sendAsPacketReliable(BufferedPacketPtr &p, Channel *channel); bool packetsQueued(); diff --git a/src/unittest/test_connection.cpp b/src/unittest/test_connection.cpp index 23b7e9105..04fea90d6 100644 --- a/src/unittest/test_connection.cpp +++ b/src/unittest/test_connection.cpp @@ -124,7 +124,7 @@ void TestConnection::testHelpers() Address a(127,0,0,1, 10); const u16 seqnum = 34352; - con::BufferedPacket p1 = con::makePacket(a, data1, + con::BufferedPacketPtr p1 = con::makePacket(a, data1, proto_id, peer_id, channel); /* We should now have a packet with this data: @@ -135,10 +135,10 @@ void TestConnection::testHelpers() Data: [7] u8 data1[0] */ - UASSERT(readU32(&p1.data[0]) == proto_id); - UASSERT(readU16(&p1.data[4]) == peer_id); - UASSERT(readU8(&p1.data[6]) == channel); - UASSERT(readU8(&p1.data[7]) == data1[0]); + UASSERT(readU32(&p1->data[0]) == proto_id); + UASSERT(readU16(&p1->data[4]) == peer_id); + UASSERT(readU8(&p1->data[6]) == channel); + UASSERT(readU8(&p1->data[7]) == data1[0]); //infostream<<"initial data1[0]="<<((u32)data1[0]&0xff)< +#include // std::shared_ptr + + +template class ConstSharedPtr { +public: + ConstSharedPtr(T *ptr) : ptr(ptr) {} + ConstSharedPtr(const std::shared_ptr &ptr) : ptr(ptr) {} + + const T* get() const noexcept { return ptr.get(); } + const T& operator*() const noexcept { return *ptr.get(); } + const T* operator->() const noexcept { return ptr.get(); } + +private: + std::shared_ptr ptr; +}; template class Buffer @@ -40,17 +55,11 @@ public: else data = NULL; } - Buffer(const Buffer &buffer) - { - m_size = buffer.m_size; - if(m_size != 0) - { - data = new T[buffer.m_size]; - memcpy(data, buffer.data, buffer.m_size); - } - else - data = NULL; - } + + // Disable class copy + Buffer(const Buffer &) = delete; + Buffer &operator=(const Buffer &) = delete; + Buffer(Buffer &&buffer) { m_size = buffer.m_size; @@ -81,21 +90,6 @@ public: drop(); } - Buffer& operator=(const Buffer &buffer) - { - if(this == &buffer) - return *this; - drop(); - m_size = buffer.m_size; - if(m_size != 0) - { - data = new T[buffer.m_size]; - memcpy(data, buffer.data, buffer.m_size); - } - else - data = NULL; - return *this; - } Buffer& operator=(Buffer &&buffer) { if(this == &buffer) @@ -113,6 +107,18 @@ public: return *this; } + void copyTo(Buffer &buffer) const + { + buffer.drop(); + buffer.m_size = m_size; + if (m_size != 0) { + buffer.data = new T[m_size]; + memcpy(buffer.data, data, m_size); + } else { + buffer.data = nullptr; + } + } + T & operator[](unsigned int i) const { return data[i]; From 80c3c7e642749f9316a3eee2c235df3ce8be1666 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Wed, 1 Dec 2021 19:22:46 +0000 Subject: [PATCH 117/412] Improve error message if using "/help --" (#11796) --- builtin/common/chatcommands.lua | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/builtin/common/chatcommands.lua b/builtin/common/chatcommands.lua index 21417e42b..7c3da0601 100644 --- a/builtin/common/chatcommands.lua +++ b/builtin/common/chatcommands.lua @@ -7,7 +7,9 @@ local S = core.get_translator("__builtin") core.registered_chatcommands = {} -- Interpret the parameters of a command, separating options and arguments. --- Input: parameters of a command +-- Input: command, param +-- command: name of command +-- param: parameters of command -- Returns: opts, args -- opts is a string of option letters, or false on error -- args is an array with the non-option arguments in order, or an error message @@ -19,14 +21,14 @@ core.registered_chatcommands = {} -- "cdg", {"a", "b", "e", "f"} -- Negative numbers are taken as arguments. Long options (--option) are -- currently rejected as reserved. -local function getopts(param) +local function getopts(command, param) local opts = "" local args = {} for match in param:gmatch("%S+") do if match:byte(1) == 45 then -- 45 = '-' local second = match:byte(2) if second == 45 then - return false, S("Flags beginning with -- are reserved") + return false, S("Invalid parameters (see /help @1).", command) elseif second and (second < 48 or second > 57) then -- 48 = '0', 57 = '9' opts = opts .. match:sub(2) else @@ -80,7 +82,7 @@ local function format_help_line(cmd, def) end local function do_help_cmd(name, param) - local opts, args = getopts(param) + local opts, args = getopts("help", param) if not opts then return false, args end From 7a043b3ebbbf250890f39a9afecebba1cc9826a6 Mon Sep 17 00:00:00 2001 From: Richard Liu Date: Sun, 5 Dec 2021 07:34:40 -0600 Subject: [PATCH 118/412] Fix wireshark packet dissector wrong coordinates (#11826) --- util/wireshark/minetest.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/util/wireshark/minetest.lua b/util/wireshark/minetest.lua index d954c7597..40e1956f3 100644 --- a/util/wireshark/minetest.lua +++ b/util/wireshark/minetest.lua @@ -422,8 +422,8 @@ do t:add(f_pointed_under_y, buffer(13,2)) t:add(f_pointed_under_z, buffer(15,2)) t:add(f_pointed_above_x, buffer(17,2)) - t:add(f_pointed_above_x, buffer(19,2)) - t:add(f_pointed_above_x, buffer(21,2)) + t:add(f_pointed_above_y, buffer(19,2)) + t:add(f_pointed_above_z, buffer(21,2)) elseif ptype == 2 then -- Object t:add(f_pointed_object_id, buffer(11,2)) end From ff934d538c00518476c31f5df6ebc4be5ca79591 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 5 Dec 2021 14:40:30 +0100 Subject: [PATCH 119/412] Fix various code & correctness issues (#11815) --- CMakeLists.txt | 2 +- src/client/content_cao.cpp | 2 +- src/client/game.cpp | 2 +- src/gettext.h | 3 +-- src/server.cpp | 12 +++++------ src/settings.cpp | 2 +- src/unittest/test_gettext.cpp | 36 +++++++++++++++------------------ src/unittest/test_utilities.cpp | 8 ++++---- 8 files changed, 30 insertions(+), 37 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3ba99bc21..ea212bede 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ set(DEVELOPMENT_BUILD TRUE) set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") if(VERSION_EXTRA) - set(VERSION_STRING ${VERSION_STRING}-${VERSION_EXTRA}) + set(VERSION_STRING "${VERSION_STRING}-${VERSION_EXTRA}") elseif(DEVELOPMENT_BUILD) set(VERSION_STRING "${VERSION_STRING}-dev") endif() diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index 24a9e7921..a80a3ce4e 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -850,7 +850,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) logOnce(oss, warningstream); video::ITexture *last = m_animated_meshnode->getMaterial(0).TextureLayer[0].Texture; - for (s32 i = 1; i < mat_count; i++) { + for (u32 i = 1; i < mat_count; i++) { auto &layer = m_animated_meshnode->getMaterial(i).TextureLayer[0]; if (!layer.Texture) layer.Texture = last; diff --git a/src/client/game.cpp b/src/client/game.cpp index fb993d92f..54028fd1d 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -1383,7 +1383,7 @@ bool Game::createClient(const GameStartData &start_data) str += L" ["; str += text; str += L"]"; - delete text; + delete[] text; } str += L" ["; str += driver->getName(); diff --git a/src/gettext.h b/src/gettext.h index 67fd9244f..6225fef93 100644 --- a/src/gettext.h +++ b/src/gettext.h @@ -48,8 +48,7 @@ void init_gettext(const char *path, const std::string &configured_language, extern wchar_t *utf8_to_wide_c(const char *str); -// You must free the returned string! -// The returned string is allocated using new +// The returned string must be freed using delete[] inline const wchar_t *wgettext(const char *str) { // We must check here that is not an empty string to avoid trying to translate it diff --git a/src/server.cpp b/src/server.cpp index 5022221ee..c175cbcd2 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -517,9 +517,7 @@ void Server::stop() // Stop threads (set run=false first so both start stopping) m_thread->stop(); - //m_emergethread.setRun(false); m_thread->wait(); - //m_emergethread.stop(); infostream<<"Server: Threads stopped"<= 2.0) { - counter = 0.0; + counter -= dtime; + if (counter <= 0.0f) { + counter = 2.0f; m_emerge->startThreads(); } diff --git a/src/settings.cpp b/src/settings.cpp index 818d2bc41..cf7ec1b72 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -88,7 +88,7 @@ void SettingsHierarchy::onLayerCreated(int layer, Settings *obj) void SettingsHierarchy::onLayerRemoved(int layer) { - assert(layer >= 0 && layer < layers.size()); + assert(layer >= 0 && layer < (int)layers.size()); layers[layer] = nullptr; if (this == &g_hierarchy && layer == (int)SL_GLOBAL) g_settings = nullptr; diff --git a/src/unittest/test_gettext.cpp b/src/unittest/test_gettext.cpp index 98f73ec62..338a416d7 100644 --- a/src/unittest/test_gettext.cpp +++ b/src/unittest/test_gettext.cpp @@ -7,13 +7,12 @@ class TestGettext : public TestBase public: TestGettext() { TestManager::registerTestModule(this); - } + } const char *getName() { return "TestGettext"; } void runTests(IGameDef *gamedef); - void testSnfmtgettext(); void testFmtgettext(); }; @@ -24,24 +23,21 @@ void TestGettext::runTests(IGameDef *gamedef) TEST(testFmtgettext); } +// Make sure updatepo.sh does not pick up the strings +#define dummyname fmtgettext + void TestGettext::testFmtgettext() { - std::string buf = fmtgettext("Viewing range changed to %d", 12); - UASSERTEQ(std::string, buf, "Viewing range changed to 12"); - buf = fmtgettext( - "You are about to join this server with the name \"%s\" for the " - "first time.\n" - "If you proceed, a new account using your credentials will be " - "created on this server.\n" - "Please retype your password and click 'Register and Join' to " - "confirm account creation, or click 'Cancel' to abort." - , "A"); - UASSERTEQ(std::string, buf, - "You are about to join this server with the name \"A\" for the " - "first time.\n" - "If you proceed, a new account using your credentials will be " - "created on this server.\n" - "Please retype your password and click 'Register and Join' to " - "confirm account creation, or click 'Cancel' to abort." - ); + std::string buf = dummyname("sample text %d", 12); + UASSERTEQ(std::string, buf, "sample text 12"); + + std::string src, expect; + src = "You are about to join this server with the name \"%s\".\n"; + expect = "You are about to join this server with the name \"foo\".\n"; + for (int i = 0; i < 20; i++) { + src.append("loooong text"); + expect.append("loooong text"); + } + buf = dummyname(src.c_str(), "foo"); + UASSERTEQ(const std::string &, buf, expect); } diff --git a/src/unittest/test_utilities.cpp b/src/unittest/test_utilities.cpp index 039110d54..743fe4462 100644 --- a/src/unittest/test_utilities.cpp +++ b/src/unittest/test_utilities.cpp @@ -392,9 +392,9 @@ void TestUtilities::testIsPowerOfTwo() UASSERT(is_power_of_two(2) == true); UASSERT(is_power_of_two(3) == false); for (int exponent = 2; exponent <= 31; ++exponent) { - UASSERT(is_power_of_two((1 << exponent) - 1) == false); - UASSERT(is_power_of_two((1 << exponent)) == true); - UASSERT(is_power_of_two((1 << exponent) + 1) == false); + UASSERT(is_power_of_two((1U << exponent) - 1) == false); + UASSERT(is_power_of_two((1U << exponent)) == true); + UASSERT(is_power_of_two((1U << exponent) + 1) == false); } UASSERT(is_power_of_two(U32_MAX) == false); } @@ -629,4 +629,4 @@ void TestUtilities::testBase64() UASSERT(base64_is_valid("AAA=A") == false); UASSERT(base64_is_valid("AAAA=A") == false); UASSERT(base64_is_valid("AAAAA=A") == false); -} \ No newline at end of file +} From d9d219356aa31cd953303580ccde7f0e27dd0fe6 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Mon, 6 Dec 2021 00:04:33 +0100 Subject: [PATCH 120/412] Fix get_bone_position() on unset bones modifying their position closes #11840 --- src/server/unit_sao.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/server/unit_sao.cpp b/src/server/unit_sao.cpp index acbdd478a..9a49b0f43 100644 --- a/src/server/unit_sao.cpp +++ b/src/server/unit_sao.cpp @@ -84,8 +84,11 @@ void UnitSAO::setBonePosition(const std::string &bone, v3f position, v3f rotatio void UnitSAO::getBonePosition(const std::string &bone, v3f *position, v3f *rotation) { - *position = m_bone_position[bone].X; - *rotation = m_bone_position[bone].Y; + auto it = m_bone_position.find(bone); + if (it != m_bone_position.end()) { + *position = it->second.X; + *rotation = it->second.Y; + } } // clang-format off From a8c58d5cbba994849ea78e3eecefbefb70070bb7 Mon Sep 17 00:00:00 2001 From: Francisco Date: Fri, 10 Dec 2021 03:24:42 -0800 Subject: [PATCH 121/412] Add pauloue's ItemStack example to docs (#9853) --- doc/lua_api.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index aff739cfb..e26497555 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -2181,6 +2181,21 @@ Example: meta:set_string("key", "value") print(dump(meta:to_table())) +Example manipulations of "description" and expected output behaviors: + + print(ItemStack("default:pick_steel"):get_description()) --> Steel Pickaxe + print(ItemStack("foobar"):get_description()) --> Unknown Item + + local stack = ItemStack("default:stone") + stack:get_meta():set_string("description", "Custom description\nAnother line") + print(stack:get_description()) --> Custom description\nAnother line + print(stack:get_short_description()) --> Custom description + + stack:get_meta():set_string("short_description", "Short") + print(stack:get_description()) --> Custom description\nAnother line + print(stack:get_short_description()) --> Short + + print(ItemStack("mod:item_with_no_desc"):get_description()) --> mod:item_with_no_desc From 1ab3eadd8785b4caceff5b79bd4476f648f4e563 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Thu, 2 Dec 2021 12:53:53 +0100 Subject: [PATCH 122/412] Update builtin locale --- builtin/locale/__builtin.de.tr | 14 +++++++++++--- builtin/locale/__builtin.it.tr | 10 +++++++--- builtin/locale/template.txt | 8 +++++--- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/builtin/locale/__builtin.de.tr b/builtin/locale/__builtin.de.tr index ee0b47a7e..0831e6559 100644 --- a/builtin/locale/__builtin.de.tr +++ b/builtin/locale/__builtin.de.tr @@ -187,12 +187,15 @@ You are already dead.=Sie sind schon tot. @1 is already dead.=@1 ist bereits tot. @1 has been killed.=@1 wurde getötet. Kill player or yourself=Einen Spieler oder Sie selbst töten +Invalid parameters (see /help @1).= +Too many arguments, try using just /help = Available commands: @1=Verfügbare Befehle: @1 Use '/help ' to get more information, or '/help all' to list everything.=„/help “ benutzen, um mehr Informationen zu erhalten, oder „/help all“, um alles aufzulisten. Available commands:=Verfügbare Befehle: Command not available: @1=Befehl nicht verfügbar: @1 -[all | privs | ]=[all | privs | ] -Get help for commands or list privileges=Hilfe für Befehle erhalten oder Privilegien auflisten +[all | privs | ] [-t]= +Get help for commands or list privileges (-t: output in chat)= +Available privileges:=Verfügbare Privilegien: Command=Befehl Parameters=Parameter For more information, click on any entry in the list.=Für mehr Informationen klicken Sie auf einen beliebigen Eintrag in der Liste. @@ -202,7 +205,6 @@ Available commands: (see also: /help )=Verfügbare Befehle: (siehe auch: /h Close=Schließen Privilege=Privileg Description=Beschreibung -Available privileges:=Verfügbare Privilegien: print [] | dump [] | save [ []] | reset=print [] | dump [] | save [ []] Handle the profiler and profiling data=Den Profiler und Profilingdaten verwalten Statistics written to action log.=Statistiken zum Aktionsprotokoll geschrieben. @@ -241,3 +243,9 @@ A total of @1 sample(s) were taken.=Es wurden insgesamt @1 Datenpunkt(e) aufgeze The output is limited to '@1'.=Die Ausgabe ist beschränkt auf „@1“. Saving of profile failed: @1=Speichern des Profils fehlgeschlagen: @1 Profile saved to @1=Profil abgespeichert nach @1 + + +##### not used anymore ##### + +[all | privs | ]=[all | privs | ] +Get help for commands or list privileges=Hilfe für Befehle erhalten oder Privilegien auflisten diff --git a/builtin/locale/__builtin.it.tr b/builtin/locale/__builtin.it.tr index 6e137db71..88866fdf3 100644 --- a/builtin/locale/__builtin.it.tr +++ b/builtin/locale/__builtin.it.tr @@ -187,12 +187,15 @@ You are already dead.=Sei già mortǝ. @1 is already dead.=@1 è già mortǝ. @1 has been killed.=@1 è stato uccisǝ. Kill player or yourself=Uccide un giocatore o te stessǝ +Invalid parameters (see /help @1).= +Too many arguments, try using just /help = Available commands: @1=Comandi disponibili: @1 Use '/help ' to get more information, or '/help all' to list everything.=Usa '/help ' per ottenere più informazioni, o '/help all' per elencare tutti i comandi. Available commands:=Comandi disponibili: Command not available: @1=Comando non disponibile: @1 -[all | privs | ]=[all | privs | ] -Get help for commands or list privileges=Richiama la finestra d'aiuto dei comandi o dei privilegi +[all | privs | ] [-t]= +Get help for commands or list privileges (-t: output in chat)= +Available privileges:=Privilegi disponibili: Command=Comando Parameters=Parametri For more information, click on any entry in the list.=Per più informazioni, clicca su una qualsiasi voce dell'elenco. @@ -202,7 +205,6 @@ Available commands: (see also: /help )=Comandi disponibili: (vedi anche /he Close=Chiudi Privilege=Privilegio Description=Descrizione -Available privileges:=Privilegi disponibili: print [] | dump [] | save [ []] | reset=print [] | dump [] | save [ []] | reset Handle the profiler and profiling data=Gestisce il profiler e i dati da esso elaborati Statistics written to action log.=Statistiche scritte nel log delle azioni. @@ -245,6 +247,8 @@ Profile saved to @1= ##### not used anymore ##### +[all | privs | ]=[all | privs | ] +Get help for commands or list privileges=Richiama la finestra d'aiuto dei comandi o dei privilegi Allows enabling various debug options that may affect gameplay=Permette di abilitare varie opzioni di debug che potrebbero influenzare l'esperienza di gioco [ | -1] [reconnect] []=[ | -1] [reconnect] [] Shutdown server (-1 cancels a delayed shutdown)=Arresta il server (-1 annulla un arresto programmato) diff --git a/builtin/locale/template.txt b/builtin/locale/template.txt index 7e40d0a2b..6c9caa270 100644 --- a/builtin/locale/template.txt +++ b/builtin/locale/template.txt @@ -187,12 +187,15 @@ You are already dead.= @1 is already dead.= @1 has been killed.= Kill player or yourself= +Invalid parameters (see /help @1).= +Too many arguments, try using just /help = Available commands: @1= Use '/help ' to get more information, or '/help all' to list everything.= Available commands:= Command not available: @1= -[all | privs | ]= -Get help for commands or list privileges= +[all | privs | ] [-t]= +Get help for commands or list privileges (-t: output in chat)= +Available privileges:= Command= Parameters= For more information, click on any entry in the list.= @@ -202,7 +205,6 @@ Available commands: (see also: /help )= Close= Privilege= Description= -Available privileges:= print [] | dump [] | save [ []] | reset= Handle the profiler and profiling data= Statistics written to action log.= From 76aa6103e39533d70f3b46e6df902dc6b4dd4104 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Thu, 2 Dec 2021 12:55:56 +0100 Subject: [PATCH 123/412] Update German locale translation --- builtin/locale/__builtin.de.tr | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/builtin/locale/__builtin.de.tr b/builtin/locale/__builtin.de.tr index 0831e6559..b5fea3609 100644 --- a/builtin/locale/__builtin.de.tr +++ b/builtin/locale/__builtin.de.tr @@ -187,14 +187,14 @@ You are already dead.=Sie sind schon tot. @1 is already dead.=@1 ist bereits tot. @1 has been killed.=@1 wurde getötet. Kill player or yourself=Einen Spieler oder Sie selbst töten -Invalid parameters (see /help @1).= -Too many arguments, try using just /help = +Invalid parameters (see /help @1).=Ungültige Parameter (siehe „/help @1“). +Too many arguments, try using just /help =Zu viele Argumente. Probieren Sie es mit „/help “ Available commands: @1=Verfügbare Befehle: @1 Use '/help ' to get more information, or '/help all' to list everything.=„/help “ benutzen, um mehr Informationen zu erhalten, oder „/help all“, um alles aufzulisten. Available commands:=Verfügbare Befehle: Command not available: @1=Befehl nicht verfügbar: @1 -[all | privs | ] [-t]= -Get help for commands or list privileges (-t: output in chat)= +[all | privs | ] [-t]=[all | privs | ] [-t] +Get help for commands or list privileges (-t: output in chat)=Hilfe für Befehle erhalten oder Privilegien auflisten (-t: Ausgabe im Chat) Available privileges:=Verfügbare Privilegien: Command=Befehl Parameters=Parameter @@ -243,9 +243,3 @@ A total of @1 sample(s) were taken.=Es wurden insgesamt @1 Datenpunkt(e) aufgeze The output is limited to '@1'.=Die Ausgabe ist beschränkt auf „@1“. Saving of profile failed: @1=Speichern des Profils fehlgeschlagen: @1 Profile saved to @1=Profil abgespeichert nach @1 - - -##### not used anymore ##### - -[all | privs | ]=[all | privs | ] -Get help for commands or list privileges=Hilfe für Befehle erhalten oder Privilegien auflisten From f71091bf52db9b9b58f2b08a7a99e69b2cf3376e Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Sun, 3 Oct 2021 15:36:35 +0200 Subject: [PATCH 124/412] Remove creative/damage info in Esc/Pause menu --- src/client/game.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/client/game.cpp b/src/client/game.cpp index 54028fd1d..739409761 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -4283,16 +4283,18 @@ void Game::showPauseMenu() if (simple_singleplayer_mode || address.empty()) { static const std::string on = strgettext("On"); static const std::string off = strgettext("Off"); - const std::string &damage = g_settings->getBool("enable_damage") ? on : off; - const std::string &creative = g_settings->getBool("creative_mode") ? on : off; + // Note: Status of enable_damage and creative_mode settings is intentionally + // NOT shown here because the game might roll its own damage system and/or do + // a per-player Creative Mode, in which case writing it here would mislead. + bool damage = g_settings->getBool("enable_damage"); const std::string &announced = g_settings->getBool("server_announce") ? on : off; - os << strgettext("- Damage: ") << damage << "\n" - << strgettext("- Creative Mode: ") << creative << "\n"; if (!simple_singleplayer_mode) { - const std::string &pvp = g_settings->getBool("enable_pvp") ? on : off; - //~ PvP = Player versus Player - os << strgettext("- PvP: ") << pvp << "\n" - << strgettext("- Public: ") << announced << "\n"; + if (damage) { + const std::string &pvp = g_settings->getBool("enable_pvp") ? on : off; + //~ PvP = Player versus Player + os << strgettext("- PvP: ") << pvp << "\n"; + } + os << strgettext("- Public: ") << announced << "\n"; std::string server_name = g_settings->get("server_name"); str_formspec_escape(server_name); if (announced == on && !server_name.empty()) From 84efe279bb5fd5cce3f1d042b3aac412376fda1b Mon Sep 17 00:00:00 2001 From: sfan5 Date: Wed, 1 Dec 2021 21:11:32 +0100 Subject: [PATCH 125/412] Fix URL escaping in content store --- builtin/mainmenu/dlg_contentstore.lua | 35 ++++++++++++++++++--------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/builtin/mainmenu/dlg_contentstore.lua b/builtin/mainmenu/dlg_contentstore.lua index 58421ef75..9db67cf57 100644 --- a/builtin/mainmenu/dlg_contentstore.lua +++ b/builtin/mainmenu/dlg_contentstore.lua @@ -62,9 +62,19 @@ local REASON_UPDATE = "update" local REASON_DEPENDENCY = "dependency" +-- encodes for use as URL parameter or path component +local function urlencode(str) + return str:gsub("[^%a%d()._~-]", function(char) + return string.format("%%%02X", string.byte(char)) + end) +end +assert(urlencode("sample text?") == "sample%20text%3F") + + local function get_download_url(package, reason) local base_url = core.settings:get("contentdb_url") - local ret = base_url .. ("/packages/%s/%s/releases/%d/download/"):format(package.author, package.name, package.release) + local ret = base_url .. ("/packages/%s/releases/%d/download/"):format( + package.url_part, package.release) if reason then ret = ret .. "?reason=" .. reason end @@ -199,7 +209,7 @@ local function get_raw_dependencies(package) local url_fmt = "/api/packages/%s/dependencies/?only_hard=1&protocol_version=%s&engine_version=%s" local version = core.get_version() local base_url = core.settings:get("contentdb_url") - local url = base_url .. url_fmt:format(package.id, core.get_max_supp_proto(), version.string) + local url = base_url .. url_fmt:format(package.url_part, core.get_max_supp_proto(), urlencode(version.string)) local response = http.fetch_sync({ url = url }) if not response.succeeded then @@ -574,17 +584,16 @@ function store.load() local base_url = core.settings:get("contentdb_url") local url = base_url .. "/api/packages/?type=mod&type=game&type=txp&protocol_version=" .. - core.get_max_supp_proto() .. "&engine_version=" .. version.string + core.get_max_supp_proto() .. "&engine_version=" .. urlencode(version.string) for _, item in pairs(core.settings:get("contentdb_flag_blacklist"):split(",")) do item = item:trim() if item ~= "" then - url = url .. "&hide=" .. item + url = url .. "&hide=" .. urlencode(item) end end - local timeout = tonumber(core.settings:get("curl_file_download_timeout")) - local response = http.fetch_sync({ url = url, timeout = timeout }) + local response = http.fetch_sync({ url = url }) if not response.succeeded then return end @@ -594,12 +603,16 @@ function store.load() for _, package in pairs(store.packages_full) do local name_len = #package.name + -- This must match what store.update_paths() does! + package.id = package.author:lower() .. "/" if package.type == "game" and name_len > 5 and package.name:sub(name_len - 4) == "_game" then - package.id = package.author:lower() .. "/" .. package.name:sub(1, name_len - 5) + package.id = package.id .. package.name:sub(1, name_len - 5) else - package.id = package.author:lower() .. "/" .. package.name + package.id = package.id .. package.name end + package.url_part = urlencode(package.author) .. "/" .. urlencode(package.name) + if package.aliases then for _, alias in ipairs(package.aliases) do -- We currently don't support name changing @@ -1013,9 +1026,9 @@ function store.handle_submit(this, fields) end if fields["view_" .. i] then - local url = ("%s/packages/%s/%s?protocol_version=%d"):format( - core.settings:get("contentdb_url"), - package.author, package.name, core.get_max_supp_proto()) + local url = ("%s/packages/%s?protocol_version=%d"):format( + core.settings:get("contentdb_url"), package.url_part, + core.get_max_supp_proto()) core.open_url(url) return true end From fcf86ded8f8f5f0b0da9a59e4e9035838bf19d01 Mon Sep 17 00:00:00 2001 From: ROllerozxa Date: Mon, 13 Dec 2021 17:43:29 +0100 Subject: [PATCH 126/412] Disable inventory if player's inventory formspec is blank (#11827) --- doc/lua_api.txt | 1 + src/client/game.cpp | 23 +++++++++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index e26497555..ee7d63101 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -6690,6 +6690,7 @@ object you are working with still exists. * `set_inventory_formspec(formspec)` * Redefine player's inventory form * Should usually be called in `on_joinplayer` + * If `formspec` is `""`, the player's inventory is disabled. * `get_inventory_formspec()`: returns a formspec string * `set_formspec_prepend(formspec)`: * the formspec string will be added to every formspec shown to the user, diff --git a/src/client/game.cpp b/src/client/game.cpp index 739409761..853a52ecf 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -2060,15 +2060,22 @@ void Game::openInventory() InventoryLocation inventoryloc; inventoryloc.setCurrentPlayer(); - if (!client->modsLoaded() - || !client->getScript()->on_inventory_open(fs_src->m_client->getInventory(inventoryloc))) { - TextDest *txt_dst = new TextDestPlayerInventory(client); - auto *&formspec = m_game_ui->updateFormspec(""); - GUIFormSpecMenu::create(formspec, client, m_rendering_engine->get_gui_env(), - &input->joystick, fs_src, txt_dst, client->getFormspecPrepend(), sound); - - formspec->setFormSpec(fs_src->getForm(), inventoryloc); + if (client->modsLoaded() && client->getScript()->on_inventory_open(fs_src->m_client->getInventory(inventoryloc))) { + delete fs_src; + return; } + + if (fs_src->getForm().empty()) { + delete fs_src; + return; + } + + TextDest *txt_dst = new TextDestPlayerInventory(client); + auto *&formspec = m_game_ui->updateFormspec(""); + GUIFormSpecMenu::create(formspec, client, m_rendering_engine->get_gui_env(), + &input->joystick, fs_src, txt_dst, client->getFormspecPrepend(), sound); + + formspec->setFormSpec(fs_src->getForm(), inventoryloc); } From 378175497a6a5bb3492f268f71b8d55389e33fc4 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Wed, 15 Dec 2021 14:36:27 +0100 Subject: [PATCH 127/412] Fix some issues with buildbot scripts (#11860) --- util/buildbot/buildwin32.sh | 13 +++++++++++-- util/buildbot/buildwin64.sh | 13 +++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/util/buildbot/buildwin32.sh b/util/buildbot/buildwin32.sh index cdf6105d1..696297aed 100755 --- a/util/buildbot/buildwin32.sh +++ b/util/buildbot/buildwin32.sh @@ -31,9 +31,16 @@ fi toolchain_file=$dir/toolchain_${compiler/-gcc/}.cmake echo "Using $toolchain_file" -tmp=$(dirname "$(command -v $compiler)")/../i686-w64-mingw32/bin +# Try to find runtime DLLs in various paths (varies by distribution, sigh) +tmp=$(dirname "$(command -v $compiler)")/.. runtime_dlls= -[ -d "$tmp" ] && runtime_dlls=$(echo $tmp/lib{gcc_,stdc++-,winpthread-}*.dll | tr ' ' ';') +for name in lib{gcc_,stdc++-,winpthread-}'*'.dll; do + for dir in $tmp/i686-w64-mingw32/{bin,lib} $tmp/lib/gcc/i686-w64-mingw32/*; do + [ -d "$dir" ] || continue + file=$(echo $dir/$name) + [ -f "$file" ] && { runtime_dlls+="$file;"; break; } + done +done [ -z "$runtime_dlls" ] && echo "The compiler runtime DLLs could not be found, they might be missing in the final package." @@ -89,10 +96,12 @@ download "http://minetest.kitsunemimi.pw/openal_stripped.zip" '' unzip_nofolder if [ -n "$EXISTING_MINETEST_DIR" ]; then sourcedir="$( cd "$EXISTING_MINETEST_DIR" && pwd )" else + cd $builddir sourcedir=$PWD/$CORE_NAME [ -d $CORE_NAME ] && { pushd $CORE_NAME; git pull; popd; } || \ git clone -b $CORE_BRANCH $CORE_GIT $CORE_NAME if [ -z "$NO_MINETEST_GAME" ]; then + cd $sourcedir [ -d games/$GAME_NAME ] && { pushd games/$GAME_NAME; git pull; popd; } || \ git clone -b $GAME_BRANCH $GAME_GIT games/$GAME_NAME fi diff --git a/util/buildbot/buildwin64.sh b/util/buildbot/buildwin64.sh index f8ff3cfdd..20d0b3a6a 100755 --- a/util/buildbot/buildwin64.sh +++ b/util/buildbot/buildwin64.sh @@ -31,9 +31,16 @@ fi toolchain_file=$dir/toolchain_${compiler/-gcc/}.cmake echo "Using $toolchain_file" -tmp=$(dirname "$(command -v $compiler)")/../x86_64-w64-mingw32/bin +# Try to find runtime DLLs in various paths (varies by distribution, sigh) +tmp=$(dirname "$(command -v $compiler)")/.. runtime_dlls= -[ -d "$tmp" ] && runtime_dlls=$(echo $tmp/lib{gcc_,stdc++-,winpthread-}*.dll | tr ' ' ';') +for name in lib{gcc_,stdc++-,winpthread-}'*'.dll; do + for dir in $tmp/x86_64-w64-mingw32/{bin,lib} $tmp/lib/gcc/x86_64-w64-mingw32/*; do + [ -d "$dir" ] || continue + file=$(echo $dir/$name) + [ -f "$file" ] && { runtime_dlls+="$file;"; break; } + done +done [ -z "$runtime_dlls" ] && echo "The compiler runtime DLLs could not be found, they might be missing in the final package." @@ -89,10 +96,12 @@ download "http://minetest.kitsunemimi.pw/openal_stripped64.zip" 'openal_stripped if [ -n "$EXISTING_MINETEST_DIR" ]; then sourcedir="$( cd "$EXISTING_MINETEST_DIR" && pwd )" else + cd $builddir sourcedir=$PWD/$CORE_NAME [ -d $CORE_NAME ] && { pushd $CORE_NAME; git pull; popd; } || \ git clone -b $CORE_BRANCH $CORE_GIT $CORE_NAME if [ -z "$NO_MINETEST_GAME" ]; then + cd $sourcedir [ -d games/$GAME_NAME ] && { pushd games/$GAME_NAME; git pull; popd; } || \ git clone -b $GAME_BRANCH $GAME_GIT games/$GAME_NAME fi From 1c5ece8334d050379eb99fe2ead52f9f4db44249 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Wed, 15 Dec 2021 15:36:19 +0100 Subject: [PATCH 128/412] Fix eat sound not playing if eating last of stack --- builtin/game/item.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/builtin/game/item.lua b/builtin/game/item.lua index c9ccb8801..5a83eafd2 100644 --- a/builtin/game/item.lua +++ b/builtin/game/item.lua @@ -499,11 +499,12 @@ function core.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed return result end end + -- read definition before potentially emptying the stack + local def = itemstack:get_definition() if itemstack:take_item():is_empty() then return itemstack end - local def = itemstack:get_definition() if def and def.sound and def.sound.eat then core.sound_play(def.sound.eat, { pos = user:get_pos(), From 8472141b79c25092c90dea24aa873bd7ff792142 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sat, 18 Dec 2021 20:36:43 +0100 Subject: [PATCH 129/412] Restructure devtest's unittests and run them in CI (#11859) --- .github/workflows/build.yml | 2 +- games/devtest/mods/unittests/crafting.lua | 18 +- games/devtest/mods/unittests/init.lua | 205 +++++++++++++++++- .../mods/unittests/itemdescription.lua | 3 +- games/devtest/mods/unittests/misc.lua | 38 ++++ games/devtest/mods/unittests/player.lua | 46 ++-- games/devtest/mods/unittests/random.lua | 10 - src/script/cpp_api/s_base.h | 9 + src/script/cpp_api/s_server.cpp | 6 +- src/script/cpp_api/s_server.h | 2 +- src/script/lua_api/l_server.cpp | 2 +- util/test_multiplayer.sh | 26 ++- 12 files changed, 292 insertions(+), 75 deletions(-) create mode 100644 games/devtest/mods/unittests/misc.lua delete mode 100644 games/devtest/mods/unittests/random.lua diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 417b4f650..af1de15ec 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -93,7 +93,7 @@ jobs: run: | ./bin/minetest --run-unittests - - name: Integration test + - name: Integration test + devtest run: | ./util/test_multiplayer.sh diff --git a/games/devtest/mods/unittests/crafting.lua b/games/devtest/mods/unittests/crafting.lua index eff13ce09..8c16d3efb 100644 --- a/games/devtest/mods/unittests/crafting.lua +++ b/games/devtest/mods/unittests/crafting.lua @@ -1,6 +1,7 @@ +dofile(core.get_modpath(core.get_current_modname()) .. "/crafting_prepare.lua") + -- Test minetest.clear_craft function local function test_clear_craft() - minetest.log("info", "[unittests] Testing minetest.clear_craft") -- Clearing by output minetest.register_craft({ output = "foo", @@ -22,11 +23,10 @@ local function test_clear_craft() minetest.clear_craft({recipe={{"foo", "bar"}}}) assert(minetest.get_all_craft_recipes("foo") == nil) end +unittests.register("test_clear_craft", test_clear_craft) -- Test minetest.get_craft_result function local function test_get_craft_result() - minetest.log("info", "[unittests] Testing minetest.get_craft_result") - -- normal local input = { method = "normal", @@ -107,14 +107,6 @@ local function test_get_craft_result() assert(output.item) minetest.log("info", "[unittests] unrepairable tool crafting output.item:to_table(): "..dump(output.item:to_table())) -- unrepairable tool must not yield any output - assert(output.item:get_name() == "") - + assert(output.item:is_empty()) end - -function unittests.test_crafting() - test_clear_craft() - test_get_craft_result() - minetest.log("action", "[unittests] Crafting tests passed!") - return true -end - +unittests.register("test_get_craft_result", test_get_craft_result) diff --git a/games/devtest/mods/unittests/init.lua b/games/devtest/mods/unittests/init.lua index 12c67f78b..0754d507f 100644 --- a/games/devtest/mods/unittests/init.lua +++ b/games/devtest/mods/unittests/init.lua @@ -1,18 +1,199 @@ unittests = {} -local modpath = minetest.get_modpath("unittests") -dofile(modpath .. "/random.lua") -dofile(modpath .. "/player.lua") -dofile(modpath .. "/crafting_prepare.lua") -dofile(modpath .. "/crafting.lua") -dofile(modpath .. "/itemdescription.lua") +unittests.list = {} -if minetest.settings:get_bool("devtest_unittests_autostart", false) then - unittests.test_random() - unittests.test_crafting() - unittests.test_short_desc() - minetest.register_on_joinplayer(function(player) - unittests.test_player(player) +-- name: Name of the test +-- func: +-- for sync: function(player, pos), should error on failure +-- for async: function(callback, player, pos) +-- MUST call callback() or callback("error msg") in case of error once test is finished +-- this means you cannot use assert() in the test implementation +-- opts: { +-- player = false, -- Does test require a player? +-- map = false, -- Does test require map access? +-- async = false, -- Does the test run asynchronously? (read notes above!) +-- } +function unittests.register(name, func, opts) + local def = table.copy(opts or {}) + def.name = name + def.func = func + table.insert(unittests.list, def) +end + +function unittests.on_finished(all_passed) + -- free to override +end + +-- Calls invoke with a callback as argument +-- Suspends coroutine until that callback is called +-- Return values are passed through +local function await(invoke) + local co = coroutine.running() + assert(co) + local called_early = true + invoke(function(...) + if called_early == true then + called_early = {...} + else + coroutine.resume(co, ...) + end + end) + if called_early ~= true then + -- callback was already called before yielding + return unpack(called_early) + end + called_early = nil + return coroutine.yield() +end + +function unittests.run_one(idx, counters, out_callback, player, pos) + local def = unittests.list[idx] + if not def.player then + player = nil + elseif player == nil then + out_callback(false) + return false + end + if not def.map then + pos = nil + elseif pos == nil then + out_callback(false) + return false + end + + local tbegin = core.get_us_time() + local function done(status, err) + local tend = core.get_us_time() + local ms_taken = (tend - tbegin) / 1000 + + if not status then + core.log("error", err) + end + print(string.format("[%s] %s - %dms", + status and "PASS" or "FAIL", def.name, ms_taken)) + counters.time = counters.time + ms_taken + counters.total = counters.total + 1 + if status then + counters.passed = counters.passed + 1 + end + end + + if def.async then + core.log("info", "[unittest] running " .. def.name .. " (async)") + def.func(function(err) + done(err == nil, err) + out_callback(true) + end, player, pos) + else + core.log("info", "[unittest] running " .. def.name) + local status, err = pcall(def.func, player, pos) + done(status, err) + out_callback(true) + end + + return true +end + +local function wait_for_player(callback) + if #core.get_connected_players() > 0 then + return callback(core.get_connected_players()[1]) + end + local first = true + core.register_on_joinplayer(function(player) + if first then + callback(player) + first = false + end end) end +local function wait_for_map(player, callback) + local check = function() + if core.get_node_or_nil(player:get_pos()) ~= nil then + callback() + else + minetest.after(0, check) + end + end + check() +end + +function unittests.run_all() + -- This runs in a coroutine so it uses await(). + local counters = { time = 0, total = 0, passed = 0 } + + -- Run standalone tests first + for idx = 1, #unittests.list do + local def = unittests.list[idx] + def.done = await(function(cb) + unittests.run_one(idx, counters, cb, nil, nil) + end) + end + + -- Wait for a player to join, run tests that require a player + local player = await(wait_for_player) + for idx = 1, #unittests.list do + local def = unittests.list[idx] + if not def.done then + def.done = await(function(cb) + unittests.run_one(idx, counters, cb, player, nil) + end) + end + end + + -- Wait for the world to generate/load, run tests that require map access + await(function(cb) + wait_for_map(player, cb) + end) + local pos = vector.round(player:get_pos()) + for idx = 1, #unittests.list do + local def = unittests.list[idx] + if not def.done then + def.done = await(function(cb) + unittests.run_one(idx, counters, cb, player, pos) + end) + end + end + + -- Print stats + assert(#unittests.list == counters.total) + print(string.rep("+", 80)) + print(string.format("Unit Test Results: %s", + counters.total == counters.passed and "PASSED" or "FAILED")) + print(string.format(" %d / %d failed tests.", + counters.total - counters.passed, counters.total)) + print(string.format(" Testing took %dms total.", counters.time)) + print(string.rep("+", 80)) + unittests.on_finished(counters.total == counters.passed) + return counters.total == counters.passed +end + +-------------- + +local modpath = minetest.get_modpath("unittests") +dofile(modpath .. "/misc.lua") +dofile(modpath .. "/player.lua") +dofile(modpath .. "/crafting.lua") +dofile(modpath .. "/itemdescription.lua") + +-------------- + +if core.settings:get_bool("devtest_unittests_autostart", false) then + core.after(0, function() + coroutine.wrap(unittests.run_all)() + end) +else + minetest.register_chatcommand("unittests", { + privs = {basic_privs=true}, + description = "Runs devtest unittests (may modify player or map state)", + func = function(name, param) + unittests.on_finished = function(ok) + core.chat_send_player(name, + (ok and "All tests passed." or "There were test failures.") .. + " Check the console for detailed output.") + end + coroutine.wrap(unittests.run_all)() + return true, "" + end, + }) +end diff --git a/games/devtest/mods/unittests/itemdescription.lua b/games/devtest/mods/unittests/itemdescription.lua index d6ee6551a..dc62de7f0 100644 --- a/games/devtest/mods/unittests/itemdescription.lua +++ b/games/devtest/mods/unittests/itemdescription.lua @@ -25,7 +25,7 @@ minetest.register_chatcommand("item_description", { end }) -function unittests.test_short_desc() +local function test_short_desc() local function get_short_description(item) return ItemStack(item):get_short_description() end @@ -49,3 +49,4 @@ function unittests.test_short_desc() return true end +unittests.register("test_short_desc", test_short_desc) diff --git a/games/devtest/mods/unittests/misc.lua b/games/devtest/mods/unittests/misc.lua new file mode 100644 index 000000000..cf4f92cfa --- /dev/null +++ b/games/devtest/mods/unittests/misc.lua @@ -0,0 +1,38 @@ +local function test_random() + -- Try out PseudoRandom + local pseudo = PseudoRandom(13) + assert(pseudo:next() == 22290) + assert(pseudo:next() == 13854) +end +unittests.register("test_random", test_random) + +local function test_dynamic_media(cb, player) + if core.get_player_information(player:get_player_name()).protocol_version < 40 then + core.log("warning", "test_dynamic_media: Client too old, skipping test.") + return cb() + end + + -- Check that the client acknowledges media transfers + local path = core.get_worldpath() .. "/test_media.obj" + local f = io.open(path, "w") + f:write("# contents don't matter\n") + f:close() + + local call_ok = false + local ok = core.dynamic_add_media({ + filepath = path, + to_player = player:get_player_name(), + }, function(name) + if not call_ok then + cb("impossible condition") + end + cb() + end) + if not ok then + return cb("dynamic_add_media() returned error") + end + call_ok = true + + -- if the callback isn't called this test will just hang :shrug: +end +unittests.register("test_dynamic_media", test_dynamic_media, {async=true, player=true}) diff --git a/games/devtest/mods/unittests/player.lua b/games/devtest/mods/unittests/player.lua index 4a681310d..fa0557960 100644 --- a/games/devtest/mods/unittests/player.lua +++ b/games/devtest/mods/unittests/player.lua @@ -2,6 +2,21 @@ -- HP Change Reasons -- local expect = nil +minetest.register_on_player_hpchange(function(player, hp, reason) + if expect == nil then + return + end + + for key, value in pairs(reason) do + assert(expect[key] == value) + end + for key, value in pairs(expect) do + assert(reason[key] == value) + end + + expect = nil +end) + local function run_hpchangereason_tests(player) local old_hp = player:get_hp() @@ -20,7 +35,11 @@ local function run_hpchangereason_tests(player) player:set_hp(old_hp) end +unittests.register("test_hpchangereason", run_hpchangereason_tests, {player=true}) +-- +-- Player meta +-- local function run_player_meta_tests(player) local meta = player:get_meta() meta:set_string("foo", "bar") @@ -48,29 +67,4 @@ local function run_player_meta_tests(player) assert(meta:get_string("foo") == "") assert(meta:equals(meta2)) end - -function unittests.test_player(player) - minetest.register_on_player_hpchange(function(player, hp, reason) - if not expect then - return - end - - for key, value in pairs(reason) do - assert(expect[key] == value) - end - - for key, value in pairs(expect) do - assert(reason[key] == value) - end - - expect = nil - end) - - run_hpchangereason_tests(player) - run_player_meta_tests(player) - local msg = "Player tests passed for player '"..player:get_player_name().."'!" - minetest.chat_send_all(msg) - minetest.log("action", "[unittests] "..msg) - return true -end - +unittests.register("test_player_meta", run_player_meta_tests, {player=true}) diff --git a/games/devtest/mods/unittests/random.lua b/games/devtest/mods/unittests/random.lua deleted file mode 100644 index f94f0a88e..000000000 --- a/games/devtest/mods/unittests/random.lua +++ /dev/null @@ -1,10 +0,0 @@ -function unittests.test_random() - -- Try out PseudoRandom - minetest.log("action", "[unittests] Testing PseudoRandom ...") - local pseudo = PseudoRandom(13) - assert(pseudo:next() == 22290) - assert(pseudo:next() == 13854) - minetest.log("action", "[unittests] PseudoRandom test passed!") - return true -end - diff --git a/src/script/cpp_api/s_base.h b/src/script/cpp_api/s_base.h index 06df2abe3..244d81605 100644 --- a/src/script/cpp_api/s_base.h +++ b/src/script/cpp_api/s_base.h @@ -125,6 +125,15 @@ protected: friend class ModApiEnvMod; friend class LuaVoxelManip; + /* + Subtle edge case with coroutines: If for whatever reason you have a + method in a subclass that's called from existing lua_CFunction + (any of the l_*.cpp files) then make it static and take the lua_State* + as an argument. This is REQUIRED because getStack() will not return the + correct state if called inside coroutines. + + Also note that src/script/common/ is the better place for such helpers. + */ lua_State* getStack() { return m_luastack; } diff --git a/src/script/cpp_api/s_server.cpp b/src/script/cpp_api/s_server.cpp index 6ddb2630d..c255b0c71 100644 --- a/src/script/cpp_api/s_server.cpp +++ b/src/script/cpp_api/s_server.cpp @@ -198,10 +198,8 @@ std::string ScriptApiServer::formatChatMessage(const std::string &name, return ret; } -u32 ScriptApiServer::allocateDynamicMediaCallback(int f_idx) +u32 ScriptApiServer::allocateDynamicMediaCallback(lua_State *L, int f_idx) { - lua_State *L = getStack(); - if (f_idx < 0) f_idx = lua_gettop(L) + f_idx + 1; @@ -235,7 +233,7 @@ u32 ScriptApiServer::allocateDynamicMediaCallback(int f_idx) void ScriptApiServer::freeDynamicMediaCallback(u32 token) { - lua_State *L = getStack(); + SCRIPTAPI_PRECHECKHEADER verbosestream << "freeDynamicMediaCallback(" << token << ")" << std::endl; diff --git a/src/script/cpp_api/s_server.h b/src/script/cpp_api/s_server.h index c5c3d5596..58c8c0e48 100644 --- a/src/script/cpp_api/s_server.h +++ b/src/script/cpp_api/s_server.h @@ -51,7 +51,7 @@ public: const std::string &password); /* dynamic media handling */ - u32 allocateDynamicMediaCallback(int f_idx); + static u32 allocateDynamicMediaCallback(lua_State *L, int f_idx); void freeDynamicMediaCallback(u32 token); void on_dynamic_media_added(u32 token, const char *playername); diff --git a/src/script/lua_api/l_server.cpp b/src/script/lua_api/l_server.cpp index 82a692070..88ab5e16b 100644 --- a/src/script/lua_api/l_server.cpp +++ b/src/script/lua_api/l_server.cpp @@ -496,7 +496,7 @@ int ModApiServer::l_dynamic_add_media(lua_State *L) CHECK_SECURE_PATH(L, filepath.c_str(), false); - u32 token = server->getScriptIface()->allocateDynamicMediaCallback(2); + u32 token = server->getScriptIface()->allocateDynamicMediaCallback(L, 2); bool ok = server->dynamicAddMedia(filepath, token, to_player, ephemeral); if (!ok) diff --git a/util/test_multiplayer.sh b/util/test_multiplayer.sh index 9fb894a30..5ffc044e0 100755 --- a/util/test_multiplayer.sh +++ b/util/test_multiplayer.sh @@ -20,7 +20,7 @@ waitfor () { } gdbrun () { - gdb -q -ex 'set confirm off' -ex 'r' -ex 'bt' -ex 'quit' --args "$@" + gdb -q -batch -ex 'set confirm off' -ex 'r' -ex 'bt' --args "$@" } [ -e $minetest ] || { echo "executable $minetest missing"; exit 1; } @@ -33,17 +33,27 @@ printf '%s\n' >$testspath/client1.conf \ enable_{sound,minimap,shaders}=false printf '%s\n' >$testspath/server.conf \ - max_block_send_distance=1 + max_block_send_distance=1 devtest_unittests_autostart=true cat >$worldpath/worldmods/test/init.lua <<"LUA" core.after(0, function() io.close(io.open(core.get_worldpath() .. "/startup", "w")) end) -core.register_on_joinplayer(function(player) - io.close(io.open(core.get_worldpath() .. "/player_joined", "w")) +local function callback(test_ok) + if not test_ok then + io.close(io.open(core.get_worldpath() .. "/test_failure", "w")) + end + io.close(io.open(core.get_worldpath() .. "/done", "w")) core.request_shutdown("", false, 2) -end) +end +if core.settings:get_bool("devtest_unittests_autostart") then + unittests.on_finished = callback +else + core.register_on_joinplayer(function() callback(true) end) +end LUA +printf '%s\n' >$worldpath/worldmods/test/mod.conf \ + name=test optional_depends=unittests echo "Starting server" gdbrun $minetest --server --config $conf_server --world $worldpath --gameid $gameid 2>&1 | sed -u 's/^/(server) /' & @@ -51,10 +61,14 @@ waitfor $worldpath/startup echo "Starting client" gdbrun $minetest --config $conf_client1 --go --address 127.0.0.1 2>&1 | sed -u 's/^/(client) /' & -waitfor $worldpath/player_joined +waitfor $worldpath/done echo "Waiting for client and server to exit" wait +if [ -f $worldpath/test_failure ]; then + echo "There were test failures." + exit 1 +fi echo "Success" exit 0 From 8c99f2232bdb52459ccf2a5b751cbe3f7797abc3 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 17 Dec 2021 18:31:29 +0100 Subject: [PATCH 130/412] Don't let HTTP API pass through untrusted function This has been a problem since the first day, oops. --- builtin/game/misc.lua | 5 +++-- src/script/common/c_internal.h | 2 ++ src/script/lua_api/l_http.cpp | 23 +++++++++++++++++++---- src/script/lua_api/l_http.h | 3 +++ 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua index ef826eda7..e86efc50c 100644 --- a/builtin/game/misc.lua +++ b/builtin/game/misc.lua @@ -250,7 +250,7 @@ end -- HTTP callback interface -function core.http_add_fetch(httpenv) +core.set_http_api_lua(function(httpenv) httpenv.fetch = function(req, callback) local handle = httpenv.fetch_async(req) @@ -266,7 +266,8 @@ function core.http_add_fetch(httpenv) end return httpenv -end +end) +core.set_http_api_lua = nil function core.close_formspec(player_name, formname) diff --git a/src/script/common/c_internal.h b/src/script/common/c_internal.h index ab2d7b975..94cfd61fb 100644 --- a/src/script/common/c_internal.h +++ b/src/script/common/c_internal.h @@ -54,6 +54,8 @@ extern "C" { #define CUSTOM_RIDX_GLOBALS_BACKUP (CUSTOM_RIDX_BASE + 1) #define CUSTOM_RIDX_CURRENT_MOD_NAME (CUSTOM_RIDX_BASE + 2) #define CUSTOM_RIDX_BACKTRACE (CUSTOM_RIDX_BASE + 3) +#define CUSTOM_RIDX_HTTP_API_LUA (CUSTOM_RIDX_BASE + 4) + // Determine if CUSTOM_RIDX_SCRIPTAPI will hold a light or full userdata #if defined(__aarch64__) && USE_LUAJIT diff --git a/src/script/lua_api/l_http.cpp b/src/script/lua_api/l_http.cpp index 751ec9837..b385b698c 100644 --- a/src/script/lua_api/l_http.cpp +++ b/src/script/lua_api/l_http.cpp @@ -163,6 +163,20 @@ int ModApiHttp::l_http_fetch_async_get(lua_State *L) return 1; } +int ModApiHttp::l_set_http_api_lua(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + // This is called by builtin to give us a function that will later + // populate the http_api table with additional method(s). + // We need this because access to the HTTP api is security-relevant and + // any mod could just mess with a global variable. + luaL_checktype(L, 1, LUA_TFUNCTION); + lua_rawseti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_HTTP_API_LUA); + + return 0; +} + int ModApiHttp::l_request_http_api(lua_State *L) { NO_MAP_LOCK_REQUIRED; @@ -205,16 +219,16 @@ int ModApiHttp::l_request_http_api(lua_State *L) return 1; } - lua_getglobal(L, "core"); - lua_getfield(L, -1, "http_add_fetch"); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_HTTP_API_LUA); + assert(lua_isfunction(L, -1)); lua_newtable(L); HTTP_API(fetch_async); HTTP_API(fetch_async_get); // Stack now looks like this: - // - // Now call core.http_add_fetch to append .fetch(request, callback) to table + //
+ // Now call it to append .fetch(request, callback) to table lua_call(L, 1, 1); return 1; @@ -247,6 +261,7 @@ void ModApiHttp::Initialize(lua_State *L, int top) API_FCT(get_http_api); } else { API_FCT(request_http_api); + API_FCT(set_http_api_lua); } #endif diff --git a/src/script/lua_api/l_http.h b/src/script/lua_api/l_http.h index c3a2a5276..17fa283ba 100644 --- a/src/script/lua_api/l_http.h +++ b/src/script/lua_api/l_http.h @@ -41,6 +41,9 @@ private: // http_fetch_async_get(handle) static int l_http_fetch_async_get(lua_State *L); + // set_http_api_lua() [internal] + static int l_set_http_api_lua(lua_State *L); + // request_http_api() static int l_request_http_api(lua_State *L); From f4054595482bf4573075f45d3ca56076a0d6113e Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 17 Dec 2021 18:35:30 +0100 Subject: [PATCH 131/412] Remove setlocal and setupvalue from `debug` table whitelist It's likely that these could be used trick mods into revealing the insecure environment even if they do everything right (which is already hard enough). --- src/script/cpp_api/s_security.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/script/cpp_api/s_security.cpp b/src/script/cpp_api/s_security.cpp index 5faf8cc80..11c277839 100644 --- a/src/script/cpp_api/s_security.cpp +++ b/src/script/cpp_api/s_security.cpp @@ -129,12 +129,10 @@ void ScriptApiSecurity::initializeSecurity() "traceback", "getinfo", "getmetatable", - "setupvalue", "setmetatable", "upvalueid", "sethook", "debug", - "setlocal", }; static const char *package_whitelist[] = { "config", From b2409b14d0682655363c1b3b3b6bafbaa7e7c1bf Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 17 Dec 2021 19:04:46 +0100 Subject: [PATCH 132/412] Refactor trusted mod checking code --- src/script/cpp_api/s_security.cpp | 33 ++++++++++++++++++++++++++ src/script/cpp_api/s_security.h | 14 +++++++---- src/script/lua_api/l_http.cpp | 39 +++---------------------------- src/script/lua_api/l_util.cpp | 32 +------------------------ 4 files changed, 46 insertions(+), 72 deletions(-) diff --git a/src/script/cpp_api/s_security.cpp b/src/script/cpp_api/s_security.cpp index 11c277839..ccd1214e3 100644 --- a/src/script/cpp_api/s_security.cpp +++ b/src/script/cpp_api/s_security.cpp @@ -27,6 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include +#include #include @@ -604,6 +605,38 @@ bool ScriptApiSecurity::checkPath(lua_State *L, const char *path, return false; } +bool ScriptApiSecurity::checkWhitelisted(lua_State *L, const std::string &setting) +{ + assert(str_starts_with(setting, "secure.")); + + // We have to make sure that this function is being called directly by + // a mod, otherwise a malicious mod could override this function and + // steal its return value. + lua_Debug info; + + // Make sure there's only one item below this function on the stack... + if (lua_getstack(L, 2, &info)) + return false; + FATAL_ERROR_IF(!lua_getstack(L, 1, &info), "lua_getstack() failed"); + FATAL_ERROR_IF(!lua_getinfo(L, "S", &info), "lua_getinfo() failed"); + + // ...and that that item is the main file scope. + if (strcmp(info.what, "main") != 0) + return false; + + // Mod must be listed in secure.http_mods or secure.trusted_mods + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME); + if (!lua_isstring(L, -1)) + return false; + std::string mod_name = readParam(L, -1); + + std::string value = g_settings->get(setting); + value.erase(std::remove(value.begin(), value.end(), ' '), value.end()); + auto mod_list = str_split(value, ','); + + return CONTAINS(mod_list, mod_name); +} + int ScriptApiSecurity::sl_g_dofile(lua_State *L) { diff --git a/src/script/cpp_api/s_security.h b/src/script/cpp_api/s_security.h index 73e763548..619bf824f 100644 --- a/src/script/cpp_api/s_security.h +++ b/src/script/cpp_api/s_security.h @@ -40,11 +40,6 @@ with this program; if not, write to the Free Software Foundation, Inc., class ScriptApiSecurity : virtual public ScriptApiBase { public: - int getThread(lua_State *L); - // creates an empty Lua environment - void createEmptyEnv(lua_State *L); - // sets the enviroment to the table thats on top of the stack - void setLuaEnv(lua_State *L, int thread); // Sets up security on the ScriptApi's Lua state void initializeSecurity(); void initializeSecurityClient(); @@ -57,8 +52,17 @@ public: // Checks if mods are allowed to read (and optionally write) to the path static bool checkPath(lua_State *L, const char *path, bool write_required, bool *write_allowed=NULL); + // Check if mod is whitelisted in the given setting + // This additionally checks that the mod's main file scope is executing. + static bool checkWhitelisted(lua_State *L, const std::string &setting); private: + int getThread(lua_State *L); + // sets the enviroment to the table thats on top of the stack + void setLuaEnv(lua_State *L, int thread); + // creates an empty Lua environment + void createEmptyEnv(lua_State *L); + // Syntax: "sl_" '_' // (sl stands for Secure Lua) diff --git a/src/script/lua_api/l_http.cpp b/src/script/lua_api/l_http.cpp index b385b698c..bd359b3cc 100644 --- a/src/script/lua_api/l_http.cpp +++ b/src/script/lua_api/l_http.cpp @@ -21,14 +21,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "common/c_converter.h" #include "common/c_content.h" #include "lua_api/l_http.h" +#include "cpp_api/s_security.h" #include "httpfetch.h" #include "settings.h" #include "debug.h" #include "log.h" -#include #include -#include #define HTTP_API(name) \ lua_pushstring(L, #name); \ @@ -181,40 +180,8 @@ int ModApiHttp::l_request_http_api(lua_State *L) { NO_MAP_LOCK_REQUIRED; - // We have to make sure that this function is being called directly by - // a mod, otherwise a malicious mod could override this function and - // steal its return value. - lua_Debug info; - - // Make sure there's only one item below this function on the stack... - if (lua_getstack(L, 2, &info)) { - return 0; - } - FATAL_ERROR_IF(!lua_getstack(L, 1, &info), "lua_getstack() failed"); - FATAL_ERROR_IF(!lua_getinfo(L, "S", &info), "lua_getinfo() failed"); - - // ...and that that item is the main file scope. - if (strcmp(info.what, "main") != 0) { - return 0; - } - - // Mod must be listed in secure.http_mods or secure.trusted_mods - lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME); - if (!lua_isstring(L, -1)) { - return 0; - } - - std::string mod_name = readParam(L, -1); - std::string http_mods = g_settings->get("secure.http_mods"); - http_mods.erase(std::remove(http_mods.begin(), http_mods.end(), ' '), http_mods.end()); - std::vector mod_list_http = str_split(http_mods, ','); - - std::string trusted_mods = g_settings->get("secure.trusted_mods"); - trusted_mods.erase(std::remove(trusted_mods.begin(), trusted_mods.end(), ' '), trusted_mods.end()); - std::vector mod_list_trusted = str_split(trusted_mods, ','); - - mod_list_http.insert(mod_list_http.end(), mod_list_trusted.begin(), mod_list_trusted.end()); - if (std::find(mod_list_http.begin(), mod_list_http.end(), mod_name) == mod_list_http.end()) { + if (!ScriptApiSecurity::checkWhitelisted(L, "secure.http_mods") && + !ScriptApiSecurity::checkWhitelisted(L, "secure.trusted_mods")) { lua_pushnil(L); return 1; } diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp index 528d9c6dd..b04f26fda 100644 --- a/src/script/lua_api/l_util.cpp +++ b/src/script/lua_api/l_util.cpp @@ -41,7 +41,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/hex.h" #include "util/sha1.h" #include "util/png.h" -#include #include // log([level,] text) @@ -444,36 +443,7 @@ int ModApiUtil::l_request_insecure_environment(lua_State *L) return 1; } - // We have to make sure that this function is being called directly by - // a mod, otherwise a malicious mod could override this function and - // steal its return value. - lua_Debug info; - // Make sure there's only one item below this function on the stack... - if (lua_getstack(L, 2, &info)) { - return 0; - } - FATAL_ERROR_IF(!lua_getstack(L, 1, &info), "lua_getstack() failed"); - FATAL_ERROR_IF(!lua_getinfo(L, "S", &info), "lua_getinfo() failed"); - // ...and that that item is the main file scope. - if (strcmp(info.what, "main") != 0) { - return 0; - } - - // Get mod name - lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME); - if (!lua_isstring(L, -1)) { - return 0; - } - - // Check secure.trusted_mods - std::string mod_name = readParam(L, -1); - std::string trusted_mods = g_settings->get("secure.trusted_mods"); - trusted_mods.erase(std::remove_if(trusted_mods.begin(), - trusted_mods.end(), static_cast(&std::isspace)), - trusted_mods.end()); - std::vector mod_list = str_split(trusted_mods, ','); - if (std::find(mod_list.begin(), mod_list.end(), mod_name) == - mod_list.end()) { + if (!ScriptApiSecurity::checkWhitelisted(L, "secure.trusted_mods")) { return 0; } From 49f7d2494ce178162a96da57315ad41f6c2796c6 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Fri, 17 Dec 2021 23:49:47 +0100 Subject: [PATCH 133/412] Protect font initialization with mutex fixes #4532 --- src/client/fontengine.cpp | 48 ++++++++------------------------------- src/client/fontengine.h | 5 +++- 2 files changed, 14 insertions(+), 39 deletions(-) diff --git a/src/client/fontengine.cpp b/src/client/fontengine.cpp index f64315db4..35e908b0c 100644 --- a/src/client/fontengine.cpp +++ b/src/client/fontengine.cpp @@ -84,11 +84,13 @@ FontEngine::~FontEngine() /******************************************************************************/ void FontEngine::cleanCache() { + RecursiveMutexAutoLock l(m_font_mutex); + for (auto &font_cache_it : m_font_cache) { for (auto &font_it : font_cache_it) { font_it.second->drop(); - font_it.second = NULL; + font_it.second = nullptr; } font_cache_it.clear(); } @@ -122,6 +124,8 @@ irr::gui::IGUIFont *FontEngine::getFont(FontSpec spec, bool may_fail) if (spec.size == FONT_SIZE_UNSPECIFIED) spec.size = m_default_size[spec.mode]; + RecursiveMutexAutoLock l(m_font_mutex); + const auto &cache = m_font_cache[spec.getHash()]; auto it = cache.find(spec.size); if (it != cache.end()) @@ -149,13 +153,7 @@ irr::gui::IGUIFont *FontEngine::getFont(FontSpec spec, bool may_fail) /******************************************************************************/ unsigned int FontEngine::getTextHeight(const FontSpec &spec) { - irr::gui::IGUIFont *font = getFont(spec); - - // use current skin font as fallback - if (font == NULL) { - font = m_env->getSkin()->getFont(); - } - FATAL_ERROR_IF(font == NULL, "Could not get skin font"); + gui::IGUIFont *font = getFont(spec); return font->getDimension(L"Some unimportant example String").Height; } @@ -163,28 +161,15 @@ unsigned int FontEngine::getTextHeight(const FontSpec &spec) /******************************************************************************/ unsigned int FontEngine::getTextWidth(const std::wstring &text, const FontSpec &spec) { - irr::gui::IGUIFont *font = getFont(spec); - - // use current skin font as fallback - if (font == NULL) { - font = m_env->getSkin()->getFont(); - } - FATAL_ERROR_IF(font == NULL, "Could not get font"); + gui::IGUIFont *font = getFont(spec); return font->getDimension(text.c_str()).Width; } - /** get line height for a specific font (including empty room between lines) */ unsigned int FontEngine::getLineHeight(const FontSpec &spec) { - irr::gui::IGUIFont *font = getFont(spec); - - // use current skin font as fallback - if (font == NULL) { - font = m_env->getSkin()->getFont(); - } - FATAL_ERROR_IF(font == NULL, "Could not get font"); + gui::IGUIFont *font = getFont(spec); return font->getDimension(L"Some unimportant example String").Height + font->getKerningHeight(); @@ -238,22 +223,9 @@ void FontEngine::readSettings() void FontEngine::updateSkin() { gui::IGUIFont *font = getFont(); + assert(font); - if (font) - m_env->getSkin()->setFont(font); - else - errorstream << "FontEngine: Default font file: " << - "\n\t\"" << g_settings->get("font_path") << "\"" << - "\n\trequired for current screen configuration was not found" << - " or was invalid file format." << - "\n\tUsing irrlicht default font." << std::endl; - - // If we did fail to create a font our own make irrlicht find a default one - font = m_env->getSkin()->getFont(); - FATAL_ERROR_IF(font == NULL, "Could not create/get font"); - - u32 text_height = font->getDimension(L"Hello, world!").Height; - infostream << "FontEngine: measured text_height=" << text_height << std::endl; + m_env->getSkin()->setFont(font); } /******************************************************************************/ diff --git a/src/client/fontengine.h b/src/client/fontengine.h index 3d389ea48..403ac2e48 100644 --- a/src/client/fontengine.h +++ b/src/client/fontengine.h @@ -20,13 +20,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include -#include #include "util/basic_macros.h" #include "irrlichttypes.h" #include #include #include #include "settings.h" +#include "threading/mutex_auto_lock.h" #define FONT_SIZE_UNSPECIFIED 0xFFFFFFFF @@ -152,6 +152,9 @@ private: /** pointer to irrlicht gui environment */ gui::IGUIEnvironment* m_env = nullptr; + /** mutex used to protect font init and cache */ + std::recursive_mutex m_font_mutex; + /** internal storage for caching fonts of different size */ std::map m_font_cache[FM_MaxMode << 2]; From 1b664dd87084ec8614371ea951791b10533b83c2 Mon Sep 17 00:00:00 2001 From: Jude Melton-Houghton Date: Sun, 19 Dec 2021 08:41:08 -0500 Subject: [PATCH 134/412] Use defined evaluation order in profiler See https://github.com/LuaJIT/LuaJIT/issues/238 --- builtin/profiler/instrumentation.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/builtin/profiler/instrumentation.lua b/builtin/profiler/instrumentation.lua index 6b951a2c2..f80314b32 100644 --- a/builtin/profiler/instrumentation.lua +++ b/builtin/profiler/instrumentation.lua @@ -102,8 +102,9 @@ local function instrument(def) -- also called https://en.wikipedia.org/wiki/Continuation_passing_style -- Compared to table creation and unpacking it won't lose `nil` returns -- and is expected to be faster - -- `measure` will be executed after time() and func(...) - return measure(modname, instrument_name, time(), func(...)) + -- `measure` will be executed after func(...) + local start = time() + return measure(modname, instrument_name, start, func(...)) end end From 0c4929f0252811d9715b96379973929053d32ef0 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 19 Dec 2021 17:03:16 +0100 Subject: [PATCH 135/412] Remove wrong function from lua_api.txt --- doc/lua_api.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index ee7d63101..1950659ab 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -5665,8 +5665,6 @@ Sounds player actions (e.g. door closing). * `minetest.sound_stop(handle)` * `handle` is a handle returned by `minetest.sound_play` -* `minetest.sound_stop_all()` - Stops all currently playing non-ephermeral sounds. * `minetest.sound_fade(handle, step, gain)` * `handle` is a handle returned by `minetest.sound_play` * `step` determines how fast a sound will fade. From 7f6306ca964ac5b9245c433e3b688c5d4ee08c35 Mon Sep 17 00:00:00 2001 From: JosiahWI <41302989+JosiahWI@users.noreply.github.com> Date: Tue, 28 Dec 2021 07:05:49 -0600 Subject: [PATCH 136/412] Restore GCC 5 compatibility (#11778) --- src/client/client.h | 2 +- src/network/clientpackethandler.cpp | 3 ++- src/util/png.cpp | 8 ++++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/client/client.h b/src/client/client.h index b92b456f4..bae40f389 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -548,7 +548,7 @@ private: // Set of media filenames pushed by server at runtime std::unordered_set m_media_pushed_files; // Pending downloads of dynamic media (key: token) - std::vector>> m_pending_media_downloads; + std::vector>> m_pending_media_downloads; // time_of_day speed approximation for old protocol bool m_time_of_day_set = false; diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index d20a80fb7..6aececa7f 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -43,6 +43,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "tileanimation.h" #include "gettext.h" #include "skyparams.h" +#include void Client::handleCommand_Deprecated(NetworkPacket* pkt) { @@ -1559,7 +1560,7 @@ void Client::handleCommand_MediaPush(NetworkPacket *pkt) m_media_pushed_files.insert(filename); // create a downloader for this file - auto downloader = new SingleMediaDownloader(cached); + auto downloader(std::make_shared(cached)); m_pending_media_downloads.emplace_back(token, downloader); downloader->addFile(filename, raw_hash); for (const auto &baseurl : m_remote_media_servers) diff --git a/src/util/png.cpp b/src/util/png.cpp index 7ac2e94a1..698cbc9a5 100755 --- a/src/util/png.cpp +++ b/src/util/png.cpp @@ -37,11 +37,11 @@ static void writeChunk(std::ostringstream &target, const std::string &chunk_str) std::string encodePNG(const u8 *data, u32 width, u32 height, s32 compression) { - auto file = std::ostringstream(std::ios::binary); + std::ostringstream file(std::ios::binary); file << "\x89PNG\r\n\x1a\n"; { - auto IHDR = std::ostringstream(std::ios::binary); + std::ostringstream IHDR(std::ios::binary); IHDR << "IHDR"; writeU32(IHDR, width); writeU32(IHDR, height); @@ -51,9 +51,9 @@ std::string encodePNG(const u8 *data, u32 width, u32 height, s32 compression) } { - auto IDAT = std::ostringstream(std::ios::binary); + std::ostringstream IDAT(std::ios::binary); IDAT << "IDAT"; - auto scanlines = std::ostringstream(std::ios::binary); + std::ostringstream scanlines(std::ios::binary); for(u32 i = 0; i < height; i++) { scanlines.write("\x00", 1); // Null predictor scanlines.write((const char*) data + width * 4 * i, width * 4); From cc64a0405ae0e4025f0b18be3bd0d813cb36fea0 Mon Sep 17 00:00:00 2001 From: "William L. DeRieux IV" Date: Tue, 28 Dec 2021 08:06:24 -0500 Subject: [PATCH 137/412] Automatically use SSE registers for FP operations on i386 (#11853) use SSE for floating-point operations to avoid issues with improper fp-rounding and loss of precision when moving fp-data to incompatible or less-precise registers/storage locations https://gcc.gnu.org/wiki/FloatingPointMath https://gcc.gnu.org/wiki/x87note --- CMakeLists.txt | 1 - src/CMakeLists.txt | 10 ++++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ea212bede..3b4b9f4f5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -286,7 +286,6 @@ endif() # Subdirectories # Be sure to add all relevant definitions above this - add_subdirectory(src) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4803b475b..e3389cea9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -769,6 +769,16 @@ else() # - we don't deal with Inf/NaN or signed zero set(MATH_FLAGS "-fno-math-errno -fno-trapping-math -ffinite-math-only -fno-signed-zeros") + # Enable SSE for floating point math on 32-bit x86 by default + # reasoning see minetest issue #11810 and https://gcc.gnu.org/wiki/FloatingPointMath + if(CMAKE_SIZEOF_VOID_P EQUAL 4) + check_c_source_compiles("#ifndef __i686__\n#error\n#endif\nint main(){}" IS_I686) + if(IS_I686) + message(STATUS "Detected Intel x86: using SSE instead of x87 FPU") + set(OTHER_FLAGS "${OTHER_FLAGS} -mfpmath=sse -msse") + endif() + endif() + set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} ${OTHER_FLAGS} -Wall -pipe -funroll-loops") if(CMAKE_SYSTEM_NAME MATCHES "(Darwin|BSD|DragonFly)") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Os") From 0fa54531d48eb2fcd09377a6fb8e7c81e09ada63 Mon Sep 17 00:00:00 2001 From: savilli <78875209+savilli@users.noreply.github.com> Date: Tue, 28 Dec 2021 16:08:21 +0300 Subject: [PATCH 138/412] Fix check that denies new clients from a singleplayer session --- src/network/serverpackethandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index c1ddb5005..e5a1bab1e 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -86,7 +86,7 @@ void Server::handleCommand_Init(NetworkPacket* pkt) // Do not allow multiple players in simple singleplayer mode. // This isn't a perfect way to do it, but will suffice for now - if (m_simple_singleplayer_mode && m_clients.getClientIDs().size() > 1) { + if (m_simple_singleplayer_mode && !m_clients.getClientIDs().empty()) { infostream << "Server: Not allowing another client (" << addr_s << ") to connect in simple singleplayer mode" << std::endl; DenyAccess(peer_id, SERVER_ACCESSDENIED_SINGLEPLAYER); From 481bb90eac45651ba6f71860ed669341fcbef6f1 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Wed, 29 Dec 2021 19:20:38 +0100 Subject: [PATCH 139/412] Fix segfault in drawItems() due to missing inventory list This fixes a nullptr dereference when the specified inventory list is not known. Happens when HUD elements are sent before the required inventory list is created. --- src/client/hud.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/client/hud.cpp b/src/client/hud.cpp index e08d2ef02..6011a8cff 100644 --- a/src/client/hud.cpp +++ b/src/client/hud.cpp @@ -224,6 +224,7 @@ void Hud::drawItem(const ItemStack &item, const core::rect& rect, } //NOTE: selectitem = 0 -> no selected; selectitem 1-based +// mainlist can be NULL, but draw the frame anyway. void Hud::drawItems(v2s32 upperleftpos, v2s32 screen_offset, s32 itemcount, s32 inv_offset, InventoryList *mainlist, u16 selectitem, u16 direction) { @@ -271,7 +272,8 @@ void Hud::drawItems(v2s32 upperleftpos, v2s32 screen_offset, s32 itemcount, // Draw items core::rect imgrect(0, 0, m_hotbar_imagesize, m_hotbar_imagesize); - for (s32 i = inv_offset; i < itemcount && (size_t)i < mainlist->getSize(); i++) { + const s32 list_size = mainlist ? mainlist->getSize() : 0; + for (s32 i = inv_offset; i < itemcount && i < list_size; i++) { s32 fullimglen = m_hotbar_imagesize + m_padding * 2; v2s32 steppos; @@ -401,6 +403,8 @@ void Hud::drawLuaElements(const v3s16 &camera_offset) break; } case HUD_ELEM_INVENTORY: { InventoryList *inv = inventory->getList(e->text); + if (!inv) + warningstream << "HUD: Unknown inventory list. name=" << e->text << std::endl; drawItems(pos, v2s32(e->offset.X, e->offset.Y), e->number, 0, inv, e->item, e->dir); break; } From 9b650b9efb1d4617c97e86639ff115067a73e83a Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Thu, 30 Dec 2021 00:59:53 +0300 Subject: [PATCH 140/412] Add more neighbors on mesh update (#6765) --- builtin/settingtypes.txt | 4 +++ src/client/client.cpp | 53 +++++----------------------- src/client/mesh_generator_thread.cpp | 53 ++++++++++++++++------------ src/client/mesh_generator_thread.h | 5 +-- src/defaultsettings.cpp | 2 ++ 5 files changed, 49 insertions(+), 68 deletions(-) diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 81ebef67d..1bc5e7982 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -475,6 +475,10 @@ connected_glass (Connect glass) bool false # Disable for speed or for different looks. smooth_lighting (Smooth lighting) bool true +# Enables tradeoffs that reduce CPU load or increase rendering performance +# at the expense of minor visual glitches that do not impact game playability. +performance_tradeoffs (Tradeoffs for performance) bool false + # Clouds are a client side effect. enable_clouds (Clouds) bool true diff --git a/src/client/client.cpp b/src/client/client.cpp index 3ee1298ff..6e4a90a79 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -1611,20 +1611,7 @@ void Client::addUpdateMeshTask(v3s16 p, bool ack_to_server, bool urgent) void Client::addUpdateMeshTaskWithEdge(v3s16 blockpos, bool ack_to_server, bool urgent) { - try{ - addUpdateMeshTask(blockpos, ack_to_server, urgent); - } - catch(InvalidPositionException &e){} - - // Leading edge - for (int i=0;i<6;i++) - { - try{ - v3s16 p = blockpos + g_6dirs[i]; - addUpdateMeshTask(p, false, urgent); - } - catch(InvalidPositionException &e){} - } + m_mesh_update_thread.updateBlock(&m_env.getMap(), blockpos, ack_to_server, urgent, true); } void Client::addUpdateMeshTaskForNode(v3s16 nodepos, bool ack_to_server, bool urgent) @@ -1636,38 +1623,16 @@ void Client::addUpdateMeshTaskForNode(v3s16 nodepos, bool ack_to_server, bool ur < cached_blocks; size_t cache_hit_counter = 0; + CachedMapBlockData *cached_block = cacheBlock(map, p, FORCE_UPDATE); + if (!cached_block->data) + return false; // nothing to update cached_blocks.reserve(3*3*3); - v3s16 dp; - for (dp.X = -1; dp.X <= 1; dp.X++) - for (dp.Y = -1; dp.Y <= 1; dp.Y++) - for (dp.Z = -1; dp.Z <= 1; dp.Z++) { - v3s16 p1 = p + dp; - CachedMapBlockData *cached_block; - if (dp == v3s16(0, 0, 0)) - cached_block = cacheBlock(map, p1, FORCE_UPDATE); - else - cached_block = cacheBlock(map, p1, SKIP_UPDATE_IF_ALREADY_CACHED, - &cache_hit_counter); - cached_blocks.push_back(cached_block); - } + cached_blocks.push_back(cached_block); + for (v3s16 dp : g_26dirs) + cached_blocks.push_back(cacheBlock(map, p + dp, + SKIP_UPDATE_IF_ALREADY_CACHED, + &cache_hit_counter)); g_profiler->avg("MeshUpdateQueue: MapBlocks from cache [%]", 100.0f * cache_hit_counter / cached_blocks.size()); @@ -116,7 +112,7 @@ void MeshUpdateQueue::addBlock(Map *map, v3s16 p, bool ack_block_to_server, bool q->ack_block_to_server = true; q->crack_level = m_client->getCrackLevel(); q->crack_pos = m_client->getCrackPos(); - return; + return true; } } @@ -134,6 +130,7 @@ void MeshUpdateQueue::addBlock(Map *map, v3s16 p, bool ack_block_to_server, bool for (CachedMapBlockData *cached_block : cached_blocks) { cached_block->refcount_from_queue++; } + return true; } // Returned pointer must be deleted @@ -212,10 +209,7 @@ void MeshUpdateQueue::fillDataFromMapBlockCache(QueuedMeshUpdate *q) std::time_t t_now = std::time(0); // Collect data for 3*3*3 blocks from cache - v3s16 dp; - for (dp.X = -1; dp.X <= 1; dp.X++) - for (dp.Y = -1; dp.Y <= 1; dp.Y++) - for (dp.Z = -1; dp.Z <= 1; dp.Z++) { + for (v3s16 dp : g_27dirs) { v3s16 p = q->p + dp; CachedMapBlockData *cached_block = getCachedBlock(p); if (cached_block) { @@ -272,10 +266,25 @@ MeshUpdateThread::MeshUpdateThread(Client *client): } void MeshUpdateThread::updateBlock(Map *map, v3s16 p, bool ack_block_to_server, - bool urgent) + bool urgent, bool update_neighbors) { - // Allow the MeshUpdateQueue to do whatever it wants - m_queue_in.addBlock(map, p, ack_block_to_server, urgent); + static thread_local const bool many_neighbors = + g_settings->getBool("smooth_lighting") + && !g_settings->getFlag("performance_tradeoffs"); + if (!m_queue_in.addBlock(map, p, ack_block_to_server, urgent)) { + warningstream << "Update requested for non-existent block at (" + << p.X << ", " << p.Y << ", " << p.Z << ")" << std::endl; + return; + } + if (update_neighbors) { + if (many_neighbors) { + for (v3s16 dp : g_26dirs) + m_queue_in.addBlock(map, p + dp, false, urgent); + } else { + for (v3s16 dp : g_6dirs) + m_queue_in.addBlock(map, p + dp, false, urgent); + } + } deferUpdate(); } diff --git a/src/client/mesh_generator_thread.h b/src/client/mesh_generator_thread.h index 4371b8390..1b734bc06 100644 --- a/src/client/mesh_generator_thread.h +++ b/src/client/mesh_generator_thread.h @@ -66,7 +66,7 @@ public: // Caches the block at p and its neighbors (if needed) and queues a mesh // update for the block at p - void addBlock(Map *map, v3s16 p, bool ack_block_to_server, bool urgent); + bool addBlock(Map *map, v3s16 p, bool ack_block_to_server, bool urgent); // Returned pointer must be deleted // Returns NULL if queue is empty @@ -113,7 +113,8 @@ public: // Caches the block at p and its neighbors (if needed) and queues a mesh // update for the block at p - void updateBlock(Map *map, v3s16 p, bool ack_block_to_server, bool urgent); + void updateBlock(Map *map, v3s16 p, bool ack_block_to_server, bool urgent, + bool update_neighbors = false); v3s16 m_camera_offset; MutexedQueue m_queue_out; diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index d705552d6..635ec2257 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -184,6 +184,7 @@ void set_default_settings() settings->setDefault("leaves_style", "fancy"); settings->setDefault("connected_glass", "false"); settings->setDefault("smooth_lighting", "true"); + settings->setDefault("performance_tradeoffs", "false"); settings->setDefault("lighting_alpha", "0.0"); settings->setDefault("lighting_beta", "1.5"); settings->setDefault("display_gamma", "1.0"); @@ -477,6 +478,7 @@ void set_default_settings() settings->setDefault("screen_h", "0"); settings->setDefault("fullscreen", "true"); settings->setDefault("smooth_lighting", "false"); + settings->setDefault("performance_tradeoffs", "true"); settings->setDefault("max_simultaneous_block_sends_per_client", "10"); settings->setDefault("emergequeue_limit_diskonly", "16"); settings->setDefault("emergequeue_limit_generate", "16"); From 05573d6d8d9e5a756ab1b03b159b127144f8e775 Mon Sep 17 00:00:00 2001 From: ROllerozxa Date: Wed, 29 Dec 2021 23:00:16 +0100 Subject: [PATCH 141/412] Remove unused (de)serializeAttributes() methods --- src/gui/guiButton.cpp | 79 ---------------------------- src/gui/guiButton.h | 8 --- src/gui/guiEditBox.cpp | 51 ------------------ src/gui/guiEditBox.h | 8 --- src/gui/guiEditBoxWithScrollbar.cpp | 20 ------- src/gui/guiEditBoxWithScrollbar.h | 6 --- src/gui/guiSkin.cpp | 42 --------------- src/gui/guiSkin.h | 10 ---- src/irrlicht_changes/static_text.cpp | 44 ---------------- src/irrlicht_changes/static_text.h | 6 --- 10 files changed, 274 deletions(-) diff --git a/src/gui/guiButton.cpp b/src/gui/guiButton.cpp index d6dbddf54..ba95b81c3 100644 --- a/src/gui/guiButton.cpp +++ b/src/gui/guiButton.cpp @@ -632,85 +632,6 @@ bool GUIButton::isDrawingBorder() const } -//! Writes attributes of the element. -void GUIButton::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const -{ - IGUIButton::serializeAttributes(out,options); - - out->addBool ("PushButton", IsPushButton ); - if (IsPushButton) - out->addBool("Pressed", Pressed); - - for ( u32 i=0; i<(u32)EGBIS_COUNT; ++i ) - { - if ( ButtonImages[i].Texture ) - { - core::stringc name( GUIButtonImageStateNames[i] ); - out->addTexture(name.c_str(), ButtonImages[i].Texture); - name += "Rect"; - out->addRect(name.c_str(), ButtonImages[i].SourceRect); - } - } - - out->addBool ("UseAlphaChannel", UseAlphaChannel); - out->addBool ("Border", DrawBorder); - out->addBool ("ScaleImage", ScaleImage); - - for ( u32 i=0; i<(u32)EGBS_COUNT; ++i ) - { - if ( ButtonSprites[i].Index >= 0 ) - { - core::stringc nameIndex( GUIButtonStateNames[i] ); - nameIndex += "Index"; - out->addInt(nameIndex.c_str(), ButtonSprites[i].Index ); - - core::stringc nameColor( GUIButtonStateNames[i] ); - nameColor += "Color"; - out->addColor(nameColor.c_str(), ButtonSprites[i].Color ); - - core::stringc nameLoop( GUIButtonStateNames[i] ); - nameLoop += "Loop"; - out->addBool(nameLoop.c_str(), ButtonSprites[i].Loop ); - - core::stringc nameScale( GUIButtonStateNames[i] ); - nameScale += "Scale"; - out->addBool(nameScale.c_str(), ButtonSprites[i].Scale ); - } - } - - // out->addString ("OverrideFont", OverrideFont); -} - - -//! Reads attributes of the element -void GUIButton::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0) -{ - IGUIButton::deserializeAttributes(in,options); - - IsPushButton = in->getAttributeAsBool("PushButton"); - Pressed = IsPushButton ? in->getAttributeAsBool("Pressed") : false; - - core::rect rec = in->getAttributeAsRect("ImageRect"); - if (rec.isValid()) - setImage( in->getAttributeAsTexture("Image"), rec); - else - setImage( in->getAttributeAsTexture("Image") ); - - rec = in->getAttributeAsRect("PressedImageRect"); - if (rec.isValid()) - setPressedImage( in->getAttributeAsTexture("PressedImage"), rec); - else - setPressedImage( in->getAttributeAsTexture("PressedImage") ); - - setDrawBorder(in->getAttributeAsBool("Border")); - setUseAlphaChannel(in->getAttributeAsBool("UseAlphaChannel")); - setScaleImage(in->getAttributeAsBool("ScaleImage")); - - // setOverrideFont(in->getAttributeAsString("OverrideFont")); - - updateAbsolutePosition(); -} - // PATCH GUIButton* GUIButton::addButton(IGUIEnvironment *environment, const core::rect& rectangle, ISimpleTextureSource *tsrc, diff --git a/src/gui/guiButton.h b/src/gui/guiButton.h index 834405f51..ee9bb6f21 100644 --- a/src/gui/guiButton.h +++ b/src/gui/guiButton.h @@ -221,14 +221,6 @@ public: return ClickControlState; } - //! Writes attributes of the element. - virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const override; - - //! Reads attributes of the element - virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options) override; - - - void setColor(video::SColor color); // PATCH //! Set element properties from a StyleSpec corresponding to the button state diff --git a/src/gui/guiEditBox.cpp b/src/gui/guiEditBox.cpp index 8459107cd..4a0f5013d 100644 --- a/src/gui/guiEditBox.cpp +++ b/src/gui/guiEditBox.cpp @@ -846,54 +846,3 @@ void GUIEditBox::updateVScrollBar() } } } - -void GUIEditBox::deserializeAttributes( - io::IAttributes *in, io::SAttributeReadWriteOptions *options = 0) -{ - IGUIEditBox::deserializeAttributes(in, options); - - setOverrideColor(in->getAttributeAsColor("OverrideColor")); - enableOverrideColor(in->getAttributeAsBool("OverrideColorEnabled")); - setMax(in->getAttributeAsInt("MaxChars")); - setWordWrap(in->getAttributeAsBool("WordWrap")); - setMultiLine(in->getAttributeAsBool("MultiLine")); - setAutoScroll(in->getAttributeAsBool("AutoScroll")); - core::stringw ch = in->getAttributeAsStringW("PasswordChar"); - - if (ch.empty()) - setPasswordBox(in->getAttributeAsBool("PasswordBox")); - else - setPasswordBox(in->getAttributeAsBool("PasswordBox"), ch[0]); - - setTextAlignment((EGUI_ALIGNMENT)in->getAttributeAsEnumeration( - "HTextAlign", GUIAlignmentNames), - (EGUI_ALIGNMENT)in->getAttributeAsEnumeration( - "VTextAlign", GUIAlignmentNames)); - - setWritable(in->getAttributeAsBool("Writable")); - // setOverrideFont(in->getAttributeAsFont("OverrideFont")); -} - -//! Writes attributes of the element. -void GUIEditBox::serializeAttributes( - io::IAttributes *out, io::SAttributeReadWriteOptions *options = 0) const -{ - // IGUIEditBox::serializeAttributes(out,options); - - out->addBool("OverrideColorEnabled", m_override_color_enabled); - out->addColor("OverrideColor", m_override_color); - // out->addFont("OverrideFont",m_override_font); - out->addInt("MaxChars", m_max); - out->addBool("WordWrap", m_word_wrap); - out->addBool("MultiLine", m_multiline); - out->addBool("AutoScroll", m_autoscroll); - out->addBool("PasswordBox", m_passwordbox); - core::stringw ch = L" "; - ch[0] = m_passwordchar; - out->addString("PasswordChar", ch.c_str()); - out->addEnum("HTextAlign", m_halign, GUIAlignmentNames); - out->addEnum("VTextAlign", m_valign, GUIAlignmentNames); - out->addBool("Writable", m_writable); - - IGUIEditBox::serializeAttributes(out, options); -} diff --git a/src/gui/guiEditBox.h b/src/gui/guiEditBox.h index 2a5c911bc..4c7413f54 100644 --- a/src/gui/guiEditBox.h +++ b/src/gui/guiEditBox.h @@ -130,14 +130,6 @@ public: //! called if an event happened. virtual bool OnEvent(const SEvent &event); - //! Writes attributes of the element. - virtual void serializeAttributes(io::IAttributes *out, - io::SAttributeReadWriteOptions *options) const; - - //! Reads attributes of the element - virtual void deserializeAttributes( - io::IAttributes *in, io::SAttributeReadWriteOptions *options); - virtual bool acceptsIME() { return isEnabled() && m_writable; }; protected: diff --git a/src/gui/guiEditBoxWithScrollbar.cpp b/src/gui/guiEditBoxWithScrollbar.cpp index fb4bc2a0b..1b7f7832a 100644 --- a/src/gui/guiEditBoxWithScrollbar.cpp +++ b/src/gui/guiEditBoxWithScrollbar.cpp @@ -652,26 +652,6 @@ void GUIEditBoxWithScrollBar::setBackgroundColor(const video::SColor &bg_color) m_bg_color_used = true; } -//! Writes attributes of the element. -void GUIEditBoxWithScrollBar::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options = 0) const -{ - out->addBool("Border", m_border); - out->addBool("Background", m_background); - // out->addFont("OverrideFont", OverrideFont); - - GUIEditBox::serializeAttributes(out, options); -} - - -//! Reads attributes of the element -void GUIEditBoxWithScrollBar::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options = 0) -{ - GUIEditBox::deserializeAttributes(in, options); - - setDrawBorder(in->getAttributeAsBool("Border")); - setDrawBackground(in->getAttributeAsBool("Background")); -} - bool GUIEditBoxWithScrollBar::isDrawBackgroundEnabled() const { return false; } bool GUIEditBoxWithScrollBar::isDrawBorderEnabled() const { return false; } void GUIEditBoxWithScrollBar::setCursorChar(const wchar_t cursorChar) { } diff --git a/src/gui/guiEditBoxWithScrollbar.h b/src/gui/guiEditBoxWithScrollbar.h index 3f7450dcb..cea482fc2 100644 --- a/src/gui/guiEditBoxWithScrollbar.h +++ b/src/gui/guiEditBoxWithScrollbar.h @@ -31,12 +31,6 @@ public: //! Change the background color virtual void setBackgroundColor(const video::SColor &bg_color); - //! Writes attributes of the element. - virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const; - - //! Reads attributes of the element - virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options); - virtual bool isDrawBackgroundEnabled() const; virtual bool isDrawBorderEnabled() const; virtual void setCursorChar(const wchar_t cursorChar); diff --git a/src/gui/guiSkin.cpp b/src/gui/guiSkin.cpp index e09209bd9..ca692f6cb 100644 --- a/src/gui/guiSkin.cpp +++ b/src/gui/guiSkin.cpp @@ -1024,48 +1024,6 @@ void GUISkin::draw2DRectangle(IGUIElement* element, } -//! Writes attributes of the object. -//! Implement this to expose the attributes of your scene node animator for -//! scripting languages, editors, debuggers or xml serialization purposes. -void GUISkin::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const -{ - u32 i; - for (i=0; iaddColor(GUISkinColorNames[i], Colors[i]); - - for (i=0; iaddInt(GUISkinSizeNames[i], Sizes[i]); - - for (i=0; iaddString(GUISkinTextNames[i], Texts[i].c_str()); - - for (i=0; iaddInt(GUISkinIconNames[i], Icons[i]); -} - - -//! Reads attributes of the object. -//! Implement this to set the attributes of your scene node animator for -//! scripting languages, editors, debuggers or xml deserialization purposes. -void GUISkin::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options) -{ - // TODO: This is not nice code for downward compatibility, whenever new values are added and users - // load an old skin the corresponding values will be set to 0. - u32 i; - for (i=0; igetAttributeAsColor(GUISkinColorNames[i]); - - for (i=0; igetAttributeAsInt(GUISkinSizeNames[i]); - - for (i=0; igetAttributeAsStringW(GUISkinTextNames[i]); - - for (i=0; igetAttributeAsInt(GUISkinIconNames[i]); -} - - //! gets the colors // PATCH void GUISkin::getColors(video::SColor* colors) diff --git a/src/gui/guiSkin.h b/src/gui/guiSkin.h index bbb900f9f..fa9b27bdd 100644 --- a/src/gui/guiSkin.h +++ b/src/gui/guiSkin.h @@ -290,16 +290,6 @@ namespace gui //! get the type of this skin virtual EGUI_SKIN_TYPE getType() const; - //! Writes attributes of the object. - //! Implement this to expose the attributes of your scene node animator for - //! scripting languages, editors, debuggers or xml serialization purposes. - virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const; - - //! Reads attributes of the object. - //! Implement this to set the attributes of your scene node animator for - //! scripting languages, editors, debuggers or xml deserialization purposes. - virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0); - //! gets the colors virtual void getColors(video::SColor* colors); // ::PATCH: diff --git a/src/irrlicht_changes/static_text.cpp b/src/irrlicht_changes/static_text.cpp index 8908a91f7..f548c3f71 100644 --- a/src/irrlicht_changes/static_text.cpp +++ b/src/irrlicht_changes/static_text.cpp @@ -588,50 +588,6 @@ s32 StaticText::getTextWidth() const } -//! Writes attributes of the element. -//! Implement this to expose the attributes of your element for -//! scripting languages, editors, debuggers or xml serialization purposes. -void StaticText::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const -{ - IGUIStaticText::serializeAttributes(out,options); - - out->addBool ("Border", Border); - out->addBool ("OverrideColorEnabled",true); - out->addBool ("OverrideBGColorEnabled",ColoredText.hasBackground()); - out->addBool ("WordWrap", WordWrap); - out->addBool ("Background", Background); - out->addBool ("RightToLeft", RightToLeft); - out->addBool ("RestrainTextInside", RestrainTextInside); - out->addColor ("OverrideColor", ColoredText.getDefaultColor()); - out->addColor ("BGColor", ColoredText.getBackground()); - out->addEnum ("HTextAlign", HAlign, GUIAlignmentNames); - out->addEnum ("VTextAlign", VAlign, GUIAlignmentNames); - - // out->addFont ("OverrideFont", OverrideFont); -} - - -//! Reads attributes of the element -void StaticText::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0) -{ - IGUIStaticText::deserializeAttributes(in,options); - - Border = in->getAttributeAsBool("Border"); - setWordWrap(in->getAttributeAsBool("WordWrap")); - Background = in->getAttributeAsBool("Background"); - RightToLeft = in->getAttributeAsBool("RightToLeft"); - RestrainTextInside = in->getAttributeAsBool("RestrainTextInside"); - if (in->getAttributeAsBool("OverrideColorEnabled")) - ColoredText.setDefaultColor(in->getAttributeAsColor("OverrideColor")); - if (in->getAttributeAsBool("OverrideBGColorEnabled")) - ColoredText.setBackground(in->getAttributeAsColor("BGColor")); - - setTextAlignment( (EGUI_ALIGNMENT) in->getAttributeAsEnumeration("HTextAlign", GUIAlignmentNames), - (EGUI_ALIGNMENT) in->getAttributeAsEnumeration("VTextAlign", GUIAlignmentNames)); - - // OverrideFont = in->getAttributeAsFont("OverrideFont"); -} - } // end namespace gui #endif // USE_FREETYPE diff --git a/src/irrlicht_changes/static_text.h b/src/irrlicht_changes/static_text.h index 83bbf4c3d..17a3bf753 100644 --- a/src/irrlicht_changes/static_text.h +++ b/src/irrlicht_changes/static_text.h @@ -184,12 +184,6 @@ namespace gui //! Checks if the text should be interpreted as right-to-left text virtual bool isRightToLeft() const; - //! Writes attributes of the element. - virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const; - - //! Reads attributes of the element - virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options); - virtual bool hasType(EGUI_ELEMENT_TYPE t) const { return (t == EGUIET_ENRICHED_STATIC_TEXT) || (t == EGUIET_STATIC_TEXT); }; From 0ea8df4d64959a7c7ec4e55b4895d6b16dad3000 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Wed, 29 Dec 2021 23:01:26 +0100 Subject: [PATCH 142/412] Socket-related cleanups Improve error handling on Windows and reduce the size of the `Address` class --- src/client/game.cpp | 1 - src/filesys.cpp | 2 + src/network/address.cpp | 119 +++++++++++++---------------------- src/network/address.h | 37 ++++++----- src/network/socket.cpp | 74 +++++++++++----------- src/network/socket.h | 14 ----- src/server.cpp | 5 +- src/unittest/test_socket.cpp | 18 +++--- 8 files changed, 114 insertions(+), 156 deletions(-) diff --git a/src/client/game.cpp b/src/client/game.cpp index 853a52ecf..f62d26e8f 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -1444,7 +1444,6 @@ bool Game::connectToServer(const GameStartData &start_data, connect_address.Resolve(start_data.address.c_str()); if (connect_address.isZero()) { // i.e. INADDR_ANY, IN6ADDR_ANY - //connect_address.Resolve("localhost"); if (connect_address.isIPv6()) { IPv6AddressBytes addr_bytes; addr_bytes.bytes[15] = 1; diff --git a/src/filesys.cpp b/src/filesys.cpp index 60090c801..ea00def6a 100644 --- a/src/filesys.cpp +++ b/src/filesys.cpp @@ -41,7 +41,9 @@ namespace fs * Windows * ***********/ +#ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0501 +#endif #include #include #include diff --git a/src/network/address.cpp b/src/network/address.cpp index 05678aa62..90e561802 100644 --- a/src/network/address.cpp +++ b/src/network/address.cpp @@ -87,38 +87,31 @@ Address::Address(const IPv6AddressBytes *ipv6_bytes, u16 port) setPort(port); } -// Equality (address family, address and port must be equal) -bool Address::operator==(const Address &address) +// Equality (address family, IP and port must be equal) +bool Address::operator==(const Address &other) { - if (address.m_addr_family != m_addr_family || address.m_port != m_port) + if (other.m_addr_family != m_addr_family || other.m_port != m_port) return false; if (m_addr_family == AF_INET) { - return m_address.ipv4.sin_addr.s_addr == - address.m_address.ipv4.sin_addr.s_addr; + return m_address.ipv4.s_addr == other.m_address.ipv4.s_addr; } if (m_addr_family == AF_INET6) { - return memcmp(m_address.ipv6.sin6_addr.s6_addr, - address.m_address.ipv6.sin6_addr.s6_addr, 16) == 0; + return memcmp(m_address.ipv6.s6_addr, + other.m_address.ipv6.s6_addr, 16) == 0; } return false; } -bool Address::operator!=(const Address &address) -{ - return !(*this == address); -} - void Address::Resolve(const char *name) { if (!name || name[0] == 0) { - if (m_addr_family == AF_INET) { - setAddress((u32)0); - } else if (m_addr_family == AF_INET6) { - setAddress((IPv6AddressBytes *)0); - } + if (m_addr_family == AF_INET) + setAddress(static_cast(0)); + else if (m_addr_family == AF_INET6) + setAddress(static_cast(nullptr)); return; } @@ -126,9 +119,6 @@ void Address::Resolve(const char *name) memset(&hints, 0, sizeof(hints)); // Setup hints - hints.ai_socktype = 0; - hints.ai_protocol = 0; - hints.ai_flags = 0; if (g_settings->getBool("enable_ipv6")) { // AF_UNSPEC allows both IPv6 and IPv4 addresses to be returned hints.ai_family = AF_UNSPEC; @@ -145,14 +135,13 @@ void Address::Resolve(const char *name) if (resolved->ai_family == AF_INET) { struct sockaddr_in *t = (struct sockaddr_in *)resolved->ai_addr; m_addr_family = AF_INET; - m_address.ipv4 = *t; + m_address.ipv4 = t->sin_addr; } else if (resolved->ai_family == AF_INET6) { struct sockaddr_in6 *t = (struct sockaddr_in6 *)resolved->ai_addr; m_addr_family = AF_INET6; - m_address.ipv6 = *t; + m_address.ipv6 = t->sin6_addr; } else { - freeaddrinfo(resolved); - throw ResolveError(""); + m_addr_family = 0; } freeaddrinfo(resolved); } @@ -163,47 +152,37 @@ std::string Address::serializeString() const // windows XP doesnt have inet_ntop, maybe use better func #ifdef _WIN32 if (m_addr_family == AF_INET) { - u8 a, b, c, d; - u32 addr; - addr = ntohl(m_address.ipv4.sin_addr.s_addr); - a = (addr & 0xFF000000) >> 24; - b = (addr & 0x00FF0000) >> 16; - c = (addr & 0x0000FF00) >> 8; - d = (addr & 0x000000FF); - return itos(a) + "." + itos(b) + "." + itos(c) + "." + itos(d); + return inet_ntoa(m_address.ipv4); } else if (m_addr_family == AF_INET6) { std::ostringstream os; + os << std::hex; for (int i = 0; i < 16; i += 2) { - u16 section = (m_address.ipv6.sin6_addr.s6_addr[i] << 8) | - (m_address.ipv6.sin6_addr.s6_addr[i + 1]); - os << std::hex << section; + u16 section = (m_address.ipv6.s6_addr[i] << 8) | + (m_address.ipv6.s6_addr[i + 1]); + os << section; if (i < 14) os << ":"; } return os.str(); - } else - return std::string(""); + } else { + return ""; + } #else char str[INET6_ADDRSTRLEN]; - if (inet_ntop(m_addr_family, - (m_addr_family == AF_INET) - ? (void *)&(m_address.ipv4.sin_addr) - : (void *)&(m_address.ipv6.sin6_addr), - str, INET6_ADDRSTRLEN) == NULL) { - return std::string(""); - } - return std::string(str); + if (inet_ntop(m_addr_family, (void*) &m_address, str, sizeof(str)) == nullptr) + return ""; + return str; #endif } -struct sockaddr_in Address::getAddress() const +struct in_addr Address::getAddress() const { - return m_address.ipv4; // NOTE: NO PORT INCLUDED, use getPort() + return m_address.ipv4; } -struct sockaddr_in6 Address::getAddress6() const +struct in6_addr Address::getAddress6() const { - return m_address.ipv6; // NOTE: NO PORT INCLUDED, use getPort() + return m_address.ipv6; } u16 Address::getPort() const @@ -211,52 +190,39 @@ u16 Address::getPort() const return m_port; } -int Address::getFamily() const -{ - return m_addr_family; -} - -bool Address::isIPv6() const -{ - return m_addr_family == AF_INET6; -} - bool Address::isZero() const { if (m_addr_family == AF_INET) { - return m_address.ipv4.sin_addr.s_addr == 0; + return m_address.ipv4.s_addr == 0; } if (m_addr_family == AF_INET6) { static const char zero[16] = {0}; - return memcmp(m_address.ipv6.sin6_addr.s6_addr, zero, 16) == 0; + return memcmp(m_address.ipv6.s6_addr, zero, 16) == 0; } + return false; } void Address::setAddress(u32 address) { m_addr_family = AF_INET; - m_address.ipv4.sin_family = AF_INET; - m_address.ipv4.sin_addr.s_addr = htonl(address); + m_address.ipv4.s_addr = htonl(address); } void Address::setAddress(u8 a, u8 b, u8 c, u8 d) { - m_addr_family = AF_INET; - m_address.ipv4.sin_family = AF_INET; - u32 addr = htonl((a << 24) | (b << 16) | (c << 8) | d); - m_address.ipv4.sin_addr.s_addr = addr; + u32 addr = (a << 24) | (b << 16) | (c << 8) | d; + setAddress(addr); } void Address::setAddress(const IPv6AddressBytes *ipv6_bytes) { m_addr_family = AF_INET6; - m_address.ipv6.sin6_family = AF_INET6; if (ipv6_bytes) - memcpy(m_address.ipv6.sin6_addr.s6_addr, ipv6_bytes->bytes, 16); + memcpy(m_address.ipv6.s6_addr, ipv6_bytes->bytes, 16); else - memset(m_address.ipv6.sin6_addr.s6_addr, 0, 16); + memset(m_address.ipv6.s6_addr, 0, 16); } void Address::setPort(u16 port) @@ -268,23 +234,26 @@ void Address::print(std::ostream *s) const { if (m_addr_family == AF_INET6) *s << "[" << serializeString() << "]:" << m_port; - else + else if (m_addr_family == AF_INET) *s << serializeString() << ":" << m_port; + else + *s << "(undefined)"; } bool Address::isLocalhost() const { if (isIPv6()) { - static const unsigned char localhost_bytes[] = { + static const u8 localhost_bytes[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}; - static const unsigned char mapped_ipv4_localhost[] = { + static const u8 mapped_ipv4_localhost[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0x7f, 0, 0, 0}; - auto addr = m_address.ipv6.sin6_addr.s6_addr; + auto addr = m_address.ipv6.s6_addr; return memcmp(addr, localhost_bytes, 16) == 0 || memcmp(addr, mapped_ipv4_localhost, 13) == 0; } - return (m_address.ipv4.sin_addr.s_addr & 0xFF) == 0x7f; + auto addr = ntohl(m_address.ipv4.s_addr); + return (addr >> 24) == 0x7f; } diff --git a/src/network/address.h b/src/network/address.h index 4329c84a8..c2f5f2eef 100644 --- a/src/network/address.h +++ b/src/network/address.h @@ -36,9 +36,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irrlichttypes.h" #include "networkexceptions.h" -class IPv6AddressBytes +struct IPv6AddressBytes { -public: u8 bytes[16]; IPv6AddressBytes() { memset(bytes, 0, 16); } }; @@ -50,30 +49,34 @@ public: Address(u32 address, u16 port); Address(u8 a, u8 b, u8 c, u8 d, u16 port); Address(const IPv6AddressBytes *ipv6_bytes, u16 port); + bool operator==(const Address &address); - bool operator!=(const Address &address); - // Resolve() may throw ResolveError (address is unchanged in this case) - void Resolve(const char *name); - struct sockaddr_in getAddress() const; - unsigned short getPort() const; - void setAddress(u32 address); - void setAddress(u8 a, u8 b, u8 c, u8 d); - void setAddress(const IPv6AddressBytes *ipv6_bytes); - struct sockaddr_in6 getAddress6() const; - int getFamily() const; - bool isIPv6() const; + bool operator!=(const Address &address) { return !(*this == address); } + + struct in_addr getAddress() const; + struct in6_addr getAddress6() const; + u16 getPort() const; + int getFamily() const { return m_addr_family; } + bool isIPv6() const { return m_addr_family == AF_INET6; } bool isZero() const; - void setPort(unsigned short port); void print(std::ostream *s) const; std::string serializeString() const; bool isLocalhost() const; + // Resolve() may throw ResolveError (address is unchanged in this case) + void Resolve(const char *name); + + void setAddress(u32 address); + void setAddress(u8 a, u8 b, u8 c, u8 d); + void setAddress(const IPv6AddressBytes *ipv6_bytes); + void setPort(u16 port); + private: - unsigned int m_addr_family = 0; + unsigned short m_addr_family = 0; union { - struct sockaddr_in ipv4; - struct sockaddr_in6 ipv6; + struct in_addr ipv4; + struct in6_addr ipv6; } m_address; u16 m_port = 0; // Port is separate from sockaddr structures }; diff --git a/src/network/socket.cpp b/src/network/socket.cpp index 94a9f4180..0bb7ea234 100644 --- a/src/network/socket.cpp +++ b/src/network/socket.cpp @@ -23,14 +23,11 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include -#include -#include #include #include "util/string.h" #include "util/numeric.h" #include "constants.h" #include "debug.h" -#include "settings.h" #include "log.h" #ifdef _WIN32 @@ -42,9 +39,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #define LAST_SOCKET_ERR() WSAGetLastError() -typedef SOCKET socket_t; +#define SOCKET_ERR_STR(e) itos(e) typedef int socklen_t; #else +#include #include #include #include @@ -53,7 +51,7 @@ typedef int socklen_t; #include #include #define LAST_SOCKET_ERR() (errno) -typedef int socket_t; +#define SOCKET_ERR_STR(e) strerror(e) #endif // Set to true to enable verbose debug output @@ -113,7 +111,7 @@ bool UDPSocket::init(bool ipv6, bool noExceptions) } throw SocketException(std::string("Failed to create socket: error ") + - itos(LAST_SOCKET_ERR())); + SOCKET_ERR_STR(LAST_SOCKET_ERR())); } setTimeoutMs(0); @@ -153,40 +151,40 @@ void UDPSocket::Bind(Address addr) } if (addr.getFamily() != m_addr_family) { - static const char *errmsg = + const char *errmsg = "Socket and bind address families do not match"; errorstream << "Bind failed: " << errmsg << std::endl; throw SocketException(errmsg); } + int ret = 0; + if (m_addr_family == AF_INET6) { struct sockaddr_in6 address; memset(&address, 0, sizeof(address)); - address = addr.getAddress6(); address.sin6_family = AF_INET6; + address.sin6_addr = addr.getAddress6(); address.sin6_port = htons(addr.getPort()); - if (bind(m_handle, (const struct sockaddr *)&address, - sizeof(struct sockaddr_in6)) < 0) { - dstream << (int)m_handle << ": Bind failed: " << strerror(errno) - << std::endl; - throw SocketException("Failed to bind socket"); - } + ret = bind(m_handle, (const struct sockaddr *) &address, + sizeof(struct sockaddr_in6)); } else { struct sockaddr_in address; memset(&address, 0, sizeof(address)); - address = addr.getAddress(); address.sin_family = AF_INET; + address.sin_addr = addr.getAddress(); address.sin_port = htons(addr.getPort()); - if (bind(m_handle, (const struct sockaddr *)&address, - sizeof(struct sockaddr_in)) < 0) { - dstream << (int)m_handle << ": Bind failed: " << strerror(errno) - << std::endl; - throw SocketException("Failed to bind socket"); - } + ret = bind(m_handle, (const struct sockaddr *) &address, + sizeof(struct sockaddr_in)); + } + + if (ret < 0) { + dstream << (int)m_handle << ": Bind failed: " + << SOCKET_ERR_STR(LAST_SOCKET_ERR()) << std::endl; + throw SocketException("Failed to bind socket"); } } @@ -233,13 +231,19 @@ void UDPSocket::Send(const Address &destination, const void *data, int size) int sent; if (m_addr_family == AF_INET6) { - struct sockaddr_in6 address = destination.getAddress6(); + struct sockaddr_in6 address = {0}; + address.sin6_family = AF_INET6; + address.sin6_addr = destination.getAddress6(); address.sin6_port = htons(destination.getPort()); + sent = sendto(m_handle, (const char *)data, size, 0, (struct sockaddr *)&address, sizeof(struct sockaddr_in6)); } else { - struct sockaddr_in address = destination.getAddress(); + struct sockaddr_in address = {0}; + address.sin_family = AF_INET; + address.sin_addr = destination.getAddress(); address.sin_port = htons(destination.getPort()); + sent = sendto(m_handle, (const char *)data, size, 0, (struct sockaddr *)&address, sizeof(struct sockaddr_in)); } @@ -267,9 +271,9 @@ int UDPSocket::Receive(Address &sender, void *data, int size) return -1; u16 address_port = ntohs(address.sin6_port); - IPv6AddressBytes bytes; - memcpy(bytes.bytes, address.sin6_addr.s6_addr, 16); - sender = Address(&bytes, address_port); + const auto *bytes = reinterpret_cast + (address.sin6_addr.s6_addr); + sender = Address(bytes, address_port); } else { struct sockaddr_in address; memset(&address, 0, sizeof(address)); @@ -341,7 +345,12 @@ bool UDPSocket::WaitData(int timeout_ms) if (result == 0) return false; - if (result < 0 && (errno == EINTR || errno == EBADF)) { + int e = LAST_SOCKET_ERR(); +#ifdef _WIN32 + if (result < 0 && (e == WSAEINTR || e == WSAEBADF)) { +#else + if (result < 0 && (e == EINTR || e == EBADF)) { +#endif // N.B. select() fails when sockets are destroyed on Connection's dtor // with EBADF. Instead of doing tricky synchronization, allow this // thread to exit but don't throw an exception. @@ -349,18 +358,9 @@ bool UDPSocket::WaitData(int timeout_ms) } if (result < 0) { - dstream << m_handle << ": Select failed: " << strerror(errno) + dstream << (int)m_handle << ": Select failed: " << SOCKET_ERR_STR(e) << std::endl; -#ifdef _WIN32 - int e = WSAGetLastError(); - dstream << (int)m_handle << ": WSAGetLastError()=" << e << std::endl; - if (e == 10004 /* WSAEINTR */ || e == 10009 /* WSAEBADF */) { - infostream << "Ignoring WSAEINTR/WSAEBADF." << std::endl; - return false; - } -#endif - throw SocketException("Select failed"); } else if (!FD_ISSET(m_handle, &readset)) { // No data diff --git a/src/network/socket.h b/src/network/socket.h index e0e76f4c2..d34186b44 100644 --- a/src/network/socket.h +++ b/src/network/socket.h @@ -19,18 +19,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once -#ifdef _WIN32 -#ifndef _WIN32_WINNT -#define _WIN32_WINNT 0x0501 -#endif -#include -#include -#include -#else -#include -#include -#endif - #include #include #include "address.h" @@ -53,8 +41,6 @@ public: bool init(bool ipv6, bool noExceptions = false); - // void Close(); - // bool IsOpen(); void Send(const Address &destination, const void *data, int size); // Returns -1 if there is no data int Receive(Address &sender, void *data, int size); diff --git a/src/server.cpp b/src/server.cpp index c175cbcd2..a910185b9 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -507,8 +507,9 @@ void Server::start() << " \\/ \\/ \\/ \\/ \\/ " << std::endl; actionstream << "World at [" << m_path_world << "]" << std::endl; actionstream << "Server for gameid=\"" << m_gamespec.id - << "\" listening on " << m_bind_addr.serializeString() << ":" - << m_bind_addr.getPort() << "." << std::endl; + << "\" listening on "; + m_bind_addr.print(&actionstream); + actionstream << "." << std::endl; } void Server::stop() diff --git a/src/unittest/test_socket.cpp b/src/unittest/test_socket.cpp index 6d5cf334d..620021b59 100644 --- a/src/unittest/test_socket.cpp +++ b/src/unittest/test_socket.cpp @@ -97,11 +97,11 @@ void TestSocket::testIPv4Socket() UASSERT(strncmp(sendbuffer, rcvbuffer, sizeof(sendbuffer)) == 0); if (address != Address(0, 0, 0, 0, port)) { - UASSERT(sender.getAddress().sin_addr.s_addr == - address.getAddress().sin_addr.s_addr); + UASSERT(sender.getAddress().s_addr == + address.getAddress().s_addr); } else { - UASSERT(sender.getAddress().sin_addr.s_addr == - Address(127, 0, 0, 1, 0).getAddress().sin_addr.s_addr); + UASSERT(sender.getAddress().s_addr == + Address(127, 0, 0, 1, 0).getAddress().s_addr); } } @@ -128,7 +128,7 @@ void TestSocket::testIPv6Socket() socket6.Bind(address6); - try { + { socket6.Send(Address(&bytes, port), sendbuffer, sizeof(sendbuffer)); sleep_ms(50); @@ -142,10 +142,8 @@ void TestSocket::testIPv6Socket() } //FIXME: This fails on some systems UASSERT(strncmp(sendbuffer, rcvbuffer, sizeof(sendbuffer)) == 0); - UASSERT(memcmp(sender.getAddress6().sin6_addr.s6_addr, - Address(&bytes, 0).getAddress6().sin6_addr.s6_addr, 16) == 0); - } catch (SendFailedException &e) { - errorstream << "IPv6 support enabled but not available!" - << std::endl; + + UASSERT(memcmp(sender.getAddress6().s6_addr, + Address(&bytes, 0).getAddress6().s6_addr, 16) == 0); } } From 14c7fae378fc40f88d3c430dea2cb726afc005b1 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Wed, 29 Dec 2021 23:58:26 +0100 Subject: [PATCH 143/412] Formspec: Unify argument checks (#11851) --- src/gui/guiFormSpecMenu.cpp | 2536 +++++++++++++++++------------------ src/gui/guiFormSpecMenu.h | 2 + 2 files changed, 1235 insertions(+), 1303 deletions(-) diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp index 1ce55673d..dfeea12db 100644 --- a/src/gui/guiFormSpecMenu.cpp +++ b/src/gui/guiFormSpecMenu.cpp @@ -81,6 +81,13 @@ with this program; if not, write to the Free Software Foundation, Inc., " specified: \"" << parts[b] << "\"" << std::endl; \ return; \ } + +#define MY_CHECKCLIENT(a) \ + if (!m_client) { \ + errorstream << "Attempted to use element " << a << " with m_client == nullptr." << std::endl; \ + return; \ + } + /* GUIFormSpecMenu */ @@ -294,8 +301,20 @@ v2s32 GUIFormSpecMenu::getRealCoordinateGeometry(const std::vector return v2s32(stof(v_geom[0]) * imgsize.X, stof(v_geom[1]) * imgsize.Y); } +bool GUIFormSpecMenu::precheckElement(const std::string &name, const std::string &element, + size_t args_min, size_t args_max, std::vector &parts) +{ + parts = split(element, ';'); + if (parts.size() >= args_min && (parts.size() <= args_max || m_formspec_version > FORMSPEC_API_VERSION)) + return true; + + errorstream << "Invalid " << name << " element(" << parts.size() << "): '" << element << "'" << std::endl; + return false; +} + void GUIFormSpecMenu::parseSize(parserData* data, const std::string &element) { + // Note: do not use precheckElement due to "," separator. std::vector parts = split(element,','); if (((parts.size() == 2) || parts.size() == 3) || @@ -349,14 +368,9 @@ void GUIFormSpecMenu::parseContainerEnd(parserData* data) void GUIFormSpecMenu::parseScrollContainer(parserData *data, const std::string &element) { - std::vector parts = split(element, ';'); - - if (parts.size() < 4 || - (parts.size() > 5 && m_formspec_version <= FORMSPEC_API_VERSION)) { - errorstream << "Invalid scroll_container start element (" << parts.size() - << "): '" << element << "'" << std::endl; + std::vector parts; + if (!precheckElement("scroll_container start", element, 4, 5, parts)) return; - } std::vector v_pos = split(parts[0], ','); std::vector v_geom = split(parts[1], ','); @@ -445,105 +459,95 @@ void GUIFormSpecMenu::parseScrollContainerEnd(parserData *data) void GUIFormSpecMenu::parseList(parserData *data, const std::string &element) { - if (m_client == 0) { - warningstream<<"invalid use of 'list' with m_client==0"< parts; + if (!precheckElement("list", element, 4, 5, parts)) + return; + + std::string location = parts[0]; + std::string listname = parts[1]; + std::vector v_pos = split(parts[2],','); + std::vector v_geom = split(parts[3],','); + std::string startindex; + if (parts.size() == 5) + startindex = parts[4]; + + MY_CHECKPOS("list",2); + MY_CHECKGEOM("list",3); + + InventoryLocation loc; + + if (location == "context" || location == "current_name") + loc = m_current_inventory_location; + else + loc.deSerialize(location); + + v2s32 geom; + geom.X = stoi(v_geom[0]); + geom.Y = stoi(v_geom[1]); + + s32 start_i = 0; + if (!startindex.empty()) + start_i = stoi(startindex); + + if (geom.X < 0 || geom.Y < 0 || start_i < 0) { + errorstream << "Invalid list element: '" << element << "'" << std::endl; return; } - std::vector parts = split(element,';'); + if (!data->explicit_size) + warningstream << "invalid use of list without a size[] element" << std::endl; - if (((parts.size() == 4) || (parts.size() == 5)) || - ((parts.size() > 5) && (m_formspec_version > FORMSPEC_API_VERSION))) - { - std::string location = parts[0]; - std::string listname = parts[1]; - std::vector v_pos = split(parts[2],','); - std::vector v_geom = split(parts[3],','); - std::string startindex; - if (parts.size() == 5) - startindex = parts[4]; + FieldSpec spec( + "", + L"", + L"", + 258 + m_fields.size(), + 3 + ); - MY_CHECKPOS("list",2); - MY_CHECKGEOM("list",3); + auto style = getDefaultStyleForElement("list", spec.fname); - InventoryLocation loc; + v2f32 slot_scale = style.getVector2f(StyleSpec::SIZE, v2f32(0, 0)); + v2f32 slot_size( + slot_scale.X <= 0 ? imgsize.X : std::max(slot_scale.X * imgsize.X, 1), + slot_scale.Y <= 0 ? imgsize.Y : std::max(slot_scale.Y * imgsize.Y, 1) + ); - if (location == "context" || location == "current_name") - loc = m_current_inventory_location; - else - loc.deSerialize(location); + v2f32 slot_spacing = style.getVector2f(StyleSpec::SPACING, v2f32(-1, -1)); + v2f32 default_spacing = data->real_coordinates ? + v2f32(imgsize.X * 0.25f, imgsize.Y * 0.25f) : + v2f32(spacing.X - imgsize.X, spacing.Y - imgsize.Y); - v2s32 geom; - geom.X = stoi(v_geom[0]); - geom.Y = stoi(v_geom[1]); + slot_spacing.X = slot_spacing.X < 0 ? default_spacing.X : + imgsize.X * slot_spacing.X; + slot_spacing.Y = slot_spacing.Y < 0 ? default_spacing.Y : + imgsize.Y * slot_spacing.Y; - s32 start_i = 0; - if (!startindex.empty()) - start_i = stoi(startindex); + slot_spacing += slot_size; - if (geom.X < 0 || geom.Y < 0 || start_i < 0) { - errorstream << "Invalid list element: '" << element << "'" << std::endl; - return; - } + v2s32 pos = data->real_coordinates ? getRealCoordinateBasePos(v_pos) : + getElementBasePos(&v_pos); - if (!data->explicit_size) - warningstream << "invalid use of list without a size[] element" << std::endl; + core::rect rect = core::rect(pos.X, pos.Y, + pos.X + (geom.X - 1) * slot_spacing.X + slot_size.X, + pos.Y + (geom.Y - 1) * slot_spacing.Y + slot_size.Y); - FieldSpec spec( - "", - L"", - L"", - 258 + m_fields.size(), - 3 - ); + GUIInventoryList *e = new GUIInventoryList(Environment, data->current_parent, + spec.fid, rect, m_invmgr, loc, listname, geom, start_i, + v2s32(slot_size.X, slot_size.Y), slot_spacing, this, + data->inventorylist_options, m_font); - auto style = getDefaultStyleForElement("list", spec.fname); + e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); - v2f32 slot_scale = style.getVector2f(StyleSpec::SIZE, v2f32(0, 0)); - v2f32 slot_size( - slot_scale.X <= 0 ? imgsize.X : std::max(slot_scale.X * imgsize.X, 1), - slot_scale.Y <= 0 ? imgsize.Y : std::max(slot_scale.Y * imgsize.Y, 1) - ); - - v2f32 slot_spacing = style.getVector2f(StyleSpec::SPACING, v2f32(-1, -1)); - v2f32 default_spacing = data->real_coordinates ? - v2f32(imgsize.X * 0.25f, imgsize.Y * 0.25f) : - v2f32(spacing.X - imgsize.X, spacing.Y - imgsize.Y); - - slot_spacing.X = slot_spacing.X < 0 ? default_spacing.X : - imgsize.X * slot_spacing.X; - slot_spacing.Y = slot_spacing.Y < 0 ? default_spacing.Y : - imgsize.Y * slot_spacing.Y; - - slot_spacing += slot_size; - - v2s32 pos = data->real_coordinates ? getRealCoordinateBasePos(v_pos) : - getElementBasePos(&v_pos); - - core::rect rect = core::rect(pos.X, pos.Y, - pos.X + (geom.X - 1) * slot_spacing.X + slot_size.X, - pos.Y + (geom.Y - 1) * slot_spacing.Y + slot_size.Y); - - GUIInventoryList *e = new GUIInventoryList(Environment, data->current_parent, - spec.fid, rect, m_invmgr, loc, listname, geom, start_i, - v2s32(slot_size.X, slot_size.Y), slot_spacing, this, - data->inventorylist_options, m_font); - - e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); - - m_inventorylists.push_back(e); - m_fields.push_back(spec); - return; - } - errorstream<< "Invalid list element(" << parts.size() << "): '" << element << "'" << std::endl; + m_inventorylists.push_back(e); + m_fields.push_back(spec); } void GUIFormSpecMenu::parseListRing(parserData *data, const std::string &element) { - if (m_client == 0) { - errorstream << "WARNING: invalid use of 'listring' with m_client==0" << std::endl; - return; - } + MY_CHECKCLIENT("listring"); std::vector parts = split(element, ';'); @@ -578,157 +582,150 @@ void GUIFormSpecMenu::parseListRing(parserData *data, const std::string &element void GUIFormSpecMenu::parseCheckbox(parserData* data, const std::string &element) { - std::vector parts = split(element,';'); - - if (((parts.size() >= 3) && (parts.size() <= 4)) || - ((parts.size() > 4) && (m_formspec_version > FORMSPEC_API_VERSION))) - { - std::vector v_pos = split(parts[0],','); - std::string name = parts[1]; - std::string label = parts[2]; - std::string selected; - - if (parts.size() >= 4) - selected = parts[3]; - - MY_CHECKPOS("checkbox",0); - - bool fselected = false; - - if (selected == "true") - fselected = true; - - std::wstring wlabel = translate_string(utf8_to_wide(unescape_string(label))); - const core::dimension2d label_size = m_font->getDimension(wlabel.c_str()); - s32 cb_size = Environment->getSkin()->getSize(gui::EGDS_CHECK_BOX_WIDTH); - s32 y_center = (std::max(label_size.Height, (u32)cb_size) + 1) / 2; - - v2s32 pos; - core::rect rect; - - if (data->real_coordinates) { - pos = getRealCoordinateBasePos(v_pos); - - rect = core::rect( - pos.X, - pos.Y - y_center, - pos.X + label_size.Width + cb_size + 7, - pos.Y + y_center - ); - } else { - pos = getElementBasePos(&v_pos); - rect = core::rect( - pos.X, - pos.Y + imgsize.Y / 2 - y_center, - pos.X + label_size.Width + cb_size + 7, - pos.Y + imgsize.Y / 2 + y_center - ); - } - - FieldSpec spec( - name, - wlabel, //Needed for displaying text on MSVC - wlabel, - 258+m_fields.size() - ); - - spec.ftype = f_CheckBox; - - gui::IGUICheckBox *e = Environment->addCheckBox(fselected, rect, - data->current_parent, spec.fid, spec.flabel.c_str()); - - auto style = getDefaultStyleForElement("checkbox", name); - - spec.sound = style.get(StyleSpec::Property::SOUND, ""); - - e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); - - if (spec.fname == m_focused_element) { - Environment->setFocus(e); - } - - e->grab(); - m_checkboxes.emplace_back(spec, e); - m_fields.push_back(spec); + std::vector parts; + if (!precheckElement("checkbox", element, 3, 4, parts)) return; + + std::vector v_pos = split(parts[0],','); + std::string name = parts[1]; + std::string label = parts[2]; + std::string selected; + + if (parts.size() >= 4) + selected = parts[3]; + + MY_CHECKPOS("checkbox",0); + + bool fselected = false; + + if (selected == "true") + fselected = true; + + std::wstring wlabel = translate_string(utf8_to_wide(unescape_string(label))); + const core::dimension2d label_size = m_font->getDimension(wlabel.c_str()); + s32 cb_size = Environment->getSkin()->getSize(gui::EGDS_CHECK_BOX_WIDTH); + s32 y_center = (std::max(label_size.Height, (u32)cb_size) + 1) / 2; + + v2s32 pos; + core::rect rect; + + if (data->real_coordinates) { + pos = getRealCoordinateBasePos(v_pos); + + rect = core::rect( + pos.X, + pos.Y - y_center, + pos.X + label_size.Width + cb_size + 7, + pos.Y + y_center + ); + } else { + pos = getElementBasePos(&v_pos); + rect = core::rect( + pos.X, + pos.Y + imgsize.Y / 2 - y_center, + pos.X + label_size.Width + cb_size + 7, + pos.Y + imgsize.Y / 2 + y_center + ); } - errorstream<< "Invalid checkbox element(" << parts.size() << "): '" << element << "'" << std::endl; + + FieldSpec spec( + name, + wlabel, //Needed for displaying text on MSVC + wlabel, + 258+m_fields.size() + ); + + spec.ftype = f_CheckBox; + + gui::IGUICheckBox *e = Environment->addCheckBox(fselected, rect, + data->current_parent, spec.fid, spec.flabel.c_str()); + + auto style = getDefaultStyleForElement("checkbox", name); + + spec.sound = style.get(StyleSpec::Property::SOUND, ""); + + e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); + + if (spec.fname == m_focused_element) { + Environment->setFocus(e); + } + + e->grab(); + m_checkboxes.emplace_back(spec, e); + m_fields.push_back(spec); } void GUIFormSpecMenu::parseScrollBar(parserData* data, const std::string &element) { - std::vector parts = split(element,';'); - - if (parts.size() >= 5) { - std::vector v_pos = split(parts[0],','); - std::vector v_geom = split(parts[1],','); - std::string name = parts[3]; - std::string value = parts[4]; - - MY_CHECKPOS("scrollbar",0); - MY_CHECKGEOM("scrollbar",1); - - v2s32 pos; - v2s32 dim; - - if (data->real_coordinates) { - pos = getRealCoordinateBasePos(v_pos); - dim = getRealCoordinateGeometry(v_geom); - } else { - pos = getElementBasePos(&v_pos); - dim.X = stof(v_geom[0]) * spacing.X; - dim.Y = stof(v_geom[1]) * spacing.Y; - } - - core::rect rect = - core::rect(pos.X, pos.Y, pos.X + dim.X, pos.Y + dim.Y); - - FieldSpec spec( - name, - L"", - L"", - 258+m_fields.size() - ); - - bool is_horizontal = true; - - if (parts[2] == "vertical") - is_horizontal = false; - - spec.ftype = f_ScrollBar; - spec.send = true; - GUIScrollBar *e = new GUIScrollBar(Environment, data->current_parent, - spec.fid, rect, is_horizontal, true); - - auto style = getDefaultStyleForElement("scrollbar", name); - e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); - e->setArrowsVisible(data->scrollbar_options.arrow_visiblity); - - s32 max = data->scrollbar_options.max; - s32 min = data->scrollbar_options.min; - - e->setMax(max); - e->setMin(min); - - e->setPos(stoi(parts[4])); - - e->setSmallStep(data->scrollbar_options.small_step); - e->setLargeStep(data->scrollbar_options.large_step); - - s32 scrollbar_size = is_horizontal ? dim.X : dim.Y; - - e->setPageSize(scrollbar_size * (max - min + 1) / data->scrollbar_options.thumb_size); - - if (spec.fname == m_focused_element) { - Environment->setFocus(e); - } - - m_scrollbars.emplace_back(spec,e); - m_fields.push_back(spec); + std::vector parts; + if (!precheckElement("scrollbar", element, 5, 5, parts)) return; + + std::vector v_pos = split(parts[0],','); + std::vector v_geom = split(parts[1],','); + std::string name = parts[3]; + std::string value = parts[4]; + + MY_CHECKPOS("scrollbar",0); + MY_CHECKGEOM("scrollbar",1); + + v2s32 pos; + v2s32 dim; + + if (data->real_coordinates) { + pos = getRealCoordinateBasePos(v_pos); + dim = getRealCoordinateGeometry(v_geom); + } else { + pos = getElementBasePos(&v_pos); + dim.X = stof(v_geom[0]) * spacing.X; + dim.Y = stof(v_geom[1]) * spacing.Y; } - errorstream << "Invalid scrollbar element(" << parts.size() << "): '" << element - << "'" << std::endl; + + core::rect rect = + core::rect(pos.X, pos.Y, pos.X + dim.X, pos.Y + dim.Y); + + FieldSpec spec( + name, + L"", + L"", + 258+m_fields.size() + ); + + bool is_horizontal = true; + + if (parts[2] == "vertical") + is_horizontal = false; + + spec.ftype = f_ScrollBar; + spec.send = true; + GUIScrollBar *e = new GUIScrollBar(Environment, data->current_parent, + spec.fid, rect, is_horizontal, true); + + auto style = getDefaultStyleForElement("scrollbar", name); + e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); + e->setArrowsVisible(data->scrollbar_options.arrow_visiblity); + + s32 max = data->scrollbar_options.max; + s32 min = data->scrollbar_options.min; + + e->setMax(max); + e->setMin(min); + + e->setPos(stoi(parts[4])); + + e->setSmallStep(data->scrollbar_options.small_step); + e->setLargeStep(data->scrollbar_options.large_step); + + s32 scrollbar_size = is_horizontal ? dim.X : dim.Y; + + e->setPageSize(scrollbar_size * (max - min + 1) / data->scrollbar_options.thumb_size); + + if (spec.fname == m_focused_element) { + Environment->setFocus(e); + } + + m_scrollbars.emplace_back(spec,e); + m_fields.push_back(spec); } void GUIFormSpecMenu::parseScrollBarOptions(parserData* data, const std::string &element) @@ -786,11 +783,11 @@ void GUIFormSpecMenu::parseScrollBarOptions(parserData* data, const std::string void GUIFormSpecMenu::parseImage(parserData* data, const std::string &element) { - std::vector parts = split(element,';'); + std::vector parts; + if (!precheckElement("image", element, 2, 3, parts)) + return; - if ((parts.size() == 3) || - ((parts.size() > 3) && (m_formspec_version > FORMSPEC_API_VERSION))) - { + if (parts.size() >= 3) { std::vector v_pos = split(parts[0],','); std::vector v_geom = split(parts[1],','); std::string name = unescape_string(parts[2]); @@ -842,54 +839,47 @@ void GUIFormSpecMenu::parseImage(parserData* data, const std::string &element) return; } - if (parts.size() == 2) { - std::vector v_pos = split(parts[0],','); - std::string name = unescape_string(parts[1]); + // Else: 2 arguments in "parts" - MY_CHECKPOS("image", 0); + std::vector v_pos = split(parts[0],','); + std::string name = unescape_string(parts[1]); - v2s32 pos = getElementBasePos(&v_pos); + MY_CHECKPOS("image", 0); - if (!data->explicit_size) - warningstream<<"invalid use of image without a size[] element"<getTexture(name); - if (!texture) { - errorstream << "GUIFormSpecMenu::parseImage() Unable to load texture:" - << std::endl << "\t" << name << std::endl; - return; - } + if (!data->explicit_size) + warningstream<<"invalid use of image without a size[] element"<addImage(texture, pos, true, - data->current_parent, spec.fid, 0); - auto style = getDefaultStyleForElement("image", spec.fname); - e->setNotClipped(style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3)); - m_fields.push_back(spec); - - // images should let events through - e->grab(); - m_clickthrough_elements.push_back(e); + video::ITexture *texture = m_tsrc->getTexture(name); + if (!texture) { + errorstream << "GUIFormSpecMenu::parseImage() Unable to load texture:" + << std::endl << "\t" << name << std::endl; return; } - errorstream<< "Invalid image element(" << parts.size() << "): '" << element << "'" << std::endl; + + FieldSpec spec( + name, + L"", + L"", + 258 + m_fields.size() + ); + gui::IGUIImage *e = Environment->addImage(texture, pos, true, + data->current_parent, spec.fid, 0); + auto style = getDefaultStyleForElement("image", spec.fname); + e->setNotClipped(style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3)); + m_fields.push_back(spec); + + // images should let events through + e->grab(); + m_clickthrough_elements.push_back(e); } void GUIFormSpecMenu::parseAnimatedImage(parserData *data, const std::string &element) { - std::vector parts = split(element, ';'); - - if (parts.size() != 6 && parts.size() != 7 && - !(parts.size() > 7 && m_formspec_version > FORMSPEC_API_VERSION)) { - errorstream << "Invalid animated_image element(" << parts.size() - << "): '" << element << "'" << std::endl; + std::vector parts; + if (!precheckElement("animated_image", element, 6, 7, parts)) return; - } std::vector v_pos = split(parts[0], ','); std::vector v_geom = split(parts[1], ','); @@ -944,218 +934,207 @@ void GUIFormSpecMenu::parseAnimatedImage(parserData *data, const std::string &el void GUIFormSpecMenu::parseItemImage(parserData* data, const std::string &element) { - std::vector parts = split(element,';'); - - if ((parts.size() == 3) || - ((parts.size() > 3) && (m_formspec_version > FORMSPEC_API_VERSION))) - { - std::vector v_pos = split(parts[0],','); - std::vector v_geom = split(parts[1],','); - std::string name = parts[2]; - - MY_CHECKPOS("itemimage",0); - MY_CHECKGEOM("itemimage",1); - - v2s32 pos; - v2s32 geom; - - if (data->real_coordinates) { - pos = getRealCoordinateBasePos(v_pos); - geom = getRealCoordinateGeometry(v_geom); - } else { - pos = getElementBasePos(&v_pos); - geom.X = stof(v_geom[0]) * (float)imgsize.X; - geom.Y = stof(v_geom[1]) * (float)imgsize.Y; - } - - if(!data->explicit_size) - warningstream<<"invalid use of item_image without a size[] element"<current_parent, spec.fid, - core::rect(pos, pos + geom), name, m_font, m_client); - auto style = getDefaultStyleForElement("item_image", spec.fname); - e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); - - // item images should let events through - m_clickthrough_elements.push_back(e); - - m_fields.push_back(spec); + std::vector parts; + if (!precheckElement("item_image", element, 3, 3, parts)) return; + + std::vector v_pos = split(parts[0],','); + std::vector v_geom = split(parts[1],','); + std::string name = parts[2]; + + MY_CHECKPOS("item_image",0); + MY_CHECKGEOM("item_image",1); + + v2s32 pos; + v2s32 geom; + + if (data->real_coordinates) { + pos = getRealCoordinateBasePos(v_pos); + geom = getRealCoordinateGeometry(v_geom); + } else { + pos = getElementBasePos(&v_pos); + geom.X = stof(v_geom[0]) * (float)imgsize.X; + geom.Y = stof(v_geom[1]) * (float)imgsize.Y; } - errorstream<< "Invalid ItemImage element(" << parts.size() << "): '" << element << "'" << std::endl; + + if(!data->explicit_size) + warningstream<<"invalid use of item_image without a size[] element"<current_parent, spec.fid, + core::rect(pos, pos + geom), name, m_font, m_client); + auto style = getDefaultStyleForElement("item_image", spec.fname); + e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); + + // item images should let events through + m_clickthrough_elements.push_back(e); + + m_fields.push_back(spec); } void GUIFormSpecMenu::parseButton(parserData* data, const std::string &element, const std::string &type) { - std::vector parts = split(element,';'); - - if ((parts.size() == 4) || - ((parts.size() > 4) && (m_formspec_version > FORMSPEC_API_VERSION))) - { - std::vector v_pos = split(parts[0],','); - std::vector v_geom = split(parts[1],','); - std::string name = parts[2]; - std::string label = parts[3]; - - MY_CHECKPOS("button",0); - MY_CHECKGEOM("button",1); - - v2s32 pos; - v2s32 geom; - core::rect rect; - - if (data->real_coordinates) { - pos = getRealCoordinateBasePos(v_pos); - geom = getRealCoordinateGeometry(v_geom); - rect = core::rect(pos.X, pos.Y, pos.X+geom.X, - pos.Y+geom.Y); - } else { - pos = getElementBasePos(&v_pos); - geom.X = (stof(v_geom[0]) * spacing.X) - (spacing.X - imgsize.X); - pos.Y += (stof(v_geom[1]) * (float)imgsize.Y)/2; - - rect = core::rect(pos.X, pos.Y - m_btn_height, - pos.X + geom.X, pos.Y + m_btn_height); - } - - if(!data->explicit_size) - warningstream<<"invalid use of button without a size[] element"<current_parent, spec.fid, spec.flabel.c_str()); - - auto style = getStyleForElement(type, name, (type != "button") ? "button" : ""); - - spec.sound = style[StyleSpec::STATE_DEFAULT].get(StyleSpec::Property::SOUND, ""); - - e->setStyles(style); - - if (spec.fname == m_focused_element) { - Environment->setFocus(e); - } - - m_fields.push_back(spec); + std::vector parts; + if (!precheckElement("button", element, 4, 4, parts)) return; + + std::vector v_pos = split(parts[0],','); + std::vector v_geom = split(parts[1],','); + std::string name = parts[2]; + std::string label = parts[3]; + + MY_CHECKPOS("button",0); + MY_CHECKGEOM("button",1); + + v2s32 pos; + v2s32 geom; + core::rect rect; + + if (data->real_coordinates) { + pos = getRealCoordinateBasePos(v_pos); + geom = getRealCoordinateGeometry(v_geom); + rect = core::rect(pos.X, pos.Y, pos.X+geom.X, + pos.Y+geom.Y); + } else { + pos = getElementBasePos(&v_pos); + geom.X = (stof(v_geom[0]) * spacing.X) - (spacing.X - imgsize.X); + pos.Y += (stof(v_geom[1]) * (float)imgsize.Y)/2; + + rect = core::rect(pos.X, pos.Y - m_btn_height, + pos.X + geom.X, pos.Y + m_btn_height); } - errorstream<< "Invalid button element(" << parts.size() << "): '" << element << "'" << std::endl; + + if(!data->explicit_size) + warningstream<<"invalid use of button without a size[] element"<current_parent, spec.fid, spec.flabel.c_str()); + + auto style = getStyleForElement(type, name, (type != "button") ? "button" : ""); + + spec.sound = style[StyleSpec::STATE_DEFAULT].get(StyleSpec::Property::SOUND, ""); + + e->setStyles(style); + + if (spec.fname == m_focused_element) { + Environment->setFocus(e); + } + + m_fields.push_back(spec); } void GUIFormSpecMenu::parseBackground(parserData* data, const std::string &element) { - std::vector parts = split(element,';'); - - if ((parts.size() >= 3 && parts.size() <= 5) || - (parts.size() > 5 && m_formspec_version > FORMSPEC_API_VERSION)) { - std::vector v_pos = split(parts[0],','); - std::vector v_geom = split(parts[1],','); - std::string name = unescape_string(parts[2]); - - MY_CHECKPOS("background",0); - MY_CHECKGEOM("background",1); - - v2s32 pos; - v2s32 geom; - - if (data->real_coordinates) { - pos = getRealCoordinateBasePos(v_pos); - geom = getRealCoordinateGeometry(v_geom); - } else { - pos = getElementBasePos(&v_pos); - pos.X -= (spacing.X - (float)imgsize.X) / 2; - pos.Y -= (spacing.Y - (float)imgsize.Y) / 2; - - geom.X = stof(v_geom[0]) * spacing.X; - geom.Y = stof(v_geom[1]) * spacing.Y; - } - - bool clip = false; - if (parts.size() >= 4 && is_yes(parts[3])) { - if (data->real_coordinates) { - pos = getRealCoordinateBasePos(v_pos) * -1; - geom = v2s32(0, 0); - } else { - pos.X = stoi(v_pos[0]); //acts as offset - pos.Y = stoi(v_pos[1]); - } - clip = true; - } - - core::rect middle; - if (parts.size() >= 5) { - std::vector v_middle = split(parts[4], ','); - if (v_middle.size() == 1) { - s32 x = stoi(v_middle[0]); - middle.UpperLeftCorner = core::vector2di(x, x); - middle.LowerRightCorner = core::vector2di(-x, -x); - } else if (v_middle.size() == 2) { - s32 x = stoi(v_middle[0]); - s32 y = stoi(v_middle[1]); - middle.UpperLeftCorner = core::vector2di(x, y); - middle.LowerRightCorner = core::vector2di(-x, -y); - // `-x` is interpreted as `w - x` - } else if (v_middle.size() == 4) { - middle.UpperLeftCorner = core::vector2di(stoi(v_middle[0]), stoi(v_middle[1])); - middle.LowerRightCorner = core::vector2di(stoi(v_middle[2]), stoi(v_middle[3])); - } else { - warningstream << "Invalid rectangle given to middle param of background[] element" << std::endl; - } - } - - if (!data->explicit_size && !clip) - warningstream << "invalid use of unclipped background without a size[] element" << std::endl; - - FieldSpec spec( - name, - L"", - L"", - 258 + m_fields.size() - ); - - core::rect rect; - if (!clip) { - // no auto_clip => position like normal image - rect = core::rect(pos, pos + geom); - } else { - // it will be auto-clipped when drawing - rect = core::rect(-pos, pos); - } - - GUIBackgroundImage *e = new GUIBackgroundImage(Environment, this, spec.fid, - rect, name, middle, m_tsrc, clip); - - FATAL_ERROR_IF(!e, "Failed to create background formspec element"); - - e->setNotClipped(true); - - e->setVisible(false); // the element is drawn manually before all others - - m_backgrounds.push_back(e); - m_fields.push_back(spec); + std::vector parts; + if (!precheckElement("background", element, 3, 5, parts)) return; + + std::vector v_pos = split(parts[0],','); + std::vector v_geom = split(parts[1],','); + std::string name = unescape_string(parts[2]); + + MY_CHECKPOS("background",0); + MY_CHECKGEOM("background",1); + + v2s32 pos; + v2s32 geom; + + if (data->real_coordinates) { + pos = getRealCoordinateBasePos(v_pos); + geom = getRealCoordinateGeometry(v_geom); + } else { + pos = getElementBasePos(&v_pos); + pos.X -= (spacing.X - (float)imgsize.X) / 2; + pos.Y -= (spacing.Y - (float)imgsize.Y) / 2; + + geom.X = stof(v_geom[0]) * spacing.X; + geom.Y = stof(v_geom[1]) * spacing.Y; } - errorstream<< "Invalid background element(" << parts.size() << "): '" << element << "'" << std::endl; + + bool clip = false; + if (parts.size() >= 4 && is_yes(parts[3])) { + if (data->real_coordinates) { + pos = getRealCoordinateBasePos(v_pos) * -1; + geom = v2s32(0, 0); + } else { + pos.X = stoi(v_pos[0]); //acts as offset + pos.Y = stoi(v_pos[1]); + } + clip = true; + } + + core::rect middle; + if (parts.size() >= 5) { + std::vector v_middle = split(parts[4], ','); + if (v_middle.size() == 1) { + s32 x = stoi(v_middle[0]); + middle.UpperLeftCorner = core::vector2di(x, x); + middle.LowerRightCorner = core::vector2di(-x, -x); + } else if (v_middle.size() == 2) { + s32 x = stoi(v_middle[0]); + s32 y = stoi(v_middle[1]); + middle.UpperLeftCorner = core::vector2di(x, y); + middle.LowerRightCorner = core::vector2di(-x, -y); + // `-x` is interpreted as `w - x` + } else if (v_middle.size() == 4) { + middle.UpperLeftCorner = core::vector2di(stoi(v_middle[0]), stoi(v_middle[1])); + middle.LowerRightCorner = core::vector2di(stoi(v_middle[2]), stoi(v_middle[3])); + } else { + warningstream << "Invalid rectangle given to middle param of background[] element" << std::endl; + } + } + + if (!data->explicit_size && !clip) + warningstream << "invalid use of unclipped background without a size[] element" << std::endl; + + FieldSpec spec( + name, + L"", + L"", + 258 + m_fields.size() + ); + + core::rect rect; + if (!clip) { + // no auto_clip => position like normal image + rect = core::rect(pos, pos + geom); + } else { + // it will be auto-clipped when drawing + rect = core::rect(-pos, pos); + } + + GUIBackgroundImage *e = new GUIBackgroundImage(Environment, this, spec.fid, + rect, name, middle, m_tsrc, clip); + + FATAL_ERROR_IF(!e, "Failed to create background formspec element"); + + e->setNotClipped(true); + + e->setVisible(false); // the element is drawn manually before all others + + m_backgrounds.push_back(e); + m_fields.push_back(spec); } void GUIFormSpecMenu::parseTableOptions(parserData* data, const std::string &element) @@ -1192,338 +1171,320 @@ void GUIFormSpecMenu::parseTableColumns(parserData* data, const std::string &ele void GUIFormSpecMenu::parseTable(parserData* data, const std::string &element) { - std::vector parts = split(element,';'); - - if (((parts.size() == 4) || (parts.size() == 5)) || - ((parts.size() > 5) && (m_formspec_version > FORMSPEC_API_VERSION))) - { - std::vector v_pos = split(parts[0],','); - std::vector v_geom = split(parts[1],','); - std::string name = parts[2]; - std::vector items = split(parts[3],','); - std::string str_initial_selection; - std::string str_transparent = "false"; - - if (parts.size() >= 5) - str_initial_selection = parts[4]; - - MY_CHECKPOS("table",0); - MY_CHECKGEOM("table",1); - - v2s32 pos; - v2s32 geom; - - if (data->real_coordinates) { - pos = getRealCoordinateBasePos(v_pos); - geom = getRealCoordinateGeometry(v_geom); - } else { - pos = getElementBasePos(&v_pos); - geom.X = stof(v_geom[0]) * spacing.X; - geom.Y = stof(v_geom[1]) * spacing.Y; - } - - core::rect rect = core::rect(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y); - - FieldSpec spec( - name, - L"", - L"", - 258 + m_fields.size() - ); - - spec.ftype = f_Table; - - for (std::string &item : items) { - item = wide_to_utf8(unescape_translate(utf8_to_wide(unescape_string(item)))); - } - - //now really show table - GUITable *e = new GUITable(Environment, data->current_parent, spec.fid, - rect, m_tsrc); - - if (spec.fname == m_focused_element) { - Environment->setFocus(e); - } - - e->setTable(data->table_options, data->table_columns, items); - - if (data->table_dyndata.find(name) != data->table_dyndata.end()) { - e->setDynamicData(data->table_dyndata[name]); - } - - if (!str_initial_selection.empty() && str_initial_selection != "0") - e->setSelected(stoi(str_initial_selection)); - - auto style = getDefaultStyleForElement("table", name); - e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); - e->setOverrideFont(style.getFont()); - - m_tables.emplace_back(spec, e); - m_fields.push_back(spec); + std::vector parts; + if (!precheckElement("table", element, 4, 5, parts)) return; + + std::vector v_pos = split(parts[0],','); + std::vector v_geom = split(parts[1],','); + std::string name = parts[2]; + std::vector items = split(parts[3],','); + std::string str_initial_selection; + std::string str_transparent = "false"; + + if (parts.size() >= 5) + str_initial_selection = parts[4]; + + MY_CHECKPOS("table",0); + MY_CHECKGEOM("table",1); + + v2s32 pos; + v2s32 geom; + + if (data->real_coordinates) { + pos = getRealCoordinateBasePos(v_pos); + geom = getRealCoordinateGeometry(v_geom); + } else { + pos = getElementBasePos(&v_pos); + geom.X = stof(v_geom[0]) * spacing.X; + geom.Y = stof(v_geom[1]) * spacing.Y; } - errorstream<< "Invalid table element(" << parts.size() << "): '" << element << "'" << std::endl; + + core::rect rect = core::rect(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y); + + FieldSpec spec( + name, + L"", + L"", + 258 + m_fields.size() + ); + + spec.ftype = f_Table; + + for (std::string &item : items) { + item = wide_to_utf8(unescape_translate(utf8_to_wide(unescape_string(item)))); + } + + //now really show table + GUITable *e = new GUITable(Environment, data->current_parent, spec.fid, + rect, m_tsrc); + + if (spec.fname == m_focused_element) { + Environment->setFocus(e); + } + + e->setTable(data->table_options, data->table_columns, items); + + if (data->table_dyndata.find(name) != data->table_dyndata.end()) { + e->setDynamicData(data->table_dyndata[name]); + } + + if (!str_initial_selection.empty() && str_initial_selection != "0") + e->setSelected(stoi(str_initial_selection)); + + auto style = getDefaultStyleForElement("table", name); + e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); + e->setOverrideFont(style.getFont()); + + m_tables.emplace_back(spec, e); + m_fields.push_back(spec); } void GUIFormSpecMenu::parseTextList(parserData* data, const std::string &element) { - std::vector parts = split(element,';'); - - if (((parts.size() == 4) || (parts.size() == 5) || (parts.size() == 6)) || - ((parts.size() > 6) && (m_formspec_version > FORMSPEC_API_VERSION))) - { - std::vector v_pos = split(parts[0],','); - std::vector v_geom = split(parts[1],','); - std::string name = parts[2]; - std::vector items = split(parts[3],','); - std::string str_initial_selection; - std::string str_transparent = "false"; - - if (parts.size() >= 5) - str_initial_selection = parts[4]; - - if (parts.size() >= 6) - str_transparent = parts[5]; - - MY_CHECKPOS("textlist",0); - MY_CHECKGEOM("textlist",1); - - v2s32 pos; - v2s32 geom; - - if (data->real_coordinates) { - pos = getRealCoordinateBasePos(v_pos); - geom = getRealCoordinateGeometry(v_geom); - } else { - pos = getElementBasePos(&v_pos); - geom.X = stof(v_geom[0]) * spacing.X; - geom.Y = stof(v_geom[1]) * spacing.Y; - } - - core::rect rect = core::rect(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y); - - FieldSpec spec( - name, - L"", - L"", - 258 + m_fields.size() - ); - - spec.ftype = f_Table; - - for (std::string &item : items) { - item = wide_to_utf8(unescape_translate(utf8_to_wide(unescape_string(item)))); - } - - //now really show list - GUITable *e = new GUITable(Environment, data->current_parent, spec.fid, - rect, m_tsrc); - - if (spec.fname == m_focused_element) { - Environment->setFocus(e); - } - - e->setTextList(items, is_yes(str_transparent)); - - if (data->table_dyndata.find(name) != data->table_dyndata.end()) { - e->setDynamicData(data->table_dyndata[name]); - } - - if (!str_initial_selection.empty() && str_initial_selection != "0") - e->setSelected(stoi(str_initial_selection)); - - auto style = getDefaultStyleForElement("textlist", name); - e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); - e->setOverrideFont(style.getFont()); - - m_tables.emplace_back(spec, e); - m_fields.push_back(spec); + std::vector parts; + if (!precheckElement("textlist", element, 4, 6, parts)) return; + + std::vector v_pos = split(parts[0],','); + std::vector v_geom = split(parts[1],','); + std::string name = parts[2]; + std::vector items = split(parts[3],','); + std::string str_initial_selection; + std::string str_transparent = "false"; + + if (parts.size() >= 5) + str_initial_selection = parts[4]; + + if (parts.size() >= 6) + str_transparent = parts[5]; + + MY_CHECKPOS("textlist",0); + MY_CHECKGEOM("textlist",1); + + v2s32 pos; + v2s32 geom; + + if (data->real_coordinates) { + pos = getRealCoordinateBasePos(v_pos); + geom = getRealCoordinateGeometry(v_geom); + } else { + pos = getElementBasePos(&v_pos); + geom.X = stof(v_geom[0]) * spacing.X; + geom.Y = stof(v_geom[1]) * spacing.Y; } - errorstream<< "Invalid textlist element(" << parts.size() << "): '" << element << "'" << std::endl; + + core::rect rect = core::rect(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y); + + FieldSpec spec( + name, + L"", + L"", + 258 + m_fields.size() + ); + + spec.ftype = f_Table; + + for (std::string &item : items) { + item = wide_to_utf8(unescape_translate(utf8_to_wide(unescape_string(item)))); + } + + //now really show list + GUITable *e = new GUITable(Environment, data->current_parent, spec.fid, + rect, m_tsrc); + + if (spec.fname == m_focused_element) { + Environment->setFocus(e); + } + + e->setTextList(items, is_yes(str_transparent)); + + if (data->table_dyndata.find(name) != data->table_dyndata.end()) { + e->setDynamicData(data->table_dyndata[name]); + } + + if (!str_initial_selection.empty() && str_initial_selection != "0") + e->setSelected(stoi(str_initial_selection)); + + auto style = getDefaultStyleForElement("textlist", name); + e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); + e->setOverrideFont(style.getFont()); + + m_tables.emplace_back(spec, e); + m_fields.push_back(spec); } void GUIFormSpecMenu::parseDropDown(parserData* data, const std::string &element) { - std::vector parts = split(element, ';'); - - if (parts.size() == 5 || parts.size() == 6 || - (parts.size() > 6 && m_formspec_version > FORMSPEC_API_VERSION)) - { - std::vector v_pos = split(parts[0], ','); - std::string name = parts[2]; - std::vector items = split(parts[3], ','); - std::string str_initial_selection = parts[4]; - - if (parts.size() >= 6 && is_yes(parts[5])) - m_dropdown_index_event[name] = true; - - MY_CHECKPOS("dropdown",0); - - v2s32 pos; - v2s32 geom; - core::rect rect; - - if (data->real_coordinates) { - std::vector v_geom = split(parts[1],','); - - if (v_geom.size() == 1) - v_geom.emplace_back("1"); - - MY_CHECKGEOM("dropdown",1); - - pos = getRealCoordinateBasePos(v_pos); - geom = getRealCoordinateGeometry(v_geom); - rect = core::rect(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y); - } else { - pos = getElementBasePos(&v_pos); - - s32 width = stof(parts[1]) * spacing.Y; - - rect = core::rect(pos.X, pos.Y, - pos.X + width, pos.Y + (m_btn_height * 2)); - } - - FieldSpec spec( - name, - L"", - L"", - 258 + m_fields.size() - ); - - spec.ftype = f_DropDown; - spec.send = true; - - //now really show list - gui::IGUIComboBox *e = Environment->addComboBox(rect, data->current_parent, - spec.fid); - - if (spec.fname == m_focused_element) { - Environment->setFocus(e); - } - - for (const std::string &item : items) { - e->addItem(unescape_translate(unescape_string( - utf8_to_wide(item))).c_str()); - } - - if (!str_initial_selection.empty()) - e->setSelected(stoi(str_initial_selection)-1); - - auto style = getDefaultStyleForElement("dropdown", name); - - spec.sound = style.get(StyleSpec::Property::SOUND, ""); - - e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); - - m_fields.push_back(spec); - - m_dropdowns.emplace_back(spec, std::vector()); - std::vector &values = m_dropdowns.back().second; - for (const std::string &item : items) { - values.push_back(unescape_string(item)); - } - + std::vector parts; + if (!precheckElement("dropdown", element, 5, 6, parts)) return; + + std::vector v_pos = split(parts[0], ','); + std::string name = parts[2]; + std::vector items = split(parts[3], ','); + std::string str_initial_selection = parts[4]; + + if (parts.size() >= 6 && is_yes(parts[5])) + m_dropdown_index_event[name] = true; + + MY_CHECKPOS("dropdown",0); + + v2s32 pos; + v2s32 geom; + core::rect rect; + + if (data->real_coordinates) { + std::vector v_geom = split(parts[1],','); + + if (v_geom.size() == 1) + v_geom.emplace_back("1"); + + MY_CHECKGEOM("dropdown",1); + + pos = getRealCoordinateBasePos(v_pos); + geom = getRealCoordinateGeometry(v_geom); + rect = core::rect(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y); + } else { + pos = getElementBasePos(&v_pos); + + s32 width = stof(parts[1]) * spacing.Y; + + rect = core::rect(pos.X, pos.Y, + pos.X + width, pos.Y + (m_btn_height * 2)); + } + + FieldSpec spec( + name, + L"", + L"", + 258 + m_fields.size() + ); + + spec.ftype = f_DropDown; + spec.send = true; + + //now really show list + gui::IGUIComboBox *e = Environment->addComboBox(rect, data->current_parent, + spec.fid); + + if (spec.fname == m_focused_element) { + Environment->setFocus(e); + } + + for (const std::string &item : items) { + e->addItem(unescape_translate(unescape_string( + utf8_to_wide(item))).c_str()); + } + + if (!str_initial_selection.empty()) + e->setSelected(stoi(str_initial_selection)-1); + + auto style = getDefaultStyleForElement("dropdown", name); + + spec.sound = style.get(StyleSpec::Property::SOUND, ""); + + e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); + + m_fields.push_back(spec); + + m_dropdowns.emplace_back(spec, std::vector()); + std::vector &values = m_dropdowns.back().second; + for (const std::string &item : items) { + values.push_back(unescape_string(item)); } - errorstream << "Invalid dropdown element(" << parts.size() << "): '" << element - << "'" << std::endl; } void GUIFormSpecMenu::parseFieldCloseOnEnter(parserData *data, const std::string &element) { - std::vector parts = split(element,';'); - if (parts.size() == 2 || - (parts.size() > 2 && m_formspec_version > FORMSPEC_API_VERSION)) { - field_close_on_enter[parts[0]] = is_yes(parts[1]); - } + std::vector parts; + if (!precheckElement("field_close_on_enter", element, 2, 2, parts)) + return; + + field_close_on_enter[parts[0]] = is_yes(parts[1]); } void GUIFormSpecMenu::parsePwdField(parserData* data, const std::string &element) { - std::vector parts = split(element,';'); - - if (parts.size() == 4 || - (parts.size() > 4 && m_formspec_version > FORMSPEC_API_VERSION)) - { - std::vector v_pos = split(parts[0],','); - std::vector v_geom = split(parts[1],','); - std::string name = parts[2]; - std::string label = parts[3]; - - MY_CHECKPOS("pwdfield",0); - MY_CHECKGEOM("pwdfield",1); - - v2s32 pos; - v2s32 geom; - - if (data->real_coordinates) { - pos = getRealCoordinateBasePos(v_pos); - geom = getRealCoordinateGeometry(v_geom); - } else { - pos = getElementBasePos(&v_pos); - pos -= padding; - - geom.X = (stof(v_geom[0]) * spacing.X) - (spacing.X - imgsize.X); - - pos.Y += (stof(v_geom[1]) * (float)imgsize.Y)/2; - pos.Y -= m_btn_height; - geom.Y = m_btn_height*2; - } - - core::rect rect = core::rect(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y); - - std::wstring wlabel = translate_string(utf8_to_wide(unescape_string(label))); - - FieldSpec spec( - name, - wlabel, - L"", - 258 + m_fields.size(), - 0, - ECI_IBEAM - ); - - spec.send = true; - gui::IGUIEditBox *e = Environment->addEditBox(0, rect, true, - data->current_parent, spec.fid); - - if (spec.fname == m_focused_element) { - Environment->setFocus(e); - } - - if (label.length() >= 1) { - int font_height = g_fontengine->getTextHeight(); - rect.UpperLeftCorner.Y -= font_height; - rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + font_height; - gui::StaticText::add(Environment, spec.flabel.c_str(), rect, false, true, - data->current_parent, 0); - } - - e->setPasswordBox(true,L'*'); - - auto style = getDefaultStyleForElement("pwdfield", name, "field"); - e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); - e->setDrawBorder(style.getBool(StyleSpec::BORDER, true)); - e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF))); - e->setOverrideFont(style.getFont()); - - irr::SEvent evt; - evt.EventType = EET_KEY_INPUT_EVENT; - evt.KeyInput.Key = KEY_END; - evt.KeyInput.Char = 0; - evt.KeyInput.Control = false; - evt.KeyInput.Shift = false; - evt.KeyInput.PressedDown = true; - e->OnEvent(evt); - - // Note: Before 5.2.0 "parts.size() >= 5" resulted in a - // warning referring to field_close_on_enter[]! - - m_fields.push_back(spec); + std::vector parts; + if (!precheckElement("pwdfield", element, 4, 4, parts)) return; + + std::vector v_pos = split(parts[0],','); + std::vector v_geom = split(parts[1],','); + std::string name = parts[2]; + std::string label = parts[3]; + + MY_CHECKPOS("pwdfield",0); + MY_CHECKGEOM("pwdfield",1); + + v2s32 pos; + v2s32 geom; + + if (data->real_coordinates) { + pos = getRealCoordinateBasePos(v_pos); + geom = getRealCoordinateGeometry(v_geom); + } else { + pos = getElementBasePos(&v_pos); + pos -= padding; + + geom.X = (stof(v_geom[0]) * spacing.X) - (spacing.X - imgsize.X); + + pos.Y += (stof(v_geom[1]) * (float)imgsize.Y)/2; + pos.Y -= m_btn_height; + geom.Y = m_btn_height*2; } - errorstream<< "Invalid pwdfield element(" << parts.size() << "): '" << element << "'" << std::endl; + + core::rect rect = core::rect(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y); + + std::wstring wlabel = translate_string(utf8_to_wide(unescape_string(label))); + + FieldSpec spec( + name, + wlabel, + L"", + 258 + m_fields.size(), + 0, + ECI_IBEAM + ); + + spec.send = true; + gui::IGUIEditBox *e = Environment->addEditBox(0, rect, true, + data->current_parent, spec.fid); + + if (spec.fname == m_focused_element) { + Environment->setFocus(e); + } + + if (label.length() >= 1) { + int font_height = g_fontengine->getTextHeight(); + rect.UpperLeftCorner.Y -= font_height; + rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + font_height; + gui::StaticText::add(Environment, spec.flabel.c_str(), rect, false, true, + data->current_parent, 0); + } + + e->setPasswordBox(true,L'*'); + + auto style = getDefaultStyleForElement("pwdfield", name, "field"); + e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); + e->setDrawBorder(style.getBool(StyleSpec::BORDER, true)); + e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF))); + e->setOverrideFont(style.getFont()); + + irr::SEvent evt; + evt.EventType = EET_KEY_INPUT_EVENT; + evt.KeyInput.Key = KEY_END; + evt.KeyInput.Char = 0; + evt.KeyInput.Control = false; + evt.KeyInput.Shift = false; + evt.KeyInput.PressedDown = true; + e->OnEvent(evt); + + // Note: Before 5.2.0 "parts.size() >= 5" resulted in a + // warning referring to field_close_on_enter[]! + + m_fields.push_back(spec); } void GUIFormSpecMenu::createTextField(parserData *data, FieldSpec &spec, @@ -1710,31 +1671,26 @@ void GUIFormSpecMenu::parseTextArea(parserData* data, std::vector& void GUIFormSpecMenu::parseField(parserData* data, const std::string &element, const std::string &type) { - std::vector parts = split(element,';'); + std::vector parts; + if (!precheckElement(type, element, 3, 5, parts)) + return; if (parts.size() == 3 || parts.size() == 4) { - parseSimpleField(data,parts); + parseSimpleField(data, parts); return; } - if ((parts.size() == 5) || - ((parts.size() > 5) && (m_formspec_version > FORMSPEC_API_VERSION))) - { - parseTextArea(data,parts,type); - return; - } - errorstream<< "Invalid field element(" << parts.size() << "): '" << element << "'" << std::endl; + // Else: >= 5 arguments in "parts" + parseTextArea(data, parts, type); } void GUIFormSpecMenu::parseHyperText(parserData *data, const std::string &element) { - std::vector parts = split(element, ';'); + MY_CHECKCLIENT("list"); - if (parts.size() != 4 && - (parts.size() < 4 || m_formspec_version <= FORMSPEC_API_VERSION)) { - errorstream << "Invalid hypertext element(" << parts.size() << "): '" << element << "'" << std::endl; + std::vector parts; + if (!precheckElement("hypertext", element, 4, 4, parts)) return; - } std::vector v_pos = split(parts[0], ','); std::vector v_geom = split(parts[1], ','); @@ -1785,169 +1741,83 @@ void GUIFormSpecMenu::parseHyperText(parserData *data, const std::string &elemen void GUIFormSpecMenu::parseLabel(parserData* data, const std::string &element) { - std::vector parts = split(element,';'); - - if ((parts.size() == 2) || - ((parts.size() > 2) && (m_formspec_version > FORMSPEC_API_VERSION))) - { - std::vector v_pos = split(parts[0],','); - std::string text = parts[1]; - - MY_CHECKPOS("label",0); - - if(!data->explicit_size) - warningstream<<"invalid use of label without a size[] element"< lines = split(text, '\n'); - - auto style = getDefaultStyleForElement("label", ""); - gui::IGUIFont *font = style.getFont(); - if (!font) - font = m_font; - - for (unsigned int i = 0; i != lines.size(); i++) { - std::wstring wlabel_colors = translate_string( - utf8_to_wide(unescape_string(lines[i]))); - // Without color escapes to get the font dimensions - std::wstring wlabel_plain = unescape_enriched(wlabel_colors); - - core::rect rect; - - if (data->real_coordinates) { - // Lines are spaced at the distance of 1/2 imgsize. - // This alows lines that line up with the new elements - // easily without sacrificing good line distance. If - // it was one whole imgsize, it would have too much - // spacing. - v2s32 pos = getRealCoordinateBasePos(v_pos); - - // Labels are positioned by their center, not their top. - pos.Y += (((float) imgsize.Y) / -2) + (((float) imgsize.Y) * i / 2); - - rect = core::rect( - pos.X, pos.Y, - pos.X + font->getDimension(wlabel_plain.c_str()).Width, - pos.Y + imgsize.Y); - - } else { - // Lines are spaced at the nominal distance of - // 2/5 inventory slot, even if the font doesn't - // quite match that. This provides consistent - // form layout, at the expense of sometimes - // having sub-optimal spacing for the font. - // We multiply by 2 and then divide by 5, rather - // than multiply by 0.4, to get exact results - // in the integer cases: 0.4 is not exactly - // representable in binary floating point. - - v2s32 pos = getElementBasePos(nullptr); - pos.X += stof(v_pos[0]) * spacing.X; - pos.Y += (stof(v_pos[1]) + 7.0f / 30.0f) * spacing.Y; - - pos.Y += ((float) i) * spacing.Y * 2.0 / 5.0; - - rect = core::rect( - pos.X, pos.Y - m_btn_height, - pos.X + font->getDimension(wlabel_plain.c_str()).Width, - pos.Y + m_btn_height); - } - - FieldSpec spec( - "", - wlabel_colors, - L"", - 258 + m_fields.size(), - 4 - ); - gui::IGUIStaticText *e = gui::StaticText::add(Environment, - spec.flabel.c_str(), rect, false, false, data->current_parent, - spec.fid); - e->setTextAlignment(gui::EGUIA_UPPERLEFT, gui::EGUIA_CENTER); - - e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); - e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF))); - e->setOverrideFont(font); - - m_fields.push_back(spec); - - // labels should let events through - e->grab(); - m_clickthrough_elements.push_back(e); - } - + std::vector parts; + if (!precheckElement("label", element, 2, 2, parts)) return; - } - errorstream << "Invalid label element(" << parts.size() << "): '" << element - << "'" << std::endl; -} -void GUIFormSpecMenu::parseVertLabel(parserData* data, const std::string &element) -{ - std::vector parts = split(element,';'); + std::vector v_pos = split(parts[0],','); + std::string text = parts[1]; - if ((parts.size() == 2) || - ((parts.size() > 2) && (m_formspec_version > FORMSPEC_API_VERSION))) - { - std::vector v_pos = split(parts[0],','); - std::wstring text = unescape_translate( - unescape_string(utf8_to_wide(parts[1]))); + MY_CHECKPOS("label",0); - MY_CHECKPOS("vertlabel",1); + if(!data->explicit_size) + warningstream<<"invalid use of label without a size[] element"< lines = split(text, '\n'); + + auto style = getDefaultStyleForElement("label", ""); + gui::IGUIFont *font = style.getFont(); + if (!font) + font = m_font; + + for (unsigned int i = 0; i != lines.size(); i++) { + std::wstring wlabel_colors = translate_string( + utf8_to_wide(unescape_string(lines[i]))); + // Without color escapes to get the font dimensions + std::wstring wlabel_plain = unescape_enriched(wlabel_colors); - v2s32 pos; core::rect rect; if (data->real_coordinates) { - pos = getRealCoordinateBasePos(v_pos); + // Lines are spaced at the distance of 1/2 imgsize. + // This alows lines that line up with the new elements + // easily without sacrificing good line distance. If + // it was one whole imgsize, it would have too much + // spacing. + v2s32 pos = getRealCoordinateBasePos(v_pos); - // Vertlabels are positioned by center, not left. - pos.X -= imgsize.X / 2; + // Labels are positioned by their center, not their top. + pos.Y += (((float) imgsize.Y) / -2) + (((float) imgsize.Y) * i / 2); - // We use text.length + 1 because without it, the rect - // isn't quite tall enough and cuts off the text. - rect = core::rect(pos.X, pos.Y, - pos.X + imgsize.X, - pos.Y + font_line_height(font) * - (text.length() + 1)); + rect = core::rect( + pos.X, pos.Y, + pos.X + font->getDimension(wlabel_plain.c_str()).Width, + pos.Y + imgsize.Y); } else { - pos = getElementBasePos(&v_pos); + // Lines are spaced at the nominal distance of + // 2/5 inventory slot, even if the font doesn't + // quite match that. This provides consistent + // form layout, at the expense of sometimes + // having sub-optimal spacing for the font. + // We multiply by 2 and then divide by 5, rather + // than multiply by 0.4, to get exact results + // in the integer cases: 0.4 is not exactly + // representable in binary floating point. + + v2s32 pos = getElementBasePos(nullptr); + pos.X += stof(v_pos[0]) * spacing.X; + pos.Y += (stof(v_pos[1]) + 7.0f / 30.0f) * spacing.Y; + + pos.Y += ((float) i) * spacing.Y * 2.0 / 5.0; - // As above, the length must be one longer. The width of - // the rect (15 pixels) seems rather arbitrary, but - // changing it might break something. rect = core::rect( - pos.X, pos.Y+((imgsize.Y/2) - m_btn_height), - pos.X+15, pos.Y + - font_line_height(font) * - (text.length() + 1) + - ((imgsize.Y/2) - m_btn_height)); - } - - if(!data->explicit_size) - warningstream<<"invalid use of label without a size[] element"<getDimension(wlabel_plain.c_str()).Width, + pos.Y + m_btn_height); } FieldSpec spec( "", - label, + wlabel_colors, L"", - 258 + m_fields.size() + 258 + m_fields.size(), + 4 ); - gui::IGUIStaticText *e = gui::StaticText::add(Environment, spec.flabel.c_str(), - rect, false, false, data->current_parent, spec.fid); - e->setTextAlignment(gui::EGUIA_CENTER, gui::EGUIA_CENTER); + gui::IGUIStaticText *e = gui::StaticText::add(Environment, + spec.flabel.c_str(), rect, false, false, data->current_parent, + spec.fid); + e->setTextAlignment(gui::EGUIA_UPPERLEFT, gui::EGUIA_CENTER); e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF))); @@ -1955,369 +1825,437 @@ void GUIFormSpecMenu::parseVertLabel(parserData* data, const std::string &elemen m_fields.push_back(spec); - // vertlabels should let events through + // labels should let events through e->grab(); m_clickthrough_elements.push_back(e); - return; } - errorstream<< "Invalid vertlabel element(" << parts.size() << "): '" << element << "'" << std::endl; +} + +void GUIFormSpecMenu::parseVertLabel(parserData* data, const std::string &element) +{ + std::vector parts; + if (!precheckElement("vertlabel", element, 2, 2, parts)) + return; + + std::vector v_pos = split(parts[0],','); + std::wstring text = unescape_translate( + unescape_string(utf8_to_wide(parts[1]))); + + MY_CHECKPOS("vertlabel",1); + + auto style = getDefaultStyleForElement("vertlabel", "", "label"); + gui::IGUIFont *font = style.getFont(); + if (!font) + font = m_font; + + v2s32 pos; + core::rect rect; + + if (data->real_coordinates) { + pos = getRealCoordinateBasePos(v_pos); + + // Vertlabels are positioned by center, not left. + pos.X -= imgsize.X / 2; + + // We use text.length + 1 because without it, the rect + // isn't quite tall enough and cuts off the text. + rect = core::rect(pos.X, pos.Y, + pos.X + imgsize.X, + pos.Y + font_line_height(font) * + (text.length() + 1)); + + } else { + pos = getElementBasePos(&v_pos); + + // As above, the length must be one longer. The width of + // the rect (15 pixels) seems rather arbitrary, but + // changing it might break something. + rect = core::rect( + pos.X, pos.Y+((imgsize.Y/2) - m_btn_height), + pos.X+15, pos.Y + + font_line_height(font) * + (text.length() + 1) + + ((imgsize.Y/2) - m_btn_height)); + } + + if(!data->explicit_size) + warningstream<<"invalid use of label without a size[] element"<current_parent, spec.fid); + e->setTextAlignment(gui::EGUIA_CENTER, gui::EGUIA_CENTER); + + e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false)); + e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF))); + e->setOverrideFont(font); + + m_fields.push_back(spec); + + // vertlabels should let events through + e->grab(); + m_clickthrough_elements.push_back(e); } void GUIFormSpecMenu::parseImageButton(parserData* data, const std::string &element, const std::string &type) { - std::vector parts = split(element,';'); + std::vector parts; + if (!precheckElement("image_button", element, 5, 8, parts)) + return; - if ((((parts.size() >= 5) && (parts.size() <= 8)) && (parts.size() != 6)) || - ((parts.size() > 8) && (m_formspec_version > FORMSPEC_API_VERSION))) - { - std::vector v_pos = split(parts[0],','); - std::vector v_geom = split(parts[1],','); - std::string image_name = parts[2]; - std::string name = parts[3]; - std::string label = parts[4]; - - MY_CHECKPOS("imagebutton",0); - MY_CHECKGEOM("imagebutton",1); - - std::string pressed_image_name; - - if (parts.size() >= 8) { - pressed_image_name = parts[7]; - } - - v2s32 pos; - v2s32 geom; - - if (data->real_coordinates) { - pos = getRealCoordinateBasePos(v_pos); - geom = getRealCoordinateGeometry(v_geom); - } else { - pos = getElementBasePos(&v_pos); - geom.X = (stof(v_geom[0]) * spacing.X) - (spacing.X - imgsize.X); - geom.Y = (stof(v_geom[1]) * spacing.Y) - (spacing.Y - imgsize.Y); - } - - core::rect rect = core::rect(pos.X, pos.Y, pos.X+geom.X, - pos.Y+geom.Y); - - if (!data->explicit_size) - warningstream<<"invalid use of image_button without a size[] element"<current_parent, spec.fid, spec.flabel.c_str()); - - if (spec.fname == m_focused_element) { - Environment->setFocus(e); - } - - auto style = getStyleForElement("image_button", spec.fname); - - spec.sound = style[StyleSpec::STATE_DEFAULT].get(StyleSpec::Property::SOUND, ""); - - // Override style properties with values specified directly in the element - if (!image_name.empty()) - style[StyleSpec::STATE_DEFAULT].set(StyleSpec::FGIMG, image_name); - - if (!pressed_image_name.empty()) - style[StyleSpec::STATE_PRESSED].set(StyleSpec::FGIMG, pressed_image_name); - - if (parts.size() >= 7) { - style[StyleSpec::STATE_DEFAULT].set(StyleSpec::NOCLIP, parts[5]); - style[StyleSpec::STATE_DEFAULT].set(StyleSpec::BORDER, parts[6]); - } - - e->setStyles(style); - e->setScaleImage(true); - - m_fields.push_back(spec); + if (parts.size() == 6) { + // Invalid argument count. + errorstream << "Invalid image_button element(" << parts.size() << "): '" << element << "'" << std::endl; return; } - errorstream<< "Invalid imagebutton element(" << parts.size() << "): '" << element << "'" << std::endl; + std::vector v_pos = split(parts[0],','); + std::vector v_geom = split(parts[1],','); + std::string image_name = parts[2]; + std::string name = parts[3]; + std::string label = parts[4]; + + MY_CHECKPOS("image_button",0); + MY_CHECKGEOM("image_button",1); + + std::string pressed_image_name; + + if (parts.size() >= 8) { + pressed_image_name = parts[7]; + } + + v2s32 pos; + v2s32 geom; + + if (data->real_coordinates) { + pos = getRealCoordinateBasePos(v_pos); + geom = getRealCoordinateGeometry(v_geom); + } else { + pos = getElementBasePos(&v_pos); + geom.X = (stof(v_geom[0]) * spacing.X) - (spacing.X - imgsize.X); + geom.Y = (stof(v_geom[1]) * spacing.Y) - (spacing.Y - imgsize.Y); + } + + core::rect rect = core::rect(pos.X, pos.Y, pos.X+geom.X, + pos.Y+geom.Y); + + if (!data->explicit_size) + warningstream<<"invalid use of image_button without a size[] element"<current_parent, spec.fid, spec.flabel.c_str()); + + if (spec.fname == m_focused_element) { + Environment->setFocus(e); + } + + auto style = getStyleForElement("image_button", spec.fname); + + spec.sound = style[StyleSpec::STATE_DEFAULT].get(StyleSpec::Property::SOUND, ""); + + // Override style properties with values specified directly in the element + if (!image_name.empty()) + style[StyleSpec::STATE_DEFAULT].set(StyleSpec::FGIMG, image_name); + + if (!pressed_image_name.empty()) + style[StyleSpec::STATE_PRESSED].set(StyleSpec::FGIMG, pressed_image_name); + + if (parts.size() >= 7) { + style[StyleSpec::STATE_DEFAULT].set(StyleSpec::NOCLIP, parts[5]); + style[StyleSpec::STATE_DEFAULT].set(StyleSpec::BORDER, parts[6]); + } + + e->setStyles(style); + e->setScaleImage(true); + + m_fields.push_back(spec); } void GUIFormSpecMenu::parseTabHeader(parserData* data, const std::string &element) { - std::vector parts = split(element, ';'); + std::vector parts; + if (!precheckElement("tabheader", element, 4, 7, parts)) + return; - if (((parts.size() == 4) || (parts.size() == 6)) || (parts.size() == 7 && - data->real_coordinates) || ((parts.size() > 6) && - (m_formspec_version > FORMSPEC_API_VERSION))) - { - std::vector v_pos = split(parts[0],','); - - // If we're using real coordinates, add an extra field for height. - // Width is not here because tabs are the width of the text, and - // there's no reason to change that. - unsigned int i = 0; - std::vector v_geom = {"1", "1"}; // Dummy width and height - bool auto_width = true; - if (parts.size() == 7) { - i++; - - v_geom = split(parts[1], ','); - if (v_geom.size() == 1) - v_geom.insert(v_geom.begin(), "1"); // Dummy value - else - auto_width = false; - } - - std::string name = parts[i+1]; - std::vector buttons = split(parts[i+2], ','); - std::string str_index = parts[i+3]; - bool show_background = true; - bool show_border = true; - int tab_index = stoi(str_index) - 1; - - MY_CHECKPOS("tabheader", 0); - - if (parts.size() == 6 + i) { - if (parts[4+i] == "true") - show_background = false; - if (parts[5+i] == "false") - show_border = false; - } - - FieldSpec spec( - name, - L"", - L"", - 258 + m_fields.size() - ); - - spec.ftype = f_TabHeader; - - v2s32 pos; - v2s32 geom; - - if (data->real_coordinates) { - pos = getRealCoordinateBasePos(v_pos); - - geom = getRealCoordinateGeometry(v_geom); - // Set default height - if (parts.size() <= 6) - geom.Y = m_btn_height * 2; - pos.Y -= geom.Y; // TabHeader base pos is the bottom, not the top. - if (auto_width) - geom.X = DesiredRect.getWidth(); // Set automatic width - - MY_CHECKGEOM("tabheader", 1); - } else { - v2f32 pos_f = pos_offset * spacing; - pos_f.X += stof(v_pos[0]) * spacing.X; - pos_f.Y += stof(v_pos[1]) * spacing.Y - m_btn_height * 2; - pos = v2s32(pos_f.X, pos_f.Y); - - geom.Y = m_btn_height * 2; - geom.X = DesiredRect.getWidth(); - } - - core::rect rect = core::rect(pos.X, pos.Y, pos.X+geom.X, - pos.Y+geom.Y); - - gui::IGUITabControl *e = Environment->addTabControl(rect, - data->current_parent, show_background, show_border, spec.fid); - e->setAlignment(irr::gui::EGUIA_UPPERLEFT, irr::gui::EGUIA_UPPERLEFT, - irr::gui::EGUIA_UPPERLEFT, irr::gui::EGUIA_LOWERRIGHT); - e->setTabHeight(geom.Y); - - auto style = getDefaultStyleForElement("tabheader", name); - - spec.sound = style.get(StyleSpec::Property::SOUND, ""); - - e->setNotClipped(style.getBool(StyleSpec::NOCLIP, true)); - - for (const std::string &button : buttons) { - auto tab = e->addTab(unescape_translate(unescape_string( - utf8_to_wide(button))).c_str(), -1); - if (style.isNotDefault(StyleSpec::BGCOLOR)) - tab->setBackgroundColor(style.getColor(StyleSpec::BGCOLOR)); - - tab->setTextColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF))); - } - - if ((tab_index >= 0) && - (buttons.size() < INT_MAX) && - (tab_index < (int) buttons.size())) - e->setActiveTab(tab_index); - - m_fields.push_back(spec); + // Length 7: Additional "height" parameter after "pos". Only valid with real_coordinates. + // Note: New arguments for the "height" syntax cannot be added without breaking older clients. + if (parts.size() == 5 || (parts.size() == 7 && !data->real_coordinates)) { + errorstream << "Invalid tabheader element(" << parts.size() << "): '" + << element << "'" << std::endl; return; } - errorstream << "Invalid TabHeader element(" << parts.size() << "): '" - << element << "'" << std::endl; + + std::vector v_pos = split(parts[0],','); + + // If we're using real coordinates, add an extra field for height. + // Width is not here because tabs are the width of the text, and + // there's no reason to change that. + unsigned int i = 0; + std::vector v_geom = {"1", "1"}; // Dummy width and height + bool auto_width = true; + if (parts.size() == 7) { + i++; + + v_geom = split(parts[1], ','); + if (v_geom.size() == 1) + v_geom.insert(v_geom.begin(), "1"); // Dummy value + else + auto_width = false; + } + + std::string name = parts[i+1]; + std::vector buttons = split(parts[i+2], ','); + std::string str_index = parts[i+3]; + bool show_background = true; + bool show_border = true; + int tab_index = stoi(str_index) - 1; + + MY_CHECKPOS("tabheader", 0); + + if (parts.size() == 6 + i) { + if (parts[4+i] == "true") + show_background = false; + if (parts[5+i] == "false") + show_border = false; + } + + FieldSpec spec( + name, + L"", + L"", + 258 + m_fields.size() + ); + + spec.ftype = f_TabHeader; + + v2s32 pos; + v2s32 geom; + + if (data->real_coordinates) { + pos = getRealCoordinateBasePos(v_pos); + + geom = getRealCoordinateGeometry(v_geom); + // Set default height + if (parts.size() <= 6) + geom.Y = m_btn_height * 2; + pos.Y -= geom.Y; // TabHeader base pos is the bottom, not the top. + if (auto_width) + geom.X = DesiredRect.getWidth(); // Set automatic width + + MY_CHECKGEOM("tabheader", 1); + } else { + v2f32 pos_f = pos_offset * spacing; + pos_f.X += stof(v_pos[0]) * spacing.X; + pos_f.Y += stof(v_pos[1]) * spacing.Y - m_btn_height * 2; + pos = v2s32(pos_f.X, pos_f.Y); + + geom.Y = m_btn_height * 2; + geom.X = DesiredRect.getWidth(); + } + + core::rect rect = core::rect(pos.X, pos.Y, pos.X+geom.X, + pos.Y+geom.Y); + + gui::IGUITabControl *e = Environment->addTabControl(rect, + data->current_parent, show_background, show_border, spec.fid); + e->setAlignment(irr::gui::EGUIA_UPPERLEFT, irr::gui::EGUIA_UPPERLEFT, + irr::gui::EGUIA_UPPERLEFT, irr::gui::EGUIA_LOWERRIGHT); + e->setTabHeight(geom.Y); + + auto style = getDefaultStyleForElement("tabheader", name); + + spec.sound = style.get(StyleSpec::Property::SOUND, ""); + + e->setNotClipped(style.getBool(StyleSpec::NOCLIP, true)); + + for (const std::string &button : buttons) { + auto tab = e->addTab(unescape_translate(unescape_string( + utf8_to_wide(button))).c_str(), -1); + if (style.isNotDefault(StyleSpec::BGCOLOR)) + tab->setBackgroundColor(style.getColor(StyleSpec::BGCOLOR)); + + tab->setTextColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF))); + } + + if ((tab_index >= 0) && + (buttons.size() < INT_MAX) && + (tab_index < (int) buttons.size())) + e->setActiveTab(tab_index); + + m_fields.push_back(spec); } void GUIFormSpecMenu::parseItemImageButton(parserData* data, const std::string &element) { - if (m_client == 0) { - warningstream << "invalid use of item_image_button with m_client==0" - << std::endl; + MY_CHECKCLIENT("item_image_button"); + + std::vector parts; + if (!precheckElement("item_image_button", element, 5, 5, parts)) return; + + std::vector v_pos = split(parts[0],','); + std::vector v_geom = split(parts[1],','); + std::string item_name = parts[2]; + std::string name = parts[3]; + std::string label = parts[4]; + + label = unescape_string(label); + item_name = unescape_string(item_name); + + MY_CHECKPOS("item_image_button",0); + MY_CHECKGEOM("item_image_button",1); + + v2s32 pos; + v2s32 geom; + + if (data->real_coordinates) { + pos = getRealCoordinateBasePos(v_pos); + geom = getRealCoordinateGeometry(v_geom); + } else { + pos = getElementBasePos(&v_pos); + geom.X = (stof(v_geom[0]) * spacing.X) - (spacing.X - imgsize.X); + geom.Y = (stof(v_geom[1]) * spacing.Y) - (spacing.Y - imgsize.Y); } - std::vector parts = split(element,';'); + core::rect rect = core::rect(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y); - if ((parts.size() == 5) || - ((parts.size() > 5) && (m_formspec_version > FORMSPEC_API_VERSION))) - { - std::vector v_pos = split(parts[0],','); - std::vector v_geom = split(parts[1],','); - std::string item_name = parts[2]; - std::string name = parts[3]; - std::string label = parts[4]; + if(!data->explicit_size) + warningstream<<"invalid use of item_image_button without a size[] element"<idef(); + ItemStack item; + item.deSerialize(item_name, idef); - MY_CHECKPOS("itemimagebutton",0); - MY_CHECKGEOM("itemimagebutton",1); + m_tooltips[name] = + TooltipSpec(utf8_to_wide(item.getDefinition(idef).description), + m_default_tooltip_bgcolor, + m_default_tooltip_color); - v2s32 pos; - v2s32 geom; + // the spec for the button + FieldSpec spec_btn( + name, + utf8_to_wide(label), + utf8_to_wide(item_name), + 258 + m_fields.size(), + 2 + ); - if (data->real_coordinates) { - pos = getRealCoordinateBasePos(v_pos); - geom = getRealCoordinateGeometry(v_geom); - } else { - pos = getElementBasePos(&v_pos); - geom.X = (stof(v_geom[0]) * spacing.X) - (spacing.X - imgsize.X); - geom.Y = (stof(v_geom[1]) * spacing.Y) - (spacing.Y - imgsize.Y); - } + GUIButtonItemImage *e_btn = GUIButtonItemImage::addButton(Environment, + rect, m_tsrc, data->current_parent, spec_btn.fid, spec_btn.flabel.c_str(), + item_name, m_client); - core::rect rect = core::rect(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y); + auto style = getStyleForElement("item_image_button", spec_btn.fname, "image_button"); - if(!data->explicit_size) - warningstream<<"invalid use of item_image_button without a size[] element"<idef(); - ItemStack item; - item.deSerialize(item_name, idef); + e_btn->setStyles(style); - m_tooltips[name] = - TooltipSpec(utf8_to_wide(item.getDefinition(idef).description), - m_default_tooltip_bgcolor, - m_default_tooltip_color); - - // the spec for the button - FieldSpec spec_btn( - name, - utf8_to_wide(label), - utf8_to_wide(item_name), - 258 + m_fields.size(), - 2 - ); - - GUIButtonItemImage *e_btn = GUIButtonItemImage::addButton(Environment, - rect, m_tsrc, data->current_parent, spec_btn.fid, spec_btn.flabel.c_str(), - item_name, m_client); - - auto style = getStyleForElement("item_image_button", spec_btn.fname, "image_button"); - - spec_btn.sound = style[StyleSpec::STATE_DEFAULT].get(StyleSpec::Property::SOUND, ""); - - e_btn->setStyles(style); - - if (spec_btn.fname == m_focused_element) { - Environment->setFocus(e_btn); - } - - spec_btn.ftype = f_Button; - rect += data->basepos-padding; - spec_btn.rect = rect; - m_fields.push_back(spec_btn); - return; + if (spec_btn.fname == m_focused_element) { + Environment->setFocus(e_btn); } - errorstream<< "Invalid ItemImagebutton element(" << parts.size() << "): '" << element << "'" << std::endl; + + spec_btn.ftype = f_Button; + rect += data->basepos-padding; + spec_btn.rect = rect; + m_fields.push_back(spec_btn); } void GUIFormSpecMenu::parseBox(parserData* data, const std::string &element) { - std::vector parts = split(element, ';'); - - if ((parts.size() == 3) || - ((parts.size() > 3) && (m_formspec_version > FORMSPEC_API_VERSION))) - { - std::vector v_pos = split(parts[0], ','); - std::vector v_geom = split(parts[1], ','); - - MY_CHECKPOS("box", 0); - MY_CHECKGEOM("box", 1); - - v2s32 pos; - v2s32 geom; - - if (data->real_coordinates) { - pos = getRealCoordinateBasePos(v_pos); - geom = getRealCoordinateGeometry(v_geom); - } else { - pos = getElementBasePos(&v_pos); - geom.X = stof(v_geom[0]) * spacing.X; - geom.Y = stof(v_geom[1]) * spacing.Y; - } - - FieldSpec spec( - "", - L"", - L"", - 258 + m_fields.size(), - -2 - ); - spec.ftype = f_Box; - - auto style = getDefaultStyleForElement("box", spec.fname); - - video::SColor tmp_color; - std::array colors; - std::array bordercolors = {0x0, 0x0, 0x0, 0x0}; - std::array borderwidths = {0, 0, 0, 0}; - - if (parseColorString(parts[2], tmp_color, true, 0x8C)) { - colors = {tmp_color, tmp_color, tmp_color, tmp_color}; - } else { - colors = style.getColorArray(StyleSpec::COLORS, {0x0, 0x0, 0x0, 0x0}); - bordercolors = style.getColorArray(StyleSpec::BORDERCOLORS, - {0x0, 0x0, 0x0, 0x0}); - borderwidths = style.getIntArray(StyleSpec::BORDERWIDTHS, {0, 0, 0, 0}); - } - - core::rect rect(pos, pos + geom); - - GUIBox *e = new GUIBox(Environment, data->current_parent, spec.fid, rect, - colors, bordercolors, borderwidths); - e->setNotClipped(style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3)); - e->drop(); - - m_fields.push_back(spec); + std::vector parts; + if (!precheckElement("box", element, 3, 3, parts)) return; + + std::vector v_pos = split(parts[0], ','); + std::vector v_geom = split(parts[1], ','); + + MY_CHECKPOS("box", 0); + MY_CHECKGEOM("box", 1); + + v2s32 pos; + v2s32 geom; + + if (data->real_coordinates) { + pos = getRealCoordinateBasePos(v_pos); + geom = getRealCoordinateGeometry(v_geom); + } else { + pos = getElementBasePos(&v_pos); + geom.X = stof(v_geom[0]) * spacing.X; + geom.Y = stof(v_geom[1]) * spacing.Y; } - errorstream << "Invalid Box element(" << parts.size() << "): '" << element - << "'" << std::endl; + + FieldSpec spec( + "", + L"", + L"", + 258 + m_fields.size(), + -2 + ); + spec.ftype = f_Box; + + auto style = getDefaultStyleForElement("box", spec.fname); + + video::SColor tmp_color; + std::array colors; + std::array bordercolors = {0x0, 0x0, 0x0, 0x0}; + std::array borderwidths = {0, 0, 0, 0}; + + if (parseColorString(parts[2], tmp_color, true, 0x8C)) { + colors = {tmp_color, tmp_color, tmp_color, tmp_color}; + } else { + colors = style.getColorArray(StyleSpec::COLORS, {0x0, 0x0, 0x0, 0x0}); + bordercolors = style.getColorArray(StyleSpec::BORDERCOLORS, + {0x0, 0x0, 0x0, 0x0}); + borderwidths = style.getIntArray(StyleSpec::BORDERWIDTHS, {0, 0, 0, 0}); + } + + core::rect rect(pos, pos + geom); + + GUIBox *e = new GUIBox(Environment, data->current_parent, spec.fid, rect, + colors, bordercolors, borderwidths); + e->setNotClipped(style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3)); + e->drop(); + + m_fields.push_back(spec); } void GUIFormSpecMenu::parseBackgroundColor(parserData* data, const std::string &element) { - std::vector parts = split(element,';'); + std::vector parts; + if (!precheckElement("bgcolor", element, 2, 3, parts)) + return; + const u32 parameter_count = parts.size(); - if ((parameter_count > 2 && m_formspec_version < 3) || - (parameter_count > 3 && m_formspec_version <= FORMSPEC_API_VERSION)) { + if (parameter_count > 2 && m_formspec_version < 3) { errorstream << "Invalid bgcolor element(" << parameter_count << "): '" << element << "'" << std::endl; return; @@ -2348,49 +2286,51 @@ void GUIFormSpecMenu::parseBackgroundColor(parserData* data, const std::string & void GUIFormSpecMenu::parseListColors(parserData* data, const std::string &element) { - std::vector parts = split(element,';'); + std::vector parts; + // Legacy Note: If clients older than 5.5.0-dev are supplied with additional arguments, + // the tooltip colors will be ignored. + if (!precheckElement("listcolors", element, 2, 5, parts)) + return; - if (((parts.size() == 2) || (parts.size() == 3) || (parts.size() == 5)) || - ((parts.size() > 5) && (m_formspec_version > FORMSPEC_API_VERSION))) - { - parseColorString(parts[0], data->inventorylist_options.slotbg_n, false); - parseColorString(parts[1], data->inventorylist_options.slotbg_h, false); - - if (parts.size() >= 3) { - if (parseColorString(parts[2], data->inventorylist_options.slotbordercolor, - false)) { - data->inventorylist_options.slotborder = true; - } - } - if (parts.size() == 5) { - video::SColor tmp_color; - - if (parseColorString(parts[3], tmp_color, false)) - m_default_tooltip_bgcolor = tmp_color; - if (parseColorString(parts[4], tmp_color, false)) - m_default_tooltip_color = tmp_color; - } - - // update all already parsed inventorylists - for (GUIInventoryList *e : m_inventorylists) { - e->setSlotBGColors(data->inventorylist_options.slotbg_n, - data->inventorylist_options.slotbg_h); - e->setSlotBorders(data->inventorylist_options.slotborder, - data->inventorylist_options.slotbordercolor); - } + if (parts.size() == 4) { + // Invalid argument combination + errorstream << "Invalid listcolors element(" << parts.size() << "): '" + << element << "'" << std::endl; return; } - errorstream<< "Invalid listcolors element(" << parts.size() << "): '" << element << "'" << std::endl; + + parseColorString(parts[0], data->inventorylist_options.slotbg_n, false); + parseColorString(parts[1], data->inventorylist_options.slotbg_h, false); + + if (parts.size() >= 3) { + if (parseColorString(parts[2], data->inventorylist_options.slotbordercolor, + false)) { + data->inventorylist_options.slotborder = true; + } + } + if (parts.size() >= 5) { + video::SColor tmp_color; + + if (parseColorString(parts[3], tmp_color, false)) + m_default_tooltip_bgcolor = tmp_color; + if (parseColorString(parts[4], tmp_color, false)) + m_default_tooltip_color = tmp_color; + } + + // update all already parsed inventorylists + for (GUIInventoryList *e : m_inventorylists) { + e->setSlotBGColors(data->inventorylist_options.slotbg_n, + data->inventorylist_options.slotbg_h); + e->setSlotBorders(data->inventorylist_options.slotborder, + data->inventorylist_options.slotbordercolor); + } } void GUIFormSpecMenu::parseTooltip(parserData* data, const std::string &element) { - std::vector parts = split(element,';'); - if (parts.size() < 2) { - errorstream << "Invalid tooltip element(" << parts.size() << "): '" - << element << "'" << std::endl; + std::vector parts; + if (!precheckElement("tooltip", element, 2, 5, parts)) return; - } // Get mode and check size bool rect_mode = parts[0].find(',') != std::string::npos; @@ -2714,35 +2654,25 @@ bool GUIFormSpecMenu::parseStyle(parserData *data, const std::string &element, b void GUIFormSpecMenu::parseSetFocus(const std::string &element) { - std::vector parts = split(element, ';'); - - if (parts.size() <= 2 || - (parts.size() > 2 && m_formspec_version > FORMSPEC_API_VERSION)) - { - if (m_is_form_regenerated) - return; // Never focus on resizing - - bool force_focus = parts.size() >= 2 && is_yes(parts[1]); - if (force_focus || m_text_dst->m_formname != m_last_formname) - setFocus(parts[0]); - + std::vector parts; + if (!precheckElement("set_focus", element, 2, 2, parts)) return; - } - errorstream << "Invalid set_focus element (" << parts.size() << "): '" << element - << "'" << std::endl; + if (m_is_form_regenerated) + return; // Never focus on resizing + + bool force_focus = parts.size() >= 2 && is_yes(parts[1]); + if (force_focus || m_text_dst->m_formname != m_last_formname) + setFocus(parts[0]); } void GUIFormSpecMenu::parseModel(parserData *data, const std::string &element) { - std::vector parts = split(element, ';'); + MY_CHECKCLIENT("model"); - if (parts.size() < 5 || (parts.size() > 10 && - m_formspec_version <= FORMSPEC_API_VERSION)) { - errorstream << "Invalid model element (" << parts.size() << "): '" << element - << "'" << std::endl; + std::vector parts; + if (!precheckElement("model", element, 5, 10, parts)) return; - } // Avoid length checks by resizing if (parts.size() < 10) diff --git a/src/gui/guiFormSpecMenu.h b/src/gui/guiFormSpecMenu.h index eee84eff6..4ba9f3959 100644 --- a/src/gui/guiFormSpecMenu.h +++ b/src/gui/guiFormSpecMenu.h @@ -279,6 +279,8 @@ protected: v2s32 getElementBasePos(const std::vector *v_pos); v2s32 getRealCoordinateBasePos(const std::vector &v_pos); v2s32 getRealCoordinateGeometry(const std::vector &v_geom); + bool precheckElement(const std::string &name, const std::string &element, + size_t args_min, size_t args_max, std::vector &parts); std::unordered_map> theme_by_type; std::unordered_map> theme_by_name; From 4a16ab3585dafdf4d36b2807a1ee9507be64b363 Mon Sep 17 00:00:00 2001 From: Vincent Robinson Date: Thu, 30 Dec 2021 12:54:21 -0800 Subject: [PATCH 144/412] Improve TTF support for pixel-style fonts (#11848) --- builtin/settingtypes.txt | 18 +++++++++++++++--- minetest.conf.example | 14 +++++++++++++- src/client/fontengine.cpp | 17 +++++++++++------ src/defaultsettings.cpp | 2 ++ 4 files changed, 41 insertions(+), 10 deletions(-) diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 1bc5e7982..22e69e30a 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -900,9 +900,15 @@ font_shadow (Font shadow) int 1 # Opaqueness (alpha) of the shadow behind the default font, between 0 and 255. font_shadow_alpha (Font shadow alpha) int 127 0 255 -# Font size of the default font in point (pt). +# Font size of the default font where 1 unit = 1 pixel at 96 DPI font_size (Font size) int 16 1 +# For pixel-style fonts that do not scale well, this ensures that font sizes used +# with this font will always be divisible by this value, in pixels. For instance, +# a pixel font 16 pixels tall should have this set to 16, so it will only ever be +# sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32. +font_size_divisible_by (Font size divisible by) int 1 1 + # Path to the default font. # If “freetype” setting is enabled: Must be a TrueType font. # If “freetype” setting is disabled: Must be a bitmap or XML vectors font. @@ -913,8 +919,14 @@ font_path_bold (Bold font path) filepath fonts/Arimo-Bold.ttf font_path_italic (Italic font path) filepath fonts/Arimo-Italic.ttf font_path_bold_italic (Bold and italic font path) filepath fonts/Arimo-BoldItalic.ttf -# Font size of the monospace font in point (pt). -mono_font_size (Monospace font size) int 15 1 +# Font size of the monospace font where 1 unit = 1 pixel at 96 DPI +mono_font_size (Monospace font size) int 16 1 + +# For pixel-style fonts that do not scale well, this ensures that font sizes used +# with this font will always be divisible by this value, in pixels. For instance, +# a pixel font 16 pixels tall should have this set to 16, so it will only ever be +# sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32. +mono_font_size_divisible_by (Monospace font size divisible by) int 1 1 # Path to the monospace font. # If “freetype” setting is enabled: Must be a TrueType font. diff --git a/minetest.conf.example b/minetest.conf.example index 3f4d01420..919c2d52c 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -1055,6 +1055,12 @@ # type: int min: 1 # font_size = 16 +# For pixel-style fonts that do not scale well, this ensures that font sizes used +# with this font will always be divisible by this value, in pixels. For instance, +# a pixel font 16 pixels tall should have this set to 16, so it will only ever be +# sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32. +# font_size_divisible_by = 1 + # Path to the default font. # If “freetype” setting is enabled: Must be a TrueType font. # If “freetype” setting is disabled: Must be a bitmap or XML vectors font. @@ -1073,7 +1079,13 @@ # Font size of the monospace font in point (pt). # type: int min: 1 -# mono_font_size = 15 +# mono_font_size = 16 + +# For pixel-style fonts that do not scale well, this ensures that font sizes used +# with this font will always be divisible by this value, in pixels. For instance, +# a pixel font 16 pixels tall should have this set to 16, so it will only ever be +# sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32. +# mono_font_size_divisible_by = 1 # Path to the monospace font. # If “freetype” setting is enabled: Must be a TrueType font. diff --git a/src/client/fontengine.cpp b/src/client/fontengine.cpp index 35e908b0c..e537b756c 100644 --- a/src/client/fontengine.cpp +++ b/src/client/fontengine.cpp @@ -66,11 +66,13 @@ FontEngine::FontEngine(gui::IGUIEnvironment* env) : g_settings->registerChangedCallback("font_path_bolditalic", font_setting_changed, NULL); g_settings->registerChangedCallback("font_shadow", font_setting_changed, NULL); g_settings->registerChangedCallback("font_shadow_alpha", font_setting_changed, NULL); + g_settings->registerChangedCallback("font_size_divisible_by", font_setting_changed, NULL); g_settings->registerChangedCallback("fallback_font_path", font_setting_changed, NULL); } g_settings->registerChangedCallback("mono_font_path", font_setting_changed, NULL); g_settings->registerChangedCallback("mono_font_size", font_setting_changed, NULL); + g_settings->registerChangedCallback("mono_font_size_divisible_by", font_setting_changed, NULL); g_settings->registerChangedCallback("screen_dpi", font_setting_changed, NULL); g_settings->registerChangedCallback("gui_scaling", font_setting_changed, NULL); } @@ -252,15 +254,18 @@ gui::IGUIFont *FontEngine::initFont(const FontSpec &spec) if (spec.italic) setting_suffix.append("_italic"); - u32 size = std::floor(RenderingEngine::getDisplayDensity() * - g_settings->getFloat("gui_scaling") * spec.size); + u32 size = std::max(spec.size * RenderingEngine::getDisplayDensity() * + g_settings->getFloat("gui_scaling"), 1); - if (size == 0) { - errorstream << "FontEngine: attempt to use font size 0" << std::endl; - errorstream << " display density: " << RenderingEngine::getDisplayDensity() << std::endl; - abort(); + // Constrain the font size to a certain multiple, if necessary + u16 divisible_by = g_settings->getU16(setting_prefix + "font_size_divisible_by"); + if (divisible_by > 1) { + size = std::max( + std::round((double)size / divisible_by) * divisible_by, divisible_by); } + sanity_check(size != 0); + u16 font_shadow = 0; u16 font_shadow_alpha = 0; g_settings->getU16NoEx(setting_prefix + "font_shadow", font_shadow); diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 635ec2257..47790a552 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -313,10 +313,12 @@ void set_default_settings() settings->setDefault("font_italic", "false"); settings->setDefault("font_shadow", "1"); settings->setDefault("font_shadow_alpha", "127"); + settings->setDefault("font_size_divisible_by", "1"); settings->setDefault("mono_font_path", porting::getDataPath("fonts" DIR_DELIM "Cousine-Regular.ttf")); settings->setDefault("mono_font_path_italic", porting::getDataPath("fonts" DIR_DELIM "Cousine-Italic.ttf")); settings->setDefault("mono_font_path_bold", porting::getDataPath("fonts" DIR_DELIM "Cousine-Bold.ttf")); settings->setDefault("mono_font_path_bold_italic", porting::getDataPath("fonts" DIR_DELIM "Cousine-BoldItalic.ttf")); + settings->setDefault("mono_font_size_divisible_by", "1"); settings->setDefault("fallback_font_path", porting::getDataPath("fonts" DIR_DELIM "DroidSansFallbackFull.ttf")); std::string font_size_str = std::to_string(TTF_DEFAULT_FONT_SIZE); From 544b9d5c72f690d6a729053616d26e023f7e0e28 Mon Sep 17 00:00:00 2001 From: Vincent Robinson Date: Thu, 30 Dec 2021 12:54:47 -0800 Subject: [PATCH 145/412] Add padding[] element to formspecs (#11821) --- doc/lua_api.txt | 17 +++- games/devtest/mods/testformspec/formspec.lua | 65 +++++++++++++-- src/gui/guiFormSpecMenu.cpp | 88 ++++++++++++++++---- src/gui/guiFormSpecMenu.h | 3 + 4 files changed, 149 insertions(+), 24 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 1950659ab..0879dcfb5 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -117,7 +117,7 @@ Menu music ----------- Games can provide custom main menu music. They are put inside a `menu` -directory inside the game directory. +directory inside the game directory. The music files are named `theme.ogg`. If you want to specify multiple music files for one game, add additional @@ -2326,9 +2326,20 @@ Elements * `position` and `anchor` elements need suitable values to avoid a formspec extending off the game window due to particular game window sizes. -### `no_prepend[]` +### `padding[,]` * Must be used after the `size`, `position`, and `anchor` elements (if present). +* Defines how much space is padded around the formspec if the formspec tries to + increase past the size of the screen and coordinates have to be shrunk. +* For X and Y, 0.0 represents no padding (the formspec can touch the edge of the + screen), and 0.5 represents half the screen (which forces the coordinate size + to 0). If negative, the formspec can extend off the edge of the screen. +* Defaults to [0.05, 0.05]. + +### `no_prepend[]` + +* Must be used after the `size`, `position`, `anchor`, and `padding` elements + (if present). * Disables player:set_formspec_prepend() from applying to this formspec. ### `real_coordinates[]` @@ -7915,7 +7926,7 @@ Used by `minetest.register_node`. items = {"default:sand", "default:desert_sand"}, }, { - -- Only drop if using an item in the "magicwand" group, or + -- Only drop if using an item in the "magicwand" group, or -- an item that is in both the "pickaxe" and the "lucky" -- groups. tool_groups = { diff --git a/games/devtest/mods/testformspec/formspec.lua b/games/devtest/mods/testformspec/formspec.lua index 501b5e354..c0db695b7 100644 --- a/games/devtest/mods/testformspec/formspec.lua +++ b/games/devtest/mods/testformspec/formspec.lua @@ -270,6 +270,16 @@ local scroll_fs = --style_type[label;border=;bgcolor=] --label[0.75,2;Reset] +local window = { + sizex = 12, + sizey = 13, + positionx = 0.5, + positiony = 0.5, + anchorx = 0.5, + anchory = 0.5, + paddingx = 0.05, + paddingy = 0.05 +} local pages = { -- Real Coordinates @@ -341,9 +351,28 @@ local pages = { "size[12,13]real_coordinates[true]" .. "container[0.5,1.5]" .. tabheaders_fs .. "container_end[]", - -- Inv + -- Inv "size[12,13]real_coordinates[true]" .. inv_style_fs, + -- Window + function() + return "formspec_version[3]" .. + string.format("size[%s,%s]position[%s,%s]anchor[%s,%s]padding[%s,%s]", + window.sizex, window.sizey, window.positionx, window.positiony, + window.anchorx, window.anchory, window.paddingx, window.paddingy) .. + string.format("field[0.5,0.5;2.5,0.5;sizex;X Size;%s]field[3.5,0.5;2.5,0.5;sizey;Y Size;%s]" .. + "field[0.5,1.5;2.5,0.5;positionx;X Position;%s]field[3.5,1.5;2.5,0.5;positiony;Y Position;%s]" .. + "field[0.5,2.5;2.5,0.5;anchorx;X Anchor;%s]field[3.5,2.5;2.5,0.5;anchory;Y Anchor;%s]" .. + "field[0.5,3.5;2.5,0.5;paddingx;X Padding;%s]field[3.5,3.5;2.5,0.5;paddingy;Y Padding;%s]" .. + "button[2,4.5;2.5,0.5;submit_window;Submit]", + window.sizex, window.sizey, window.positionx, window.positiony, + window.anchorx, window.anchory, window.paddingx, window.paddingy) .. + "field_close_on_enter[sizex;false]field_close_on_enter[sizey;false]" .. + "field_close_on_enter[positionx;false]field_close_on_enter[positiony;false]" .. + "field_close_on_enter[anchorx;false]field_close_on_enter[anchory;false]" .. + "field_close_on_enter[paddingx;false]field_close_on_enter[paddingy;false]" + end, + -- Animation [[ formspec_version[3] @@ -403,10 +432,14 @@ mouse control = true] ]], } -local function show_test_formspec(pname, page_id) - page_id = page_id or 2 +local page_id = 2 +local function show_test_formspec(pname) + local page = pages[page_id] + if type(page) == "function" then + page = page() + end - local fs = pages[page_id] .. "tabheader[0,0;8,0.65;maintabs;Real Coord,Styles,Noclip,Hypertext,Tabs,Invs,Anim,Model,ScrollC,Sound;" .. page_id .. ";false;false]" + local fs = page .. "tabheader[0,0;8,0.65;maintabs;Real Coord,Styles,Noclip,Hypertext,Tabs,Invs,Window,Anim,Model,ScrollC,Sound;" .. page_id .. ";false;false]" minetest.show_formspec(pname, "testformspec:formspec", fs) end @@ -416,9 +449,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) return false end - if fields.maintabs then - show_test_formspec(player:get_player_name(), tonumber(fields.maintabs)) + page_id = tonumber(fields.maintabs) + show_test_formspec(player:get_player_name()) return true end @@ -434,6 +467,26 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) minetest.chat_send_player(player:get_player_name(), "Hypertext action received: " .. tostring(fields.hypertext)) return true end + + for name, value in pairs(fields) do + if window[name] then + print(name, window[name]) + local num_val = tonumber(value) or 0 + + if name == "sizex" and num_val < 4 then + num_val = 6.5 + elseif name == "sizey" and num_val < 5 then + num_val = 5.5 + end + + window[name] = num_val + print(name, window[name]) + end + end + + if fields.submit_window then + show_test_formspec(player:get_player_name()) + end end) minetest.register_chatcommand("test_formspec", { diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp index dfeea12db..2cf9d9942 100644 --- a/src/gui/guiFormSpecMenu.cpp +++ b/src/gui/guiFormSpecMenu.cpp @@ -2470,11 +2470,16 @@ bool GUIFormSpecMenu::parsePositionDirect(parserData *data, const std::string &e void GUIFormSpecMenu::parsePosition(parserData *data, const std::string &element) { - std::vector parts = split(element, ','); + std::vector parts = split(element, ';'); - if (parts.size() == 2) { - data->offset.X = stof(parts[0]); - data->offset.Y = stof(parts[1]); + if (parts.size() == 1 || + (parts.size() > 1 && m_formspec_version > FORMSPEC_API_VERSION)) { + std::vector v_geom = split(parts[0], ','); + + MY_CHECKGEOM("position", 0); + + data->offset.X = stof(v_geom[0]); + data->offset.Y = stof(v_geom[1]); return; } @@ -2504,11 +2509,16 @@ bool GUIFormSpecMenu::parseAnchorDirect(parserData *data, const std::string &ele void GUIFormSpecMenu::parseAnchor(parserData *data, const std::string &element) { - std::vector parts = split(element, ','); + std::vector parts = split(element, ';'); - if (parts.size() == 2) { - data->anchor.X = stof(parts[0]); - data->anchor.Y = stof(parts[1]); + if (parts.size() == 1 || + (parts.size() > 1 && m_formspec_version > FORMSPEC_API_VERSION)) { + std::vector v_geom = split(parts[0], ','); + + MY_CHECKGEOM("anchor", 0); + + data->anchor.X = stof(v_geom[0]); + data->anchor.Y = stof(v_geom[1]); return; } @@ -2516,6 +2526,46 @@ void GUIFormSpecMenu::parseAnchor(parserData *data, const std::string &element) << "'" << std::endl; } +bool GUIFormSpecMenu::parsePaddingDirect(parserData *data, const std::string &element) +{ + if (element.empty()) + return false; + + std::vector parts = split(element, '['); + + if (parts.size() != 2) + return false; + + std::string type = trim(parts[0]); + std::string description = trim(parts[1]); + + if (type != "padding") + return false; + + parsePadding(data, description); + + return true; +} + +void GUIFormSpecMenu::parsePadding(parserData *data, const std::string &element) +{ + std::vector parts = split(element, ';'); + + if (parts.size() == 1 || + (parts.size() > 1 && m_formspec_version > FORMSPEC_API_VERSION)) { + std::vector v_geom = split(parts[0], ','); + + MY_CHECKGEOM("padding", 0); + + data->padding.X = stof(v_geom[0]); + data->padding.Y = stof(v_geom[1]); + return; + } + + errorstream << "Invalid padding element (" << parts.size() << "): '" << element + << "'" << std::endl; +} + bool GUIFormSpecMenu::parseStyle(parserData *data, const std::string &element, bool style_type) { std::vector parts = split(element, ';'); @@ -3022,6 +3072,7 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize) mydata.screensize = screensize; mydata.offset = v2f32(0.5f, 0.5f); mydata.anchor = v2f32(0.5f, 0.5f); + mydata.padding = v2f32(0.05f, 0.05f); mydata.simple_field_count = 0; // Base position of contents of form @@ -3124,7 +3175,14 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize) } } - /* "no_prepend" element is always after "position" (or "size" element) if it used */ + /* "padding" element is always after "anchor" and previous if it is used */ + for (; i < elements.size(); i++) { + if (!parsePaddingDirect(&mydata, elements[i])) { + break; + } + } + + /* "no_prepend" element is always after "padding" and previous if it used */ bool enable_prepends = true; for (; i < elements.size(); i++) { if (elements[i].empty()) @@ -3189,11 +3247,9 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize) double fitx_imgsize; double fity_imgsize; - // Pad the screensize with 5% of the screensize on all sides to ensure - // that even the largest formspecs don't touch the screen borders. v2f padded_screensize( - mydata.screensize.X * 0.9f, - mydata.screensize.Y * 0.9f + mydata.screensize.X * (1.0f - mydata.padding.X * 2.0f), + mydata.screensize.Y * (1.0f - mydata.padding.Y * 2.0f) ); if (mydata.real_coordinates) { @@ -3209,13 +3265,15 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize) ((15.0 / 13.0) * (0.85 + mydata.invsize.Y)); } + s32 min_screen_dim = std::min(mydata.screensize.X, mydata.screensize.Y); + #ifdef HAVE_TOUCHSCREENGUI // In Android, the preferred imgsize should be larger to accommodate the // smaller screensize. - double prefer_imgsize = padded_screensize.Y / 10 * gui_scaling; + double prefer_imgsize = min_screen_dim / 10 * gui_scaling; #else // Desktop computers have more space, so try to fit 15 coordinates. - double prefer_imgsize = padded_screensize.Y / 15 * gui_scaling; + double prefer_imgsize = min_screen_dim / 15 * gui_scaling; #endif // Try to use the preferred imgsize, but if that's bigger than the maximum // size, use the maximum size. diff --git a/src/gui/guiFormSpecMenu.h b/src/gui/guiFormSpecMenu.h index 4ba9f3959..0b4d3879d 100644 --- a/src/gui/guiFormSpecMenu.h +++ b/src/gui/guiFormSpecMenu.h @@ -368,6 +368,7 @@ private: v2s32 size; v2f32 offset; v2f32 anchor; + v2f32 padding; core::rect rect; v2s32 basepos; v2u32 screensize; @@ -449,6 +450,8 @@ private: void parsePosition(parserData *data, const std::string &element); bool parseAnchorDirect(parserData *data, const std::string &element); void parseAnchor(parserData *data, const std::string &element); + bool parsePaddingDirect(parserData *data, const std::string &element); + void parsePadding(parserData *data, const std::string &element); bool parseStyle(parserData *data, const std::string &element, bool style_type); void parseSetFocus(const std::string &element); void parseModel(parserData *data, const std::string &element); From 29d2b2ccd06cdd831a7fac66928bfa612003945c Mon Sep 17 00:00:00 2001 From: ShadowNinja Date: Sat, 1 Jan 2022 16:44:56 -0500 Subject: [PATCH 146/412] Print announce error response (#11878) Fix HTTPFetch caller and request ID to 64 bits Check that allocated caller ID is not DISCARD Print body if serverlist request returns error Don't print control characters from HTTP responses Document special HTTPFetch caller IDs Allow unicode to be printed --- src/client/clientmedia.h | 6 ++--- src/httpfetch.cpp | 51 ++++++++++++++++++++++------------------ src/httpfetch.h | 27 +++++++++++++-------- src/serverlist.cpp | 1 + src/util/string.cpp | 16 +++++++++++++ src/util/string.h | 8 +++++++ 6 files changed, 73 insertions(+), 36 deletions(-) diff --git a/src/client/clientmedia.h b/src/client/clientmedia.h index aa7b0f398..c297d737f 100644 --- a/src/client/clientmedia.h +++ b/src/client/clientmedia.h @@ -174,12 +174,12 @@ private: s32 m_uncached_received_count = 0; // Status of remote transfers - unsigned long m_httpfetch_caller; - unsigned long m_httpfetch_next_id = 0; + u64 m_httpfetch_caller; + u64 m_httpfetch_next_id = 0; s32 m_httpfetch_active = 0; s32 m_httpfetch_active_limit = 0; s32 m_outstanding_hash_sets = 0; - std::unordered_map m_remote_file_transfers; + std::unordered_map m_remote_file_transfers; // All files up to this name have either been received from a // remote server or failed on all remote servers, so those files diff --git a/src/httpfetch.cpp b/src/httpfetch.cpp index 1307bfec3..16f0791c9 100644 --- a/src/httpfetch.cpp +++ b/src/httpfetch.cpp @@ -38,7 +38,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "noise.h" static std::mutex g_httpfetch_mutex; -static std::unordered_map> +static std::unordered_map> g_httpfetch_results; static PcgRandom g_callerid_randomness; @@ -52,22 +52,21 @@ HTTPFetchRequest::HTTPFetchRequest() : static void httpfetch_deliver_result(const HTTPFetchResult &fetch_result) { - unsigned long caller = fetch_result.caller; + u64 caller = fetch_result.caller; if (caller != HTTPFETCH_DISCARD) { MutexAutoLock lock(g_httpfetch_mutex); g_httpfetch_results[caller].emplace(fetch_result); } } -static void httpfetch_request_clear(unsigned long caller); +static void httpfetch_request_clear(u64 caller); -unsigned long httpfetch_caller_alloc() +u64 httpfetch_caller_alloc() { MutexAutoLock lock(g_httpfetch_mutex); - // Check each caller ID except HTTPFETCH_DISCARD - const unsigned long discard = HTTPFETCH_DISCARD; - for (unsigned long caller = discard + 1; caller != discard; ++caller) { + // Check each caller ID except reserved ones + for (u64 caller = HTTPFETCH_CID_START; caller != 0; ++caller) { auto it = g_httpfetch_results.find(caller); if (it == g_httpfetch_results.end()) { verbosestream << "httpfetch_caller_alloc: allocating " @@ -79,18 +78,17 @@ unsigned long httpfetch_caller_alloc() } FATAL_ERROR("httpfetch_caller_alloc: ran out of caller IDs"); - return discard; } -unsigned long httpfetch_caller_alloc_secure() +u64 httpfetch_caller_alloc_secure() { MutexAutoLock lock(g_httpfetch_mutex); // Generate random caller IDs and make sure they're not - // already used or equal to HTTPFETCH_DISCARD + // already used or reserved. // Give up after 100 tries to prevent infinite loop - u8 tries = 100; - unsigned long caller; + size_t tries = 100; + u64 caller; do { caller = (((u64) g_callerid_randomness.next()) << 32) | @@ -100,7 +98,8 @@ unsigned long httpfetch_caller_alloc_secure() FATAL_ERROR("httpfetch_caller_alloc_secure: ran out of caller IDs"); return HTTPFETCH_DISCARD; } - } while (g_httpfetch_results.find(caller) != g_httpfetch_results.end()); + } while (caller >= HTTPFETCH_CID_START && + g_httpfetch_results.find(caller) != g_httpfetch_results.end()); verbosestream << "httpfetch_caller_alloc_secure: allocating " << caller << std::endl; @@ -110,7 +109,7 @@ unsigned long httpfetch_caller_alloc_secure() return caller; } -void httpfetch_caller_free(unsigned long caller) +void httpfetch_caller_free(u64 caller) { verbosestream<<"httpfetch_caller_free: freeing " <= 400) { + errorstream << "HTTPFetch for " << request.url + << " returned response code " << result.response_code << std::endl; + if (result.caller == HTTPFETCH_PRINT_ERR && !result.data.empty()) { + errorstream << "Response body:" << std::endl; + safe_print_string(errorstream, result.data); + errorstream << std::endl; + } } return &result; @@ -474,7 +479,7 @@ public: m_requests.push_back(req); } - void requestClear(unsigned long caller, Event *event) + void requestClear(u64 caller, Event *event) { Request req; req.type = RT_CLEAR; @@ -505,7 +510,7 @@ protected: } else if (req.type == RT_CLEAR) { - unsigned long caller = req.fetch_request.caller; + u64 caller = req.fetch_request.caller; // Abort all ongoing fetches for the caller for (std::vector::iterator @@ -778,7 +783,7 @@ void httpfetch_async(const HTTPFetchRequest &fetch_request) g_httpfetch_thread->start(); } -static void httpfetch_request_clear(unsigned long caller) +static void httpfetch_request_clear(u64 caller) { if (g_httpfetch_thread->isRunning()) { Event event; @@ -827,7 +832,7 @@ void httpfetch_async(const HTTPFetchRequest &fetch_request) httpfetch_deliver_result(fetch_result); } -static void httpfetch_request_clear(unsigned long caller) +static void httpfetch_request_clear(u64 caller) { } diff --git a/src/httpfetch.h b/src/httpfetch.h index 3b9f17f0a..a4901e63b 100644 --- a/src/httpfetch.h +++ b/src/httpfetch.h @@ -23,10 +23,17 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/string.h" #include "config.h" -// Can be used in place of "caller" in asynchronous transfers to discard result -// (used as default value of "caller") +// These can be used in place of "caller" in to specify special handling. +// Discard result (used as default value of "caller"). #define HTTPFETCH_DISCARD 0 +// Indicates that the result should not be discarded when performing a +// synchronous request (since a real caller ID is not needed for synchronous +// requests because the result does not have to be retrieved later). #define HTTPFETCH_SYNC 1 +// Print response body to console if the server returns an error code. +#define HTTPFETCH_PRINT_ERR 2 +// Start of regular allocated caller IDs. +#define HTTPFETCH_CID_START 3 // Methods enum HttpMethod : u8 @@ -43,11 +50,11 @@ struct HTTPFetchRequest // Identifies the caller (for asynchronous requests) // Ignored by httpfetch_sync - unsigned long caller = HTTPFETCH_DISCARD; + u64 caller = HTTPFETCH_DISCARD; // Some number that identifies the request // (when the same caller issues multiple httpfetch_async calls) - unsigned long request_id = 0; + u64 request_id = 0; // Timeout for the whole transfer, in milliseconds long timeout; @@ -85,8 +92,8 @@ struct HTTPFetchResult long response_code = 0; std::string data = ""; // The caller and request_id from the corresponding HTTPFetchRequest. - unsigned long caller = HTTPFETCH_DISCARD; - unsigned long request_id = 0; + u64 caller = HTTPFETCH_DISCARD; + u64 request_id = 0; HTTPFetchResult() = default; @@ -107,19 +114,19 @@ void httpfetch_async(const HTTPFetchRequest &fetch_request); // If any fetch for the given caller ID is complete, removes it from the // result queue, sets the fetch result and returns true. Otherwise returns false. -bool httpfetch_async_get(unsigned long caller, HTTPFetchResult &fetch_result); +bool httpfetch_async_get(u64 caller, HTTPFetchResult &fetch_result); // Allocates a caller ID for httpfetch_async // Not required if you want to set caller = HTTPFETCH_DISCARD -unsigned long httpfetch_caller_alloc(); +u64 httpfetch_caller_alloc(); // Allocates a non-predictable caller ID for httpfetch_async -unsigned long httpfetch_caller_alloc_secure(); +u64 httpfetch_caller_alloc_secure(); // Frees a caller ID allocated with httpfetch_caller_alloc // Note: This can be expensive, because the httpfetch thread is told // to stop any ongoing fetches for the given caller. -void httpfetch_caller_free(unsigned long caller); +void httpfetch_caller_free(u64 caller); // Performs a synchronous HTTP request. This blocks and therefore should // only be used from background threads. diff --git a/src/serverlist.cpp b/src/serverlist.cpp index 3bcab3d58..29e3ac9a6 100644 --- a/src/serverlist.cpp +++ b/src/serverlist.cpp @@ -97,6 +97,7 @@ void sendAnnounce(AnnounceAction action, } HTTPFetchRequest fetch_request; + fetch_request.caller = HTTPFETCH_PRINT_ERR; fetch_request.url = g_settings->get("serverlist_url") + std::string("/announce"); fetch_request.method = HTTP_POST; fetch_request.fields["json"] = fastWriteJson(server); diff --git a/src/util/string.cpp b/src/util/string.cpp index 8be5e320a..bc4664997 100644 --- a/src/util/string.cpp +++ b/src/util/string.cpp @@ -887,3 +887,19 @@ std::string sanitizeDirName(const std::string &str, const std::string &optional_ return wide_to_utf8(safe_name); } + + +void safe_print_string(std::ostream &os, const std::string &str) +{ + std::ostream::fmtflags flags = os.flags(); + os << std::hex; + for (const char c : str) { + if (IS_ASCII_PRINTABLE_CHAR(c) || IS_UTF8_MULTB_START(c) || + IS_UTF8_MULTB_INNER(c) || c == '\n' || c == '\t') { + os << c; + } else { + os << '<' << std::setw(2) << (int)c << '>'; + } + } + os.setf(flags); +} diff --git a/src/util/string.h b/src/util/string.h index bca998f56..8a9e83f22 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -753,3 +753,11 @@ inline irr::core::stringw utf8_to_stringw(const std::string &input) * 2. Remove 'unsafe' characters from the name by replacing them with '_' */ std::string sanitizeDirName(const std::string &str, const std::string &optional_prefix); + +/** + * Prints a sanitized version of a string without control characters. + * '\t' and '\n' are allowed, as are UTF-8 control characters (e.g. RTL). + * ASCII control characters are replaced with their hex encoding in angle + * brackets (e.g. "a\x1eb" -> "a<1e>b"). + */ +void safe_print_string(std::ostream &os, const std::string &str); From 8910c7f8ae1862d3d81e6f635789e765ae2e80b9 Mon Sep 17 00:00:00 2001 From: Zughy <63455151+Zughy@users.noreply.github.com> Date: Sat, 1 Jan 2022 22:46:00 +0100 Subject: [PATCH 147/412] Better document sky_color scope (#11892) --- doc/lua_api.txt | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 0879dcfb5..81b05abb0 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -6803,29 +6803,29 @@ object you are working with still exists. * `textures`: A table containing up to six textures in the following order: Y+ (top), Y- (bottom), X- (west), X+ (east), Z+ (north), Z- (south). * `clouds`: Boolean for whether clouds appear. (default: `true`) - * `sky_color`: A table containing the following values, alpha is ignored: - * `day_sky`: ColorSpec, for the top half of the `"regular"` - sky during the day. (default: `#61b5f5`) - * `day_horizon`: ColorSpec, for the bottom half of the - `"regular"` sky during the day. (default: `#90d3f6`) - * `dawn_sky`: ColorSpec, for the top half of the `"regular"` - sky during dawn/sunset. (default: `#b4bafa`) + * `sky_color`: A table used in `"regular"` type only, containing the + following values (alpha is ignored): + * `day_sky`: ColorSpec, for the top half of the sky during the day. + (default: `#61b5f5`) + * `day_horizon`: ColorSpec, for the bottom half of the sky during the day. + (default: `#90d3f6`) + * `dawn_sky`: ColorSpec, for the top half of the sky during dawn/sunset. + (default: `#b4bafa`) The resulting sky color will be a darkened version of the ColorSpec. Warning: The darkening of the ColorSpec is subject to change. - * `dawn_horizon`: ColorSpec, for the bottom half of the `"regular"` - sky during dawn/sunset. (default: `#bac1f0`) + * `dawn_horizon`: ColorSpec, for the bottom half of the sky during dawn/sunset. + (default: `#bac1f0`) The resulting sky color will be a darkened version of the ColorSpec. Warning: The darkening of the ColorSpec is subject to change. - * `night_sky`: ColorSpec, for the top half of the `"regular"` - sky during the night. (default: `#006bff`) + * `night_sky`: ColorSpec, for the top half of the sky during the night. + (default: `#006bff`) The resulting sky color will be a dark version of the ColorSpec. Warning: The darkening of the ColorSpec is subject to change. - * `night_horizon`: ColorSpec, for the bottom half of the `"regular"` - sky during the night. (default: `#4090ff`) + * `night_horizon`: ColorSpec, for the bottom half of the sky during the night. + (default: `#4090ff`) The resulting sky color will be a dark version of the ColorSpec. Warning: The darkening of the ColorSpec is subject to change. - * `indoors`: ColorSpec, for when you're either indoors or - underground. Only applies to the `"regular"` sky. + * `indoors`: ColorSpec, for when you're either indoors or underground. (default: `#646464`) * `fog_sun_tint`: ColorSpec, changes the fog tinting for the sun at sunrise and sunset. From e030d9cff08636a3c9ed301efb5e35b7642ac166 Mon Sep 17 00:00:00 2001 From: x2048 Date: Sun, 2 Jan 2022 14:32:13 +0100 Subject: [PATCH 148/412] Recalculate normals before adding mesh to the scene --- src/client/content_cao.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index a80a3ce4e..db01945eb 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -764,10 +764,6 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) grabMatrixNode(); scene::IAnimatedMesh *mesh = m_client->getMesh(m_prop.mesh, true); if (mesh) { - m_animated_meshnode = m_smgr->addAnimatedMeshSceneNode(mesh, m_matrixnode); - m_animated_meshnode->grab(); - mesh->drop(); // The scene node took hold of it - if (!checkMeshNormals(mesh)) { infostream << "GenericCAO: recalculating normals for mesh " << m_prop.mesh << std::endl; @@ -775,6 +771,9 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) recalculateNormals(mesh, true, false); } + m_animated_meshnode = m_smgr->addAnimatedMeshSceneNode(mesh, m_matrixnode); + m_animated_meshnode->grab(); + mesh->drop(); // The scene node took hold of it m_animated_meshnode->animateJoints(); // Needed for some animations m_animated_meshnode->setScale(m_prop.visual_size); From 835524654ed95afd1c5584c398a78ac226d0f27e Mon Sep 17 00:00:00 2001 From: x2048 Date: Sun, 2 Jan 2022 22:45:55 +0100 Subject: [PATCH 149/412] Fix shadow mapping when PCF is disabled (#11888) --- client/shaders/nodes_shader/opengl_fragment.glsl | 1 + 1 file changed, 1 insertion(+) diff --git a/client/shaders/nodes_shader/opengl_fragment.glsl b/client/shaders/nodes_shader/opengl_fragment.glsl index b4a605b28..9ee88eb39 100644 --- a/client/shaders/nodes_shader/opengl_fragment.glsl +++ b/client/shaders/nodes_shader/opengl_fragment.glsl @@ -185,6 +185,7 @@ float getPenumbraRadius(sampler2D shadowsampler, vec2 smTexCoord, float realDist float baseLength = getBaseLength(smTexCoord); float perspectiveFactor; + if (PCFBOUND == 0.0) return 0.0; // Return fast if sharp shadows are requested if (SOFTSHADOWRADIUS <= 1.0) { perspectiveFactor = getDeltaPerspectiveFactor(baseLength); From 84fdd369d45314a5b7946ff66fe5fce85c1abc1f Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Mon, 3 Jan 2022 03:14:02 +0000 Subject: [PATCH 150/412] Cap damage overlay duration to 1 second (#11871) --- src/client/content_cao.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index db01945eb..9cc40c95f 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -1859,6 +1859,8 @@ void GenericCAO::processMessage(const std::string &data) m_reset_textures_timer = 0.05; if(damage >= 2) m_reset_textures_timer += 0.05 * damage; + // Cap damage overlay to 1 second + m_reset_textures_timer = std::min(m_reset_textures_timer, 1.0f); updateTextures(m_current_texture_modifier + m_prop.damage_texture_modifier); } } @@ -1927,6 +1929,8 @@ bool GenericCAO::directReportPunch(v3f dir, const ItemStack *punchitem, m_reset_textures_timer = 0.05; if (result.damage >= 2) m_reset_textures_timer += 0.05 * result.damage; + // Cap damage overlay to 1 second + m_reset_textures_timer = std::min(m_reset_textures_timer, 1.0f); updateTextures(m_current_texture_modifier + m_prop.damage_texture_modifier); } } From 196562870552b156265feb83043da2bc21bd6246 Mon Sep 17 00:00:00 2001 From: Desour Date: Sun, 2 Jan 2022 17:16:16 +0100 Subject: [PATCH 151/412] Fix vector.from_string returning a table without vector metatable --- builtin/common/tests/vector_spec.lua | 1 + builtin/common/vector.lua | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/builtin/common/tests/vector_spec.lua b/builtin/common/tests/vector_spec.lua index 2a50e2889..2f72f3383 100644 --- a/builtin/common/tests/vector_spec.lua +++ b/builtin/common/tests/vector_spec.lua @@ -300,6 +300,7 @@ describe("vector", function() it("from_string()", function() local v = vector.new(1, 2, 3.14) + assert.is_true(vector.check(vector.from_string("(1, 2, 3.14)"))) assert.same({v, 13}, {vector.from_string("(1, 2, 3.14)")}) assert.same({v, 12}, {vector.from_string("(1,2 ,3.14)")}) assert.same({v, 12}, {vector.from_string("(1,2,3.14,)")}) diff --git a/builtin/common/vector.lua b/builtin/common/vector.lua index 02fc1bdee..581d014e0 100644 --- a/builtin/common/vector.lua +++ b/builtin/common/vector.lua @@ -61,7 +61,7 @@ function vector.from_string(s, init) if not (x and y and z) then return nil end - return {x = x, y = y, z = z}, np + return fast_new(x, y, z), np end function vector.to_string(v) From d33ab97434633683196cee2c4593160736899124 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Tue, 4 Jan 2022 18:39:27 +0100 Subject: [PATCH 152/412] Inventory: Add ServerEnv checks for calls during script init This fixes 'minetest.get_inventory' calls to players or nodes during the load phase. --- src/server/serverinventorymgr.cpp | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/server/serverinventorymgr.cpp b/src/server/serverinventorymgr.cpp index 3aee003b4..63d1645cb 100644 --- a/src/server/serverinventorymgr.cpp +++ b/src/server/serverinventorymgr.cpp @@ -39,24 +39,29 @@ ServerInventoryManager::~ServerInventoryManager() Inventory *ServerInventoryManager::getInventory(const InventoryLocation &loc) { + // No m_env check here: allow creation and modification of detached inventories + switch (loc.type) { case InventoryLocation::UNDEFINED: case InventoryLocation::CURRENT_PLAYER: break; case InventoryLocation::PLAYER: { + if (!m_env) + return nullptr; + RemotePlayer *player = m_env->getPlayer(loc.name.c_str()); if (!player) return NULL; + PlayerSAO *playersao = player->getPlayerSAO(); - if (!playersao) - return NULL; - return playersao->getInventory(); + return playersao ? playersao->getInventory() : nullptr; } break; case InventoryLocation::NODEMETA: { + if (!m_env) + return nullptr; + NodeMetadata *meta = m_env->getMap().getNodeMetadata(loc.p); - if (!meta) - return NULL; - return meta->getInventory(); + return meta ? meta->getInventory() : nullptr; } break; case InventoryLocation::DETACHED: { auto it = m_detached_inventories.find(loc.name); @@ -151,12 +156,13 @@ bool ServerInventoryManager::removeDetachedInventory(const std::string &name) const std::string &owner = inv_it->second.owner; if (!owner.empty()) { - RemotePlayer *player = m_env->getPlayer(owner.c_str()); - - if (player && player->getPeerId() != PEER_ID_INEXISTENT) - m_env->getGameDef()->sendDetachedInventory( - nullptr, name, player->getPeerId()); + if (m_env) { + RemotePlayer *player = m_env->getPlayer(owner.c_str()); + if (player && player->getPeerId() != PEER_ID_INEXISTENT) + m_env->getGameDef()->sendDetachedInventory( + nullptr, name, player->getPeerId()); + } } else if (m_env) { // Notify all players about the change as soon ServerEnv exists m_env->getGameDef()->sendDetachedInventory( From e39b159845871fbb1634570bd4af999c1c72e6fa Mon Sep 17 00:00:00 2001 From: Vincent Robinson Date: Tue, 4 Jan 2022 17:47:32 -0800 Subject: [PATCH 153/412] Base formspec coordinate size on padded screensize --- src/gui/guiFormSpecMenu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp index 2cf9d9942..770a50bd9 100644 --- a/src/gui/guiFormSpecMenu.cpp +++ b/src/gui/guiFormSpecMenu.cpp @@ -3265,7 +3265,7 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize) ((15.0 / 13.0) * (0.85 + mydata.invsize.Y)); } - s32 min_screen_dim = std::min(mydata.screensize.X, mydata.screensize.Y); + s32 min_screen_dim = std::min(padded_screensize.X, padded_screensize.Y); #ifdef HAVE_TOUCHSCREENGUI // In Android, the preferred imgsize should be larger to accommodate the From 85da2e284b8091062e1b53ad5a703aae6cbc3a3c Mon Sep 17 00:00:00 2001 From: Aritz Erkiaga Date: Thu, 6 Jan 2022 19:19:44 +0100 Subject: [PATCH 154/412] Fix incorrect bit positions in paramtype documentation --- doc/lua_api.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index 81b05abb0..d4dc19fdd 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1026,7 +1026,7 @@ The function of `param1` is determined by `paramtype` in node definition. `param1` is reserved for the engine when `paramtype != "none"`. * `paramtype = "light"` - * The value stores light with and without sun in its upper and lower 4 bits + * The value stores light with and without sun in its lower and upper 4 bits respectively. * Required by a light source node to enable spreading its light. * Required by the following drawtypes as they determine their visual From b81948a14c138517f6a227dac5b71f0b2facb33c Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Thu, 6 Jan 2022 20:16:35 +0000 Subject: [PATCH 155/412] Fix damage wraparound if very high damage (#11872) --- doc/lua_api.txt | 2 +- src/script/cpp_api/s_entity.cpp | 2 +- src/script/cpp_api/s_entity.h | 2 +- src/script/cpp_api/s_player.cpp | 2 +- src/script/cpp_api/s_player.h | 2 +- src/tool.cpp | 4 +++- src/tool.h | 4 ++-- 7 files changed, 10 insertions(+), 8 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index d4dc19fdd..3edfd5bb1 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -3524,7 +3524,7 @@ Helper functions * `minetest.get_hit_params(groups, tool_capabilities [, time_from_last_punch [, wear]])`: Simulates an item that punches an object. Returns a table with the following fields: - * `hp`: How much damage the punch would cause. + * `hp`: How much damage the punch would cause (between -65535 and 65535). * `wear`: How much wear would be added to the tool (ignored for non-tools). Parameters: * `groups`: Damage groups of the object diff --git a/src/script/cpp_api/s_entity.cpp b/src/script/cpp_api/s_entity.cpp index 746f7013e..06337b9e8 100644 --- a/src/script/cpp_api/s_entity.cpp +++ b/src/script/cpp_api/s_entity.cpp @@ -240,7 +240,7 @@ void ScriptApiEntity::luaentity_Step(u16 id, float dtime, // tool_capabilities, direction, damage) bool ScriptApiEntity::luaentity_Punch(u16 id, ServerActiveObject *puncher, float time_from_last_punch, - const ToolCapabilities *toolcap, v3f dir, s16 damage) + const ToolCapabilities *toolcap, v3f dir, s32 damage) { SCRIPTAPI_PRECHECKHEADER diff --git a/src/script/cpp_api/s_entity.h b/src/script/cpp_api/s_entity.h index b52f6e447..7658ae922 100644 --- a/src/script/cpp_api/s_entity.h +++ b/src/script/cpp_api/s_entity.h @@ -42,7 +42,7 @@ public: const collisionMoveResult *moveresult); bool luaentity_Punch(u16 id, ServerActiveObject *puncher, float time_from_last_punch, - const ToolCapabilities *toolcap, v3f dir, s16 damage); + const ToolCapabilities *toolcap, v3f dir, s32 damage); bool luaentity_on_death(u16 id, ServerActiveObject *killer); void luaentity_Rightclick(u16 id, ServerActiveObject *clicker); void luaentity_on_attach_child(u16 id, ServerActiveObject *child); diff --git a/src/script/cpp_api/s_player.cpp b/src/script/cpp_api/s_player.cpp index d3e6138dc..22b24f363 100644 --- a/src/script/cpp_api/s_player.cpp +++ b/src/script/cpp_api/s_player.cpp @@ -60,7 +60,7 @@ bool ScriptApiPlayer::on_punchplayer(ServerActiveObject *player, float time_from_last_punch, const ToolCapabilities *toolcap, v3f dir, - s16 damage) + s32 damage) { SCRIPTAPI_PRECHECKHEADER // Get core.registered_on_punchplayers diff --git a/src/script/cpp_api/s_player.h b/src/script/cpp_api/s_player.h index c0f141862..e866aee46 100644 --- a/src/script/cpp_api/s_player.h +++ b/src/script/cpp_api/s_player.h @@ -46,7 +46,7 @@ public: void on_cheat(ServerActiveObject *player, const std::string &cheat_type); bool on_punchplayer(ServerActiveObject *player, ServerActiveObject *hitter, float time_from_last_punch, const ToolCapabilities *toolcap, - v3f dir, s16 damage); + v3f dir, s32 damage); void on_rightclickplayer(ServerActiveObject *player, ServerActiveObject *clicker); s32 on_player_hpchange(ServerActiveObject *player, s32 hp_change, const PlayerHPChangeReason &reason); diff --git a/src/tool.cpp b/src/tool.cpp index b0749286d..075c6b3c5 100644 --- a/src/tool.cpp +++ b/src/tool.cpp @@ -306,7 +306,7 @@ HitParams getHitParams(const ItemGroupList &armor_groups, const ToolCapabilities *tp, float time_from_last_punch, u16 initial_wear) { - s16 damage = 0; + s32 damage = 0; float result_wear = 0.0f; float punch_interval_multiplier = rangelim(time_from_last_punch / tp->full_punch_interval, 0.0f, 1.0f); @@ -320,6 +320,8 @@ HitParams getHitParams(const ItemGroupList &armor_groups, result_wear = calculateResultWear(tp->punch_attack_uses, initial_wear); result_wear *= punch_interval_multiplier; } + // Keep damage in sane bounds for simplicity + damage = rangelim(damage, -U16_MAX, U16_MAX); u32 wear_i = (u32) result_wear; return {damage, wear_i}; diff --git a/src/tool.h b/src/tool.h index 0e3388485..8409f59af 100644 --- a/src/tool.h +++ b/src/tool.h @@ -106,11 +106,11 @@ DigParams getDigParams(const ItemGroupList &groups, struct HitParams { - s16 hp; + s32 hp; // Caused wear u32 wear; // u32 because wear could be 65536 (single-use weapon) - HitParams(s16 hp_ = 0, u32 wear_ = 0): + HitParams(s32 hp_ = 0, u32 wear_ = 0): hp(hp_), wear(wear_) {} From bf22569019749e421e8ffe0a73cff988a9a9c846 Mon Sep 17 00:00:00 2001 From: Jude Melton-Houghton Date: Fri, 7 Jan 2022 13:28:49 -0500 Subject: [PATCH 156/412] Use a database for mod storage (#11763) --- doc/minetest.6 | 4 + src/client/client.cpp | 33 ++- src/client/client.h | 3 +- src/content/mods.cpp | 85 ++------ src/content/mods.h | 10 +- src/content/subgames.cpp | 1 + src/database/database-dummy.cpp | 38 ++++ src/database/database-dummy.h | 9 +- src/database/database-files.cpp | 136 +++++++++++- src/database/database-files.h | 26 +++ src/database/database-sqlite3.cpp | 105 +++++++++ src/database/database-sqlite3.h | 25 +++ src/database/database.h | 13 ++ src/gamedef.h | 3 +- src/main.cpp | 5 + src/script/lua_api/l_storage.cpp | 18 +- src/server.cpp | 140 ++++++++++-- src/server.h | 11 +- src/unittest/CMakeLists.txt | 1 + src/unittest/test.cpp | 6 +- src/unittest/test_modmetadatadatabase.cpp | 253 ++++++++++++++++++++++ 21 files changed, 798 insertions(+), 127 deletions(-) create mode 100644 src/unittest/test_modmetadatadatabase.cpp diff --git a/doc/minetest.6 b/doc/minetest.6 index 42ed1a45f..6a3601f80 100644 --- a/doc/minetest.6 +++ b/doc/minetest.6 @@ -112,6 +112,10 @@ leveldb, and files. Migrate from current players backend to another. Possible values are sqlite3, leveldb, postgresql, dummy, and files. .TP +.B \-\-migrate-mod-storage +Migrate from current mod storage backend to another. Possible values are +sqlite3, dummy, and files. +.TP .B \-\-terminal Display an interactive terminal over ncurses during execution. diff --git a/src/client/client.cpp b/src/client/client.cpp index 6e4a90a79..2caa953e4 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -128,6 +128,11 @@ Client::Client( // Add local player m_env.setLocalPlayer(new LocalPlayer(this, playername)); + // Make the mod storage database and begin the save for later + m_mod_storage_database = + new ModMetadataDatabaseSQLite3(porting::path_user + DIR_DELIM + "client"); + m_mod_storage_database->beginSave(); + if (g_settings->getBool("enable_minimap")) { m_minimap = new Minimap(this); } @@ -305,6 +310,11 @@ Client::~Client() m_minimap = nullptr; delete m_media_downloader; + + // Write the changes and delete + if (m_mod_storage_database) + m_mod_storage_database->endSave(); + delete m_mod_storage_database; } void Client::connect(Address address, bool is_local_server) @@ -641,19 +651,12 @@ void Client::step(float dtime) } } + // Write changes to the mod storage m_mod_storage_save_timer -= dtime; if (m_mod_storage_save_timer <= 0.0f) { m_mod_storage_save_timer = g_settings->getFloat("server_map_save_interval"); - int n = 0; - for (std::unordered_map::const_iterator - it = m_mod_storages.begin(); it != m_mod_storages.end(); ++it) { - if (it->second->isModified()) { - it->second->save(getModStoragePath()); - n++; - } - } - if (n > 0) - infostream << "Saved " << n << " modified mod storages." << std::endl; + m_mod_storage_database->endSave(); + m_mod_storage_database->beginSave(); } // Write server map @@ -1960,16 +1963,8 @@ void Client::unregisterModStorage(const std::string &name) { std::unordered_map::const_iterator it = m_mod_storages.find(name); - if (it != m_mod_storages.end()) { - // Save unconditionaly on unregistration - it->second->save(getModStoragePath()); + if (it != m_mod_storages.end()) m_mod_storages.erase(name); - } -} - -std::string Client::getModStoragePath() const -{ - return porting::path_user + DIR_DELIM + "client" + DIR_DELIM + "mod_storage"; } /* diff --git a/src/client/client.h b/src/client/client.h index bae40f389..694cd7d1b 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -380,8 +380,8 @@ public: { return checkPrivilege(priv); } virtual scene::IAnimatedMesh* getMesh(const std::string &filename, bool cache = false); const std::string* getModFile(std::string filename); + ModMetadataDatabase *getModStorageDatabase() override { return m_mod_storage_database; } - std::string getModStoragePath() const override; bool registerModStorage(ModMetadata *meta) override; void unregisterModStorage(const std::string &name) override; @@ -590,6 +590,7 @@ private: // Client modding ClientScripting *m_script = nullptr; std::unordered_map m_mod_storages; + ModMetadataDatabase *m_mod_storage_database = nullptr; float m_mod_storage_save_timer = 10.0f; std::vector m_mods; StringMap m_mod_vfs; diff --git a/src/content/mods.cpp b/src/content/mods.cpp index 6f088a5b3..455506967 100644 --- a/src/content/mods.cpp +++ b/src/content/mods.cpp @@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include "content/mods.h" +#include "database/database.h" #include "filesys.h" #include "log.h" #include "content/subgames.h" @@ -422,83 +423,29 @@ ClientModConfiguration::ClientModConfiguration(const std::string &path) : } #endif -ModMetadata::ModMetadata(const std::string &mod_name) : m_mod_name(mod_name) +ModMetadata::ModMetadata(const std::string &mod_name, ModMetadataDatabase *database): + m_mod_name(mod_name), m_database(database) { + m_database->getModEntries(m_mod_name, &m_stringvars); } void ModMetadata::clear() { + for (const auto &pair : m_stringvars) { + m_database->removeModEntry(m_mod_name, pair.first); + } Metadata::clear(); - m_modified = true; -} - -bool ModMetadata::save(const std::string &root_path) -{ - Json::Value json; - for (StringMap::const_iterator it = m_stringvars.begin(); - it != m_stringvars.end(); ++it) { - json[it->first] = it->second; - } - - if (!fs::PathExists(root_path)) { - if (!fs::CreateAllDirs(root_path)) { - errorstream << "ModMetadata[" << m_mod_name - << "]: Unable to save. '" << root_path - << "' tree cannot be created." << std::endl; - return false; - } - } else if (!fs::IsDir(root_path)) { - errorstream << "ModMetadata[" << m_mod_name << "]: Unable to save. '" - << root_path << "' is not a directory." << std::endl; - return false; - } - - bool w_ok = fs::safeWriteToFile( - root_path + DIR_DELIM + m_mod_name, fastWriteJson(json)); - - if (w_ok) { - m_modified = false; - } else { - errorstream << "ModMetadata[" << m_mod_name << "]: failed write file." - << std::endl; - } - return w_ok; -} - -bool ModMetadata::load(const std::string &root_path) -{ - m_stringvars.clear(); - - std::ifstream is((root_path + DIR_DELIM + m_mod_name).c_str(), - std::ios_base::binary); - if (!is.good()) { - return false; - } - - Json::Value root; - Json::CharReaderBuilder builder; - builder.settings_["collectComments"] = false; - std::string errs; - - if (!Json::parseFromStream(builder, is, &root, &errs)) { - errorstream << "ModMetadata[" << m_mod_name - << "]: failed read data " - "(Json decoding failure). Message: " - << errs << std::endl; - return false; - } - - const Json::Value::Members attr_list = root.getMemberNames(); - for (const auto &it : attr_list) { - Json::Value attr_value = root[it]; - m_stringvars[it] = attr_value.asString(); - } - - return true; } bool ModMetadata::setString(const std::string &name, const std::string &var) { - m_modified = Metadata::setString(name, var); - return m_modified; + if (Metadata::setString(name, var)) { + if (var.empty()) { + m_database->removeModEntry(m_mod_name, name); + } else { + m_database->setModEntry(m_mod_name, name, var); + } + return true; + } + return false; } diff --git a/src/content/mods.h b/src/content/mods.h index b56a97edb..dd3b6e0e6 100644 --- a/src/content/mods.h +++ b/src/content/mods.h @@ -31,6 +31,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "config.h" #include "metadata.h" +class ModMetadataDatabase; + #define MODNAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyz0123456789_" struct ModSpec @@ -149,20 +151,16 @@ class ModMetadata : public Metadata { public: ModMetadata() = delete; - ModMetadata(const std::string &mod_name); + ModMetadata(const std::string &mod_name, ModMetadataDatabase *database); ~ModMetadata() = default; virtual void clear(); - bool save(const std::string &root_path); - bool load(const std::string &root_path); - - bool isModified() const { return m_modified; } const std::string &getModName() const { return m_mod_name; } virtual bool setString(const std::string &name, const std::string &var); private: std::string m_mod_name; - bool m_modified = false; + ModMetadataDatabase *m_database; }; diff --git a/src/content/subgames.cpp b/src/content/subgames.cpp index 30447c838..e834f40cd 100644 --- a/src/content/subgames.cpp +++ b/src/content/subgames.cpp @@ -358,6 +358,7 @@ void loadGameConfAndInitWorld(const std::string &path, const std::string &name, conf.set("backend", "sqlite3"); conf.set("player_backend", "sqlite3"); conf.set("auth_backend", "sqlite3"); + conf.set("mod_storage_backend", "sqlite3"); conf.setBool("creative_mode", g_settings->getBool("creative_mode")); conf.setBool("enable_damage", g_settings->getBool("enable_damage")); diff --git a/src/database/database-dummy.cpp b/src/database/database-dummy.cpp index b56f341c5..629b2fb04 100644 --- a/src/database/database-dummy.cpp +++ b/src/database/database-dummy.cpp @@ -80,3 +80,41 @@ void Database_Dummy::listPlayers(std::vector &res) res.emplace_back(player); } } + +bool Database_Dummy::getModEntries(const std::string &modname, StringMap *storage) +{ + const auto mod_pair = m_mod_meta_database.find(modname); + if (mod_pair != m_mod_meta_database.cend()) { + for (const auto &pair : mod_pair->second) { + (*storage)[pair.first] = pair.second; + } + } + return true; +} + +bool Database_Dummy::setModEntry(const std::string &modname, + const std::string &key, const std::string &value) +{ + auto mod_pair = m_mod_meta_database.find(modname); + if (mod_pair == m_mod_meta_database.end()) { + m_mod_meta_database[modname] = StringMap({{key, value}}); + } else { + mod_pair->second[key] = value; + } + return true; +} + +bool Database_Dummy::removeModEntry(const std::string &modname, const std::string &key) +{ + auto mod_pair = m_mod_meta_database.find(modname); + if (mod_pair != m_mod_meta_database.end()) + return mod_pair->second.erase(key) > 0; + return false; +} + +void Database_Dummy::listMods(std::vector *res) +{ + for (const auto &pair : m_mod_meta_database) { + res->push_back(pair.first); + } +} diff --git a/src/database/database-dummy.h b/src/database/database-dummy.h index b69919f84..44b9e8d68 100644 --- a/src/database/database-dummy.h +++ b/src/database/database-dummy.h @@ -24,7 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "database.h" #include "irrlichttypes.h" -class Database_Dummy : public MapDatabase, public PlayerDatabase +class Database_Dummy : public MapDatabase, public PlayerDatabase, public ModMetadataDatabase { public: bool saveBlock(const v3s16 &pos, const std::string &data); @@ -37,10 +37,17 @@ public: bool removePlayer(const std::string &name); void listPlayers(std::vector &res); + bool getModEntries(const std::string &modname, StringMap *storage); + bool setModEntry(const std::string &modname, + const std::string &key, const std::string &value); + bool removeModEntry(const std::string &modname, const std::string &key); + void listMods(std::vector *res); + void beginSave() {} void endSave() {} private: std::map m_database; std::set m_player_database; + std::unordered_map m_mod_meta_database; }; diff --git a/src/database/database-files.cpp b/src/database/database-files.cpp index d9d113b4e..9021ae61b 100644 --- a/src/database/database-files.cpp +++ b/src/database/database-files.cpp @@ -18,7 +18,6 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include -#include #include "convert_json.h" #include "database-files.h" #include "remoteplayer.h" @@ -376,3 +375,138 @@ bool AuthDatabaseFiles::writeAuthFile() } return true; } + +ModMetadataDatabaseFiles::ModMetadataDatabaseFiles(const std::string &savedir): + m_storage_dir(savedir + DIR_DELIM + "mod_storage") +{ +} + +bool ModMetadataDatabaseFiles::getModEntries(const std::string &modname, StringMap *storage) +{ + Json::Value *meta = getOrCreateJson(modname); + if (!meta) + return false; + + const Json::Value::Members attr_list = meta->getMemberNames(); + for (const auto &it : attr_list) { + Json::Value attr_value = (*meta)[it]; + (*storage)[it] = attr_value.asString(); + } + + return true; +} + +bool ModMetadataDatabaseFiles::setModEntry(const std::string &modname, + const std::string &key, const std::string &value) +{ + Json::Value *meta = getOrCreateJson(modname); + if (!meta) + return false; + + (*meta)[key] = Json::Value(value); + m_modified.insert(modname); + + return true; +} + +bool ModMetadataDatabaseFiles::removeModEntry(const std::string &modname, + const std::string &key) +{ + Json::Value *meta = getOrCreateJson(modname); + if (!meta) + return false; + + Json::Value removed; + if (meta->removeMember(key, &removed)) { + m_modified.insert(modname); + return true; + } + return false; +} + +void ModMetadataDatabaseFiles::beginSave() +{ +} + +void ModMetadataDatabaseFiles::endSave() +{ + if (!fs::CreateAllDirs(m_storage_dir)) { + errorstream << "ModMetadataDatabaseFiles: Unable to save. '" << m_storage_dir + << "' tree cannot be created." << std::endl; + return; + } + + for (auto it = m_modified.begin(); it != m_modified.end();) { + const std::string &modname = *it; + + if (!fs::PathExists(m_storage_dir)) { + if (!fs::CreateAllDirs(m_storage_dir)) { + errorstream << "ModMetadataDatabaseFiles[" << modname + << "]: Unable to save. '" << m_storage_dir + << "' tree cannot be created." << std::endl; + ++it; + continue; + } + } else if (!fs::IsDir(m_storage_dir)) { + errorstream << "ModMetadataDatabaseFiles[" << modname << "]: Unable to save. '" + << m_storage_dir << "' is not a directory." << std::endl; + ++it; + continue; + } + + const Json::Value &json = m_mod_meta[modname]; + + if (!fs::safeWriteToFile(m_storage_dir + DIR_DELIM + modname, fastWriteJson(json))) { + errorstream << "ModMetadataDatabaseFiles[" << modname + << "]: failed write file." << std::endl; + ++it; + continue; + } + + it = m_modified.erase(it); + } +} + +void ModMetadataDatabaseFiles::listMods(std::vector *res) +{ + // List in-memory metadata first. + for (const auto &pair : m_mod_meta) { + res->push_back(pair.first); + } + + // List other metadata present in the filesystem. + for (const auto &entry : fs::GetDirListing(m_storage_dir)) { + if (!entry.dir && m_mod_meta.count(entry.name) == 0) + res->push_back(entry.name); + } +} + +Json::Value *ModMetadataDatabaseFiles::getOrCreateJson(const std::string &modname) +{ + auto found = m_mod_meta.find(modname); + if (found == m_mod_meta.end()) { + fs::CreateAllDirs(m_storage_dir); + + Json::Value meta(Json::objectValue); + + std::string path = m_storage_dir + DIR_DELIM + modname; + if (fs::PathExists(path)) { + std::ifstream is(path.c_str(), std::ios_base::binary); + + Json::CharReaderBuilder builder; + builder.settings_["collectComments"] = false; + std::string errs; + + if (!Json::parseFromStream(builder, is, &meta, &errs)) { + errorstream << "ModMetadataDatabaseFiles[" << modname + << "]: failed read data (Json decoding failure). Message: " + << errs << std::endl; + return nullptr; + } + } + + return &(m_mod_meta[modname] = meta); + } else { + return &found->second; + } +} diff --git a/src/database/database-files.h b/src/database/database-files.h index e647a2e24..962e4d7bb 100644 --- a/src/database/database-files.h +++ b/src/database/database-files.h @@ -25,6 +25,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "database.h" #include +#include +#include class PlayerDatabaseFiles : public PlayerDatabase { @@ -69,3 +71,27 @@ private: bool readAuthFile(); bool writeAuthFile(); }; + +class ModMetadataDatabaseFiles : public ModMetadataDatabase +{ +public: + ModMetadataDatabaseFiles(const std::string &savedir); + virtual ~ModMetadataDatabaseFiles() = default; + + virtual bool getModEntries(const std::string &modname, StringMap *storage); + virtual bool setModEntry(const std::string &modname, + const std::string &key, const std::string &value); + virtual bool removeModEntry(const std::string &modname, const std::string &key); + virtual void listMods(std::vector *res); + + virtual void beginSave(); + virtual void endSave(); + +private: + Json::Value *getOrCreateJson(const std::string &modname); + bool writeJson(const std::string &modname, const Json::Value &json); + + std::string m_storage_dir; + std::unordered_map m_mod_meta; + std::unordered_set m_modified; +}; diff --git a/src/database/database-sqlite3.cpp b/src/database/database-sqlite3.cpp index 898acc265..e9442118e 100644 --- a/src/database/database-sqlite3.cpp +++ b/src/database/database-sqlite3.cpp @@ -779,3 +779,108 @@ void AuthDatabaseSQLite3::writePrivileges(const AuthEntry &authEntry) sqlite3_reset(m_stmt_write_privs); } } + +ModMetadataDatabaseSQLite3::ModMetadataDatabaseSQLite3(const std::string &savedir): + Database_SQLite3(savedir, "mod_storage"), ModMetadataDatabase() +{ +} + +ModMetadataDatabaseSQLite3::~ModMetadataDatabaseSQLite3() +{ + FINALIZE_STATEMENT(m_stmt_remove) + FINALIZE_STATEMENT(m_stmt_set) + FINALIZE_STATEMENT(m_stmt_get) +} + +void ModMetadataDatabaseSQLite3::createDatabase() +{ + assert(m_database); // Pre-condition + + SQLOK(sqlite3_exec(m_database, + "CREATE TABLE IF NOT EXISTS `entries` (\n" + " `modname` TEXT NOT NULL,\n" + " `key` BLOB NOT NULL,\n" + " `value` BLOB NOT NULL,\n" + " PRIMARY KEY (`modname`, `key`)\n" + ");\n", + NULL, NULL, NULL), + "Failed to create database table"); +} + +void ModMetadataDatabaseSQLite3::initStatements() +{ + PREPARE_STATEMENT(get, "SELECT `key`, `value` FROM `entries` WHERE `modname` = ?"); + PREPARE_STATEMENT(set, + "REPLACE INTO `entries` (`modname`, `key`, `value`) VALUES (?, ?, ?)"); + PREPARE_STATEMENT(remove, "DELETE FROM `entries` WHERE `modname` = ? AND `key` = ?"); +} + +bool ModMetadataDatabaseSQLite3::getModEntries(const std::string &modname, StringMap *storage) +{ + verifyDatabase(); + + str_to_sqlite(m_stmt_get, 1, modname); + while (sqlite3_step(m_stmt_get) == SQLITE_ROW) { + const char *key_data = (const char *) sqlite3_column_blob(m_stmt_get, 0); + size_t key_len = sqlite3_column_bytes(m_stmt_get, 0); + const char *value_data = (const char *) sqlite3_column_blob(m_stmt_get, 1); + size_t value_len = sqlite3_column_bytes(m_stmt_get, 1); + (*storage)[std::string(key_data, key_len)] = std::string(value_data, value_len); + } + sqlite3_vrfy(sqlite3_errcode(m_database), SQLITE_DONE); + + sqlite3_reset(m_stmt_get); + + return true; +} + +bool ModMetadataDatabaseSQLite3::setModEntry(const std::string &modname, + const std::string &key, const std::string &value) +{ + verifyDatabase(); + + str_to_sqlite(m_stmt_set, 1, modname); + SQLOK(sqlite3_bind_blob(m_stmt_set, 2, key.data(), key.size(), NULL), + "Internal error: failed to bind query at " __FILE__ ":" TOSTRING(__LINE__)); + SQLOK(sqlite3_bind_blob(m_stmt_set, 3, value.data(), value.size(), NULL), + "Internal error: failed to bind query at " __FILE__ ":" TOSTRING(__LINE__)); + SQLRES(sqlite3_step(m_stmt_set), SQLITE_DONE, "Failed to set mod entry") + + sqlite3_reset(m_stmt_set); + + return true; +} + +bool ModMetadataDatabaseSQLite3::removeModEntry(const std::string &modname, + const std::string &key) +{ + verifyDatabase(); + + str_to_sqlite(m_stmt_remove, 1, modname); + SQLOK(sqlite3_bind_blob(m_stmt_remove, 2, key.data(), key.size(), NULL), + "Internal error: failed to bind query at " __FILE__ ":" TOSTRING(__LINE__)); + sqlite3_vrfy(sqlite3_step(m_stmt_remove), SQLITE_DONE); + int changes = sqlite3_changes(m_database); + + sqlite3_reset(m_stmt_remove); + + return changes > 0; +} + +void ModMetadataDatabaseSQLite3::listMods(std::vector *res) +{ + verifyDatabase(); + + char *errmsg; + int status = sqlite3_exec(m_database, + "SELECT `modname` FROM `entries` GROUP BY `modname`;", + [](void *res_vp, int n_col, char **cols, char **col_names) -> int { + ((decltype(res)) res_vp)->emplace_back(cols[0]); + return 0; + }, (void *) res, &errmsg); + if (status != SQLITE_OK) { + DatabaseException e(std::string("Error trying to list mods with metadata: ") + errmsg); + sqlite3_free(errmsg); + throw e; + } +} diff --git a/src/database/database-sqlite3.h b/src/database/database-sqlite3.h index d7202a918..5e3d7c96c 100644 --- a/src/database/database-sqlite3.h +++ b/src/database/database-sqlite3.h @@ -232,3 +232,28 @@ private: sqlite3_stmt *m_stmt_delete_privs = nullptr; sqlite3_stmt *m_stmt_last_insert_rowid = nullptr; }; + +class ModMetadataDatabaseSQLite3 : private Database_SQLite3, public ModMetadataDatabase +{ +public: + ModMetadataDatabaseSQLite3(const std::string &savedir); + virtual ~ModMetadataDatabaseSQLite3(); + + virtual bool getModEntries(const std::string &modname, StringMap *storage); + virtual bool setModEntry(const std::string &modname, + const std::string &key, const std::string &value); + virtual bool removeModEntry(const std::string &modname, const std::string &key); + virtual void listMods(std::vector *res); + + virtual void beginSave() { Database_SQLite3::beginSave(); } + virtual void endSave() { Database_SQLite3::endSave(); } + +protected: + virtual void createDatabase(); + virtual void initStatements(); + +private: + sqlite3_stmt *m_stmt_get = nullptr; + sqlite3_stmt *m_stmt_set = nullptr; + sqlite3_stmt *m_stmt_remove = nullptr; +}; diff --git a/src/database/database.h b/src/database/database.h index b7d551935..fbb5befea 100644 --- a/src/database/database.h +++ b/src/database/database.h @@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irr_v3d.h" #include "irrlichttypes.h" #include "util/basic_macros.h" +#include "util/string.h" class Database { @@ -84,3 +85,15 @@ public: virtual void listNames(std::vector &res) = 0; virtual void reload() = 0; }; + +class ModMetadataDatabase : public Database +{ +public: + virtual ~ModMetadataDatabase() = default; + + virtual bool getModEntries(const std::string &modname, StringMap *storage) = 0; + virtual bool setModEntry(const std::string &modname, + const std::string &key, const std::string &value) = 0; + virtual bool removeModEntry(const std::string &modname, const std::string &key) = 0; + virtual void listMods(std::vector *res) = 0; +}; diff --git a/src/gamedef.h b/src/gamedef.h index bc0ee14c3..8a9246da2 100644 --- a/src/gamedef.h +++ b/src/gamedef.h @@ -33,6 +33,7 @@ class EmergeManager; class Camera; class ModChannel; class ModMetadata; +class ModMetadataDatabase; namespace irr { namespace scene { class IAnimatedMesh; @@ -70,9 +71,9 @@ public: virtual const std::vector &getMods() const = 0; virtual const ModSpec* getModSpec(const std::string &modname) const = 0; virtual std::string getWorldPath() const { return ""; } - virtual std::string getModStoragePath() const = 0; virtual bool registerModStorage(ModMetadata *storage) = 0; virtual void unregisterModStorage(const std::string &name) = 0; + virtual ModMetadataDatabase *getModStorageDatabase() = 0; virtual bool joinModChannel(const std::string &channel) = 0; virtual bool leaveModChannel(const std::string &channel) = 0; diff --git a/src/main.cpp b/src/main.cpp index 1044b327a..ca95ef874 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -299,6 +299,8 @@ static void set_allowed_options(OptionList *allowed_options) _("Migrate from current players backend to another (Only works when using minetestserver or with --server)")))); allowed_options->insert(std::make_pair("migrate-auth", ValueSpec(VALUETYPE_STRING, _("Migrate from current auth backend to another (Only works when using minetestserver or with --server)")))); + allowed_options->insert(std::make_pair("migrate-mod-storage", ValueSpec(VALUETYPE_STRING, + _("Migrate from current mod storage backend to another (Only works when using minetestserver or with --server)")))); allowed_options->insert(std::make_pair("terminal", ValueSpec(VALUETYPE_FLAG, _("Feature an interactive terminal (Only works when using minetestserver or with --server)")))); allowed_options->insert(std::make_pair("recompress", ValueSpec(VALUETYPE_FLAG, @@ -886,6 +888,9 @@ static bool run_dedicated_server(const GameParams &game_params, const Settings & if (cmd_args.exists("migrate-auth")) return ServerEnvironment::migrateAuthDatabase(game_params, cmd_args); + if (cmd_args.exists("migrate-mod-storage")) + return Server::migrateModStorageDatabase(game_params, cmd_args); + if (cmd_args.getFlag("recompress")) return recompress_map_database(game_params, cmd_args, bind_addr); diff --git a/src/script/lua_api/l_storage.cpp b/src/script/lua_api/l_storage.cpp index 978b315d5..b8f4347a8 100644 --- a/src/script/lua_api/l_storage.cpp +++ b/src/script/lua_api/l_storage.cpp @@ -32,19 +32,23 @@ int ModApiStorage::l_get_mod_storage(lua_State *L) std::string mod_name = readParam(L, -1); - ModMetadata *store = new ModMetadata(mod_name); + ModMetadata *store = nullptr; + if (IGameDef *gamedef = getGameDef(L)) { - store->load(gamedef->getModStoragePath()); - gamedef->registerModStorage(store); + store = new ModMetadata(mod_name, gamedef->getModStorageDatabase()); + if (gamedef->registerModStorage(store)) { + StorageRef::create(L, store); + int object = lua_gettop(L); + lua_pushvalue(L, object); + return 1; + } } else { - delete store; assert(false); // this should not happen } - StorageRef::create(L, store); - int object = lua_gettop(L); + delete store; - lua_pushvalue(L, object); + lua_pushnil(L); return 1; } diff --git a/src/server.cpp b/src/server.cpp index a910185b9..6cf790de1 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -66,6 +66,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "server/player_sao.h" #include "server/serverinventorymgr.h" #include "translation.h" +#include "database/database-sqlite3.h" +#include "database/database-files.h" +#include "database/database-dummy.h" +#include "gameparams.h" class ClientNotFoundException : public BaseException { @@ -344,10 +348,15 @@ Server::~Server() delete m_thread; } + // Write any changes before deletion. + if (m_mod_storage_database) + m_mod_storage_database->endSave(); + // Delete things in the reverse order of creation delete m_emerge; delete m_env; delete m_rollback; + delete m_mod_storage_database; delete m_banmanager; delete m_itemdef; delete m_nodedef; @@ -393,6 +402,10 @@ void Server::init() std::string ban_path = m_path_world + DIR_DELIM "ipban.txt"; m_banmanager = new BanManager(ban_path); + // Create mod storage database and begin a save for later + m_mod_storage_database = openModStorageDatabase(m_path_world); + m_mod_storage_database->beginSave(); + m_modmgr = std::unique_ptr(new ServerModManager(m_path_world)); std::vector unsatisfied_mods = m_modmgr->getUnsatisfiedMods(); // complain about mods with unsatisfied dependencies @@ -733,20 +746,12 @@ void Server::AsyncRunStep(bool initial_step) } m_clients.unlock(); - // Save mod storages if modified + // Write changes to the mod storage m_mod_storage_save_timer -= dtime; if (m_mod_storage_save_timer <= 0.0f) { m_mod_storage_save_timer = g_settings->getFloat("server_map_save_interval"); - int n = 0; - for (std::unordered_map::const_iterator - it = m_mod_storages.begin(); it != m_mod_storages.end(); ++it) { - if (it->second->isModified()) { - it->second->save(getModStoragePath()); - n++; - } - } - if (n > 0) - infostream << "Saved " << n << " modified mod storages." << std::endl; + m_mod_storage_database->endSave(); + m_mod_storage_database->beginSave(); } } @@ -3689,11 +3694,6 @@ std::string Server::getBuiltinLuaPath() return porting::path_share + DIR_DELIM + "builtin"; } -std::string Server::getModStoragePath() const -{ - return m_path_world + DIR_DELIM + "mod_storage"; -} - v3f Server::findSpawnPos() { ServerMap &map = m_env->getServerMap(); @@ -3857,11 +3857,8 @@ bool Server::registerModStorage(ModMetadata *storage) void Server::unregisterModStorage(const std::string &name) { std::unordered_map::const_iterator it = m_mod_storages.find(name); - if (it != m_mod_storages.end()) { - // Save unconditionaly on unregistration - it->second->save(getModStoragePath()); + if (it != m_mod_storages.end()) m_mod_storages.erase(name); - } } void dedicated_server_loop(Server &server, bool &kill) @@ -3999,3 +3996,106 @@ Translations *Server::getTranslationLanguage(const std::string &lang_code) return translations; } + +ModMetadataDatabase *Server::openModStorageDatabase(const std::string &world_path) +{ + std::string world_mt_path = world_path + DIR_DELIM + "world.mt"; + Settings world_mt; + if (!world_mt.readConfigFile(world_mt_path.c_str())) + throw BaseException("Cannot read world.mt!"); + + std::string backend = world_mt.exists("mod_storage_backend") ? + world_mt.get("mod_storage_backend") : "files"; + if (backend == "files") + warningstream << "/!\\ You are using the old mod storage files backend. " + << "This backend is deprecated and may be removed in a future release /!\\" + << std::endl << "Switching to SQLite3 is advised, " + << "please read http://wiki.minetest.net/Database_backends." << std::endl; + + return openModStorageDatabase(backend, world_path, world_mt); +} + +ModMetadataDatabase *Server::openModStorageDatabase(const std::string &backend, + const std::string &world_path, const Settings &world_mt) +{ + if (backend == "sqlite3") + return new ModMetadataDatabaseSQLite3(world_path); + + if (backend == "files") + return new ModMetadataDatabaseFiles(world_path); + + if (backend == "dummy") + return new Database_Dummy(); + + throw BaseException("Mod storage database backend " + backend + " not supported"); +} + +bool Server::migrateModStorageDatabase(const GameParams &game_params, const Settings &cmd_args) +{ + std::string migrate_to = cmd_args.get("migrate-mod-storage"); + Settings world_mt; + std::string world_mt_path = game_params.world_path + DIR_DELIM + "world.mt"; + if (!world_mt.readConfigFile(world_mt_path.c_str())) { + errorstream << "Cannot read world.mt!" << std::endl; + return false; + } + + std::string backend = world_mt.exists("mod_storage_backend") ? + world_mt.get("mod_storage_backend") : "files"; + if (backend == migrate_to) { + errorstream << "Cannot migrate: new backend is same" + << " as the old one" << std::endl; + return false; + } + + ModMetadataDatabase *srcdb = nullptr; + ModMetadataDatabase *dstdb = nullptr; + + bool succeeded = false; + + try { + srcdb = Server::openModStorageDatabase(backend, game_params.world_path, world_mt); + dstdb = Server::openModStorageDatabase(migrate_to, game_params.world_path, world_mt); + + dstdb->beginSave(); + + std::vector mod_list; + srcdb->listMods(&mod_list); + for (const std::string &modname : mod_list) { + StringMap meta; + srcdb->getModEntries(modname, &meta); + for (const auto &pair : meta) { + dstdb->setModEntry(modname, pair.first, pair.second); + } + } + + dstdb->endSave(); + + succeeded = true; + + actionstream << "Successfully migrated the metadata of " + << mod_list.size() << " mods" << std::endl; + world_mt.set("mod_storage_backend", migrate_to); + if (!world_mt.updateConfigFile(world_mt_path.c_str())) + errorstream << "Failed to update world.mt!" << std::endl; + else + actionstream << "world.mt updated" << std::endl; + + } catch (BaseException &e) { + errorstream << "An error occurred during migration: " << e.what() << std::endl; + } + + delete srcdb; + delete dstdb; + + if (succeeded && backend == "files") { + // Back up files + const std::string storage_path = game_params.world_path + DIR_DELIM + "mod_storage"; + const std::string backup_path = game_params.world_path + DIR_DELIM + "mod_storage.bak"; + if (!fs::Rename(storage_path, backup_path)) + warningstream << "After migration, " << storage_path + << " could not be renamed to " << backup_path << std::endl; + } + + return succeeded; +} diff --git a/src/server.h b/src/server.h index c5db0fdfb..12158feb7 100644 --- a/src/server.h +++ b/src/server.h @@ -283,6 +283,7 @@ public: virtual u16 allocateUnknownNodeId(const std::string &name); IRollbackManager *getRollbackManager() { return m_rollback; } virtual EmergeManager *getEmergeManager() { return m_emerge; } + virtual ModMetadataDatabase *getModStorageDatabase() { return m_mod_storage_database; } IWritableItemDefManager* getWritableItemDefManager(); NodeDefManager* getWritableNodeDefManager(); @@ -293,7 +294,6 @@ public: void getModNames(std::vector &modlist); std::string getBuiltinLuaPath(); virtual std::string getWorldPath() const { return m_path_world; } - virtual std::string getModStoragePath() const; inline bool isSingleplayer() { return m_simple_singleplayer_mode; } @@ -377,6 +377,14 @@ public: // Get or load translations for a language Translations *getTranslationLanguage(const std::string &lang_code); + static ModMetadataDatabase *openModStorageDatabase(const std::string &world_path); + + static ModMetadataDatabase *openModStorageDatabase(const std::string &backend, + const std::string &world_path, const Settings &world_mt); + + static bool migrateModStorageDatabase(const GameParams &game_params, + const Settings &cmd_args); + // Bind address Address m_bind_addr; @@ -678,6 +686,7 @@ private: s32 nextSoundId(); std::unordered_map m_mod_storages; + ModMetadataDatabase *m_mod_storage_database = nullptr; float m_mod_storage_save_timer = 10.0f; // CSM restrictions byteflag diff --git a/src/unittest/CMakeLists.txt b/src/unittest/CMakeLists.txt index 4d295e4ed..ce7921b55 100644 --- a/src/unittest/CMakeLists.txt +++ b/src/unittest/CMakeLists.txt @@ -14,6 +14,7 @@ set (UNITTEST_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/test_map_settings_manager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_mapnode.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_modchannels.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_modmetadatadatabase.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_nodedef.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_noderesolver.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_noise.cpp diff --git a/src/unittest/test.cpp b/src/unittest/test.cpp index af324e1b1..f223d567e 100644 --- a/src/unittest/test.cpp +++ b/src/unittest/test.cpp @@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "gamedef.h" #include "modchannels.h" #include "content/mods.h" +#include "database/database-dummy.h" #include "util/numeric.h" #include "porting.h" @@ -55,6 +56,7 @@ public: scene::ISceneManager *getSceneManager() { return m_scenemgr; } IRollbackManager *getRollbackManager() { return m_rollbackmgr; } EmergeManager *getEmergeManager() { return m_emergemgr; } + ModMetadataDatabase *getModStorageDatabase() { return m_mod_storage_database; } scene::IAnimatedMesh *getMesh(const std::string &filename) { return NULL; } bool checkLocalPrivilege(const std::string &priv) { return false; } @@ -68,7 +70,6 @@ public: return testmodspec; } virtual const ModSpec* getModSpec(const std::string &modname) const { return NULL; } - virtual std::string getModStoragePath() const { return "."; } virtual bool registerModStorage(ModMetadata *meta) { return true; } virtual void unregisterModStorage(const std::string &name) {} bool joinModChannel(const std::string &channel); @@ -89,11 +90,13 @@ private: scene::ISceneManager *m_scenemgr = nullptr; IRollbackManager *m_rollbackmgr = nullptr; EmergeManager *m_emergemgr = nullptr; + ModMetadataDatabase *m_mod_storage_database = nullptr; std::unique_ptr m_modchannel_mgr; }; TestGameDef::TestGameDef() : + m_mod_storage_database(new Database_Dummy()), m_modchannel_mgr(new ModChannelMgr()) { m_itemdef = createItemDefManager(); @@ -107,6 +110,7 @@ TestGameDef::~TestGameDef() { delete m_itemdef; delete m_nodedef; + delete m_mod_storage_database; } diff --git a/src/unittest/test_modmetadatadatabase.cpp b/src/unittest/test_modmetadatadatabase.cpp new file mode 100644 index 000000000..be97fae5e --- /dev/null +++ b/src/unittest/test_modmetadatadatabase.cpp @@ -0,0 +1,253 @@ +/* +Minetest +Copyright (C) 2018 bendeutsch, Ben Deutsch +Copyright (C) 2021 TurkeyMcMac, Jude Melton-Houghton + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +// This file is an edited copy of test_authdatabase.cpp + +#include "test.h" + +#include +#include "database/database-files.h" +#include "database/database-sqlite3.h" +#include "filesys.h" + +namespace +{ +// Anonymous namespace to create classes that are only +// visible to this file +// +// These are helpers that return a *ModMetadataDatabase and +// allow us to run the same tests on different databases and +// database acquisition strategies. + +class ModMetadataDatabaseProvider +{ +public: + virtual ~ModMetadataDatabaseProvider() = default; + virtual ModMetadataDatabase *getModMetadataDatabase() = 0; +}; + +class FixedProvider : public ModMetadataDatabaseProvider +{ +public: + FixedProvider(ModMetadataDatabase *mod_meta_db) : mod_meta_db(mod_meta_db){}; + virtual ~FixedProvider(){}; + virtual ModMetadataDatabase *getModMetadataDatabase() { return mod_meta_db; }; + +private: + ModMetadataDatabase *mod_meta_db; +}; + +class FilesProvider : public ModMetadataDatabaseProvider +{ +public: + FilesProvider(const std::string &dir) : dir(dir){}; + virtual ~FilesProvider() + { + if (mod_meta_db) + mod_meta_db->endSave(); + delete mod_meta_db; + } + virtual ModMetadataDatabase *getModMetadataDatabase() + { + if (mod_meta_db) + mod_meta_db->endSave(); + delete mod_meta_db; + mod_meta_db = new ModMetadataDatabaseFiles(dir); + mod_meta_db->beginSave(); + return mod_meta_db; + }; + +private: + std::string dir; + ModMetadataDatabase *mod_meta_db = nullptr; +}; + +class SQLite3Provider : public ModMetadataDatabaseProvider +{ +public: + SQLite3Provider(const std::string &dir) : dir(dir){}; + virtual ~SQLite3Provider() + { + if (mod_meta_db) + mod_meta_db->endSave(); + delete mod_meta_db; + } + virtual ModMetadataDatabase *getModMetadataDatabase() + { + if (mod_meta_db) + mod_meta_db->endSave(); + delete mod_meta_db; + mod_meta_db = new ModMetadataDatabaseSQLite3(dir); + mod_meta_db->beginSave(); + return mod_meta_db; + }; + +private: + std::string dir; + ModMetadataDatabase *mod_meta_db = nullptr; +}; +} + +class TestModMetadataDatabase : public TestBase +{ +public: + TestModMetadataDatabase() { TestManager::registerTestModule(this); } + const char *getName() { return "TestModMetadataDatabase"; } + + void runTests(IGameDef *gamedef); + void runTestsForCurrentDB(); + + void testRecallFail(); + void testCreate(); + void testRecall(); + void testChange(); + void testRecallChanged(); + void testListMods(); + void testRemove(); + +private: + ModMetadataDatabaseProvider *mod_meta_provider; +}; + +static TestModMetadataDatabase g_test_instance; + +void TestModMetadataDatabase::runTests(IGameDef *gamedef) +{ + // fixed directory, for persistence + thread_local const std::string test_dir = getTestTempDirectory(); + + // Each set of tests is run twice for each database type: + // one where we reuse the same ModMetadataDatabase object (to test local caching), + // and one where we create a new ModMetadataDatabase object for each call + // (to test actual persistence). + + rawstream << "-------- Files database (same object)" << std::endl; + + ModMetadataDatabase *mod_meta_db = new ModMetadataDatabaseFiles(test_dir); + mod_meta_provider = new FixedProvider(mod_meta_db); + + runTestsForCurrentDB(); + + delete mod_meta_db; + delete mod_meta_provider; + + // reset database + fs::RecursiveDelete(test_dir + DIR_DELIM + "mod_storage"); + + rawstream << "-------- Files database (new objects)" << std::endl; + + mod_meta_provider = new FilesProvider(test_dir); + + runTestsForCurrentDB(); + + delete mod_meta_provider; + + rawstream << "-------- SQLite3 database (same object)" << std::endl; + + mod_meta_db = new ModMetadataDatabaseSQLite3(test_dir); + mod_meta_provider = new FixedProvider(mod_meta_db); + + runTestsForCurrentDB(); + + delete mod_meta_db; + delete mod_meta_provider; + + // reset database + fs::DeleteSingleFileOrEmptyDirectory(test_dir + DIR_DELIM + "mod_storage.sqlite"); + + rawstream << "-------- SQLite3 database (new objects)" << std::endl; + + mod_meta_provider = new SQLite3Provider(test_dir); + + runTestsForCurrentDB(); + + delete mod_meta_provider; +} + +//////////////////////////////////////////////////////////////////////////////// + +void TestModMetadataDatabase::runTestsForCurrentDB() +{ + TEST(testRecallFail); + TEST(testCreate); + TEST(testRecall); + TEST(testChange); + TEST(testRecallChanged); + TEST(testListMods); + TEST(testRemove); + TEST(testRecallFail); +} + +void TestModMetadataDatabase::testRecallFail() +{ + ModMetadataDatabase *mod_meta_db = mod_meta_provider->getModMetadataDatabase(); + StringMap recalled; + mod_meta_db->getModEntries("mod1", &recalled); + UASSERT(recalled.empty()); +} + +void TestModMetadataDatabase::testCreate() +{ + ModMetadataDatabase *mod_meta_db = mod_meta_provider->getModMetadataDatabase(); + StringMap recalled; + UASSERT(mod_meta_db->setModEntry("mod1", "key1", "value1")); +} + +void TestModMetadataDatabase::testRecall() +{ + ModMetadataDatabase *mod_meta_db = mod_meta_provider->getModMetadataDatabase(); + StringMap recalled; + mod_meta_db->getModEntries("mod1", &recalled); + UASSERT(recalled.size() == 1); + UASSERT(recalled["key1"] == "value1"); +} + +void TestModMetadataDatabase::testChange() +{ + ModMetadataDatabase *mod_meta_db = mod_meta_provider->getModMetadataDatabase(); + StringMap recalled; + UASSERT(mod_meta_db->setModEntry("mod1", "key1", "value2")); +} + +void TestModMetadataDatabase::testRecallChanged() +{ + ModMetadataDatabase *mod_meta_db = mod_meta_provider->getModMetadataDatabase(); + StringMap recalled; + mod_meta_db->getModEntries("mod1", &recalled); + UASSERT(recalled.size() == 1); + UASSERT(recalled["key1"] == "value2"); +} + +void TestModMetadataDatabase::testListMods() +{ + ModMetadataDatabase *mod_meta_db = mod_meta_provider->getModMetadataDatabase(); + UASSERT(mod_meta_db->setModEntry("mod2", "key1", "value1")); + std::vector mod_list; + mod_meta_db->listMods(&mod_list); + UASSERT(mod_list.size() == 2); + UASSERT(std::find(mod_list.cbegin(), mod_list.cend(), "mod1") != mod_list.cend()); + UASSERT(std::find(mod_list.cbegin(), mod_list.cend(), "mod2") != mod_list.cend()); +} + +void TestModMetadataDatabase::testRemove() +{ + ModMetadataDatabase *mod_meta_db = mod_meta_provider->getModMetadataDatabase(); + UASSERT(mod_meta_db->removeModEntry("mod1", "key1")); +} From 76dbd0d2d04712dcad4f7c6afecb97fa8d662d6d Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sat, 8 Jan 2022 14:53:25 +0100 Subject: [PATCH 157/412] Fully remove bitmap font support (#11863) Freetype is now a build requirement. --- .github/workflows/build.yml | 23 ---- README.md | 18 ++-- android/native/jni/Android.mk | 1 - builtin/settingtypes.txt | 16 +-- doc/Doxyfile.in | 1 - fonts/mono_dejavu_sans_10.xml | Bin 257014 -> 0 bytes fonts/mono_dejavu_sans_100.png | Bin 56121 -> 0 bytes fonts/mono_dejavu_sans_11.xml | Bin 263644 -> 0 bytes fonts/mono_dejavu_sans_110.png | Bin 67613 -> 0 bytes fonts/mono_dejavu_sans_12.xml | Bin 268932 -> 0 bytes fonts/mono_dejavu_sans_120.png | Bin 73938 -> 0 bytes fonts/mono_dejavu_sans_14.xml | Bin 269188 -> 0 bytes fonts/mono_dejavu_sans_140.png | Bin 89073 -> 0 bytes fonts/mono_dejavu_sans_16.xml | Bin 275642 -> 0 bytes fonts/mono_dejavu_sans_160.png | Bin 101939 -> 0 bytes fonts/mono_dejavu_sans_18.xml | Bin 279962 -> 0 bytes fonts/mono_dejavu_sans_180.png | Bin 122274 -> 0 bytes fonts/mono_dejavu_sans_20.xml | Bin 282588 -> 0 bytes fonts/mono_dejavu_sans_200.png | Bin 138662 -> 0 bytes fonts/mono_dejavu_sans_22.xml | Bin 283950 -> 0 bytes fonts/mono_dejavu_sans_220.png | Bin 152844 -> 0 bytes fonts/mono_dejavu_sans_24.xml | Bin 286626 -> 0 bytes fonts/mono_dejavu_sans_240.png | Bin 170247 -> 0 bytes fonts/mono_dejavu_sans_26.xml | Bin 289710 -> 0 bytes fonts/mono_dejavu_sans_260.png | Bin 190156 -> 0 bytes fonts/mono_dejavu_sans_28.xml | Bin 292596 -> 0 bytes fonts/mono_dejavu_sans_280.png | Bin 200848 -> 0 bytes fonts/mono_dejavu_sans_4.xml | Bin 237740 -> 0 bytes fonts/mono_dejavu_sans_40.png | Bin 15668 -> 0 bytes fonts/mono_dejavu_sans_6.xml | Bin 245472 -> 0 bytes fonts/mono_dejavu_sans_60.png | Bin 29291 -> 0 bytes fonts/mono_dejavu_sans_8.xml | Bin 251876 -> 0 bytes fonts/mono_dejavu_sans_80.png | Bin 45552 -> 0 bytes fonts/mono_dejavu_sans_9.xml | Bin 254016 -> 0 bytes fonts/mono_dejavu_sans_90.png | Bin 50995 -> 0 bytes src/CMakeLists.txt | 49 +++------ src/client/fontengine.cpp | 153 ++++----------------------- src/client/fontengine.h | 9 +- src/cmake_config.h.in | 1 - src/constants.h | 1 - src/defaultsettings.cpp | 11 +- src/gui/guiChatConsole.cpp | 14 +-- src/gui/guiHyperText.cpp | 23 ++-- src/gui/guiHyperText.h | 11 +- src/irrlicht_changes/CMakeLists.txt | 7 +- src/irrlicht_changes/static_text.cpp | 13 +-- src/irrlicht_changes/static_text.h | 36 ------- src/version.cpp | 1 - util/buildbot/buildwin32.sh | 1 - util/buildbot/buildwin64.sh | 1 - 50 files changed, 71 insertions(+), 319 deletions(-) delete mode 100644 fonts/mono_dejavu_sans_10.xml delete mode 100644 fonts/mono_dejavu_sans_100.png delete mode 100644 fonts/mono_dejavu_sans_11.xml delete mode 100644 fonts/mono_dejavu_sans_110.png delete mode 100644 fonts/mono_dejavu_sans_12.xml delete mode 100644 fonts/mono_dejavu_sans_120.png delete mode 100644 fonts/mono_dejavu_sans_14.xml delete mode 100644 fonts/mono_dejavu_sans_140.png delete mode 100644 fonts/mono_dejavu_sans_16.xml delete mode 100644 fonts/mono_dejavu_sans_160.png delete mode 100644 fonts/mono_dejavu_sans_18.xml delete mode 100644 fonts/mono_dejavu_sans_180.png delete mode 100644 fonts/mono_dejavu_sans_20.xml delete mode 100644 fonts/mono_dejavu_sans_200.png delete mode 100644 fonts/mono_dejavu_sans_22.xml delete mode 100644 fonts/mono_dejavu_sans_220.png delete mode 100644 fonts/mono_dejavu_sans_24.xml delete mode 100644 fonts/mono_dejavu_sans_240.png delete mode 100644 fonts/mono_dejavu_sans_26.xml delete mode 100644 fonts/mono_dejavu_sans_260.png delete mode 100644 fonts/mono_dejavu_sans_28.xml delete mode 100644 fonts/mono_dejavu_sans_280.png delete mode 100644 fonts/mono_dejavu_sans_4.xml delete mode 100644 fonts/mono_dejavu_sans_40.png delete mode 100644 fonts/mono_dejavu_sans_6.xml delete mode 100644 fonts/mono_dejavu_sans_60.png delete mode 100644 fonts/mono_dejavu_sans_8.xml delete mode 100644 fonts/mono_dejavu_sans_80.png delete mode 100644 fonts/mono_dejavu_sans_9.xml delete mode 100644 fonts/mono_dejavu_sans_90.png diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index af1de15ec..b1ba78ed0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -150,29 +150,6 @@ jobs: run: | ./bin/minetestserver --run-unittests - # Build without freetype (client-only) - clang_9_no_freetype: - name: "clang_9 (FREETYPE=0)" - runs-on: ubuntu-18.04 - steps: - - uses: actions/checkout@v2 - - name: Install deps - run: | - source ./util/ci/common.sh - install_linux_deps clang-9 - - - name: Build - run: | - ./util/ci/build.sh - env: - CC: clang-9 - CXX: clang++-9 - CMAKE_FLAGS: "-DENABLE_FREETYPE=0 -DBUILD_SERVER=0" - - - name: Test - run: | - ./bin/minetest --run-unittests - docker: name: "Docker image" runs-on: ubuntu-18.04 diff --git a/README.md b/README.md index 009ae8d38..03a161c9a 100644 --- a/README.md +++ b/README.md @@ -135,7 +135,8 @@ Compiling | GCC | 4.9+ | Can be replaced with Clang 3.4+ | | CMake | 3.5+ | | | IrrlichtMt | - | Custom version of Irrlicht, see https://github.com/minetest/irrlicht | -| SQLite3 | 3.0+ | | +| Freetype | 2.0+ | | +| SQLite3 | 3+ | | | Zstd | 1.0+ | | | LuaJIT | 2.0+ | Bundled Lua 5.1 is used if not present | | GMP | 5.0.0+ | Bundled mini-GMP is used if not present | @@ -143,7 +144,7 @@ Compiling For Debian/Ubuntu users: - sudo apt install g++ make libc6-dev cmake libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev libzstd-dev + sudo apt install g++ make libc6-dev cmake libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev libzstd-dev libluajit-5.1-dev For Fedora users: @@ -247,7 +248,6 @@ General options and their default values: MinSizeRel - Release build with -Os passed to compiler to make executable as small as possible ENABLE_CURL=ON - Build with cURL; Enables use of online mod repo, public serverlist and remote media fetching via http ENABLE_CURSES=ON - Build with (n)curses; Enables a server side terminal (command line option: --terminal) - ENABLE_FREETYPE=ON - Build with FreeType2; Allows using TTF fonts ENABLE_GETTEXT=ON - Build with Gettext; Allows using translations ENABLE_GLES=OFF - Build for OpenGL ES instead of OpenGL (requires support by IrrlichtMt) ENABLE_LEVELDB=ON - Build with LevelDB; Enables use of LevelDB map backend @@ -273,10 +273,10 @@ Library specific options: EGL_INCLUDE_DIR - Only if building with GLES; directory that contains egl.h EGL_LIBRARY - Only if building with GLES; path to libEGL.a/libEGL.so EXTRA_DLL - Only on Windows; optional paths to additional DLLs that should be packaged - FREETYPE_INCLUDE_DIR_freetype2 - Only if building with FreeType 2; directory that contains an freetype directory with files such as ftimage.h in it - FREETYPE_INCLUDE_DIR_ft2build - Only if building with FreeType 2; directory that contains ft2build.h - FREETYPE_LIBRARY - Only if building with FreeType 2; path to libfreetype.a/libfreetype.so/freetype.lib - FREETYPE_DLL - Only if building with FreeType 2 on Windows; path to libfreetype.dll + FREETYPE_INCLUDE_DIR_freetype2 - Directory that contains files such as ftimage.h + FREETYPE_INCLUDE_DIR_ft2build - Directory that contains ft2build.h + FREETYPE_LIBRARY - Path to libfreetype.a/libfreetype.so/freetype.lib + FREETYPE_DLL - Only on Windows; path to libfreetype-6.dll GETTEXT_DLL - Only when building with gettext on Windows; paths to libintl + libiconv DLLs GETTEXT_INCLUDE_DIR - Only when building with gettext; directory that contains iconv.h GETTEXT_LIBRARY - Only when building with gettext on Windows; path to libintl.dll.a @@ -337,7 +337,6 @@ vcpkg install zlib zstd curl[winssl] openal-soft libvorbis libogg libjpeg-turbo - **Don't forget about IrrlichtMt.** The easiest way is to clone it to `lib/irrlichtmt` as described in the Linux section. - `curl` is optional, but required to read the serverlist, `curl[winssl]` is required to use the content store. - `openal-soft`, `libvorbis` and `libogg` are optional, but required to use sound. -- `freetype` is optional, it allows true-type font rendering. - `luajit` is optional, it replaces the integrated Lua interpreter with a faster just-in-time interpreter. - `gmp` and `jsoncpp` are optional, otherwise the bundled versions will be compiled @@ -429,8 +428,7 @@ cmake .. \ -DCMAKE_OSX_DEPLOYMENT_TARGET=10.14 \ -DCMAKE_FIND_FRAMEWORK=LAST \ -DCMAKE_INSTALL_PREFIX=../build/macos/ \ - -DRUN_IN_PLACE=FALSE \ - -DENABLE_FREETYPE=TRUE -DENABLE_GETTEXT=TRUE + -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE make -j$(nproc) make install diff --git a/android/native/jni/Android.mk b/android/native/jni/Android.mk index 85c13bfb3..f8ca74d3c 100644 --- a/android/native/jni/Android.mk +++ b/android/native/jni/Android.mk @@ -91,7 +91,6 @@ LOCAL_CFLAGS += \ -DENABLE_GLES=1 \ -DUSE_CURL=1 \ -DUSE_SOUND=1 \ - -DUSE_FREETYPE=1 \ -DUSE_LEVELDB=0 \ -DUSE_LUAJIT=1 \ -DUSE_GETTEXT=1 \ diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt index 22e69e30a..c25a941de 100644 --- a/builtin/settingtypes.txt +++ b/builtin/settingtypes.txt @@ -886,10 +886,6 @@ tooltip_show_delay (Tooltip delay) int 400 # Append item name to tooltip. tooltip_append_itemname (Append item name) bool false -# Whether FreeType fonts are used, requires FreeType support to be compiled in. -# If disabled, bitmap and XML vectors fonts are used instead. -freetype (FreeType fonts) bool true - font_bold (Font bold by default) bool false font_italic (Font italic by default) bool false @@ -909,9 +905,7 @@ font_size (Font size) int 16 1 # sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32. font_size_divisible_by (Font size divisible by) int 1 1 -# Path to the default font. -# If “freetype” setting is enabled: Must be a TrueType font. -# If “freetype” setting is disabled: Must be a bitmap or XML vectors font. +# Path to the default font. Must be a TrueType font. # The fallback font will be used if the font cannot be loaded. font_path (Regular font path) filepath fonts/Arimo-Regular.ttf @@ -928,9 +922,7 @@ mono_font_size (Monospace font size) int 16 1 # sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32. mono_font_size_divisible_by (Monospace font size divisible by) int 1 1 -# Path to the monospace font. -# If “freetype” setting is enabled: Must be a TrueType font. -# If “freetype” setting is disabled: Must be a bitmap or XML vectors font. +# Path to the monospace font. Must be a TrueType font. # This font is used for e.g. the console and profiler screen. mono_font_path (Monospace font path) filepath fonts/Cousine-Regular.ttf @@ -938,9 +930,7 @@ mono_font_path_bold (Bold monospace font path) filepath fonts/Cousine-Bold.ttf mono_font_path_italic (Italic monospace font path) filepath fonts/Cousine-Italic.ttf mono_font_path_bold_italic (Bold and italic monospace font path) filepath fonts/Cousine-BoldItalic.ttf -# Path of the fallback font. -# If “freetype” setting is enabled: Must be a TrueType font. -# If “freetype” setting is disabled: Must be a bitmap or XML vectors font. +# Path of the fallback font. Must be a TrueType font. # This font will be used for certain languages or if the default font is unavailable. fallback_font_path (Fallback font path) filepath fonts/DroidSansFallbackFull.ttf diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in index d7816f0e4..ae36fd6bf 100644 --- a/doc/Doxyfile.in +++ b/doc/Doxyfile.in @@ -16,7 +16,6 @@ PREDEFINED = "USE_SPATIAL=1" \ "USE_REDIS=1" \ "USE_SOUND=1" \ "USE_CURL=1" \ - "USE_FREETYPE=1" \ "USE_GETTEXT=1" # Input diff --git a/fonts/mono_dejavu_sans_10.xml b/fonts/mono_dejavu_sans_10.xml deleted file mode 100644 index 0276cedb6920c240cd5a994f749c131ce2cb7b9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 257014 zcmbrHb-?aL(f%J&z(mCa1p@<7;&2WisEDYjn3$-DSf~gRirw9T1uALKU}D#6cPnCd zcgOD;mg{%TH9Pn2e!ur0@5|wl`!ln%Q#-r&bN=_=JyveMa?Hx1E00{+dgU=I4_-N9 z<;ayoRt{Tv)XJVK*ILqxY^vY%z{ofud54q@nKWg<8N3A?=tn9z~-yF00zaG8HfAH$(4q4?t=%Sz5Cr!fEtJFhQ zwRrIA|8meOr7#b@NYY^|2VV4FKYaCndCV%~z*QX&TK(^iT>aCItDoLsRm;Oy|NWsC zaUQn%za6=<*DCAq75lSEIBHey(W^|8bCaOk!K*(z_@e*H{?{We`qK_8H(LF3`Ty%K z`tyz}yIl0?qc8g3cNCJXkd&=2`ris?SI5~+IEP)tS=Zof<2bfTYP93ZPQofW?R?RH zU%2JZSgGo_?aHH9ZE@JDO>Qa@b`}Y$tzUJK(6Yd_9d{?ue5aLS5m+xNL*K<1U zva-h6eV257qdR+j;rg|%y?7T?$DJpOpO_wcYl@E#6zWyLI=ZWxE?Y z?ryRtyQTi<_oS5_ZX#Uon^n8$i^aj)Nn(D-Ra&tHJhZ>|HEx&e^Q9gXzp{T{oV{~fmf8mW z)?DnF;H|khZ;tD?R`gqQ@!o>BOJi?x{YssLe#nyGt)09dyNZ6uV&JWtydS#>57~>n zsr#|J@OBORf&8TVF&g2%lI^&xzBFu2OY(T=mV8RaE;{4Yv*s zotb^!R|@MdvTmrw+jg~6R4t9-?Xc6T2VnO``@WkyE$#C@zuCWMor||?OXFJvwy*6w zt*&1!+Rtx$32&!hQRI{H9lE9Pb`G{gJ{jljExa|smdGdLyjumHuNAiXY;Riov5)X} z5f9&Km8SdA&*!%m-rBGq$S33Ly^Zj+AF>{Ns&C&`c<87K#duR|_r8Ir`+*40*4y{( z+X;KOi}$wZy7T{!^NgL>p4&T~ecty(R=F2vpQ7vbtN)EZcj{^E4nnuu&FKw&UD!AT^hTS@Ah4UhqE1c`8le! zzjqa$o}SEli#vl6@41`M*In!_(01MAzHR@&E8YU$u8rO4$K~CHy{qIn>sS}ZQNC06 z5FSoFMOUjhu81pQk5MStxN z6t?yn*7=ovo96=u2e!sj>txc``$57+4^wQi%m2?O^Ykv0>vH}zmOt;?zb~%peZ3#z z^fs3F6N`#v<|t(%54~{)f=%q?GJl@*Fwq+`8M3oHRB}(>CWi>yx;}PM))Q#n_5FRH z{qVr{dB~>0J)4v>V;=L55VmDwulJgehoihB0!bZL63-M?&6*Tdgt@(R$QDQJe^@% zcdYSTe64lYeq!MH3A6Du7V0xi>uhjRV5?o1%f}}RTl29^1D1)AQykk^zUQ=mUnWLQ z4QwAHcKf3C&i(aG!myhR_9Mo~`oGawc(brEg)9DQ(^&0Irq%wp1a?^~*!k>zw1&P_ z*gA)|2v&c{?RuIp(2qjD{4Q`*ztaO-_Y7|#=H-|(gpE5!=xvqQ{3B!Mb~sabxML(w zeYE(1w?p}J&OR%!)eh@|f8~s`g@IWg^g~an>mAka9AP6rlb!khDEr*NR{uv1gWmbt z&l85u_^mT9nu0NHZ{FtE#wsyWi1zQ)gig3_PEs%_GzfrN$OJ=TTk1xZf)!26jw(8o?sjd2bzOXf?TIbP=g%}zi9^WGnLJ|EhPgv{4kYyW`o zv`@BfPUixB{XQr>^uqAnbzNJw;^ITX##{mHy!ULa{lkH$wv74J_bz$denfbhYwZo2 z+Op64sN>n^ORrwmYcJWfN9prECOq87lDF8;^Y#9p@U-`{TPpSKzJ4DMJii}yYcjBaX97?618385 z`+Zh;=-psH^iCPCpLaedY(3}hwp!5_+p^F8ys+^a6?!Ai=jr{0!1i^`x|~+l=xhE( zM=vy=L+mHW0?OHq92@ow13$#i!E{MQEXr@Mr`)mCw;|{ijRV1+SplU zob^@5BBgXLxH%c8ea+GM_N>s1GEKLyI~qGR(29qT>-G&t!~HQY|cDuM5fR@MocOAj9XqgKXf<^t*==z@H+2=vRKaq`~mEX<2-+f=`$WicV z>z5YCNT2=#p)=n>cbwDa>Hfn&*Ql|zlyzZ_umD&))~8rU0fyl^xq2|IhMMk51MD0KL{N;*3*}X)jtXyIhOS0x~xA1 zy2h$meVK~!XQ3mLYRr*&XZ3fX z#9X-3YNt{rn$R(){6i>s*-Ja_wp7RSPe-?xU3yBhpOiI2$7vb$UxBXvYs_W*_uoS2 zyA^1R{%xM_{}DQ0u8_Wr|Nb}7)qgEZEmLd$Cv;BLpga1vd6rpOkMFfiPt4^>Uz|~M zA74+1n4rVQO@FZKc|pIvtRLvn3#XqiHxObxVcKh<#pnLMz8eZ1=T%w*6ZUNPa{F#1 zM4VYk#9V!xxN#sx|HWi|oOlT#a^hBY-YVJO6Gybqmx#iuEe00vQcm1dh_TBu z;#AMyOo+%>)DaW*aXVfz5Ors4BEC#!xs=djX0ds>)-+!)a+_XSh@9AC-;oW*EpQnj za%N9rvB@~`vVo}mul0C~i6!2*U$x8P@4a14`1~FeG{$=dXq;PebD^vYvmE=jz~U}F zCthBN{5CZ7LN@}v`n!DvA@aRfA=+M-4kRP?Gv^f@-B`FiBYp8cLFi>BthD+@8sqwTz~jD4>nbX&8Z78-r3eXkmb(Y|=;I?ujW6FSafv~TPD zl>5Wgg&5CF)~76E-z|k6&rC+2YTvB_G1?brn|b!VhR`vWqJ85zsh=ONDa3eYvis6y z?7Owlem=XFqZ_N_G1%AqV`_f5wh-f)$tI!8*!Ma@k7p*M zPqpuL12NhcFZ0!Zao5zh@V3H7{-TBP!V`Q{^KuT!bHw$8$=}aVcF#@=>Jxn}uP;QL zhNxwnVEZ`h({CX3IL)^ALdEK^!8G~}g&wEb_F|#fWgdOIK-aUK<;%qp(zncwgdVez z*=3n%*3B!#8y+j^-#`a;EbHGg;-B`t=NpGF4`gY$z=<%For|ZReq)*>5 z&^4#nd0XRin!oQP^f=A7`(w3xoqeQUNdo*@E&P#>>-op{9S~P zZp!nQ$sB8ij?RkoRyS0j{gTyM0i(2?b+J>EhswtcI{>?U+%InrC1Dc{T8 zg&4Du&73sm`f+yCKvetM6l!ti&vo3x5$*Gu?d>&%##Ud)J%xz3M6jdn(bRdy&4h>( z9EtG+*4OdoLNtHzr!L!j-5H;+ay#B45aZ6ot|zDLC6w6b@a405csnLU19ufKd33EMg8MtXkI<1BJbiH<&Go&t5RnZ?#C&z0 zzPAZ|>JzPd_d+P0ki97)d8*}QO-Cl^u z6C~nw^SnK~L!ie!LwAtTb06DJh?vw+Urb&zVt>!>D0Flxo<7yScM@XkCoCc~w|KAZ z>wD)wkM^CObM7L?V2fc_#OPy9qIN4Mx=3)VJgQfvB~~UKFD4 zFZQc;O0e9L|oJBi{8tr`A30yXv$MnyL;SMz&18Q7`f1I2T#ZpZi3eT(1A zQH$5&#SPZ5nA^7Wy&W0W1sfSt*)0p-$I)m>#6Yo!(pnw#0gh(-QQm2TR_u_``u4o9 zkm3J@j4YXv^9Z}2qhW##8zL)aw7#DAcVwL1Kt^`V$hn>eIvOU|q%C952MAg1iL5xT z=RuB!QyKI`M$Kq_dp^*Sky}YFd2Al}U`J+-E*^zWZXWqTLXOdoJNJ3)2RpW9KlFq} zZ|mqv)MfPC#~va?^l`AU@rrk3#Qy$0G|s;SQ1Y)!==Hm18eWcJaBd2{a*Usp?*HfMd$`c?7J&A}TY!w7+xO8z#9IIm?Ivn!emKGr?eoQ! zp13#*=Qwm2j|xPsXVw*IFPBq}77AYpl@(ieR8G*?jhylrq40bO z3eJRW%43Cs4u@99IS`a-=c;3bj*f@)*s0_zeVkBYe_}SD8f}jcM2$Av5#51ltA2ve zW1nL8sAc}2*)+Gn6NQMoEZPx$MMmsrvnL51=Ri-NYTqXZqT1J{Bg@$LDUNO|ocxh7 z&|A#2##4pPTYAtjZvs8vv8M?I=Ox(G{;Aolze`USA|^~E;x-+6d7sU7d`2K@HnW~& z@h;`WX9_W%cr34#J`y_SlxGPAods7KyMdhYY@x&sfbV>vOW$745hC99QZKyi9Vb3l zhQb}JZ z6x4Ir&)&1DzxDU{MMA`>fyCJ9=N5ahP-1s)m3eA+^b#TRr7rdWzXb<7* zAfgM;i2ZE!vOw3pqp(Ez9&@rdHLMW*1+|yW(bIL1)5^J#8pIR+` zEqts{(04-@zI$!2=v9tlpDB_(MXO8S8(uBM*ehEXsPX8DeQ$V8psP1nUpV3ouN4Y< zZLT`Trq?mw)7J?x#;H{+jnn>0j}u~yQ>$e<>&*2!UMT3nxl;V@nYNd_UMT3bNr`=P zuFD$&MQe!tz6aeqZ}q;t-YE3gE888iX7F6c6NG}ZGFOW8DeP7BYFDTeg~{*4lvp!s zs%9h1lN{3s#d6S-Z$hDGzS@(8!rKmLhHkS>IYlUOCT~5K`hKp6Y7YU z4sF|=E)>kwJw^AlZ@V*uh|?;G=qcNJof#;)r#8`>x~FG3qJ3WLlFjurx8*T#wop(h zu{yp<#Og*e#W})^wa#`{H5*}`E6g}CvR+CvTE5!zgn~07SBoi+uC{fX_ckHM+bpXI zBbn&!LgB0G5;yiOtdYw54xz-!u2IzYa~r)=DDhlp-|kXRot7)!73k4xQLC^6xsLA^ z3T~pXkEZj8H=OS%_8F~cmTz>{mFw~zp~Q-28Av^#pK;zRL{vnsZuXeGR?m}DD*ggG2b28(+>$HRy4i_#7c{f<#)`M z{cZie*$)T0#(;e%T0N%F%L|1(f z$2YIWZT)2-BENZ}=7DMYekIU#x@J>{#kS6Uvma*^GgwF3r6sFZPt=--l zxxQZ)Vmv_`aT)u5BhaIL<8-U9?>B`QCtWtDUB zdbDrsaQgQBju2zFWAiRd(XtrsXSWL-ztBomZ#JY+2?lIT(2aZ$-=zP#IW~{!3KXhE4_=*H{jv)7G zKXNooRiG!j#&OzD9gPzi>{0nAXx^W43;s-K@J86O)P#)IU-i!&8TWozHM-HoO$jGdPj0tH*&h`9_ zqhVHxRikUnXnj3@>&WOIK`t54Uf_V8Yxg_HC^^kO<0-l?Ipz04F^*C&rGYL!cKYl5 zbD-;vSg%>S@r<79`xhbdKBVlib)4lqlM(y+{#EFxNwg`Ztf1#Q{#_`%8-b4Cf#PkN z6aNv2nvpCQFO!r0Ep$$Np|9!b{jqPy{|FIhTCCfuukKQx_+KHi%Y%;StYFhZZ0F1W z2@~^MYKi$PnEBqUtZ!Ah{EfHvyRmSdhGzKPg>A}uj$)@IjYIoMIjMo-eWq`{^#fhw z&`woT<8T8ZX5E19@HBll6gqkf?2L5_#Xhh`zB3yM1)0H97I#*Cn{FKFWxq+s#1}ex z3*`DBR@y6<~8=)~68sE+6$VKOJp#&6f{!t=jeqqql!;?XMtw&edUW z%!lS_e?_75&I|OIjdGvZLMSoo*nCa9)M-(CC7~mO(I@b&c(p)l&#oMZF)EhJI#&^T z%sRG%>cid|xqYuHM843%F5zzs$}G^&l2;QtvKH-&`OrN2)dRgm1L)RkYv1Xu(bs)T zM>iI3>9C_Q8|C)hN+>bw*fdw`L{7PeP>`v(Qrxm-cFc*_6e9W|5;1wsh<)2_9q4gq zVsDe{xQ$R^KVuB-I&;c(go2X}S86Ntr<0s=U7^GiiOm7EB2V+RZH1204RyrtDb02x z*Y|pXsI|k$i>q^gf3Gie-m)V$@ZNG<-x~;#@5l<#?j@G7?+qQ@SbD~?pAa*V4a(~!fh?tv@hzyWfpzjYi7J57>S=F9u-pn>syvWZ@q)qHPF@D zZNIhC&uzDxQ20G>XolBqSanX>T`2h0Bv*<%?Kb76LP0k{3eE#<${s>N%##x1G+)u4 zLW!|ycfi^;=aicX#q{=*ZaXQAbaFQrN}NL)1-rG#k6NdXTLgOaqZotJvgTewkFjYv zXe2iG7D|jw%SxJi^WC_Wqu6J(JGZ?U+0%W561#KTosm7ggHU33Zm$5ecga_@pHN~A zHOgYo$cc9jMD+$ciH>BIy9fobhkx1`RP%a2m)=!~@xH*Ska|F$csC)&?woH@k!_~= z{r*BnoYMmMn+N96?;hx7mq~BkJN7Me51}LeNyqIWbng@IDMWPoAleHT_4YpTUXEy= z*Y4bYGSc1LTPX1+(&n+t+<@FC(6zgoTowBCg9AP8OuQk;SN$NN@H-|&GrkgSd&z?x z#Xh4EX15o*1Jm~RAwtJ}CG2QfP_x!F`a^||uEEpQ!>7?77U)_bECXw1%XjGzq2TU- zI_A^<(rxxV>ES|0cTf7*wEq!8L3d9IPQGnVdZbX$-IIcoZ<}(cP-4}$$k52^+vrh& zsL{r^oNc`h6AFKG0irF=)N^k*TquZh*r>cA8mVZHcAWAly|uHSA==vOIwFuTLGwDr zxmUinBOM7*U1~$Ik$tyl@i)hha-T-MET2XPfzS7M{AkDG8NSfaF@Tn@ z8A^s3=RMW&?DMF5AR^O%nD5Kegn~SSRodjBbQ*2S(}jYGIw?5ygEDQ0pCNRf3$Rl3 z@}TD{eWp;*zf(u#);8r?ffBPK`u8^F*+N18PF-TO<|}%RP#`xqLKj@gR^!Y;JIlZiuZ~WSn7dVQ22JdF93w6wI32 zy1Xb*)Q@a#R`6AI^P zSP?o{Q2HMDav@sZrTc|$7Q}pYuMi4m)m$CE&D5s6QYbtDV|Dlj6DZU2)OqQc2s@aohU@kz!4khP3P%*lF;!omOB$W-D%c1 zInXsHSr=CNR_LDZ*eQ-;pV1SDeJf<7LY*oUoM5q1iww<=xh`)KN{myB72V&Q@@ApL zIJJ|dX4AfxyhVtJbFMDNY_8W^g%ab`I)RZmJxwSvPOUc>iPO^qMdQ?N>_)Qo8A9Qt zs_eCO{UaWDrch9)X#Bu$SmV^Z_(c^blkwx zXX1%tn(pTdJ)S;HTBdt>?^1Gp`Ewre?+x_0t9T2i{_g3mU45U>c~ej_r%gJv($yZ> z(*6B`UZ}J?I;X|Dx9A@TbnO^ScdcVZcW;>%{ewcs*^j!%ImtBohXP$stTrvux>wu1 zwW}WvbnVEjzL&b8b|1}R9~XLE$#5gOnBI!jPXxMV0_!uhgR3pmqJPrSja4EOyJ|lv z@uj+ZpIOtmOZilwt4G>xo_2h-?yX(@tkC)53sHp|<9WJ&F3>^6KXDdT`l!!*G0@|# z#u@Z9%X~@b=<&I$n3~Pg{mX$Kbw?dny7!q@p81N<@rs4ITh{`EkQ{vPM*)9n5Y zp~rcoe|Blen8__cH=3<)9To~vvN47eSyhHk~5OE_yee+7a{b~)gTk+C?we0bI z;bXSr`Mu7!MgKvd$L!Ld=(gxT6ndQKTJKoo&5NNQIlA?ZdQW0M$*SpS*Z$)`S5L8- ze&*$)yZRHM$7*WyEJD5RExZ3T&^1EsZXxTdN9jKkdaQRw&vtc`{&S(@#0!77_{`2T zqx4?{x}Ik&db3>}rTz^#?qQ$Kk0d7 ztIt?3(4$8p&ub>|y0XK=o^ zK##h|lV0w58w&-m;24w3o#-wh^mw8(kH{k4`$o(2HVJf%c)oyF&l~lPO>IuW&> zWHrdsTf4Veplc1X+ubZ%jnXeE^jL$8zS#3}Ke<#Os<&Au)a%Gwad>H=W6}yQGPtPJ~)K4}K^cX?7!MD+Icp;`nU{)qT`wt{CXiXK*hykG_S_ajK$a@TbM}md{)%(4%GY z$?mAnTv_OGvTIc*i>6WfRRTTg-mjUhigDFIk6A1~(RrU~+5KulkLNk7tyvZuwanE6 zJ$mGFm3m8|$4YH)VY58rEz`35R)Ma0#@-+-b8~kMM>kffoQNU&Nv8X#-LDzwQTKQ= zI&EsPwa`)Zsrzy_rrQL1)IGm3^}E`t+Sd|#yfHO@%4ZEBS5s;9T?e*Hj? zyPD5l{jRnwa|5Br*{kKS-Z{FZ`watK&(TI-CckeN=$hZ{+en#5`ey&e_m)TQ5a@ANm#f-4 z3O!bBo53#Qkvj#t>TY!}o`LhTETbt#hBpIzhl`yG_{D5m1Xkz)Qn6VK+xWMI@ob zGzim9Z@UXw?SuNIWM5%g5qDEZM)iWu_-4U8@*YA~oiSBa@~E%u>Bu-0LuY)$N6Dks zxS5bkrvNg}ol5q#wp9&p?#P(&f{bbca_-@KI|6D338lJ%FwMK}CFD{!NzVLsZR7RD zK|<4g$F~GkPrU=gzvWgq%F*!}8@i%8D1CH?juvvUC&`%=yjQjM{_#Rqi{R#Op3YBp z3N#+-$dOtJJ)iaD0b91{nUMlQPnbA4QDfY^O<_J?m^gEgnde;S*`Eo& zQ22QFPCjm}qRy@Tf3Ywz!y^-aip*9VzeJemqd~H7SeAY$GFy7SRG9cqh-YR#P>6lY zzAVs7yn=4?jB+|vja&M@+!5{b#s5jf>$h>@D};!sClQm9apEh5h~JDxBJR>b%wzvp zq2P6yr)1f$WxH1eqGmkHE?G8d5nnAt{AM-ki0%k0^*wpM>emPn@4ZRHoid0y<+Vb= z>5!Dz@p!%ZUi~_u$6m;8zlvp{V@+@WhWg`#53TV}d&Q_bpWER0K#9AJ-L}UXJF+&B>?@hky6NHFt;EB2$ed39M zs5@h4y{U0{vJg?XsUxOrcne~C5>v)Dx5cAYA#%xYGQz$V`ZMLvXCv#Sy7yqD+n73f1)9iS*&~XDn zdOl+*nYABz=Lo%?vS9KK-E;e%D-^snppNL9+m!Q!f_r&VVy~U+^0q+HXyf-q+q%46 zD2RFLg71sADen*p;+&LxD&Y67oGJ5_zEkL!8GCwJJ9M1pckgm^^8%fx+D{f&qQ2j~ zJJ9ufX&$86EVsbRTVDJy<_e{GSlf zHBc{`ZTP+?*X!d#LDxVEzW>$U(@zA7?y32q_7S-*pA-t>oVvuA%_*M}N{myx7aqx= zpB74tQ~Mr|?z;EV{@#5?=rK-c%0#O~Z? ze42;zJ^i9k;wjoPky6SIv?m5%a!ey=rM2_Th@X5}D6!Joo+xERv#$sfzsnQ*YA^P) zlh*dDKj*iy+H3!+NWeE4DIrdrN3{N$Fyq9T-@$16%h!d1DK$02H|W}wZwLjy`;QdU zrk@+XDHMF;o)rA9p|&pH5(<8=J}I#}%su?5K>w7{$6~o@y{_FIvuh;j5h#3=! znDJnxxn4gI3MR&+#Ojn&elL_*g)G01Od|dulvss~GSwUYC`7IbC#_b8*x!La1-j;a zyY1FU^4?qMt+VH!g^t+98u)g%y}y5P6#Gok$WyWkFxt`nHPE%P+kKX1$Jzp|e)(@g zj}_6ZySN+A{q*lbj5oSwW9^-%>H80%$2%jVFSd2A?>_@E+7~@(+Xwz76jWsT0D96k z<=;ZV`%O~tPO?q;k5Ev9NkP8OzFiBQ!D{E}% zsEFoLp-XWJMORGG=CU_& zY-Y&9MkkZAbE|GDJhdxM=H%s!%^ZVSu;_$yd5>{P$6yXD3}iDhinp{q`cjUF+=d;- zcfBIf*V;Dy(vHq^N6{B=v2%KE!^=1xzJUd8@fL-=oN-ylV82sz!s|9N`hI*l$1Ay} zoURJdelk6ZHxEqpIMc3VS?bx(43`&XjAlE@lq@@ic?DsjJHd`vhAmz66y_C$iQjBQ zCcbe?X1>o`2!}Uf*cWsapHGIQOoEF7HlxyD7Y+^Qm15oU~K`@JO7 z_xGy8L_VON=q|Y4z74M?Ok@Ev@hUB6mUwJuovVukX56Fx z+P4YJxJPxR?lZ3?%viT=!r6+dzF%Ei_?TwU4wz=pw)q}iM>v>gkb`+fk8@q&@N84O zn{U;~>DzEyVWP9AZkVP|VO}pVwL)6|IK4t%UzpGj|1>X;@tE($4IIZlg%eS+q4|2` zjAXSN3N=Qy)ye3IxpvzLC)R9xO;#o@+>M-bBjNBHM_6TDr~96=y)a|Vwl_1aUaB8$ zHx7LD8hb|*vv|Jtn+OM0pPqsjq_kmw?K=n)9RQhi1bb$G?K=uTMz)=bO1`AdedbQW zjFD~AqiD}*I`16#S|RQ3Ci-g4Z%r)M2p(oBolk1pw))Xsg&*^b{cQ-*w$u2#2|soa#$V3Py9a)>Gwwg= z8`Jc^sqk?dLi^*z++6-1!slCD_#xik<^0@d_7o;w<56dvI&x+|pWH0)HQp`z#~L@y z<~J99JkQvPa5Oq)|1E`&9t!%~`@YtBzOVn@j&C&F zHWi<=pOh8N)&Ew3uO|SDsD4gppDp(h3HVKGv=H*#+!fqf_{Epl*|%zex`2Lz5*3BIZ%r(ePDD@?qxgl=ZR<#NUS z9N%bV$H})_qGf#e{=&DF`#UJxv*mpFz`$1@wpqe*KKwx8$F9e^{%HT)Hx3pKzhhN$ zruF-AUXXK+5DqdJ_X}BqK9+Ni6iz&YS;r9fJ?FesIQ-@#)`f0_`uH4@GhY^%8b{Wb z^!K!tH(oCMc>8Pbv*TX$REGc!{da5vkvvF-*)t4^CV$nDotkHGvvCRES%UI*fe5ne@_t(G6VIgV>#F7RN=(< zwfCoSzL0ZH6Aq@p)Tcg!^lg5+V_F_5nHfy`Nr|%Dhx`6^M&N6oY%7mBAz%BM!ojqc zdbV$P`+A-wd}ILf>sZe9JX<(1er-}UR{PEoPP`K`PKjLZORmqk!ojJ5>#C;ki!R2SMX5@SGk&30eY^=Jc&RHLIEP8zDeV~oqtJ|BAobWM6ppDQyAuEC5 zt(NmX;dp)(g^22HFT#pe{k{F9BcgjZKPg0J3=qAJefnn{9eIRw<`K~IRe#n|kVQNt z?nPg(F9Vv8=lE%!S_i?Ok7VbpOhv*pw#+tlHZ&x4@Si5oZWmfO#t;_O0<{ zp~IT+0rdaT8m-C6R~*r2!(svU9P{-3s-vS5p*47t0KIR4uQ{UcWQx8#M~oA{F2v|z zmW8HA|2G`d2&`5`PqP8KLTKuJt8a&IiUfZafdou5r+CA+gzCE-QsH&;^!|2`P}`fc z(o8}gbr%TL-%3Mo%olQN^zHo}k$?#)ec3uo$b#Ovt``ca&N|j@qC;B1{eI-AMnKHle%SQTeufChsC~cuu}H97gBd3zu=~g)jGc+5+xuri^%G54gZHqRHTru0TqLkBqGd3hV9ez<{zV|c4@knBw;t)2Lh@%U zteS5|u+hWeqoHS^1ojA!kn8#fA^C|(@g|GQSf8fp`bUvacNrG9 z$YX6?|0E=yfw*dXyEeCLZh=1sYQ0;0eij4-#VKvEB~84GFou{~;vIY`ir_yNt_i#P8$kdt2-r z=Qhx3nq4;+37Fe>UF%F!OK9B`T`fq6K5dmO+SN z@Ho3|EW5x6&vo5ONSL|O#&$x8c`YaHC?xhN)QNooR-Kb}5>hrX;pDYV+F3}Ly!zF# zFKCn21XArOb&Th$+eJv2zIvTTV|lHR>R7g(3lrG(>edOVJ~5cRqsR91;;usFnFAhS z`!VLFyE&453c8SF_A5Ppd!@Sz37@C+?YtVRLB5YS6%wmIm_~w^v~}7;NUZWCwNL;3 zo!B!-h#ASM;+Uu0Oh~Nw)Rh&sz3Q6_$=_8LpRl_}>~ouR3nBR%N|5lK6VtLa@7_yD z{*DqPysYk#ZYd;o^|TW^=eACJ3#p#&`FD?P(ybiHdLH;Wbh4kJvuKm{2_*PAN%i?U zkD^-(39p(Nk2b%F6*wo|Mo6Z=p83t2#(ey?LSpQ3b)0my?X<6u7-J;W-EF?Q+X;y= zMiM7oZJll}B*qv?cxh)pX+_H&gv1yl32*Isr2T}%81p3fSX-w%3W+gBQr$D=7Qa&< zK|V+}1B8#Yb-J@7*{2X=B;hXIe$uk|U4+CKBZ)JkHtDWHVvLc*IT1+xI&(Ln;uRdD z*}sDWHMjo$LgJj7`tc=Pn{;;}aUShS*jteLJ^np}$`d51?Ce0zS9&mf`i zulEybU0aQsTc+F|_VvDhkPt27U*tjW+)oa4B)+_3Y+2Tf-E?i^)~)A3B7tXAaBUCA zy6guEiDywyLKeiTr|EidkPxHBJOs9egxszV5)vn4)RkRsoAh8I)w3)+jm3_3+NvKS z66!9%PHxc$@>M@nNOc!rB-j+Io~G-=L_&RIW^VxdvDNa|LxKeCH+OFI{QGbr)#qQE znd4n6tdZOG5kjhO%q&aA7@B6+M>+{c!+vAc_OslsquKn>AR*e-zZh&=<55ClmqT6a z8?)T5hY5*Y4oUT#YMNaS7YX(J$|fMo<*Y{s35YMQfhPpmb=n$^5DCm%l)#(;3Aw$G z6jFUUx4H<=1F2tcj}mH~b&LwDfI7_rM~j3y>)1DJ^62mty_Izy6C~8pF`9KAE2KK> z*t^7N<7w77MkH{CM}Oek$9eXCoReVp?DbTk{B${+KfaO@t!`3yD~Gk@zWszitMii4 zI12}@@83^!WOkz^Yd~W=%h=6HpY|k2W9Gr1P>;Zy<{3|RY;U(h=h{KfE%_8j@tM3( zm_yr?r#gy1b%KJ70LrwLKF!hn4Md?cN6w=^UFg_j{QVv5_vX=`;pjed7u}hGLC<&T znU2Do3mtj7Y*U`)C_F=wQgpJrsN&z#cInwd$Bu)}-(CTFzS8G73cu9}3eR$F%JUor z-^jF#i4`)(fm7D%`>WP@{P~Vw@)m9`C;^ko#S&Vl<&8Jy-K;}F9Eq#CHRgl>&AVDvD-tzjGH{D1`{*(-z>Mkp{-}XY{1dTfJBntcG zq#Fwf-(zJJw;K=abDMM%A>o^>o>X^G)An=+kx=(mcK$#Pfv(de>=-1}d(9l6657Av zXeZ(Nm!;Tw-nLEQ?krq?MlD=>BY`zUZmU+Vaa@}hAp^m`tOLQ%rf_!=uAh=aUrwi{ zaMuc#{SozL&oYI(PPq0-?Lh6O9C;SpJkE9%5^vY2A@9c8q}_zXj>41Tp65F4E+o!? zNUGy0C*2~DAfKdpakH0j>$tJ^_<6*)ebOMr`lK-i~CSf;L#Wb=c@-+oW3w ziFei{ahlsE?IR@KS(C&Y=QioqLh|oI$~x_R2V$a4x{Z+hyAY5T_4lI{|F$B5amiKV zH_P=Z{=PzDT$02)>-MT|7f3NKta6X_4!0K)}>fH7x2? z{2E&4sk@7Wx@)niC}s${52F(96C|J#aSfdGE|yTFkuXI^*bcw);KtjpchGe{oW=$NJy+VBrQ9Kd9X;R=PsF#^5kcAcWh$$P$97zVAWQO$NKGuIg)(}@=4;Uro9t~2+7_N=^4N}aO`uN^l%|D z15&3tXZ3Ht9ucT9PuWdI+{Zc-w<FB7wal^{yu%b??!N@k4`zdJXItVdHuYt%`J% zNZ_=ZYv4C;Rl;bleO!jo(>RZoIMz|jkZaqiwze5xHj@b9J z!mZ~h_Wm|@;dxg0y(8JDu-jO*DyN4 z`IC_9366DUW7+o4LgIOXI@wxFM}t-8JMS0VB3hbJMkfHbYz|4k&+ z6C8U(1`mUTeARysBX$#Z#KylaBe>bA)8GI_D-!C;Y7(%|ZTmf6NOfhkPG-!{ zUKB`>&z;~cUt6bF3W@cYr21~Kf66#ksP#Re`3`oft>3GJRNoWYOQJDPd9{#u9_C8x znP?v6uN4x{y(HE5{5k1$LgKmCld!k2Q{Vc>IjWso`6d9|@>67jaq{sM8UE_Yb!E&~ z|9VGbj26ED*SavvUpe6ojzBxXv#`E41=x(1myWZOUnm!kc_h_{~;O zM!MY79n(jCS)Wy%TY>fqQ@#6``K7ToE=Dz4_jGZJQf${ z2&s+?>xt0;w^w(rkm~5LT8|E(O*&6Vb%a>`hsD~Yw+X3^k`iO;0XXBVZDgdk3zxkl z^jGyYw01@)ZDW zz}^+yX@2n8AOX3T64=v1LcU+06Oy0l!UlYk1Jbmp_~PYwQZz5(1cegd$B>Zg`XwRR zghuO`d0X`Uob=^Df_&Pq&M`UZD?+NXih283J^QL7*{9;3nx~J|v#$xs_szxPcFSA- z)a&`aE+juW0*UuJ?Y;Ykko@EbB)*PolfEe=J7uUBSk;G*wMpL+lAjzwCsx`v>Dxl$ zdpP)$^%U^2Ht7N(G4@ER>vQgz-w7nhCuy`IUnnHT7)hMkv{(0CAu+~4vK&0-N>9|?&uMp9kla)0`< zkQig01Rrbb^b;X5#z-3NW`7z;kWUgPqivmjCM3ofNt}$fNk117V~iwDM%$!c2#GNU zlI`4B9{;5y*{2X=Bylp@*6CM5VvLc*-yqT^{aQ$jF_PHZwMoAb5@U=c_I7R3Z-vAd z^Cb9KoAf&&F~&&ZZDO1B`#^$xl6a@yCjCK3j4_gUr`{(0QAmt2l6a@yCjCiBj4_gU zr`{(0SxAgAkSx!jS7?*|;z;%>#287uxoeaDDkR1jNu2z*Nq-X(V~nKwT$ShXzYB>m z=1K6ewod;L5@U=cPX61Ze+CldlT@FW%1Nv>llYfV{mYlKqjuWKPyGHCr*+c%w@9cb zktP9sJS;Hn^tAp~JUtl==NnpPG-fvuQXR9#MqPlexd&}3q&jA;*G0^aHxLI%aKBJa)d=N=S9g+8q*CTS2}LqgGlIB-Cr* zi@$km*hM5T19BfY9hxU$ZIBSxU=y*};Y_PG>zo9m#Vl%fVliXY@z9F6T}6U_PgP`@ zgjj{9tzowyAx;MTZ${L87_Iudi-bC_n*>Nz38UV6(;xvo1boTjE!LoER@y@()MqA> z0I9l$Q7hdnNI?8@4V*@(gi$NqTqM+!K+7YLsuD)maElR!r|5B*5le18>)L4Wm1KE0Ms8=_TZA7?rS3kWjCIxB2tdaBGpk zipe$bO{_}r-rCxS+lU0dHJ}7mC6zF0rP~Gx$kbi}Vq~6#eVqhb0jdoo_;-CO!CR@U zC-3iX7bGB4Qv$2fJPEfK2|Rar3Awk9uHgXcuM$T0;jSW~ zz6G;WIi#wD(S5jEkO05o8Wx@7M%S>vNT|7F8?zCX9~2|E6H67Cfw#QIFI!~VOm^CiKh}}qpCEI_2zGzAeT?IA2T6qIfH>`R z_ynP2=RoIMFwk=^f0m=LTL6Xi7?l31k8?!6(*%*#9K>m>KHkw;%Sq2YVAO+OFZAdG zydj*Y`x_jc9RYOb>{RKaG5$uOBO`*&>OGHsf}^u`lMZ=GAGQ05LPuPH&Xegp`bmz? zb1CV|>3*`%qwYMB&eQ!AN9TDIx^v>H^iiKVRp>E?aN4T$(OrF$qw`b?-T5t0rH|_V zW=Ajexx6t0-+q>7gHZ`@2@+yHurnwoeDl`uR*}F{DA&N3fhu8i4^9gb;OmsYo3eQl zP8SKBw0a4!+&l?q1PS#TI2%<7qdR@3NZ?y8u7Tgrn6ww}}M44yBcN3RMZC zG5z)+0e(XXJU6O@(Rg@=NZ_}uyaY&938QOxXOIBDp#*-XN+pc0;awtu->~!&;9v73 zoF62_+V8(#GEc&LoCKrcPWS2=unN$6PSeJNLfLgvty{YC9+9)JqDr&V!a!V3kbQzKt&xB%t6 zw3S2p_P&~vU^H}Wl+d13j!%A08F&2x5UjlR9FB@*}> zgeZaESe;Q`gtR7~ zxxKIFs7AoK0D9Zcmb3TugM?^rtMaj{&vm_lkeKJFE5B)to$LGY4TZ|wMru1V<+^Ss z)H)m4`^Q$t-q-s^B7wP$dh@rA!5a15YwOgpeUJb@paj0+oF`!ik-%4+lrWN|+P|Y? zN0CwIDa(z^?Zi$Zfmx5M;0u(+c51I;XOY2KB4xC*R^Ol21PO>qO5pd5=B{EFk-@$V zGVGtoK#OIxe0HsqU^Mh_l)!mfCLxdJbwXv|=BbDdQ2Q3&HBe(_w7L59PHQ)z)}59` z6nfEdU3V8M-yqNe?2SP6*(SH^O@+!6C8_oOe&4Qp2$iQuPmR0P*LBZ8t#_+F_w{wX znNaI1y50Qc0%6I4%LgG6&+LCi4kox-VCDi&Jz%p{o$+>>F zbR_!}Iw0t0KbyYSdk1RVYs>M-k63lC->rmH_bk@oVs}95+ixGCGD~pPoK|PlzF*#2 zB(MXbgm(XuTjMrDt$P;p^=MabjlSNu4HB^T)SF#KW|>^?eTB;N7^x$7psl)fJCVSy zhZ5RdO0M_qg<5we_HE|n?0ttIp|&@_9X)RE{e;TShSp%t$f$ik*mb3Rgf`n*q|2@FWGP&OO6e{1h&>EavXVkvE?&7+uAEMM8ahXYmHl zRSDyJaX*p4?8sHH*HIaxtGIuVQ11nA;#9);Dh?DG%#~aPC*CS!bQKQ}3GB)!Vb0Co zK|*DR=Barkc-yoh;ekOyw7&nonOderJ=jr=fYT53wv{Y*K75!+;5{KF@P+)i-iHX4 z_k^ChoV_0&B-Hk`w|`{66#LSW*WREmE4Ds%-P!MM+XV;eM(@ao41A| zL_&QowU^8-Z_WFlBZbNylX~-aQOwi(s2~A52?^!ZH1b|1BiHk=b__JHQ&Yqxm<8TE2LUBf}>2Z_HLQcCP8;9FO1G0+DOa zhs+mxp}3bQbFhQEENO?ie;AQ=?iM7Alf4lOISSuYKo`pmsJ?B^vmM7iRkW~~8~()1(3KrpY>gy#T5Zzvg~X1^li(2``K~bc?iUEvPvBvF_B|Q3AB8Ur5@O!43B>fw z{34<9H@VXqoPf>K`^6%GuM;SNH*=7X+xR6y@-MGo<2rKv&h>5l(jWmR2I|WDJm~5r z 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 gMHHxW?NmfeN*ZjCU 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 diff --git a/fonts/mono_dejavu_sans_110.png b/fonts/mono_dejavu_sans_110.png deleted file mode 100644 index c90c0e2422962b2f2fd0ec4f510b42ef9684a4a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67613 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 diff --git a/fonts/mono_dejavu_sans_12.xml b/fonts/mono_dejavu_sans_12.xml deleted file mode 100644 index 38f6427be8fb42f52d429dc9e9bc0d2e3a7c4d9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 268932 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 wX|Dt?Jb#wwy#G++F+v((;?!MFi0cI?cJ^%m! diff --git a/fonts/mono_dejavu_sans_120.png b/fonts/mono_dejavu_sans_120.png deleted file mode 100644 index 0cebd70e8b8a17b60c6209cba57549807149fa7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73938 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�o2I#=YZ8Tm(Fq9QPq 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�^+XkWG~dA^a_u4J6)xv06oNNtWC=R6__KGUe_ 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 diff --git a/fonts/mono_dejavu_sans_140.png b/fonts/mono_dejavu_sans_140.png deleted file mode 100644 index a413759eabdd740bfeb7f71f10f48ee99bfff9d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89073 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%0DuNDv{fLgY{ zMg`P-5N#MYB-;u%BE%A}chu$W{z?NBZuw=F5RN9Wou!LbFvLmU^b!x)rJ;fyPBy*D z2?04P42{Vvjl#jjaFeKZh2QUKbSjcb%93L+=8eig@77Yc=rgmbPnH(}4fd0$;qNP+ zKUvS}Q-_$+?Ont>&2F-W@syZ>m@J|T5*7hfe#A{boCC)J&F{Vzff)i66yV)#ZxmF- zZusNc3FN<&EPE{ip>ZceZW0ObcM;xE6QGJUbAr+u(wwkw^s#PS1Nw}O61-n-Im49; zl3Y3PV4K>Rj3#MB&HoPY8zzJuw5R(&L%|U~m^{POQQmz+0^S#NvpFmo=r&B!GMP;S zzpl;Q2GnkH~}A~N=@8g?0+}3Bbyj9+_UyN+zLiq zFO5naJ7x&!#RNN~VCKjy)2i2ek?OsPgSRlzxm!1~w%e>Uc=nSpf6!nipNlm%152jx zs=FB(r0mZ>R|8!uchmA!Nj%a|x4V?MA^oJWOxZgoX3!0xhw>5)rB3^MEZn^rU#k=j zA35BHhDLjhDW6saUvE7@IEQo z{02LC!J*meG%KKttJ{#P_Uxf^KhzFU^t)<714bRMD8r-lYNp7_zS2Q^#h32?hQque za_Lx=*ZUAlY-)rUm$eRN*YsNj`Cj&!V*`sX-uOlTaY)QsktFFEVE*a) zPFGzax~kbcKNQvMj-a7KezQUY=H{}r;o!}I(AH46rP%!<1lZUB^Y#hQXKKl@JG#;> zw)TR0y-?GBVqQIu)!@g??g03YFT<=7rvOMFpfo;lqj3uK>P5)KCPu?sYe?JSuFiMA zso@gY!fx?OpA`m4YY0tRJhy%Pr(=DvT3bwwsAC|9m5Y1h#R@=dUqWSJ0l=YKI+ohG zMFEZp&he23Uun0L4l6Z!D;F|$rN%9Xw2?6GJ3X;u2{r1PppJW-Gl4;i9x+CpE9LgJ>e-0 zVD`U))Mb7EfIW6Rz&iTaG7uHGeU{lKxaAwh5()hp6Ero1P_da)nsYsYg6d;RgaTZg zRCPJ&GZZebj6}hyOPHeTuL zJ+3iZZuIO83wV!O^XEWO7RIotLz2(JJd63k+A z`)!6)#+gO>|L+~xG`&YZ7zud^%`bnLqGnvwJI4A(pE-W~@?npfXnfn|LSHIldxH-A z`oCWRxa;&L8le9c;nc6t_nMOpVU)_aOb?Q5ZXnC1v$9vlu0!fodBuHhJEJUUC(3VR zri9DxC+)k`(7*qaYFk13f{=86=v~~Jo=-ZT%-d@Tuwk8_*p)16ZI62IL#4onM`j>j z)w|P)8AfYVbe_d7<@fQ(u5StFviqIi5%yBTrti~d?KO1lQ!CiNb)R6AWIR1Kcr|&5 zgR$;eovnfX3f4q(nNj4N$0?pF*AdzS#bEMy(gKp7TDR65qob-#mZ`i{tk%HzR%Y+| z{-FyMLV&Spj!jjI_8h^sms2g-4ggkfacJy@eeBSVx3GLG#=1x(w+QYnc4avu1zl5(6QS!n^}gbML??}v4=}w+qrtGOPjN?6kIh28#|Mm8tb~@4i5-esGO4@OZ_Q## zJk`GYqnV}ie^v>OCXdDh=`C3ZAw>0dpoT;!Wr31x4K7K^Nes56=60g{j$hMbg%mL* zD@qg#=G1F3GXC|2vOrq#bsrLzbxdUh}4VnqD8^S zX~V9KuePe=vVlVVi2iTw@+yPY$_qfBLY2Mk^5GJL_cjdmc?SBK^Iyd2hesLDyQ$<+ zuS~nngM5~m0_|mqR>UxVm~&!%KWj>=Xf^IL2AQ;;&EwjGl0WqLIKQhtPc=)#yg~wy z=OnP%@bBH*LHYz?nt$0M$Shs@#OkD$pER*5#Zc`=`F7ns`?)Jcpk2Gi<;vbtr1Xo??GYi19>-4hmn-Wzv16JRQ>6tIu1=Qr z(57E5qB4S2#c`EAww}ZI0gJ&<;J*;?ycS|9g1}e5zntL@$8ToTLiBOwCKl*p4E5n7 zL*z}kwqFAod(c2Zwl6-#w;_zwcO0tfgdiyWnXN`QzW9ar(#_mra$oZpMRp%aBOVag z!vtO)NU1XOKGH}t3-E*zj4th3H^Kt!t?vq(UsgNQQZvH);p-+hv_ShZqm_7N(ao7U zy%QA>wZC*h?7*Y)c|U}IcG*tV152^oqR}-L^Rf1_I^yB9CQ+~5Sz!kM3HBK_PU0zC zcO##QE=#Tmed|1Xl1AacUNUC=xxptlBA=JKCYycdUtJYgFcD0=$oI|pwK@Lq9EzRM zCmvw%hm1jg~=|q91KEBY`!*rcut^q5CTP6&1aozDF}%0uF#{ z(LDY@8)_z2Kj!uP%GUU*jSZ>n`A&c+4aHlvwjb*b!oifBacmbYMO>mSOu7Z(Ed z5*zTG?R1R{RVU205hhuRC90Bq)ryLm3(sjo+$gibr2EX~oHAl$;kI$=m_ld8>E$Ar z*RHB9Gaw9EB`jSjDl6Ff@4gvUM+`l9(?rI*E4z#Yqj}G{6b)t~MxlA=skc%A+z=p8 z-a`r~yRS$QsyZ)+(NpbrQmJw3FIXsE5A2=a&-eX%V>uC1Q}*2FTc&m<*S0$b-uD;G zPYnkJ*!@;!GpJSwqA%n`W%#Wy!2i3Sj623SfEPzV(Vxcv)Q!j>*=YVMg?-PK!k4I` zLL+G}zzh{BdJ4tapr>M$IRt*Kn^W%sdZ+R_cUeTxP$}u3&8Ur=A%7&v3Y^*}%7HV$ z6%wQB0DSx2*EZL+ZM|bC+;E|gYv`T}Ad;wDgV`xd=sh2e6SNS=`UnTWrlJ4tLT8}> z8)ppzSXP~m`I+{I-OQ&Lu`6dx_Hbh1(8ZYVd3o> zoME^Tl-g?>N$CANV&A``Q#epVOgduT73ZI9;5&o>bRwa?VVE#GC|7{c8wgKq*rNJ- zpn&{$wdg4<7ECD%Yagvgy)2LcpLc4EDf17Fovcrt+_(z6QFT-|bCekjMBZN;@dtk& zY{>zjC8}D|Cu6P&EC<*kZ}REa0G6fX+X1CscGgm@A6Os2i!9Jt>Uob?oQpl`i8WP(kP z$EJ>o?tNb|?*F@o#2+X?vxVd--bi5ID=seaDl~9}fK7!b#JZ9EJywhU3+6NQxrXxm zB?`D0qoWz+`)sLe?6WgCD;Ru7j@n9-2Y@b~*r_ZMXl-3x$iB`n5!Hn*BoG(;thZir z^7wOmqQV0{Tx1v$uS_F=%6bAda8VKdFXuKfs}y1G_?Wd|Cg_G=xLxnO|3y?jBxl5CI5Ql({&(hlhUFwqaN7kXdu7zWhs1~ zIA@EuOBg++Rp2FgCv}z89V1YmN4)9m@FS7r>K3pNJt%p?i3Qv&5OH`FwbVgillEv} zgCKS+Q{(kW{V6dp`7cF2@xS{H$8t0cQOPT+iBH}lDv}X!U-|c0f>CeiM$#x#cD1X-Q1SYbO`Uw1D zHw?PzfT!PGf?QD3+QWT?BFyW17#mysw55@)^8k3$21}plLh?(*K&o`e&kIrXiW^ye zi%XP;_@^ts9Ekt$)$+(z>%F^7&0HmA|G^PM_nqh+O<<=EV?jgg#15y>(T!_H@R031 zLQ(uz>EU6Q>HkzdDI4t{`RM#}MSn8U&5E8f*kq>F_B@vX7b$O%rQ0xz*aWXgUrYw^ zdxg{nDf>~~Fwt?$M6{H?KTWV(Y}y(T{bxPu%Mr|zLEbY(O=tD3fKAIg{itH|`_1s{ zimP@0HM!fou5tuEg@*mT>s++b5gDb=TiNJ>VJT&J@4%Fad&OVpy?b+V-!Uc{?(juB z-8bE=W4l6z3)k%c|<8rq0mfEiSrz>OD(X2gL{zG~q!P22Cl|m+yCV1WU z?z?U;*oms39*snC8Gjr%UF%^(lERxH zqGf^fx41Y}*#`MZ{yiypI}R1oL;2J)h4H^WqJT*Dj{vq)ElMEisZZ#NP%(jUL_a=K zwI5!FC1b56eT6`eiDre-#XT7Wx9x25aopy?Mr`SvkSN|n>#W$>fqm({Ke&h*$;8*d z0tn%z6k%oKh>Ti`2Lvp?fB&`*8%fVG-BemUokA`lfp9wVJEmO>Vbfph!W6rRT+@sz z8DRGVH=O0!^P3UP=R@6$Q$~fjYPp3kS%eTndYx}hN1v1Fq7iWA6y70G8Ldu3fhRJs z^ZLr1fjtRn(~kY82g$dYK})F|@U>X|gW&v?`|EnkyW z%;?d$GVsM#$2>F_bnQ+mxiipFyL@{3(|)uk#tY!yg+9Jv;pRPjmpYh|7Fw^r1lNw#3smXdwbqkt-d>?Cf6uCqa z+J*b&wxQ@t*)rkpal)0HmdxV-U&r2bST!FNkjbL}tA}0OT|15^csO-)Tel{`Gm*+` z^#nIh`>BpOe6`{Wv-d+J90i}w@*mGx+Ya+!*pq-`3`P8JY0u^C_=z+~1gcF{$( z?lw7x5e9y2FCk|472?fc$Jo6?2rx6C@Iz%R)2lhdoYO*FYYJ|u#AQ7CAJE=c6m)3d zC&Fnut7xF4f(8Z2T}Z%{7~Jf(9*W3!Zb_h#%L`%KP`qkK1@flFqSkKye=67N5rT)f z9TWhoozI29a`{ItU5nl-rn5+r@YGo7r6e01I?dF#Yw-WLO}~)<@AIro^*^>kw*7IK z4Kg|5S6vUZ1a3t4b||91S-?Ysw9q-?DfjV`w(T-%gc!gE^Ihx&g$<35a18r{P=Hd! z>F*VEHo>!6!Zu-dtIk%n$88Rv-At^*&j47O(7^o4ApX)L+6f)Pm^RExlGOkKYqm>j z!;n7;+gZBBn8J|!@N_RiI=GhpzHL7!6^z;nsQQ})9eJt)%m8`qI8xPa5b zD}j<3XCE3aB z17N95hRIM?oqLcke2F@~fSo@gIJU0bX6MYBVBYoS)c_q5Toa3p82bd#Axo4CMvxZL zhB9qaAyg^&Uf7tRfjP(v`$H9CR#J6p!PAd8I~ClaV=dI|zJMPsbDm_=YRjdze;v^Z z(LJIA?uL;@!#4t@;|Lvi;viQ|lO`(p*VQ*ymooO_P6+rM#90gwl5T*Mzla7Q3<{rW zQJ57(v8qteZWYQQ@;C^%*Hv-l~^9oK?(GWOLM-cR<9owovEiM zL3#-?e4dAS63|D7jtBRW0L3dz z5Co0%Xllz^cJGaL8r6Mm%QFVcLuIU?6BXdsj~MyN0g#tzmS!11#NfgS*DI@k0jNND zYmoXL5|hN2M{m!|^$>*#V8{KRz=4&tV?8D)jFqCwZbx{2`)-jyFY*u90l|iB&V_HG z#ubFIA+w=XQ9tLcQZL?se0-yrC?UkjBaEH{g;qD-0FI;6aQPA(>2K658R$tIOn6~hfkeRt?Lp|kfRl!Z2RRK^TZ>F9-L(@Dj%WQ{5B?V! zoctsN8PP1g(%={QR~j%;fd3N{tdfa67oT$@I_%E=a?N<=LsXw*y(EWaKk<7NC50mk z{iG@Rdl*wFdE5t?BN=Vtj37}`o@R6r7%)N$Uts%kAqHcLlBwv%Rsh%O`jrVr#)d@$VMA}tzLW+A_ zoOPzPliDaoPcgtwkwz~qfDJvhZ@@q>%C_s(N)tY0vI{lE63Lk8wf?uf{NX|v5Vbc_ z?3{`ND_zll1pqnvj=JQ2KW z#SzQ*e(6nzGTQrKqI$oiCJ4y1wIOno>d9exo4WL^VzS_!O6aG08D3qOml??)l3Agj zStCpOKRC@HuuO~ZSyE6x;(J`6eDt%;A36IJ3Y)tj%Hz_i))xXb@_ICD1ps5*v?HrtM^N8r#Sx&HT}h<8 z+na;_yX3)+yy8YKUs3URW%GDe+~;+(7v3~zFWfK3gM#Q*&BIJ%X(afRW8}eQfmUE~ zND)ij-Tp}e#}nW+Sa_Cl#29O~?#=Fhm~7JHiMerwNXBD*>B!=k2B+Q`rB54?gmmrW za0(rH7OJf6C0NE35&8oq(OrbShpfKUVT=MGt4}I_5uky<$_~SmUJzB^0%X<39wfMB zjMTA*3_|`T%6B=cuPOPwsVe4Ke%6Hq38wDwDYneBC8B#&(DroS4Gl;SCrN{QYrbD& zT=sNt|4UQ$2CDYI5B>QsO z;aO8d`E>Cfcd~_~Be!Vo`6nr-l#>06xtla#=G*TF1w?n_8C14(vZdHm#e~kSvib7e zAKUdBe_;h@eJcs%psWi8OdV|B7<=n+D%3aB?)`zfOZKfKJ80sUxwz)2oR0|)j0gpW z8~U$m#GE;V>j7LnN9KGBdKoVfAfexZ_qlNl!>|@0o;7hK>IoZzWg=z4FZbQg}3VeQ2d{3)!u8}`8Z5?k8E2l4+A3qy4zm! zzllrCoz7x5dUni-Z}?lzYa{z(>Ei2sBhK(r-&)hrHKWN4=KMofwp_Y9bltG#bBz%h zTX~x~QQ!UIpq&iTTlVsmvU-}@9ovY?Gm)#9MAsZTAL{qI*z^9`I3=={AB=x=ob9Vg zNO1zL?Q5?um+8Jn7RqmPcrCv6kWyNS?FSBNIlJ5I8zf2WogKg$|KGi5DI^3u-V!HCz>6fb6R-W)ppz}e&78srUJuMhk&d!jL{ z)shtWLMF0wSm@VT`_bR@61&ScLYKOe$~t+dMYO$mbewEiJ{UPy1s zX=kL1`b3({mg`fg5ntcljhmTSBZhL^B82sc8}FqhnSAhZ46}q_w+vIDEWk%}i0IZ2 za%{h^lcdQl@baa^4aVlnY{$#&ISZd!!YcA4)T9CYDQ<7!YSYsaCw&j0tVD;D3^@Lr zruoB>vgU(cqe9Ju=L%v8~sV!J}!gE4|1D|djV&bSnkZf zE$R_tLv|UkPvl3)ly@W{`M>@Kf?k{ocPTV{mTqs<;Yba#FOx!k!8hwz{w|ek}!afdt^O=>tKlc6bM|iTO>EDYW zmwRJwmv1GuZU&9yXJxHxA8mUajL%v@m_|al4LVk_{Qw%;Z|j^1IIK(qJe9Ovg|MNJ3h zLWL3(FtzWCM<9|}{0G-R(f#h98KsZ@pcJMjEc4T=1*|N?c9ULmT9z$h)JoRhSO~+1 zn6^)D-9!mfs!v-U3Su9+~{4MLI75z^SB6_7_42`^=~<`W4H|ME9Y}!s+d~cK&VYnr4f~>zcj2ePT8!L&U2s_N&myw}_{sQPtj!p33!@ z#a%>ow^>4xH*gGqTE8gkBwtr})ydB9V^sh?g|f2aDNC1pWe5H6Jq#^vacbJW$8`r zdN)9vrOt)66(-9f_ez7Tz>KVHQq`}kWLD)}`wzb-6+n1_$*FkiM&WapnTg~7Hu3-k zNZg`7D<>DubA-f_daP6I48?$k|ih z=5e5F{N{JH+YH0*_~xX+30Wvrkd-@T_F!>j$qEFO?s*LE6;QXK$Kx zF@24NN>MSC~; zxGFxVBeu_n*jk8j)QsAk*f6g9t@HTtdklGkGTp_}7yH+ExOGW}9jU2Gp#K)gC$9Dc zvVm^LHd+8l96e|*Pi1#Qv72)Yq&Hf=8l}omp%Ig-KC$;WqKX9rU=Um7EX+&a6kODh z83Q5r`El-h@qGm~JJDsct%_DCs~=&F$iY=H5&vqTjG`_jS~9}QH?$GF*C$VSr++)B z!~Xl6E!FXw9hYqmt-ma~-QT@jwD7#JiGxt#cyhg8Ln?}Q6MP1O2;Em>{*dD9+hRn6 z%VM3$Fk{a`R2ZO`g1OS~%z=uGj>5aMZ4MNW2}y{nP+s|B4-#?!_V+OF)D6oo8B0Yy z^S1bT^Rj<9UP1}(453%l{rk)w+qGzdpZ%7y^oq=^OzjcD*!D1s*ZW3{{F$4bIF)vr zg2`qXQsblebZ&$_zwkP4f=HT zoJLvh<{jiA{^^1JM?)fw^UoO<84SQ<7er#Ct~FoMv)P%}m_A*)G=*YnZ_fP3m{13+ zMVCnV_5-{-t9jDDxoUVSIsmJTY%!SgL5+^oBmtK8diL{?H?^dC4?TM0f|1al0Nba% zPxe14(EyNk7BjpgQoN}GJClzPVi|od*cXFwC5GIw)7R=RuilKvy)J^9ZOhbn?6661 z5&xu8l{~-{%SxLOkljmwO0%flD&KovODu_hk!azop zNtz3Mb42L0(f_A{?jo2Kn{|q`m5NOM;|aVJ%X7oOZ2>4GfUMu?FMLoT!`gC1qFZwb zpVLva7S3hH3zZG*%0xH=9Xbje4k39QG8oXE4#MfIeA`4WYnh7 zl({SawB)4>jYi&yc$XRN#Fd(mawDix>3%Z;x{)A=eurB5wV#Q4T~w9Q3uUN8rBB8qz_S%#v@}Mjj@Y{X{x`@7n%$BQhHOvak+qW&Py2YAvp63ZU+S9W(7n{HHLV@+vFYr~Vvk=Y+4 z%89P0-{$p6w0$Ol5xn??x#mX}7`@bQ9&>Mo3HzGCy(YQ(qm@vy2K97%KBk@zj`HSf zqGGgdMU+U#%0lOY7=2FxY~p0DZKijfmgdjf0M&Ppctjm=2#dEcx}2H7$4PQ-H2b+T zPT((AXVmkYL)J!jh*DLM{B{7T)#1$XqD0Myll91-jfI0cow@$auIo zvYZUKt&fQ2RYrqJfaG8aAer(IBIf4SACc2nmHP8`nXO4sF}b*Wwt36;E%Xaiu2Zc`R4T;R^knjf zZZ*R!Pduhp1~fBc?BcZ&6JhnvQ3=$QR~93Jw!*{5eMg_Rh}x6xV=8CWY30+QZvcgM z29j+BV{#OLeNU?VP*zt2QHiY7QUziDUR$`5G9>XA%JF>=0is^QR)7 zzFjeT{!-;u4bT&A^}q)fdiCh^P!9QHQGt-(YfS?r9({e4_kI4@@7YD?c%KKdvJ|cQ zm+c!2TgEx$d0gf~vHJA)-8ALYe9^gIrPI`y@wl+m^pK-BOwcV-I}9oEs9Ni+Z5uT4 z%!qoG{E2B7Zfr)Y3oh|7vrv`lZ|))2bmXpP9-umjsW+qUsl5dfCs_Ey6AKSgW8u_fFqb&xJV72lL_+CRb@bWn?cz|ez+95! zi9Wtwe0yv>5|$1KVCnef7z^PK748&X=4x`P}X)T(n-brocXrlznW1l?!T9#e+O@N> zZcRGjHsNxAC`1J;b8ui#;Vikyg!FeZm}nufUVm^hja_PH0_WnjuB%dDH(n!zysHTP znLG5cTTr+0lLz={Rpdm*5a06>(-_#(l+hrY@NhZM?tki0@i6{lC}t5jt7#^*BF9}U zQ9&u$g(J)twHsz2zHhY*FFb8!X^-$@aC}kh(Qdfa);n39m zw42D4Zt@8QT9MwCJ)$9lpn|47!7T-C%M8|sgQbzMlxUT=GzaPH7N+ZiF-uwVl?ks! zci~2%9@1c*2VJ9;#t2z>>$3C}i)ZV{2^caiE*Zo>DAwPtedA*mU4RYqw5#&e+Kc;x z;16GMFXPrQKgl@n$2L+%S-6a88A1w`V1C(5qX4T&8ND&_#wc${WCsGa_Z>Rm0n19F zrDl%TSi+}jCHuV9A?bG=1TXjs#fu>gs=kaM)wETcnT6t`<=p@6R8)eBTp08&a zy2-W#4zqxpCbC(k;QPvB&l}z$9IDYDRoE_Jg3gu^#n3d^yIuJMhS!qLnQ@YRI&?H$ za%sGnWX7Scbg_e{g(Vu1=-!;!F3S2zcmM+=-{eFk9L<6(?U>};1d-V!Syiec_ z5iW?>tFw~9p-Z)%T6Y>0iOuNy`=b$NY_u#2(#@@`|DCid-p|jjikky9s+#OwkL&tD zG!F50Ae4h{x$<`%BxFfE84)~bHYnETAo{FtgPbjZW@BUfgQ9J^vLaN;Yy%!xc{g+L z6kI+l9+emiAuHo&(v<41(0i$vVtqMwS#M#A zp5?If00M-%v=q|u=aIZ$q3;c;UHI&!0zEi}bpPR0GrwuWKC)3Qk~xlQ5~^TNo@65<@HuNJbVQmK$?(!2+JM4^ox=*AGCl6p<3|;o5)}kQ_Zt0jNL^ zOEuEbjQYKIC$}eclsLxoM)P#2Sb~mI4FMz>Z$A?E|`nY9Jvj%} zu|+`6Hqf2=E3J?M7C8JHxyBAj<`T(O6j7wg@u$H^iMOJoTkrw8i7e_$9E?}4I?jH+(;g7!6L5)%mCz-5af?`^3{UfI!&8#aa zx-KYoYM*S5#-TO&*CifF%qR(rKGTO!^gQQC;fq6=kM?>YyegxUTyQ)o2C>Me->uCl zka9!vC<#BOh_P9_JXl^s8}ct%tlrlDXc5)YgP4|q(k8heT%=tj3l3m%Wkt4s4P<3^ zR=C5_=tdhdnEYY4#&M}3=2_A0fA_nx-}%#`O1>bpu!xbJ@-I3d$eh9tL<^_qb~EEF zMLjpQMs_6RiJVZay;NKaxk*OYNie|}4=mZggjKb-m#Z}gpy^ztI9Pt{xKczNR%gYp zAu39t>x2v;<-KEQTI(}h_u_iHN`iJz{w;o1Y)kKR$LOVHOe})t4?X7rHl#O0{!J{v zs8*EFmm6MqA;SD&6u@ekX(qkt`0?;@BJ60@e1aKGu9nt*oWRI^=vPA^ttc)^Y05a6 zmWD($m^HGQU&C8IDl3C4yFBa&s53-HcikX>J<9}9@-5F4arThcC$iGQdX(X{uc=7AfriLUSG zGF}>EJupXFzU4TQc_Eee0m)-a%V8-U=R)59T4O($dc&$xBuA-VQ9tR!KAUU>=SZMI z2mC#12|{&Ra_M&OkW^G_rbKI+`uolx=!X^=GQA_tX3W9D{0Rp{797j3>{XCL(}E8I z-c^TkLZ>-GG>+Hsy9X>&Nxe^@drF6b2kd3sZX%Y(UM-wjU8_9FJPpou8P2u})Ja)c zQ#d(t98u)oN5FR?V;IBksuN`cmmeBu9!yBRQA{B3A+?;kHdN?u^5xISfB2)sU%u4P#E1kX2vmB**r8U+CJ9Dc6bJc6$*1YII z8F%3ayx+*0%!^WeASZ0dw}XapV8df81Z74_1Fk)>>DQ0OS-V9Ar$8yixzyY*9z64- zJ;Ox0N>(?kOnh`&0;vafF3=a%#p*9@c5$@luG$E&L#A-VpW|&XJ_tE02F+fBk$J^4wFig{$gz3$@E24!w~XxTr(Dm>2XmjIP&Jkk#Jg%JK4*i8>sH;FnDaNEI3OFWED~Arg}&Az;>O1DrJn zP1;3b;yF*XRA-(UTeVgJTN%B~Vkt(HJ5ttJA^1@j(BEGbA}b$nXB_Rndck+!_tNdp z36Q6^1hdyKJiWoO{TtLEsGO?eEp2N`vO=-W$fHS#qHb~ZrK#STT(muUK z?K2%0G)Vl>vIlxyfDpp&*=4|O6_`rR2WYtY2c&9O+?yk={tXk;Jt&Rw&UDBS-QuR8c_r671a3`1x2?M&nu1C z3iJUhCEcG_V!jx6H-|U`b}>J@lwTvA{D6@O61*Psad}F8sg`j*3A|ykqKk7!N&vF+ zgU5E#Zs-q^(pJ#Oaj(kXOq9tG-kIo&rlWpkA)E9LfLtWrUiA_xEmILrgnd_}`F+~J zi5@O*&-UX?TWjN<@RRR+U_m7xfc$pM24`rmElF}4WSU&tj_|1I>$( z7k_eT0B3iM6^WkK%hE!4rKM#~4({`g_#5rvyIk9MGaQ}7W085y!d47eL^8iG*eDYe z$rp(%_RZt<2iMJ`w^0Bt+=8?4eRu!`bTgYy_dyh~X_4M#@`Zg$j*3}VAc`xhRwgq5 z-(08w-Ab|4I`#OcNJ(sp9c&CtbV069V;!i#DYC0}02LMyO~f~t5R17!;N~swW1ndD zay%j#jRYTTNTD9nniLz|V`EVxtF83;x~`4)F-m%17EQX@6a}x&hkFYw`kcb?d(Lwo z1*mvX0v*X!4;pjqZ72&Lr;vUcsH8F-Z%i`P?st=vwy350?$hE$r5wbR^KscHhM|*R zV@Fx6lrI7uC{~=6f7`R*6>44do&~B;G`161Eje>tW}|~a9cZPJ+_L_CE803HqzKsq z!^V1E)?rj7P`)93A5DPQ!?Wkrdu>JVBxf?J1m=M}W?U7so006G{@0~C%ZU+o&U(s7_f z5q%~@eTW@wgV9nk8u}5`6@D}_Pa*7{kGi&8%LZZc5f*KjZQ_r>SkUWRf&nzagBo*d z1`m!jI3S=8uV9Y|R||V@O~nWnphe#)d6Um}kp0SBuW){0HuYrsy#{PocRP`s@8qn| z@F*{ryCa?;PSEF{9)e~fM6VDB0GdaG81oYm?k_feJ1ud%-WGe-GfrywYF=(pDi#VX zfUkKE)@Iu*UwP)f2N@^-a)e%7;uWo3SI!l&fP8tq}LbDFvaUU2`Y!-N(PucM&fen!8n ze8Cx-my6b$+g_R&I!yQ5k_v>akl3R!Y=3_fOsiORc=-|?EqlitTi*TcxQ zJiP7lB+-X~g1Mm?-{|95A@6axC&~KBK}k`tWuaoQl7ra*C>=yY`L3pW0RsSD+IO7o zU}WebC$+3MOlX+7J`}_orZ72EEOA-hs2t1BwKZ|AX286rWB%@Ns3BGR6HyKO(^pz3 z$3Z5A`QIZf#XEPuEY?@k)oO9jsD_Jy6M;` zs6#dGfwZhWu_ZFr2>_$Tr7^bdy8W?t6-cV4KWIlNRJkSL>zoK})8mtjZxhgTDR&WU zp8V{RlJL+(VUarfevYq*@edG*+4S%r$K7;#c4FeDywXojR;l3;P>8A6Uyfu2bBJ`( z%!7?!9J>u|R}5f$gTKLngCjiD4@|SFf&qF4Ye(Y>O7c%8P$;DFvJF5fvar%oF+s1x z@5h8b6Tn6w-7}4nsf;$}QBZp>r>vFqamnjVl0!i+FuR*K8zg5`0EPD=0MVSrPXNHd z4-MKISuCqJdP}SfG zg!ESK3Ad18S0mV~{ZMF9hOm_8v+a6H;ngj+x~3V#NoQ7FV6J&(4^Q|ZsuNW#9o=;xCSd+SI&kB7d^t8(-sU%T zyz)>0(HGCeQLM;mugA9wgCU$Oz%A4Ez%2qGY$3E{$JFnM#pUre70X+d+N**1w-bWo zswC|0kVWp*WhKNDFVA;o4ggenr}5+%&e|$#yk3e~GI>Ddd zxgnm5o#7$Kc=c=pu%aI`ibB!cRFkNoDA9%ol^49e`7?T(ta|3Z*o8QghKQu!w%`8c zB<9I_by4R( zxf?XwhLvk_UqU-Pey3HrOR6o$Z+eKEKU1!xqS4;?02}kWY+DkbQ-}5!OBU&q^tTpX zjpMwVwKEe+5$`KyT(;Mj^3gKC&4gZgSN!r?{E*<@m>OW%OOXG89bzPK3a_7-wF+&n z^nn^S>qqLprBz?uxI4B`=`z$~J+lsND7y{1in7aTEnIL#nv`_^~Z zkS6BBP-*ph1w%P8@KxZRzY&{yz+In-U`V-;Muv9V=ubZH%S1@Xx>X&2?w7rDRU>-v z{5M3MTWjX)DhPQ^UzXDUkV3zQo|$^semKn9nM#=*+%JbR-A!hD+F7ZV)p3n8>Q~IT zp8nIop2_dkY9**LG!E=eL+KuPGq-@^ zl*J&G5k+`tVH_#C((z8xPao#{#Yyw$2GLI`m7I*j(%`1KZP2$4|alsq4np|H$Y{wy}n{5az{P6_@atOngBS%QD zh%1x%8X1QdCK4im+UoBKTf1`7pj2inOa?vKov^@~lNu>AkOkrf>*d{qH6mZ~utlmL zzrjUmM};lG{_a8rR>}b^*m1Nu9vGVX_C!YpR|s(02;~MvvE;_iy;w5_Tbq*Zu6ByT zpgfKM)~gb6w5GZ$D_5QVK7x02FOI3dRNz{~F7~p+@yQMRfe__wW*#~0TfO;|eXVa_ z3$3=@^kKUTXHW**FdwVfOHW6n6$}M+>>u8yeUY}Jh6Oaf|Dq2$q#8T{Kvg#-?SXhu zA1dIcMme?%11<~((787gp)K?ZM(UZGE6jKtlp1?Y;BC?SCIbK}&6g0Rb7<{@D5-2Wgxc0Lh+G$~$y`Qv>WjTd^^<2LMaW_CXxP zO)jSJuuuvzTsJSBi16tESZBMhOC}0_O4SklF_$I3g8cRRB+{}n>`UNZP1rS%Ed;R?xzvN5^0GB04n^_U^YB^pHS{*)sqFO<7a{owk zH`qL~hB|$i9h#5L1YAPFK;IQlB!IHca<_&oKt&Ba(}5Ebz3_0Xr0ts@VhU_dC&<=S42!gIhK5>f5ZpJLYDo4|AIWb~VJ zuZFx^L6=fN{>N8iv~oKT6J%~EZPY8JMaSs8QQb(*B3iH2RI>SF7qV4K>f%>zcmt-MPcw&I|Pp zZSp4(p^`ay;yva@ZsU=&q?`)>6H+f^8PxBb3L+i)9)hy|IBGF`NLbC?g$3sS$LC0W z5JYbsM3)<4XZoe_BwZa}Mq^AO-*w@Ghb3j!3D$^g_o3N~Fwov6f{WTn$gLxLZy@*u zF-PVzwly;lF_LB$&^~RTt;Z%QGp`?0^r)tz;(%I=Lc1XLoY5@4njzL%yj^Own1CK<7Rb041WX8SG)!ZP-@I@-f%5cy9BX#irDdbcIeY4!s ziSazHi*?VTa!-W0lM1Ec|ml$Iio zYx-PneY8WweuQ-~d;b@l4KFZ3`$zYJ38Te)$R$My3M2cgWt#*xAlgV^26kGCKfmrj zM!N>WP5iAAd zY@7Q|UJn2v(5P1zXBdRD0>q2-=Wl51T^2CbGaVdsBS6?{AocLzJKym~IbdH!7q&Z9 zPUOvQ@YI|)CfS_?NJrYz=q7ZeiOF_~>sAez{nyLKh7gK8nAVMDwAn%=3 z-8IIYuji@iJH8o65~- z1?k(rHJ1$_-67W|e12;>E-+hCg_``3)kd+#)UW7m0>rY#WP6{s3iz76EDf6$Z`&Y+ zIT@a~v!6$=8W>mO`oYW|Pv0)<-Z05A1}aqHzu9$u;rD#Gl)}f7%inJIm%Nbx$i1@l z6X2qrmYwV}wU642fyjjHY5a?eYUKL|*X0|Mv%ny~r3DyCO%pQMXJ&vZLoQV$tj2Gt z!5TlAa^?^$q8qo}q^{^?&yq%f{>bvzWEb9QkB^aF=xj zQ`i}I^0BSj=Jii_BcRWQV(2;`? zummccc9VuptHR$>R0N_e-j0>?=rxPd%}Yk)4f79Yng$}N6Na1XmfpB-F;;7vowg1U zkxKrmSR;qno%zZ%7c)w*cY|Q|c=axA3~QrHY|R^VV%xUXf>Sm;8OHM^kg>xYKekhTZ%!PC;t`;KZQj*ax$_2sw2OdYf*ffhn&zqCcOQIl|!b z`W)IU2_`>dDOXu<3)^rv8qpF_7mDR6BN4dse8@{E$=?J9 z+osuff>q93O`@J#Etx0k>x!d{FGgSh<5G3#DgW`ndjcNsl2_|@AA!B0Hl@IJ!@(*1 z>G$YQcH{H&afuZ*n-q)UW6KWb&y6*0_xd<4j2Ge0kqhgLT@YaHr3gzM+WFcy!}K`j7biha|T-;L^W{eiwu|25zV^l@MEj@g<-SegT~t)3|%Zo%=I>h z6qnkQvYQG;wBcz;_nM-$QcmWM=tuQG4yv0Xs<@?fienYRU+Fp^2J-y<9y$l+A6Z2C zdT&P@`O}(TpOYB1qAFKxD155_((MgH^O*(E}NDksw{yAB2) zvIur4)L`Q9aJY9Q)WKG0~P|fhosQH zDcL{hp?{6}YuT5d6x)g67q&u+z{4TT*LQM>046f*cgJ&-M|J@irl7+QBY+UNJ!_?K&w5VXVd#%bk*0Na708MZ78|l=9iJw`)l#k zo77@Y5srWCby7`wM8Vs!+Kw|Et}Uo_HzBp*yy)uLg8{Ja*~Ir1Ot@w4#d|avd~8Lp zYy)Te17%dd((YH;Se4T=fwCdI*TO3d!>cuoJO-$m??wf^v44L}VG^|m9|Fs(orm}O zJ>gUwMC*v4Z9(Hm*~2&Yd9aeW_XdF&!qX+zgGAetY%goYB`&k~5k;k~N%eoNuZf=* z`OZHsUUV%Gf80g0TyvV&B47#RKzX%aH>H%(LnesY>bhu`9_5H`@m(ohO)98hgsp=rnyNT7x$=>Sksp=WCrr&R@4T?`Jh^JKO6QBa zPbx++GPLYwx(b&^m9bChOm^GB@}Lc<9T*O@sx(hv=p5Q30h=#305r0}TKN;lS*NW0 z`uBNtbaX(4*M~=S3g8Xg7^+rtAf4_{@IbYtlm?6(M`L#2sa50_gDRVicdMG zSx$GF%j|nTA4NWeVWsNO2yNzU=?RPzJrtkGa$mu26=$SB{Ltg6A-y3e00-E<%f)}J zgjKvL{Nf*%*y&bNKtcjU8`g0joz=HAyQn}zMe(OC5GG!R+l~ao=9a~C6XR3pmW6%l zcn`0mYWlBAnvFVZn0?*|Bkh;=%U>rA1?mr-lash*FA2>F+~z^Lm&xSG z|LA*Ix`JF2G2#3Ejv%Y@IMV2Wyl_3oKp#`OoN_GEyk>+H|2FdFOhIH3&SGTZn)=k7 zf28;Rt1u9HTkam^NdoThuA!ffhpPt&?TP)} zRm4pUjA~`qvT?MWik~I_G)Zm-5y1srEZ90>%@%;^SZa*Z{rw}gYY zbXj11n-lZj68(YNk>NnI9X+#?&iTFAh1TQV^@E1>lze{12<6z5sVM>GkGsP_^@csy zkwWcmH&M)R?3^Ykd*`}1>+cl#@6^4)-U+J8rWeM$4kR>V_R!;GwU4cff|HCNx79{u z-~QnsF=5oIX`p`nD_ z?1Njg>`@NoJ<1R2@~!+Y@Y2x9Ag8aBCh@Ubad6F(#tM57>GgHbcMc)~ogHHah>a$B z-pk!ca1Gy=CMBfBfk~eec;M3oxK>02?uX%d488Ux-iZI(@4+?7xjwQ)L|%{JI96jvRwZb7welE(Obkk zjc#EybZlvn7@T?XT&$@gh@35^&B^H!!vP`p>RZz`_kuTq<`L6|S91qZe_Dw&Qm|%) zoy*tt-_Je8*|jg1k8?*TchOhiL%2eP^gf=NkW-OIQvNNZMtI@elAn#UOa0j@ge9}P z{;P~ni743)-x8z6pVvQXUa8%|&y{-SO~_KXUp35|3P{;1{jwj^B2A`(7Z=9pq^ZK{bV z+A$n8yBcP;jID@yQd>XAlkQIB&+VpG%u15r_RfT?^Bwyv}N5isE}ER zrzb05>t>&u6lts8tGIS$_ZtNFP*GsLv6{6tMLjC5vBc-?Mfc#$D?aKU54KN<6v74`_ z3G4logwPqu(hol-85!o93f71J)91Nmuc9cgI-I_Y-kl~lkFNvMeNY-@;3EZ^0JQn> zdHBDOrm)>%&p&F0TBF~e5T3%N$ogRo9FUiqw+SyTewzwz+8X|xp%EEQzYYSTp(+^M z0ZG>~02R*RJu3WC5lpWO0-zDpRs3F}+`HB=n|(DjEqu!JWb#cn6-H=X(~&`0y63c5 zjf^DTituK+kyy-MCix`}cwji+_MYM>3XnXD^ty|HInoH-^nnHRfX=VRDZWPFea3Us zX)oA>QHlDfIrEoIH9w3)@e1atsZg9hy3Vq%qS&UPs**ETm9%k_lad@bDF60vWcFTi zGs>Z;H*6C#I0I`}w-pQrgdFX~9V|nDQQW88%h>M}Fx%Pa1OUp^Wg`Ye)AcaC#Cvl@ zzsddUlM+DmeYi{hK@PYDfZONJ@@Hw_)MbjL(+w$JmtPM?Q-Rtu|8b^ONf{5#<}ifi zOi_KFnQ)2YEeuoG8;RCKu*aL^v)#PG0T!3iBI!X-hct0dFcX5fC zap@2^g@Az1_CQ=LfU`s9B@_UPH|CJ#kLp{?T++0T=)v+Ot;xGI3dvdSPV`{fABZ#{ zrc(nx`|HR6EU;lm4pY2A&PdjzoH(%3SdwSY0f4g%jppA|(Bx2YXN2wJPmzCV?K=e?AY>E%}QB&sH7< z?c_@kD6>>U3Hu%zFyQ9Y>Ydcb-6{K`2JEAKN!#;6ihgeZ4m0KG+%Y_Fu)gsB+Dn%v zs7O-ewdw6DaC#pmNrmk~u3P5t?JF;)%TyOgT%snirg>?6#*AjXXE^#iEH94pdLI6! z@wpL{Is30W|39Xm!=uZKD0%rEGEKyuTA_3Y5{m_U2N?;& zsE{gaT4yaMEjjLFVd)M6>jhIg)hY;o7G+&mffxzdru}R3I$TjR-_V1n8Y`{fj*mgl zr-N`x7Uoj(VyWP5n$ojvDP~a!_oEK6($O9JzL_z6=ff8~wA7=MPN!$jG7Br^IwCO* zyW@IjTP*1rtOmCL4^@n492y-j9~}=k8fPf^L>X!yK~lzUe^UeqSao5 zC67HBOm!pt>=`V};G#13%F*jl+C^ySMz6!c`Y)~Z0WHDaw!M`2T5(v|ld%L}yX4ig zZvB@o>5oq~7)cJ~=S;zz*heq5hRf9}x@(~hORmoUif@bG;A30Eel><2cj1OlP3bb# z(-Q=)N{tKsURV}qO^U{!X`=?3Fy2M$-ZG|faxV>Cf{{pyog+xbAiR}rRXpa0tG6uf?Hq~$&R?GO*`L}6Owevs#;JN;VQ)uNT{xyS{@?^57$M_Gc zO(cgFI8K1m|I^sLk3A78^Tf=niHHA6zEp$q%ry5afz53I*xoj(3qTAA_Dbx(oS$KU z{hdDUZhgxQ_7^fxqha%s-MjrZN_3dAo$3CYciq4C&RoO&a;xMbICKL}q6<-@v+}It zjQ{LbMx+(_w}Q(2vIb5Lz7fI?6J!+g!aLZ{8 zizuSH+qX6wwydvd=vF)Y8?FzF?Dxz6jXy#-FDjuN91fKG{QC!HSIeRA-*hcu|w7!9S?)WR1_e_@5=VL{of{ zU?oRzo@j|)YHX_w;0A4cr*uXRLCMoC?%3wylo<{I>htsM9j}bPNu%01cC?o|7|~7C zY|57el$!G4NZ0l6`-(Q-^Q+z(TYf2O`K?jRKRWzD>(O0p!+Do8bzV^*Mj$&RagYT6 zmv`P+gRscvvRu5aWZ$`Gm+;q0ngpZM#LAAxlK(e(y#^ zpR>`qvHPeF0h;2Nl79*}5}p@8cUU@DnnD{4qQ<4TEgC>V4tn(Z-aUSGe1_xfhAWj$ zpH~)=&E*r$;G8GEeHdcEnKcO&1-ggW_BF;(83y+qO>oiBOPp}6nTG1$O3GR`Gpl#c zN3wiMZZtQ#%$mBqtV z(0x z{(omDjR`Hu##5(zkgLY=X9?>)^0>Zt)1spvu!Qf-Ych#tQXBkX{fuzxU?cb0M?ud# zKU#X%_Io1>;p|tGH8xr;a_nrUKstWk?o9X-J#l0Jie$N$EOlg?@EF1H;s6hShpPH4 zff(X|V^*smQ$g;OtaZmcaCr#0=9dx`+y+tr6y|hYb9b>^ds)Ke19gRz8A>)Sym>mS zBLPcjY%&5^yGw4v&4Crq(p-gclaFYQVNv(etg3N7qL7eR6cd2bzHqG3!f_E;_+|!)ULd4lS~VTwepgI^2Kg(qSXS@iq?E5$77^aB=fWjm~tH=8AAYy1Jvw*1K}=20G6c}#t#*X7boGZSay$9 zt_j)8tfuqVTdDuHA(_9F+HM@#OnGNNvH+T^v8f&J4`$R2RL124Ra z3J6*)N8W=}@IAMu%u!(JAvkeTS%UK{${!xS`H6BdY^rOugzg8OyEOYM!W~GF22A~+ z^LN=6K!_jKJv|Wei~tBO!-@X83wTU-4g9TbLoN?SO{r@qmk1s}E6j*e2-n<`-(M1!cUM06gILM!AQMFycin{fgVSu3<3F+?c8oEnbYLqTTKxr64B$brzE=iFR z2axUtX=&+hxP0Gpf86K(IluOE&R+YRz0TTez3Y7!4B0W(`<6)HVxRxPKuUTtT0}vBmtsV z0|Vga0tL*;^khp-1j=gDph|2&C__(pE`}*+sA~=XkSX*FP03>)xVHh zsfm88^{aVULYnv`3c|2AN9?(7vUXhlI>|?leOEKq+FN}3n&<2agZIRJ@K-S%yD5bk zn@08lVTYGrpyCAef2GGM5i9jSDc$M2*mth8Sn@JMztZ)4^^S_>4Vuz9rhibGm+mg2 ziU+x$BYjO_iFxIbL&J%43C<7LRpD|{hnoVe#V23+DuLkG_2 zSiG=SLeb9=?!z02Z)`}MwWBE!Y4o~ku&>Vp9`(DR@NIG-(?-w3WCr?rp|P|{KW%kF zynH&M+(MF6adt7T%h6+2w?QLa!uw2nrD@VbygBgdNw}KmY<)T_>$~+>nTp>npUd5R zW&`B&NP@!Yl)HbV9|j)mhxH<%-RL0?uLl|8+CzfcespQQtc2?F_0Rm%(BwwG&x1&) z>d0!AewQQW;2OUM3k`p_6-#-U2F8on>s-olIZi9MNDcBM%6d=0_B}L_urcC3OrcAa zCe~52w1y`?@{bov*IAH@I=At{i7bEzxhdq8(ihC#fVBc^of7vlfC34e>vhcW;$|Ol6WABOQTC$&b9~u-#P;#l3IH+K8oV=Ntq6NAXNjd)32jK9It@LG7m% zz;%JOF#_-Tdy3iBfT9sdHGP$CL8zbLSXv@}_Y7(4SuWS#8v%S|r;X$TF6#yhBUpVZ zkPb0_o(^z+#>y)|jV%40!3^FeKf1{Rcca0D?8u+fe$DKY<%80e*9Plh85`Bt&ijX8 zzC&qvBI!TMVctbdabD5>{jMvU7X&6wT}i^MV5@|2)R$PkUOe};ser;JI6zKlByDNn ziud?{@or4@$|7%y1G4vf#zm&_I_hJe=J zx<*OIAx?h=eGr%*@Q?tvPbCIrYcUNPG%_O);?f3uV4X!MG9tn-a#o@LQWLU!mb2;# z7#180b%Q-+PjwNDlyETM>xOpSn7$uKLSe3ihXMG=JN z6d24F6nf0Wvu4M;&;zwz4MHppo*S{J#M+RYA<6{21b1ewQXKG#3qBx0o`r)u2F>BU z7KI`vWPxwv7z=$QP!myn914U`l;v zuAZYIfJ#Djnj(3^4~2I&6zY^eUn%(hv~8+%tWwuAN(H{x6Ct~!HJsu$IaW6sC_w9K zIRYT-z|HeQ-Q!DwXw*3kbzC9J_K*jKK2sf!rwTrsBT%)(4v`l-dWm6&Wsi46mtLi!I`vcj?iF?*=<;aA@&otg?qAReXBnx zzW7~Nmvd$ffjhrN9j_o6n8a7r1jBhl zC$=2?+f=cc0RbrF+3Nu|m&6Jbx9WVrl%I*5+KSZc7f@il6^j>23(8^qtby9#r_fg! zA_K#NBGAuM(7#ohPPIG(m#{H?*N;Rb{Q1kcr9u39D-+-+Yw94HQ}}u+3(O@GfmFVI z)PhEc%FqIMiDR?aRC{TtuLg_z|2B?Y4tTUZ4vm0xVzE!e5^*>m@ubQvA3nvQ=w1|5 z?}xcpdl zQ-qD^=WtWQ_q9nD~pf+n10SMgted;*#1rhibNN&qgI)c zZrr?-Kb#+_h1R1I|7+u>Mkvpk4wyaT2eXpoj0bV`JrQBo^>*JffzAezN~gpK(r;5n z1(6;isN2=aYAKwMYC}v#jGTNr-%koIOtehrsDy{k_z^m`;F3kVHy&RG6FdB2?!bXp zL~7m7AnT3(_&MKU^=mEfi_5BFpsZAMOV}J^#n*1FVG$0g-q+kXIrqi$c_Yd$N0rno zB6JtNFJEY3ugHA$w>tcz2t5NpY~5pp#Xy(%Wn8-VpHG>w9-Slpc5N2=U2_6dG7wi*nU@~GtKxi2lba5fk zrkbyVT`M$22@`n4QB{KEiY1g_C}i~NejXZbx89DVPvOCg1vBhgyfPm%ai0yc)>Jt(wF;C z)FU;3Lww8uGiP9~0jCi(Op$`dqWIDu^e)YUQjiD$NkVgcul!dZr+eQYV{1ZbDL@*F zQ!dD$@UvKe%!1ururHoT;zR<(8=J1t_R@)S(L51Q;oD|Dem#%)iJqoQ^j%w>VzsbLOi~*cmKq;51h$lnw+ZCT+ zp)Hgkd=%Y`n^d4-DA@^&AOh#4Q2zB(eBQ7Uw3&(Joz0FwiTZ(PAbPhXg)j>RrcJ@L zcnrXnIbFpI5i5@M3*SlMXv|)M0L`6xD67!BV5CC>z%9YG z5@`C!GuF{ zZZ3(C^@}jx&IXsyRZG6%e_5)pa2@s)q_-&w^Lonn-c@CMs1Qq$6CA&#kjp`D#S=5AVa5T904foPQweY!bD<%6g3DC=Ahx6ceDUoyKouj{ z(P$bF9bL*4w-5n618-))&F94HF{@Cq`CqwJ!kby^3MW;v%+V`w*3L#z>EO+; ze)^S0rrE`sx_t!`5dsrm;qqZ2x&sDh)v16|U2)3wJJX53(_+TZY@5uEHuiaa&v=)9 ziGi?P8WgFI1juFddEYC?g5m17t(loc5E2`${7oN(rPCwB)LES{qJ{q(hN5C8JK4MR% z29Sxn7sw!X5j4Ud{WTj(zx5dgrfgJoQ@#bma%sXumb}(t{{LljyIs|~!Q-ao_-UB& z860ckc5CVNol+i6sK`=EK6=9C84Jb=4syNMx@5}Q_TR$Jm#3R-#v-V$@d%NWYerd8 zDto3hJXYu6m8fUeZ74G?H-6VC5XatW(?CZU&@+oN$3*s zFG+pv;@FP$xKfn+bu^oGy&bj*BXg#ljJDhU?*fcR$(959*RM`f-3&|Lys{Qm#KV0! zc79*;FKC{$J3r_v&r9i_NiUT(QsFie`<1U2M*3BFba%vgSSfxTiPe2ku$3 z-NZj%ni05B_k6xX@^^@tNR3%(qc7XUjFN4`e@Zmw@BENHKBRO9e#Jp-<4NE!&7 z-H(ygjFj#SA^D9W-6qAkGIS0-yIhyQE%9Ofn0UoFPLL8*tASwYzIZnKmaXyeYxfLnjH1o1)1;Q`oqi#3_1l4yxsSp)rA(Q_Coh}l!q(76?t=YEjvwRCM=KOQ$EJUc ze;v-U+zv(ZXXK-^SkOpAmvlIJ!NGX-A$H78tns$jq=3qg_l6F^LG@xU8xBcGXd)*W z8j@O;*ZANQ;(~#S&2RONju)8w^h$GLgiW)N`FFfx9B<##T#N8>L2b&4gD*YM7Yd4B z^ZO=&u97;SzGFkPAzx;kfTx{ne~pt{MV;DfwM+7ciPF8_{wPXGn6Ag?L9>!Fwd9tM z*p6|>OBqGm@)8xKVXZedsuL9Pk=oV~CZCE+1~N;g9+hXz#aGO#GSlhy+rR}^ zbIhDHiSa&16m7b0j@tRL}jwPS90(F$RSX zAH6(V2}^^-m9V%*i;qpVd?h!PpAsBM2EDCf9ijx-sn5?C)VX$RR2Q+U&aG+JaYsss z2`J3I0gQo)^Yi+vEe#GIXO^Z=7h1lnVifG}*GUIeR+bb?@9+&|f8>=*`{z)?KqWeE zgr5CbvQ5ILiD&hr$@PW_M9ctKAPhpNzRj|ppczTbr9?gPp)RpTda)hB2>!vo ze$}*mOCW2r(};^ad#~+ni}#e*(0U%n#K4oEj~{99E|RP4{^e)&Yj(n9`h!;d*!e>cTry;lBmM zOsy=m%TEX1Y>Xrt7T2=O2^Fk%2$%u98*__AY%W2clqJR!^^91rHZCZ|uqzanPRxrt ztxg{v%&>|HN;m$#v5e!a{4N15X~PDGQ;#e5o3wU*#+!5)l<@plzQmdcX;1G4{`Ja5 z7|F|!Ut)PHO_1LQkZR-XxYF#AbbReY_MQd_R5+_StR?34mpB}E7-0DjnvA2`?kRdm zNskLIXLN@zKF@mTARqs$8{kvp&XXukb z^boK7Nf7sPq(}IX88yf=Z!>g=^ zA=+a_1zqowL0dl7gK8YNjUM4`o|8uoiq3bFWXlxh_W<5gobD*)8We1QSc@+tL5Slu z?vx9!ZL*CF8OdzSQT~`Fwj<(pSY7n5rq19`{qj!ws8`nHchZsRu(^%vhgsH**6R$# zuO6~8*b))ndX&>P(2wz9pT$_rkysg;N^$}irk@Ch;IQ2x^+_Gk0!;AQQ^%xy@^$(#{8+SYKy?u4iPjIx;_8jpgPp%m;cEzIh7r&se&w+uZiMx}j21G)ITx zDY-lDD9eT37@OTeaShX}G;wl!Xtq*fZg|1*eS=QxM zPk%pV!Q{}VCUAoVfiG(Fs|+lNrdNZPo;ihj$!lZ48CVwmUp9;MccsO&esO)d_4c}T z!)}?scg}#nFf~f%?!iGAt`{2Rv?iWOm$Kg-`}d>2jkTlyO}s=9*N1TiJQ*R9w1mA2 z1;ncO>*~MPSq07WGY(^&bK}`u=zrX%wvJjgN8+3%iVED=4^s$IeqFEt>9ZZFK=kS1 zcb^5le{XxL>L^i(%_kr+7Jt@$$x#e}M>J=coRB@})DvA42%9pXp?thbX7ki<_iHq|?fyS38IzMc4giI-BzmWQ1Ql4Hbf3dXi7kpWs`8Y?PCMOHn2itQAM?1{>>(2E4J$I_bdT3 zCG3ZUYUSX(yX!iy&b$8kRqm1ez+VK1iy|$y6PEAxEuIGK{wF-T>mmqQ{(mu4$}&tI zH|G)eKd}|pi{Kwrn=%2?{`q_)XvJjJNq9_Gdq}C!qz9kY0* z;%~O9L24o-(h5q@G6=e}9PV&nV?KW$ff6h#O;+C6u-_5EmA4 zf0avUb11+~g0SlT|46LE5E_c`NG^WQk>!QzX0c6Z>=RqMtBQ zFfvtq+SYXdqv1wm%a~mdlb1uWuH?@?Lt`gp_C3fz1yVwGu*t(NO6h{=qyTK6!o%)b z)5>o0Nb2AZv;JB1V+E$i)Ht(Yyw%2;-h?DDtuYPO-Yb3RvurM~XP-p2k%@@ABNF_lr#K)60`RR_WOD?R$OrTKO2^*9%K1WjF# zI1%7tKY~H~t78XiVHR!BY80gEp9)C+KwktMCEVFT5t~UySVWTQOXI`w zLFELZF&N*=o#*lF1 zo}933EdcdFGMH`GwPeAeOD-B zM4njFFm3y@8|pcLg4Lf zc5&;S(&P#x|Lp6JXB0sdcif~y<3Z=SVwKQ(oR{G^ujql7G`@?OnSDN3-#!BDLJ9M4 z`PH8=!QA?JKr?<)h8H=Xi{WbNQ?k%m9?=jvW=}$YdgP6A^Y{s{=w_D}GA&dxvi$1O zD;-|(%xE|+td+{`(_`#AI1i>DvF2x$zFZCdu{0yLY}Wp{kk4lX2JtN9=vh%1DxL+M z{133nVzJ6DCY-+N;$|YTgop z*ThR`>~3Aa;6FgdKM~EiVl?;K)-=dXhFFmtZ!kZ8g~L>n2uskhKs#!I+h2R zThFf6Xh3pmd`X_gb)ZBZ)Z5Ye>VscH?8i9b$)NfLNUNHhLQS99Y9(aP=MVIVQ23jI z+B6ha6a@kme*SD)gf{J#hQLjAg(|n=myO0P2jlSZOanpNxF2|PIM*P*Iy%o=D}#Fd zFVn@2;gO40npwJLu?tZrapSz{cQ_DNa^94>pGveJy*M^1etJBQ5Vb*WDRcwa!3Ii- zUWGCCUr3?N1%k>m7GoEUksM`(RrX(tUnxfE8%{=^t5lJ&8@=&7CO67#+y)tVSS$v) z(F2)_=0q@x8q}Inn?KL}CsGXF)gF#S*-FXn=V31p!3f_)zvn7|tg!99@h-zD!~&Uz z(`4%qO?{kG)`oihmhYGIdTLm}>sb!^l?7~;o5dbZO#N7Lv(2)8H={V>E6#XN$``>h zykNi$U%FXmGV8mXVuY3DV$xQy*<`IZm5_n_Nz{gm>kBNt+g*pTv?>6bG%41_4vH8+ zQZHGKCgf(+wZV)qg^vnSBD?<)9A<3%(VQ5Y+QP6udI0qV4 zPNY&X8xmag7nW5FkWh|&&;*2Q$Yw1`i9d_Rs(3q2<&!YBA8uPzLUt6)ZcgV)n{mLy(KAH z^Ox|!f8waY3J0%_Jy*+3KO~(YbtWxc@W+OD5Tz&NPXbxb$GKk<-6pS^eP2)cgR)pI z$^(9LdjwI>BnADXux!o%>%e|4p;k-5(!t?-_FlmF+K|(?x)QKh-`uDTX7xW}N@7}L*o2kI(rw>Qb%{x79W5eDmYMP47| z()7u@D*v=r3HIqFO_IZ0k5j;nr5MYSs9u?X_0BKhnk2zs9gap&mMi5aFM|Gkd+XyY z8l{=6X@JuoWSZrTv!dcj-m;f!TQIGHmqITf+T`zaim96{Lv4b)DFL<*2-kYXn=V88 z;DQSTilVgpMbd6ibAfI98jz+Dr}QhG2FQ}b8iG7ZJdkD-0+Y&jzt||PjgTBM0w;%V z_c-H3^$DN;m;x98Qyi}tU^vRZ%;biACm{-f8lbN;WaV|RM3W$S`!Yhy37}kS?ehH5 z2M?!~U}xG>S6S8u!~|@HceMKHQ|IQ#2I;7d!%R-dP`26Wi$s5OxKHPNrZ}7fZJ`I< zP=SoCH&7+leZivRPTjF15ZD@m?H@fJH%whUmhM#}fv9g9IA@<;D5nX>*m-w(^NHF0 z*0cdVI8#5i7(GZ>UyYhWY5{GMecF;6d^6zLyvvOg^=4@%6>%+S)tpDfp+6t9t*yMD z4?qwg_R;+WK!DdfJop9Sro>Nq!|R4ydK8ylYKsXReN0sAQa5(TbZp5&mQ)EHw=A38 zk(Mx@KV`mDao6=YvvX4OXrUF!Q+_NqanZn@{dkie9TR{h=Yr^>%hLULfat*ko8-S} zf+kW=d@Fhp&y?<#rcWXPk0dWAsNqo{U*fAalfhi@!M#1)F?w$Nsj|vFbM8&X^@VIs z$aUZEa`YgNn!nL^f8}A*Ygorb)r*0Aidj%(7W66zf=}uLKBcoXg9s)f^2X1ZLkg4K zGVEu=c(lW)>TFfB(XUYGmQ`gLvFM$ZSzK$c`pD7GX5Efg4!sGEZb56Az2o8hh7dWQ z{T~1h3hB@653@W7%)3(>l%Y;>A{c0#2ZJ_e)Sb8<>)4Y|=202H>*=`|cb?Li3kh81 zcpmIcxm0eV>k2z493?FU%9IsWp2gp%R2>8nC;;LFrK_cS-(PL#xhx30 zbs##o``;{{%CAoffjIvOJS$W7B&6CS11(#7p7MM7N8$<}h&4NJ&Rn``bRyWfBft|h zNXoaZy3E(=aRgz#tR%-!T}Y@XZcc_pcE;$6Ky@@j$r;+Ybl>B<)-eIaXO9j{v(){G zUsVGL__qA4acw)OhDEU8-eexK7sFW)&U!aGwO#_hg-e-rk#O)0r_87PNlUFSZMg58 zBHEsNXKswF#nhfqYtc3;@O0>kZ&bRv31MF&Z6o_ekXHz!I&HWWF<#5-SH~6nB{u|2 zt{YsR@P*{?`S}uPH{?ci%MwH{vT%8k8`&)@$3?qL0#J)O+Vd>d82XdP?F-uO#-ZfeXQ zCisavBVth)ylSYRBo>Z#q0|>o$rikoV~5Iz{z2@itRp^BTy@4On)@m0mn>i&&DJwB zjs;g65@{OXvg=N!x%xT0{DWaZ-ZhT%XZtwEpG<+2VY_I})2(L{C|*^?46Qd&2otSU z>G6*(Dq910$yYY4nM@q70@7cM2PLm#7x}J>L5Jcl)Sp;W-~KFVZY)~6z&6NF9K%M^ z7@_EF>ISF^>-7IP+=AtNK9`Kqw$>G|#GR4DX78)udyAyQhA5NBRQ z$zR4+;#6qNK;RPeBp;e6jd^i>yUnoZ+W+?R;=vToJMR=+i*1;4QD}^ zq{pny`WIZceO$!#fcP4P(ohw(b^DDr9*k-SQHWAvbS>kK@!@UmWt(cB=uza|dq}L- zW?Sep?D~$LV+Uink$hNjpbCI;9JS8h7fIss5L4d|v+|@zw0Q#siDDII_bhzOr#auo z6FlR3^TRYSMZ#z+2!?y}$-N;8>UQeSoZ1F?_=Vl?pFMMKq|{OJ$qZWpaU}I+<=+tW z2s`%fh%c6rpTp~aWnpvw?%9#f>cnwKjxSOslUEd^HQ)Rt>?2uE_wQ)9387TbU;7}B zddF$1q{eoc$gV(I(pr%CRqQ?uh)MH^QT>_$53#$(y%C zZ)wg1bx^Qk?U`bB`$>I|g}3jtF4-sQdQNm+nwH`jWihEaE~~DF#=_8|_T|M<_)lFo zU{svsdyuqdzZvnc?#b1@$Hs+C+8))y0ef&v3jwU}HqBAw2QBE2iejn7iDl8qdGEPL zM)5E;3^qFWr*jhBj_GHo?PpUK2yjacYB??f{BS;{v=fL|`Xy4e7eRmy$ zhZB2|O{uJd)RyDC-9RpJOoh(v;TSSHO!o&A`X`3okt~jO*V&RP3~Jy8wle!DIz9X2;+ z+Qg9qrIOJ!#G^t#JJ`#N!8ad+Y&Cxv%hPXh$Uj0rq8{HB4^@fVzX?|0L{af6T6rHt z`aQM;SLYbQh?#Cal-;BODq3>}UlaVo0AREu8mU!m2ZLW|d{|2+XtLxyNH3U=t_y!= zcBzPDZE>~#)B~r(iUzbKw6visxA3qB$&$#lkZ@ZOgoQ=QSL;kzrtTbt%-hfqN> z5eu@Cf?Ie5G|`2`L2hy4ZL*^HLfiuhHDE=ezKWwt9K`;na+P)Y}kqMx)kx1`oy zU)~_E8CKToH=&vu{f%WvC)H%*om$*EBRgJopEeZPFlc3SpCv(MY#3>KZ)Ehv!bLGe zmT@jm@7KwVBXVDa=j00=qUPqlpB`SX>hH$>?OnyWiE4g-xrbZHS_R#04Cj45gwk83 z_3M+QHv`F!VqeW)gV}!O%(&0w;HrmE&LL9){Q=R50TlSayoCwuox;1a07oP{Kh@uQ z4j-{8Q*g<$0&u}Oq^ErQCotNCn|(3-EyX{nZ@U5fEffgee_MczlF7QO(9PoyHe{>q zY!G*?%~q5ma!%KgdmJ*uDMgycw!(j2w96H#_%pQT!xO&aCRLyNbUsnm(vH-;T5^TK zpYn!&xoIXVsVE^!F3x@O$og~SC(A;rB#3)6{o*vyd=2SN9JK;f{27|SVp!fzSGL34 z*kO?+0g_~Yo|qPS=V8!IyrR=gMc4EEQ!P-^0v4?S%@QND4StEDjwXaJ#Q(Hc(#@^} z{Wf&-AFAgziVa)eAp27K&5Q|m{+*DZev?|jfI?s|1x!&?Xw{LD7srGBK4ACNaln{I z(i*X=H!oAe$KL(&piP{!AuMmN(a<>V$vfV_)FQUn@4a26t=;8k4#!#){X1kIM?a0# z%N2Gg{T{bNL8-`+Cj6QH3`E&l#PECv_my^W;}DwoEPt5$P3K)ep%XX-WjED13NdB) zFYK?l?jpQ@&6#gQnwT?GV>M$a@vSkWe!H&DA!%bQY|gFe6S4QpylEZ8SnMuE^+GWy@K&EC1v|Q z^AnFeerruUvK^{d+Q}n5^I=$b!sAJUIF!|xpIBaO3)_ZIn&c(7@ST&5o?+m4Poij} z+}XDrir-U!?B;|YY_I2j+J+I3F3kUF_6I%cf>3@^iJ&=J3Ah6&fYn2KJA-o=id|yERD;o zpDPR`EUehgop`NiJ%kc9-_ZF-oh0FbhXS+f7O%A|rGPfS&-zlpA!lv;bIG#Wa%=VM zck93K_(nTf2XJTg10I+YS+Lh=dJm>)Yg0`yk4uf(y@{HZ25>%MM|(t;ORbNI1Xiqf z@4ecYoxs`6R}SjA6_k_{kKYqYVCMK#uZvebDzH$w6S)8UXk4h38Sr&D^kmKUCcfH* zu6QABxH@nA_mh7y)(9c$Ex{KPK_o6_Oq#>j2^cFBwn^F)7flD}uePh28VTm<)Y_AN z1jM8Cb9*{7m>(Y4y~&~d>(!MA}%N#%uWB{61w|FCE=;>daR@^1Culb@Kf zClqfZL+Z|?4avlJhdx$L6V~hGR|q3(0p0|Z1(-2?pcR_rt4+utd*FO@I#Rx_lyKMj zx;${G^q^eVqG+kO`>y4>aerrIw0&X{X31qD-DmdO#e0Wtpqa8#!@r<$H82 zY*MI#C)`QL<>t~DsUqDZs4~`rqHW?IV;U{ID_rr`A7%O#SrKw0@Te!=VCLg3v;yzW zi=h6RMV=F)XciC-Byo*hcP?Pk?j#V+KR%Gyj3eQW-7qpR)!=6wkWy~19o6a~^t*{! zW_%#_7uDORS~2C@v(~a$(2e%$Q^Z?Bm-FBOR$0joc)@XcxpH{8N{Qjrb%72=(9x2e z6el{hyq3>S)Xv^=9<0jV(zB6{*?pOnMa!>ecWD4|mCAc$TG)FMo4m55?HK6}Q;2wg zfa(*+G37KRVr2@=h=BOldR7-Lf22LLoWL*&dvDecStOe5SNf?VuN`mHKVhq`h5D0# z%)V@oAQbZ-I7P?xW~HV1srD`(i`!2)FDjMkZWtiQ*Lc?Qh:GysNq*!6AHU_(2L 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 diff --git a/fonts/mono_dejavu_sans_16.xml b/fonts/mono_dejavu_sans_16.xml deleted file mode 100644 index 3f7d2c2a2298794f5ab57d44367148900aba28b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 275642 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≻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∨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�bX!DP#Eo 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 diff --git a/fonts/mono_dejavu_sans_18.xml b/fonts/mono_dejavu_sans_18.xml deleted file mode 100644 index 92865cbfc7cf30ea80f6acfe96dc00e2fd60b804..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 279962 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 diff --git a/fonts/mono_dejavu_sans_180.png b/fonts/mono_dejavu_sans_180.png deleted file mode 100644 index a299afcbea23ef8bfd9e08984a5eb837d4a04955..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122274 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 diff --git a/fonts/mono_dejavu_sans_20.xml b/fonts/mono_dejavu_sans_20.xml deleted file mode 100644 index acd8c77d0f1d719235a9fed893678bf982561a4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282588 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

v~bBu*Z&*OC9i;oUu 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�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

tY^-Z8LoHS2C6&%{x-P0kwk} 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 Dlz$fB diff --git a/fonts/mono_dejavu_sans_26.xml b/fonts/mono_dejavu_sans_26.xml deleted file mode 100644 index 829f0994809422e1b9778f6223c9ef2b718a450f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 289710 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