Compare commits

...

13 Commits

Author SHA1 Message Date
Peter Nelson ca42564da8 Update: Changelog for 15.0-RC2 2025-12-13 18:13:31 +00:00
Peter Nelson 9062d25456 Update: Backport language changes 2025-12-13 11:54:27 +00:00
Rubidium 4213c62edd Fix #14677: desync due to using newgame time settings to validate savegame time settings 2025-12-13 11:54:27 +00:00
Peter Nelson a97587b3fe Revert: "Change: Support side-by-side fallback FontCaches instead of hierarchical. (#13303)"
This reverts commit 1829f7926d.
2025-12-13 11:54:27 +00:00
Peter Nelson 8ac9762a84 Revert: "Add: Automatically load fonts for missing glyphs. (#14856)"
This reverts commit c1d37d8699.
2025-12-13 11:54:27 +00:00
Peter Nelson 4ad85e0fe6 Fix: Graph label allocated size could be too small. (#14901)
Set initial size based on what could be displayed, instead of what is displayed right now.
2025-12-13 11:54:27 +00:00
Loïc Guilloux ab1ae7ec1a Codechange: [CI] setup-vcpkg action is now in OpenTTD/actions (#14897) 2025-12-13 11:54:27 +00:00
Peter Nelson 84c3ac6852 Fix #14891, a8650c6b06: Minimum sprite zoomlevel could break in some cases. (#14894)
Caused by sprite control flags not being reset when scanning available sprites.
2025-12-13 11:54:27 +00:00
Peter Nelson a6994a9550 Fix #14889: [FluidSynth] Don't try to load a soundfont that doesn't exist. 2025-12-13 11:54:27 +00:00
Peter Nelson f22f9d8b18 Codechange: Auto-reformat fluidsynth.cpp. 2025-12-13 11:54:27 +00:00
Peter Nelson 4b701e053f Update: Backport language changes 2025-12-08 18:06:36 +00:00
Loïc Guilloux b575769a7f Fix: [CI] Install NSIS for windows releases (#14885) 2025-12-08 18:06:36 +00:00
Rubidium 04f1a114dd Change #14155: Erato's the winner of the title game competition 2025-12-07 22:40:14 +01:00
115 changed files with 1010 additions and 1195 deletions
-50
View File
@@ -1,50 +0,0 @@
name: 'Setup vcpkg'
description: 'Installs vcpkg and initialises binary caching via NuGet'
inputs:
vcpkg-location:
description: 'Where to install vcpkg'
required: true
mono-install-command:
description: 'Command to run to install mono'
required: false
runs:
using: "composite"
steps:
- name: Install vcpkg
shell: bash
run: |
git clone https://github.com/microsoft/vcpkg "${{ inputs.vcpkg-location }}"
cd "${{ inputs.vcpkg-location }}"
./bootstrap-vcpkg.$(if [ "${{ runner.os }}" = "Windows" ]; then echo "bat"; else echo "sh"; fi) -disableMetrics
- name: Install mono
if: inputs.mono-install-command
shell: bash
run: |
${{ inputs.mono-install-command }}
echo "MONO=mono" >> "$GITHUB_ENV"
- name: Setup NuGet Credentials
shell: bash
env:
FEED_URL: 'https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json'
run: |
cd "${{ inputs.vcpkg-location }}"
${{ env.MONO }} $(./vcpkg fetch nuget | tail -n 1) \
sources add \
-source "${{ env.FEED_URL }}" \
-storepasswordincleartext \
-name "GitHub" \
-username "${{ github.repository_owner }}" \
-password "${{ github.token }}"
${{ env.MONO }} $(./vcpkg fetch nuget | tail -n 1) \
setapikey "${{ github.token }}" \
-source "${{ env.FEED_URL }}"
- name: Setup vcpkg caching
uses: actions/github-script@v7
with:
script: |
core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;nuget,GitHub,readwrite')
+1 -1
View File
@@ -105,4 +105,4 @@ jobs:
steps:
- name: Check annotations
uses: OpenTTD/actions/annotation-check@v5
uses: OpenTTD/actions/annotation-check@v6
+3 -5
View File
@@ -33,10 +33,8 @@ jobs:
uses: actions/checkout@v6
- name: Setup vcpkg
uses: ./.github/actions/setup-vcpkg
with:
vcpkg-location: ${{ runner.temp }}/vcpkg
mono-install-command: 'sudo apt-get install -y --no-install-recommends mono-complete'
id: vcpkg
uses: OpenTTD/actions/setup-vcpkg@v6
- name: Install dependencies
run: |
@@ -67,7 +65,7 @@ jobs:
# We only use breakpad from vcpkg, as its CMake files
# are a bit special. So the Ubuntu's variant doesn't work.
${{ runner.temp }}/vcpkg/vcpkg install breakpad
${{ steps.vcpkg.outputs.vcpkg }} install breakpad
echo "::endgroup::"
env:
+3 -5
View File
@@ -35,10 +35,8 @@ jobs:
uses: actions/checkout@v6
- name: Setup vcpkg
uses: ./.github/actions/setup-vcpkg
with:
vcpkg-location: ${{ runner.temp }}/vcpkg
mono-install-command: 'brew install mono'
id: vcpkg
uses: OpenTTD/actions/setup-vcpkg@v6
- name: Install OpenGFX
run: |
@@ -67,7 +65,7 @@ jobs:
cmake .. \
-DCMAKE_OSX_ARCHITECTURES=${{ inputs.full_arch }} \
-DVCPKG_TARGET_TRIPLET=${{ inputs.arch }}-osx \
-DCMAKE_TOOLCHAIN_FILE=${{ runner.temp }}/vcpkg/scripts/buildsystems/vcpkg.cmake \
-DCMAKE_TOOLCHAIN_FILE=${{ steps.vcpkg.outputs.vcpkg-cmake }} \
${{ inputs.extra-cmake-parameters }} \
# EOF
echo "::endgroup::"
+1 -1
View File
@@ -57,4 +57,4 @@ jobs:
steps:
- name: Check annotations
uses: OpenTTD/actions/annotation-check@v5
uses: OpenTTD/actions/annotation-check@v6
+3 -4
View File
@@ -21,9 +21,8 @@ jobs:
uses: actions/checkout@v6
- name: Setup vcpkg
uses: ./.github/actions/setup-vcpkg
with:
vcpkg-location: ${{ runner.temp }}/vcpkg
id: vcpkg
uses: OpenTTD/actions/setup-vcpkg@v6
- name: Install OpenGFX
shell: bash
@@ -61,7 +60,7 @@ jobs:
cmake .. \
-GNinja \
-DVCPKG_TARGET_TRIPLET=${{ inputs.arch }}-windows-static \
-DCMAKE_TOOLCHAIN_FILE="${{ runner.temp }}\vcpkg\scripts\buildsystems\vcpkg.cmake" \
-DCMAKE_TOOLCHAIN_FILE="${{ steps.vcpkg.outputs.vcpkg-cmake }}" \
# EOF
echo "::endgroup::"
+3 -5
View File
@@ -28,10 +28,8 @@ jobs:
uses: actions/checkout@v6
- name: Setup vcpkg
uses: ./.github/actions/setup-vcpkg
with:
vcpkg-location: ${{ runner.temp }}/vcpkg
mono-install-command: 'sudo apt-get install -y --no-install-recommends mono-complete'
id: vcpkg
uses: OpenTTD/actions/setup-vcpkg@v6
- name: Install dependencies
run: |
@@ -61,7 +59,7 @@ jobs:
# We only use breakpad from vcpkg, as its CMake files
# are a bit special. So the Ubuntu's variant doesn't work.
${{ runner.temp }}/vcpkg/vcpkg install breakpad
${{ steps.vcpkg.outputs.vcpkg }} install breakpad
echo "::endgroup::"
env:
+1 -1
View File
@@ -19,7 +19,7 @@ jobs:
fetch-depth: 4
- name: Get pull-request commits
uses: OpenTTD/actions/checkout-pull-request@v5
uses: OpenTTD/actions/checkout-pull-request@v6
- name: Check commits
uses: OpenTTD/OpenTTD-git-hooks@main
+3 -2
View File
@@ -110,7 +110,8 @@ jobs:
echo "::endgroup::"
- name: Setup vcpkg
uses: ./.github/actions/setup-vcpkg
id: vcpkg
uses: OpenTTD/actions/setup-vcpkg@v6
with:
vcpkg-location: /vcpkg
mono-install-command: 'yum install -y mono-complete'
@@ -125,7 +126,7 @@ jobs:
echo "::group::CMake"
cmake ${GITHUB_WORKSPACE} \
-DCMAKE_TOOLCHAIN_FILE=/vcpkg/scripts/buildsystems/vcpkg.cmake \
-DCMAKE_TOOLCHAIN_FILE=${{ steps.vcpkg.outputs.vcpkg-cmake }} \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DOPTION_SURVEY_KEY=${{ inputs.survey_key }} \
-DOPTION_PACKAGE_DEPENDENCIES=ON \
+4 -6
View File
@@ -38,10 +38,8 @@ jobs:
uses: Swatinem/rust-cache@v2
- name: Setup vcpkg
uses: ./.github/actions/setup-vcpkg
with:
vcpkg-location: ${{ runner.temp }}/vcpkg
mono-install-command: 'brew install mono'
id: vcpkg
uses: OpenTTD/actions/setup-vcpkg@v6
- name: Install dependencies
env:
@@ -97,7 +95,7 @@ jobs:
cmake ${GITHUB_WORKSPACE} \
-DCMAKE_OSX_ARCHITECTURES=arm64 \
-DVCPKG_TARGET_TRIPLET=arm64-osx \
-DCMAKE_TOOLCHAIN_FILE=${{ runner.temp }}/vcpkg/scripts/buildsystems/vcpkg.cmake \
-DCMAKE_TOOLCHAIN_FILE=${{ steps.vcpkg.outputs.vcpkg-cmake }} \
-DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DOPTION_SURVEY_KEY=${{ inputs.survey_key }} \
@@ -118,7 +116,7 @@ jobs:
cmake ${GITHUB_WORKSPACE} \
-DCMAKE_OSX_ARCHITECTURES=x86_64 \
-DVCPKG_TARGET_TRIPLET=x64-osx \
-DCMAKE_TOOLCHAIN_FILE=${{ runner.temp }}/vcpkg/scripts/buildsystems/vcpkg.cmake \
-DCMAKE_TOOLCHAIN_FILE=${{ steps.vcpkg.outputs.vcpkg-cmake }} \
-DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DOPTION_SURVEY_KEY=${{ inputs.survey_key }} \
+5 -6
View File
@@ -46,15 +46,14 @@ jobs:
uses: Swatinem/rust-cache@v2
- name: Setup vcpkg
uses: ./.github/actions/setup-vcpkg
with:
vcpkg-location: ${{ runner.temp }}/vcpkg
id: vcpkg
uses: OpenTTD/actions/setup-vcpkg@v6
- name: Install dependencies
shell: bash
run: |
echo "::group::Install choco dependencies"
choco install pandoc
choco install pandoc nsis
echo "::endgroup::"
echo "::group::Install breakpad dependencies"
@@ -103,7 +102,7 @@ jobs:
cmake ${GITHUB_WORKSPACE} \
-GNinja \
-DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-windows-static \
-DCMAKE_TOOLCHAIN_FILE="${{ runner.temp }}\vcpkg\scripts\buildsystems\vcpkg.cmake" \
-DCMAKE_TOOLCHAIN_FILE="${{ steps.vcpkg.outputs.vcpkg-cmake }}" \
-DOPTION_USE_NSIS=ON \
-DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
@@ -133,7 +132,7 @@ jobs:
cmake ${GITHUB_WORKSPACE} \
-GNinja \
-DVCPKG_TARGET_TRIPLET=${{ matrix.arch }}-windows-static \
-DCMAKE_TOOLCHAIN_FILE="${{ runner.temp }}\vcpkg\scripts\buildsystems\vcpkg.cmake" \
-DCMAKE_TOOLCHAIN_FILE="${{ steps.vcpkg.outputs.vcpkg-cmake }}" \
-DHOST_BINARY_DIR=${GITHUB_WORKSPACE}/build-host \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DOPTION_SURVEY_KEY=${{ inputs.survey_key }} \
+2 -2
View File
@@ -88,7 +88,7 @@ jobs:
- prepare
name: Publish bundles
uses: OpenTTD/actions/.github/workflows/rw-cdn-upload.yml@v5
uses: OpenTTD/actions/.github/workflows/rw-cdn-upload.yml@v6
secrets:
CDN_SIGNING_KEY: ${{ secrets.CDN_SIGNING_KEY }}
DEPLOYMENT_APP_ID: ${{ secrets.DEPLOYMENT_APP_ID }}
@@ -103,7 +103,7 @@ jobs:
- prepare
name: Publish symbols
uses: OpenTTD/actions/.github/workflows/rw-symbols-upload.yml@v5
uses: OpenTTD/actions/.github/workflows/rw-symbols-upload.yml@v6
secrets:
SYMBOLS_SIGNING_KEY: ${{ secrets.SYMBOLS_SIGNING_KEY }}
with:
+8
View File
@@ -1,5 +1,13 @@
## 15.x
### 15.0-RC2 (2025-12-13)
- Fix #14677: Desync due to using newgame time settings to validate savegame time settings (#14904)
- Fix: Graph label allocated size could be too small (#14901)
- Fix #14891: Minimum sprite zoomlevel could break in some cases showing placeholder sprites instead (#14894)
- Fix #14889: [FluidSynth] Don't try to load a soundfont that doesn't exist (#14890)
- Revert: Dynamic font loading changes removed (#14903)
### 15.0-RC1 (2025-12-07)
- Feature: Automatically load extra fonts for missing glyphs (#13303, #14856)
Binary file not shown.
+11 -24
View File
@@ -2319,18 +2319,6 @@ static bool ConContent(std::span<std::string_view> argv)
}
#endif /* defined(WITH_ZLIB) */
/**
* Get string representation of a font load reason.
* @param load_reason The font load reason.
* @return String representation.
*/
static std::string_view FontLoadReasonToName(FontLoadReason load_reason)
{
static const std::string_view LOAD_REASON_TO_NAME[] = { "default", "configured", "language", "missing" };
static_assert(std::size(LOAD_REASON_TO_NAME) == to_underlying(FontLoadReason::End));
return LOAD_REASON_TO_NAME[to_underlying(load_reason)];
}
static bool ConFont(std::span<std::string_view> argv)
{
if (argv.empty()) {
@@ -2379,18 +2367,17 @@ static bool ConFont(std::span<std::string_view> argv)
SetFont(argfs, font, size);
}
IConsolePrint(CC_INFO, "Configured fonts:");
for (uint i = 0; FontSize fs : FONTSIZES_ALL) {
const FontCacheSubSetting *setting = GetFontCacheSubSetting(fs);
IConsolePrint(CC_DEFAULT, "{}) {} font: \"{}\", size {}", i, FontSizeToName(fs), setting->font, setting->size);
++i;
}
IConsolePrint(CC_INFO, "Currently active fonts:");
for (uint i = 0; const auto &fc : FontCache::Get()) {
if (fc == nullptr) continue;
IConsolePrint(CC_DEFAULT, "{}) {} font: \"{}\" size {} [{}]", i, FontSizeToName(fc->GetSize()), fc->GetFontName(), fc->GetFontSize(), FontLoadReasonToName(fc->GetFontLoadReason()));
++i;
for (FontSize fs = FS_BEGIN; fs < FS_END; fs++) {
FontCache *fc = FontCache::Get(fs);
FontCacheSubSetting *setting = GetFontCacheSubSetting(fs);
/* Make sure all non sprite fonts are loaded. */
if (!setting->font.empty() && !fc->HasParent()) {
FontCache::LoadFontCaches(fs);
fc = FontCache::Get(fs);
}
IConsolePrint(CC_DEFAULT, "{} font:", FontSizeToName(fs));
IConsolePrint(CC_DEFAULT, "Currently active: \"{}\", size {}", fc->GetFontName(), fc->GetFontSize());
IConsolePrint(CC_DEFAULT, "Requested: \"{}\", size {}", setting->font, setting->size);
}
return true;
+48 -140
View File
@@ -8,8 +8,6 @@
/** @file fontcache.cpp Cache for characters from fonts. */
#include "stdafx.h"
#include "core/string_consumer.hpp"
#include "fontcache.h"
#include "blitter/factory.hpp"
#include "gfx_layout.h"
@@ -19,14 +17,13 @@
#include "viewport_func.h"
#include "window_func.h"
#include "fileio_func.h"
#include "zoom_func.h"
#include "safeguards.h"
/** Default unscaled heights for the different sizes of fonts. */
/* static */ const int FontCache::DEFAULT_FONT_HEIGHT[FS_END] = {10, 6, 18, 10};
/** Default unscaled ascenders for the different sizes of fonts. */
/* static */ const int FontCache::DEFAULT_FONT_ASCENDER[FS_END] = {8, 6, 15, 8};
/* static */ const int FontCache::DEFAULT_FONT_ASCENDER[FS_END] = {8, 5, 15, 8};
FontCacheSettings _fcsettings;
@@ -36,10 +33,10 @@ FontCacheSettings _fcsettings;
* @param fonttype Font type requested.
* @return FontCache of the font if loaded, or nullptr.
*/
/* static */ std::unique_ptr<FontCache> FontProviderManager::LoadFont(FontSize fs, FontType fonttype, bool search, const std::string &font_name, std::span<const std::byte> os_handle)
/* static */ std::unique_ptr<FontCache> FontProviderManager::LoadFont(FontSize fs, FontType fonttype)
{
for (auto &provider : FontProviderManager::GetProviders()) {
auto fc = provider->LoadFont(fs, fonttype, search, font_name, os_handle);
auto fc = provider->LoadFont(fs, fonttype);
if (fc != nullptr) return fc;
}
@@ -55,10 +52,10 @@ FontCacheSettings _fcsettings;
* @param callback The function to call to check for missing glyphs.
* @return true if a font has been set, false otherwise.
*/
/* static */ bool FontProviderManager::FindFallbackFont(const std::string &language_isocode, FontSizes fontsizes, MissingGlyphSearcher *callback)
/* static */ bool FontProviderManager::FindFallbackFont(FontCacheSettings *settings, const std::string &language_isocode, MissingGlyphSearcher *callback)
{
return std::ranges::any_of(FontProviderManager::GetProviders(),
[&](auto *provider) { return provider->FindFallbackFont(language_isocode, fontsizes, callback); });
[&](auto *provider) { return provider->FindFallbackFont(settings, language_isocode, callback); });
}
int FontCache::GetDefaultFontHeight(FontSize fs)
@@ -66,34 +63,21 @@ int FontCache::GetDefaultFontHeight(FontSize fs)
return FontCache::DEFAULT_FONT_HEIGHT[fs];
}
/* static */ void FontCache::UpdateCharacterHeight(FontSize fs)
/**
* Get the font name of a given font size.
* @param fs The font size to look up.
* @return The font name.
*/
std::string FontCache::GetName(FontSize fs)
{
FontMetrics &metrics = FontCache::metrics[fs];
int ascender = 0;
int descender = 0;
for (const auto &fc : FontCache::caches) {
if (fc == nullptr || fc->fs != fs) continue;
if (fc->load_reason == FontLoadReason::MissingFallback) continue; // Avoid dynamically loaded fonts affecting widget sizes.
ascender = std::max(ascender, fc->ascender);
descender = std::min(descender, fc->descender);
FontCache *fc = FontCache::Get(fs);
if (fc != nullptr) {
return fc->GetFontName();
} else {
return "[NULL]";
}
if (ascender == 0 && descender == 0) {
/* It's possible that no font is loaded yet, in which case use default values. */
ascender = ScaleGUITrad(FontCache::DEFAULT_FONT_ASCENDER[fs]);
descender = ScaleGUITrad(FontCache::DEFAULT_FONT_ASCENDER[fs] - FontCache::DEFAULT_FONT_HEIGHT[fs]);
}
metrics.height = ascender - descender;
metrics.baseline = ascender;
}
int FontCache::GetGlyphYOffset()
{
return FontCache::GetFontBaseline(this->fs) - this->ascender;
}
/**
* Get height of a character for a given font size.
@@ -102,22 +86,20 @@ int FontCache::GetGlyphYOffset()
*/
int GetCharacterHeight(FontSize size)
{
uint height = FontCache::GetCharacterHeight(size);
if (height == 0) height = ScaleGUITrad(FontCache::GetDefaultFontHeight(FS_MONO));
return height;
return FontCache::Get(size)->GetHeight();
}
/* static */ FontCache::FontCaches FontCache::caches;
/* static */ std::array<FontCache::FontMetrics, FS_END> FontCache::metrics{};
/* static */ std::array<FontIndex, FS_END> FontCache::default_font_index{};
/* static */ std::array<std::unique_ptr<FontCache>, FS_END> FontCache::caches{};
/**
* Initialise font caches with the base sprite font cache for all sizes.
*/
/* static */ void FontCache::InitializeFontCaches()
{
for (FontSize fs : FONTSIZES_ALL) {
UpdateCharacterHeight(fs);
for (FontSize fs = FS_BEGIN; fs != FS_END; fs++) {
if (FontCache::Get(fs) != nullptr) continue;
FontCache::Register(FontProviderManager::LoadFont(fs, FontType::Sprite));
}
}
@@ -148,13 +130,19 @@ void SetFont(FontSize fontsize, const std::string &font, uint size)
if (!changed) return;
if (fontsize != FS_MONO) {
/* Check if fallback fonts are needed. */
/* Try to reload only the modified font. */
FontCacheSettings backup = _fcsettings;
for (FontSize fs = FS_BEGIN; fs < FS_END; fs++) {
if (fs == fontsize) continue;
FontCache *fc = FontCache::Get(fs);
GetFontCacheSubSetting(fs)->font = fc->HasParent() ? fc->GetFontName() : "";
}
CheckForMissingGlyphs();
_fcsettings = std::move(backup);
} else {
FontCache::LoadFontCaches(fontsize);
}
FontCache::UpdateCharacterHeight(fontsize);
LoadStringWidthTable(fontsize);
UpdateAllVirtCoords();
ReInitAllWindows(true);
@@ -168,7 +156,7 @@ void SetFont(FontSize fontsize, const std::string &font, uint size)
*/
static bool IsDefaultFont(const FontCacheSubSetting &setting)
{
return setting.font.empty();
return setting.font.empty() && setting.os_handle == nullptr;
}
/**
@@ -205,7 +193,7 @@ static std::string GetDefaultTruetypeFont(FontSize fs)
* @param fs Font size.
* @return Full path of default font file.
*/
std::string GetDefaultTruetypeFontFile([[maybe_unused]] FontSize fs)
static std::string GetDefaultTruetypeFontFile([[maybe_unused]] FontSize fs)
{
#if defined(WITH_FREETYPE) || defined(_WIN32) || defined(WITH_COCOA)
/* Find font file. */
@@ -228,55 +216,18 @@ std::string GetFontCacheFontName(FontSize fs)
return GetDefaultTruetypeFontFile(fs);
}
/* static */ void FontCache::Register(std::unique_ptr<FontCache> &&fc, FontLoadReason load_reason)
/**
* Register a FontCache for its font size.
* @param fc FontCache to register.
*/
/* static */ void FontCache::Register(std::unique_ptr<FontCache> &&fc)
{
if (fc == nullptr) return;
FontSize fs = fc->fs;
/* Find an empty font cache slot. */
auto it = std::find(std::begin(FontCache::caches), std::end(FontCache::caches), nullptr);
if (it == std::end(FontCache::caches)) it = FontCache::caches.insert(it, nullptr);
/* Set up our font index and make us the default font cache for this font size. */
fc->font_index = static_cast<FontIndex>(std::distance(std::begin(FontCache::caches), it));
fc->load_reason = load_reason;
FontCache::default_font_index[fs] = fc->font_index;
/* Register this font cache in the slot. */
*it = std::move(fc);
}
/**
* Add a fallback font, with optional OS-specific handle.
* @param fontsizes Fontsizes to add fallback to.
* @param name Name of font to add.
* @param handle OS-specific handle or data of font.
*/
/* static */ void FontCache::AddFallback(FontSizes fontsizes, FontLoadReason load_reason, std::string_view name, std::span<const std::byte> os_data)
{
for (FontSize fs : fontsizes) {
GetFontCacheSubSetting(fs)->fallback_fonts.emplace_back(load_reason, std::string{name}, std::vector<std::byte>{os_data.begin(), os_data.end()});
}
}
/* static */ void FontCache::LoadDefaultFonts(FontSize fs)
{
/* Load the sprite font, even if it's not preferred. */
FontCache::Register(FontProviderManager::LoadFont(fs, FontType::Sprite, false, {}, {}), FontLoadReason::Default);
if (!_fcsettings.prefer_sprite) {
/* Load the default truetype font if sprite font is not preferred. */
FontCache::Register(FontProviderManager::LoadFont(fs, FontType::TrueType, false, GetDefaultTruetypeFontFile(fs), {}), FontLoadReason::Default);
}
}
/* static */ void FontCache::LoadFallbackFonts(FontSize fs, FontLoadReason load_reason)
{
const FontCacheSubSetting *setting = GetFontCacheSubSetting(fs);
for (auto it = setting->fallback_fonts.rbegin(); it != setting->fallback_fonts.rend(); ++it) {
if (it->load_reason != load_reason) continue;
FontCache::Register(FontProviderManager::LoadFont(fs, FontType::TrueType, false, it->name, it->os_handle), it->load_reason);
}
fc->parent = std::move(FontCache::caches[fs]);
FontCache::caches[fs] = std::move(fc);
}
/**
@@ -285,56 +236,17 @@ std::string GetFontCacheFontName(FontSize fs)
*/
/* static */ void FontCache::LoadFontCaches(FontSizes fontsizes)
{
static constexpr std::string_view FALLBACK_FONT = "fallback";
static constexpr std::string_view DEFAULT_FONT = "default";
static constexpr std::initializer_list<std::string_view> extra_prefer_default = {DEFAULT_FONT, FALLBACK_FONT};
static constexpr std::initializer_list<std::string_view> extra_prefer_fallback = {FALLBACK_FONT, DEFAULT_FONT};
FontCache::InitializeFontCaches();
for (FontSize fs : fontsizes) {
Layouter::ResetFontCache(fs);
FontCache::default_font_index[fs] = INVALID_FONT_INDEX;
}
/* Remove all existing FontCaches. */
if (fontsizes == FONTSIZES_ALL) {
FontCache::caches.clear();
} else {
for (auto it = std::begin(FontCache::caches); it != std::end(FontCache::caches); ++it) {
if (*it == nullptr) continue;
if (!fontsizes.Test((*it)->fs)) continue;
it->reset();
}
}
for (FontSize fs : fontsizes) {
/* Parse configured fonts, separated by ';' into a list. */
std::vector<std::string_view> fontnames;
StringConsumer consumer(GetFontCacheSubSetting(fs)->font);
do {
auto fontname = StrTrimView(consumer.ReadUntilChar(';', StringConsumer::SKIP_ONE_SEPARATOR), " \t");
if (!fontname.empty()) fontnames.push_back(fontname);
} while (consumer.AnyBytesLeft());
/* Add the default and fallback fonts as lowest priority if not manually specified. */
for (const auto &extra_font : _fcsettings.prefer_default ? extra_prefer_default : extra_prefer_fallback) {
if (std::ranges::find(fontnames, extra_font) == std::end(fontnames)) fontnames.push_back(extra_font);
/* Unload everything except the sprite font cache. */
while (FontCache::Get(fs)->HasParent()) {
FontCache::caches[fs] = std::move(FontCache::caches[fs]->parent);
}
/* First load fonts for missing glyphs discovered during string formatting. */
FontCache::LoadFallbackFonts(fs, FontLoadReason::MissingFallback);
/* Load configured fonts in reverse order so that the first entry has priority. */
for (auto it = fontnames.rbegin(); it != fontnames.rend(); ++it) {
if (*it == DEFAULT_FONT) {
FontCache::LoadDefaultFonts(fs);
} else if (*it == FALLBACK_FONT) {
FontCache::LoadFallbackFonts(fs, FontLoadReason::LanguageFallback);
} else {
FontCache::Register(FontProviderManager::LoadFont(fs, FontType::TrueType, true, std::string{*it}, {}), FontLoadReason::Configured);
}
}
FontCache::UpdateCharacterHeight(fs);
FontCache::Register(FontProviderManager::LoadFont(fs, FontType::TrueType));
}
}
@@ -344,14 +256,8 @@ std::string GetFontCacheFontName(FontSize fs)
*/
/* static */ void FontCache::ClearFontCaches(FontSizes fontsizes)
{
for (const auto &fc : FontCache::caches) {
if (fc == nullptr) continue;
if (!fontsizes.Test(fc->GetSize())) continue;
fc->ClearFontCache();
}
for (FontSize fs : fontsizes) {
FontCache::UpdateCharacterHeight(fs);
FontCache::Get(fs)->ClearFontCache();
}
}
@@ -360,5 +266,7 @@ std::string GetFontCacheFontName(FontSize fs)
*/
/* static */ void FontCache::UninitializeFontCaches()
{
FontCache::caches.clear();
for (auto &fc : FontCache::caches) {
fc.reset();
}
}
+27 -111
View File
@@ -16,43 +16,20 @@
/** Glyphs are characters from a font. */
typedef uint32_t GlyphID;
using FontIndex = uint8_t;
static const FontIndex INVALID_FONT_INDEX = std::numeric_limits<FontIndex>::max();
enum class FontLoadReason : uint8_t {
Default,
Configured,
LanguageFallback,
MissingFallback,
End,
};
static const GlyphID SPRITE_GLYPH = 1U << 30;
/** Font cache for basic fonts. */
class FontCache {
protected:
using FontCaches = std::vector<std::unique_ptr<FontCache>>;
static FontCaches caches;
struct FontMetrics {
int height = 0;
int baseline = 0;
};
static std::array<FontMetrics, FS_END> metrics;
static std::array<FontIndex, FS_END> default_font_index;
static std::array<std::unique_ptr<FontCache>, FS_END> caches; ///< All the font caches.
std::unique_ptr<FontCache> parent; ///< The parent of this font cache.
const FontSize fs; ///< The size of the font.
FontIndex font_index; ///< The index of the font.
FontLoadReason load_reason; ///< Reason why the font is loaded.
int height = 0; ///< The height of the font.
int ascender = 0; ///< The ascender value of the font.
int descender = 0; ///< The descender value of the font.
FontCache(FontSize fs) : fs(fs) {}
static void Register(std::unique_ptr<FontCache> &&fc, FontLoadReason load_reason);
static void LoadDefaultFonts(FontSize fs);
static void LoadFallbackFonts(FontSize fs, FontLoadReason load_reason);
static void Register(std::unique_ptr<FontCache> &&fc);
public:
virtual ~FontCache() = default;
@@ -69,36 +46,12 @@ public:
static int GetDefaultFontHeight(FontSize fs);
static inline int GetFontBaseline(FontSize fs)
{
return FontCache::metrics[fs].baseline;
}
static void AddFallback(FontSizes fontsizes, FontLoadReason load_reason, std::string_view name, std::span<const std::byte> os_data = {});
/**
* Add a fallback font, with OS-specific handle.
* @param fontsizes Fontsizes to add fallback to.
* @param name Name of font to add.
* @param handle OS-specific handle or data of font.
*/
template <typename T>
static void AddFallbackWithHandle(FontSizes fontsizes, FontLoadReason load_reason, std::string_view name, T &handle)
{
auto os_data = std::as_bytes(std::span(&handle, 1));
FontCache::AddFallback(fontsizes, load_reason, name, os_data);
}
/**
* Get the FontSize of the font.
* @return The FontSize.
*/
inline FontSize GetSize() const { return this->fs; }
inline FontIndex GetIndex() const { return this->font_index; }
inline FontLoadReason GetFontLoadReason() const { return this->load_reason; }
/**
* Get the height of the font.
* @return The height of the font.
@@ -149,9 +102,10 @@ public:
/**
* Map a character into a glyph.
* @param key The character.
* @param fallback Allow fallback to the parent font.
* @return The glyph ID used to draw the character.
*/
virtual GlyphID MapCharToGlyph(char32_t key) = 0;
virtual GlyphID MapCharToGlyph(char32_t key, bool fallback = true) = 0;
/**
* Get the native OS font handle, if there is one.
@@ -168,57 +122,25 @@ public:
*/
virtual std::string GetFontName() = 0;
virtual int GetGlyphYOffset();
/**
* Get span of all FontCaches.
* @return Span of all FontCaches.
*/
static inline std::span<const std::unique_ptr<FontCache>> Get()
{
return FontCache::caches;
}
/**
* Get the font cache of a given font size.
* @param fs The font size to look up.
* @return The font cache.
*/
static inline FontCache *Get(FontIndex font_index)
static inline FontCache *Get(FontSize fs)
{
assert(font_index < FontCache::caches.size());
return FontCache::caches[font_index].get();
assert(fs < FS_END);
return FontCache::caches[fs].get();
}
static inline int GetCharacterHeight(FontSize fs)
{
return FontCache::metrics[fs].height;
}
static std::string GetName(FontSize fs);
static void UpdateCharacterHeight(FontSize fs);
static inline FontIndex GetDefaultFontIndex(FontSize fs)
/**
* Check whether the font cache has a parent.
*/
inline bool HasParent()
{
return FontCache::default_font_index[fs];
}
static inline class FontCache *GetDefaultFontCache(FontSize fs)
{
FontIndex index = FontCache::GetDefaultFontIndex(fs);
if (index != INVALID_FONT_INDEX) return FontCache::Get(index);
NOT_REACHED();
}
static inline FontIndex GetFontIndexForCharacter(FontSize fs, char32_t c)
{
for (auto it = std::rbegin(FontCache::caches); it != std::rend(FontCache::caches); ++it) {
FontCache *fc = it->get();
if (fc == nullptr) continue;
if (fc->GetSize() != fs) continue;
if (fc->MapCharToGlyph(c) == 0) continue;
return std::distance(std::begin(FontCache::caches), std::next(it).base());
}
return INVALID_FONT_INDEX;
return this->parent != nullptr;
}
/**
@@ -230,33 +152,28 @@ public:
/** Get the Sprite for a glyph */
inline const Sprite *GetGlyph(FontSize size, char32_t key)
{
FontIndex font_index = FontCache::GetFontIndexForCharacter(size, key);
FontCache *fc = font_index != INVALID_FONT_INDEX ? FontCache::Get(font_index) : FontCache::GetDefaultFontCache(size);
if (fc == nullptr) return nullptr;
FontCache *fc = FontCache::Get(size);
return fc->GetGlyph(fc->MapCharToGlyph(key));
}
/** Get the width of a glyph */
inline uint GetGlyphWidth(FontSize size, char32_t key)
{
FontIndex font_index = FontCache::GetFontIndexForCharacter(size, key);
FontCache *fc = font_index != INVALID_FONT_INDEX ? FontCache::Get(font_index) : FontCache::GetDefaultFontCache(size);
if (fc == nullptr) return 0;
FontCache *fc = FontCache::Get(size);
return fc->GetGlyphWidth(fc->MapCharToGlyph(key));
}
inline bool GetDrawGlyphShadow(FontSize size)
{
return FontCache::Get(size)->GetDrawGlyphShadow();
}
/** Settings for a single font. */
struct FontCacheSubSetting {
std::string font; ///< The name of the font, or path to the font.
uint size; ///< The (requested) size of the font.
struct FontCacheFallback {
FontLoadReason load_reason = FontLoadReason::LanguageFallback;
std::string name;
std::vector<std::byte> os_handle;
};
std::vector<FontCacheFallback> fallback_fonts;
const void *os_handle = nullptr; ///< Optional native OS font info. Only valid during font search.
};
/** Settings for the four different fonts. */
@@ -267,7 +184,6 @@ struct FontCacheSettings {
FontCacheSubSetting mono; ///< The mono space font used for license/readme viewers.
bool prefer_sprite; ///< Whether to prefer the built-in sprite font over resizable fonts.
bool global_aa; ///< Whether to anti alias all font sizes.
bool prefer_default; ///< Prefer OpenTTD's default font over autodetected fallback fonts.
};
extern FontCacheSettings _fcsettings;
@@ -313,14 +229,14 @@ public:
ProviderManager<FontCacheFactory>::Unregister(*this);
}
virtual std::unique_ptr<FontCache> LoadFont(FontSize fs, FontType fonttype, bool search, const std::string &font_name, std::span<const std::byte> os_handle) const = 0;
virtual bool FindFallbackFont(const std::string &language_isocode, FontSizes fontsizes, class MissingGlyphSearcher *callback) const = 0;
virtual std::unique_ptr<FontCache> LoadFont(FontSize fs, FontType fonttype) const = 0;
virtual bool FindFallbackFont(struct FontCacheSettings *settings, const std::string &language_isocode, class MissingGlyphSearcher *callback) const = 0;
};
class FontProviderManager : ProviderManager<FontCacheFactory> {
public:
static std::unique_ptr<FontCache> LoadFont(FontSize fs, FontType fonttype, bool search, const std::string &font_name, std::span<const std::byte> os_handle);
static bool FindFallbackFont(const std::string &language_isocode, FontSizes fontsizes, class MissingGlyphSearcher *callback);
static std::unique_ptr<FontCache> LoadFont(FontSize fs, FontType fonttype);
static bool FindFallbackFont(FontCacheSettings *settings, const std::string &language_isocode, MissingGlyphSearcher *callback);
};
/* Implemented in spritefontcache.cpp */
+21 -12
View File
@@ -41,7 +41,7 @@ public:
FreeTypeFontCache(FontSize fs, FT_Face face, int pixels);
~FreeTypeFontCache();
void ClearFontCache() override;
GlyphID MapCharToGlyph(char32_t key) override;
GlyphID MapCharToGlyph(char32_t key, bool allow_fallback = true) override;
std::string GetFontName() override { return fmt::format("{}, {}", face->family_name, face->style_name); }
bool IsBuiltInFont() override { return false; }
const void *GetOSHandle() override { return &face; }
@@ -194,11 +194,17 @@ const Sprite *FreeTypeFontCache::InternalGetGlyph(GlyphID key, bool aa)
}
GlyphID FreeTypeFontCache::MapCharToGlyph(char32_t key)
GlyphID FreeTypeFontCache::MapCharToGlyph(char32_t key, bool allow_fallback)
{
assert(IsPrintable(key));
return FT_Get_Char_Index(this->face, key);
FT_UInt glyph = FT_Get_Char_Index(this->face, key);
if (glyph == 0 && allow_fallback && key >= SCC_SPRITE_START && key <= SCC_SPRITE_END) {
return this->parent->MapCharToGlyph(key);
}
return glyph;
}
FT_Library _ft_library = nullptr;
@@ -220,10 +226,15 @@ public:
* format is 'font family name' or 'font family name, font style'.
* @param fs The font size to load.
*/
std::unique_ptr<FontCache> LoadFont(FontSize fs, FontType fonttype, bool search, const std::string &font, std::span<const std::byte> os_handle) const override
std::unique_ptr<FontCache> LoadFont(FontSize fs, FontType fonttype) const override
{
if (fonttype != FontType::TrueType) return nullptr;
FontCacheSubSetting *settings = GetFontCacheSubSetting(fs);
std::string font = GetFontCacheFontName(fs);
if (font.empty()) return nullptr;
if (_ft_library == nullptr) {
if (FT_Init_FreeType(&_ft_library) != FT_Err_Ok) {
ShowInfo("Unable to initialize FreeType, using sprite fonts instead");
@@ -237,9 +248,7 @@ public:
/* If font is an absolute path to a ttf, try loading that first. */
int32_t index = 0;
if (os_handle.size() == sizeof(index)) {
index = *reinterpret_cast<const int32_t *>(os_handle.data());
}
if (settings->os_handle != nullptr) index = *static_cast<const int32_t *>(settings->os_handle);
FT_Error error = FT_New_Face(_ft_library, font.c_str(), index, &face);
if (error != FT_Err_Ok) {
@@ -251,8 +260,8 @@ public:
}
#ifdef WITH_FONTCONFIG
/* If allowed to search, try loading based on font face name (OS-wide fonts). */
if (error != FT_Err_Ok && search) error = GetFontByFaceName(font, &face);
/* Try loading based on font face name (OS-wide fonts). */
if (error != FT_Err_Ok) error = GetFontByFaceName(font, &face);
#endif /* WITH_FONTCONFIG */
if (error != FT_Err_Ok) {
@@ -263,10 +272,10 @@ public:
return LoadFont(fs, face, font, GetFontCacheFontSize(fs));
}
bool FindFallbackFont(const std::string &language_isocode, FontSizes fontsizes, MissingGlyphSearcher *callback) const override
bool FindFallbackFont(struct FontCacheSettings *settings, const std::string &language_isocode, class MissingGlyphSearcher *callback) const override
{
#ifdef WITH_FONTCONFIG
if (FontConfigFindFallbackFont(language_isocode, fontsizes, callback)) return true;
if (FontConfigFindFallbackFont(settings, language_isocode, callback)) return true;
#endif /* WITH_FONTCONFIG */
return false;
@@ -300,7 +309,7 @@ private:
if (error != FT_Err_Ok) {
FT_Done_Face(face);
ShowInfo("Unable to use '{}' for {} font, FreeType reported error 0x{:X}", font_name, FontSizeToName(fs), error);
ShowInfo("Unable to use '{}' for {} font, FreeType reported error 0x{:X}, using sprite font instead", font_name, FontSizeToName(fs), error);
return nullptr;
}
+20 -21
View File
@@ -23,6 +23,16 @@
static const int ASCII_LETTERSTART = 32; ///< First printable ASCII letter.
/**
* Scale traditional pixel dimensions to font zoom level, for drawing sprite fonts.
* @param value Pixel amount at #ZOOM_BASE (traditional "normal" interface size).
* @return Pixel amount at _font_zoom (current interface size).
*/
static int ScaleFontTrad(int value)
{
return UnScaleByZoom(value * ZOOM_BASE, _font_zoom);
}
static std::array<std::unordered_map<char32_t, SpriteID>, FS_END> _char_maps{}; ///< Glyph map for each font size.
/**
@@ -106,48 +116,37 @@ void InitializeUnicodeGlyphMap()
*/
SpriteFontCache::SpriteFontCache(FontSize fs) : FontCache(fs)
{
this->UpdateMetrics();
this->height = ScaleGUITrad(FontCache::GetDefaultFontHeight(this->fs));
this->ascender = (this->height - ScaleFontTrad(FontCache::GetDefaultFontHeight(this->fs))) / 2;
}
void SpriteFontCache::ClearFontCache()
{
Layouter::ResetFontCache(this->fs);
this->UpdateMetrics();
}
void SpriteFontCache::UpdateMetrics()
{
this->height = ScaleFontTrad(DEFAULT_FONT_HEIGHT[this->fs]);
this->ascender = ScaleGUITrad(DEFAULT_FONT_ASCENDER[this->fs]);
this->descender = ScaleGUITrad(DEFAULT_FONT_ASCENDER[this->fs] - DEFAULT_FONT_HEIGHT[this->fs]);
this->scaled_ascender = ScaleFontTrad(DEFAULT_FONT_ASCENDER[this->fs]);
}
int SpriteFontCache::GetGlyphYOffset()
{
return FontCache::GetFontBaseline(this->fs) - this->scaled_ascender;
this->height = ScaleGUITrad(FontCache::GetDefaultFontHeight(this->fs));
this->ascender = (this->height - ScaleFontTrad(FontCache::GetDefaultFontHeight(this->fs))) / 2;
}
const Sprite *SpriteFontCache::GetGlyph(GlyphID key)
{
SpriteID sprite = static_cast<SpriteID>(key);
SpriteID sprite = static_cast<SpriteID>(key & ~SPRITE_GLYPH);
if (sprite == 0) sprite = GetUnicodeGlyph(this->fs, '?');
return GetSprite(sprite, SpriteType::Font);
}
uint SpriteFontCache::GetGlyphWidth(GlyphID key)
{
SpriteID sprite = static_cast<SpriteID>(key);
SpriteID sprite = static_cast<SpriteID>(key & ~SPRITE_GLYPH);
if (sprite == 0) sprite = GetUnicodeGlyph(this->fs, '?');
return SpriteExists(sprite) ? GetSprite(sprite, SpriteType::Font)->width + ScaleFontTrad(this->fs != FS_NORMAL ? 1 : 0) : 0;
}
GlyphID SpriteFontCache::MapCharToGlyph(char32_t key)
GlyphID SpriteFontCache::MapCharToGlyph(char32_t key, [[maybe_unused]] bool allow_fallback)
{
assert(IsPrintable(key));
SpriteID sprite = GetUnicodeGlyph(this->fs, key);
if (sprite == 0) return 0;
return static_cast<GlyphID>(sprite);
return SPRITE_GLYPH | sprite;
}
bool SpriteFontCache::GetDrawGlyphShadow()
@@ -159,14 +158,14 @@ class SpriteFontCacheFactory : public FontCacheFactory {
public:
SpriteFontCacheFactory() : FontCacheFactory("sprite", "Sprite font provider") {}
std::unique_ptr<FontCache> LoadFont(FontSize fs, FontType fonttype, bool, const std::string &, std::span<const std::byte>) const override
std::unique_ptr<FontCache> LoadFont(FontSize fs, FontType fonttype) const override
{
if (fonttype != FontType::Sprite) return nullptr;
return std::make_unique<SpriteFontCache>(fs);
}
bool FindFallbackFont(const std::string &, FontSizes, class MissingGlyphSearcher *) const override
bool FindFallbackFont(struct FontCacheSettings *, const std::string &, class MissingGlyphSearcher *) const override
{
return false;
}
+1 -6
View File
@@ -17,17 +17,12 @@ class SpriteFontCache : public FontCache {
public:
SpriteFontCache(FontSize fs);
void ClearFontCache() override;
int GetGlyphYOffset() override;
const Sprite *GetGlyph(GlyphID key) override;
uint GetGlyphWidth(GlyphID key) override;
bool GetDrawGlyphShadow() override;
GlyphID MapCharToGlyph(char32_t key) override;
GlyphID MapCharToGlyph(char32_t key, bool allow_fallback = true) override;
std::string GetFontName() override { return "sprite"; }
bool IsBuiltInFont() override { return true; }
private:
void UpdateMetrics();
int scaled_ascender;
};
#endif /* SPRITEFONTCACHE_H */
+4
View File
@@ -64,6 +64,8 @@ bool TrueTypeFontCache::GetDrawGlyphShadow()
uint TrueTypeFontCache::GetGlyphWidth(GlyphID key)
{
if ((key & SPRITE_GLYPH) != 0) return this->parent->GetGlyphWidth(key);
GlyphEntry *glyph = this->GetGlyphPtr(key);
if (glyph == nullptr || glyph->data == nullptr) {
this->GetGlyph(key);
@@ -75,6 +77,8 @@ uint TrueTypeFontCache::GetGlyphWidth(GlyphID key)
const Sprite *TrueTypeFontCache::GetGlyph(GlyphID key)
{
if ((key & SPRITE_GLYPH) != 0) return this->parent->GetGlyph(key);
/* Check for the glyph in our cache */
GlyphEntry *glyph = this->GetGlyphPtr(key);
if (glyph != nullptr && glyph->data != nullptr) return glyph->GetSprite();
+11 -8
View File
@@ -536,7 +536,7 @@ static int DrawLayoutLine(const ParagraphLayouter::Line &line, int y, int left,
* another size would be chosen it won't have truncated too little for
* the truncation dots.
*/
truncation_layout.emplace(GetEllipsis(), INT32_MAX, line.GetVisualRun(0).GetFont().GetFontCache().GetSize());
truncation_layout.emplace(GetEllipsis(), INT32_MAX, line.GetVisualRun(0).GetFont()->fc->GetSize());
truncation_width = truncation_layout->GetBounds().width;
/* Is there enough space even for an ellipsis? */
@@ -592,15 +592,15 @@ static int DrawLayoutLine(const ParagraphLayouter::Line &line, int y, int left,
const ParagraphLayouter::VisualRun &run = line.GetVisualRun(run_index);
const auto &glyphs = run.GetGlyphs();
const auto &positions = run.GetPositions();
const Font &f = run.GetFont();
const Font *f = run.GetFont();
FontCache &fc = f.GetFontCache();
TextColour colour = f.colour;
FontCache *fc = f->fc;
TextColour colour = f->colour;
if (colour == TC_INVALID || HasFlag(initial_colour, TC_FORCED)) colour = initial_colour;
bool colour_has_shadow = (colour & TC_NO_SHADE) == 0 && colour != TC_BLACK;
/* Update the last colour for the truncation ellipsis. */
last_colour = colour;
if (do_shadow && (!fc.GetDrawGlyphShadow() || !colour_has_shadow)) continue;
if (do_shadow && (!fc->GetDrawGlyphShadow() || !colour_has_shadow)) continue;
SetColourRemap(do_shadow ? TC_BLACK : colour);
for (int i = 0; i < run.GetGlyphCount(); i++) {
@@ -615,10 +615,13 @@ static int DrawLayoutLine(const ParagraphLayouter::Line &line, int y, int left,
/* Truncated away. */
if (truncation && (begin_x < min_x || end_x > max_x)) continue;
/* Outside the clipping area. */
if (begin_x > dpi_right || end_x < dpi_left) continue;
const Sprite *sprite = fc.GetGlyph(glyph);
const Sprite *sprite = fc->GetGlyph(glyph);
/* Check clipping (the "+ 1" is for the shadow). */
if (begin_x + sprite->x_offs > dpi_right || begin_x + sprite->x_offs + sprite->width /* - 1 + 1 */ < dpi_left) continue;
if (do_shadow && (glyph & SPRITE_GLYPH) != 0) continue;
GfxMainBlitter(sprite, begin_x + (do_shadow ? shadow_offset : 0), top + (do_shadow ? shadow_offset : 0), BlitterMode::ColourRemap);
}
}
+40 -92
View File
@@ -10,15 +10,10 @@
#include "stdafx.h"
#include "core/math_func.hpp"
#include "gfx_layout.h"
#include "gfx_func.h"
#include "string_func.h"
#include "strings_func.h"
#include "core/utf8.hpp"
#include "debug.h"
#include "timer/timer.h"
#include "timer/timer_window.h"
#include "viewport_func.h"
#include "window_func.h"
#include "table/control_codes.h"
@@ -42,49 +37,20 @@
/** Cache of ParagraphLayout lines. */
std::unique_ptr<Layouter::LineCache> Layouter::linecache;
class RuntimeMissingGlyphSearcher : public MissingGlyphSearcher {
std::array<std::set<char32_t>, FS_END> glyphs{};
public:
RuntimeMissingGlyphSearcher() : MissingGlyphSearcher(FONTSIZES_ALL) {}
/** Cache of Font instances. */
Layouter::FontColourMap Layouter::fonts[FS_END];
FontLoadReason GetLoadReason() override { return FontLoadReason::MissingFallback; }
inline void Insert(FontSize fs, char32_t c)
{
this->glyphs[fs].insert(c);
this->search_timeout.Reset();
}
std::set<char32_t> GetRequiredGlyphs(FontSizes fontsizes) override
{
std::set<char32_t> r;
for (FontSize fs : fontsizes) {
r.merge(this->glyphs[fs]);
}
return r;
}
TimeoutTimer<TimerWindow> search_timeout{std::chrono::milliseconds(250), [this]()
{
FontSizes changed_fontsizes{};
for (FontSize fs = FS_BEGIN; fs != FS_END; ++fs) {
auto &missing = this->glyphs[fs];
if (missing.empty()) continue;
if (FontProviderManager::FindFallbackFont({}, fs, this)) changed_fontsizes.Set(fs);
missing.clear();
}
if (!changed_fontsizes.Any()) return;
FontCache::LoadFontCaches(changed_fontsizes);
LoadStringWidthTable(changed_fontsizes);
UpdateAllVirtCoords();
ReInitAllWindows(true);
}};
};
static RuntimeMissingGlyphSearcher _missing_glyphs;
/**
* Construct a new font.
* @param size The font size to use for this font.
* @param colour The colour to draw this font in.
*/
Font::Font(FontSize size, TextColour colour) :
fc(FontCache::Get(size)), colour(colour)
{
assert(size < FS_END);
}
/**
* Helper for getting a ParagraphLayouter of the given type.
@@ -105,7 +71,7 @@ static inline void GetLayouter(Layouter::LineCacheItem &line, std::string_view s
const typename T::CharType *buffer_last = buff_begin + str.size() + 1;
typename T::CharType *buff = buff_begin;
FontMap &font_mapping = line.runs;
Font f{state.font_index, state.cur_colour};
Font *f = Layouter::GetFont(state.fontsize, state.cur_colour);
font_mapping.clear();
@@ -114,10 +80,7 @@ static inline void GetLayouter(Layouter::LineCacheItem &line, std::string_view s
* whenever the font changes, and convert the wide characters into a format
* usable by ParagraphLayout.
*/
Utf8View view(str);
for (auto it = view.begin(); it != view.end(); /* nothing */) {
auto cur = it;
uint32_t c = *it++;
for (char32_t c : Utf8View(str)) {
if (c == '\0' || c == '\n') {
/* Caller should already have filtered out these characters. */
NOT_REACHED();
@@ -132,41 +95,19 @@ static inline void GetLayouter(Layouter::LineCacheItem &line, std::string_view s
} else {
/* Filter out non printable characters */
if (!IsPrintable(c)) continue;
if (IsTextDirectionChar(c)) {
/* Filter out text direction characters that shouldn't be drawn, and
* will not be handled in the fallback case because they are mostly
* needed for RTL languages which need more proper shaping support. */
if constexpr (!T::SUPPORTS_RTL) continue;
buff += T::AppendToBuffer(buff, buffer_last, c);
if (buff >= buffer_last) break;
continue;
}
FontIndex font_index = FontCache::GetFontIndexForCharacter(state.fontsize, c);
if (font_index == INVALID_FONT_INDEX) {
_missing_glyphs.Insert(state.fontsize, c);
font_index = FontCache::GetDefaultFontIndex(state.fontsize);
}
if (state.font_index == font_index) {
buff += T::AppendToBuffer(buff, buffer_last, c);
if (buff >= buffer_last) break;
continue;
}
/* This character goes in the next run so don't advance. */
state.font_index = font_index;
it = cur;
/* Filter out text direction characters that shouldn't be drawn, and
* will not be handled in the fallback case because they are mostly
* needed for RTL languages which need more proper shaping support. */
if (!T::SUPPORTS_RTL && IsTextDirectionChar(c)) continue;
buff += T::AppendToBuffer(buff, buffer_last, c);
if (buff >= buffer_last) break;
continue;
}
if (buff - buff_begin > 0 && (font_mapping.empty() || font_mapping.back().first != buff - buff_begin)) {
if (font_mapping.empty() || font_mapping.back().first != buff - buff_begin) {
font_mapping.emplace_back(buff - buff_begin, f);
}
f = {state.font_index, state.cur_colour};
f = Layouter::GetFont(state.fontsize, state.cur_colour);
}
/* Better safe than sorry. */
@@ -175,14 +116,6 @@ static inline void GetLayouter(Layouter::LineCacheItem &line, std::string_view s
if (font_mapping.empty() || font_mapping.back().first != buff - buff_begin) {
font_mapping.emplace_back(buff - buff_begin, f);
}
if constexpr (!std::is_same_v<T, FallbackParagraphLayoutFactory>) {
/* Don't layout if all runs use a built-in font and we're not using the fallback layouter. */
if (std::ranges::all_of(font_mapping, [](const auto &i) { return i.second.GetFontCache().IsBuiltInFont(); })) {
return;
}
}
line.layout = T::GetParagraphLayout(buff_begin, buff, font_mapping);
line.state_after = state;
}
@@ -195,7 +128,7 @@ static inline void GetLayouter(Layouter::LineCacheItem &line, std::string_view s
*/
Layouter::Layouter(std::string_view str, int maxw, FontSize fontsize) : string(str)
{
FontState state(TC_INVALID, fontsize, FontCache::GetDefaultFontIndex(fontsize));
FontState state(TC_INVALID, fontsize);
while (true) {
auto line_length = str.find_first_of('\n');
@@ -405,6 +338,18 @@ ptrdiff_t Layouter::GetCharAtPosition(int x, size_t line_index) const
return -1;
}
/**
* Get a static font instance.
*/
Font *Layouter::GetFont(FontSize size, TextColour colour)
{
FontColourMap::iterator it = fonts[size].find(colour);
if (it != fonts[size].end()) return it->second.get();
fonts[size][colour] = std::make_unique<Font>(size, colour);
return fonts[size][colour].get();
}
/**
* Perform initialization of layout engine.
*/
@@ -417,9 +362,12 @@ void Layouter::Initialize()
/**
* Reset cached font information.
* @param size Font size to reset.
*/
void Layouter::ResetFontCache([[maybe_unused]] FontSize size)
void Layouter::ResetFontCache(FontSize size)
{
fonts[size].clear();
/* We must reset the linecache since it references the just freed fonts */
ResetLineCache();
+19 -16
View File
@@ -12,6 +12,8 @@
#include "misc/lrucache.hpp"
#include "fontcache.h"
#include "gfx_func.h"
#include "core/math_func.hpp"
#include <string_view>
@@ -20,13 +22,12 @@
* of the same text, e.g. on line breaks.
*/
struct FontState {
FontSize fontsize; ///< Current font size.
FontIndex font_index; ///< Current font index.
TextColour cur_colour; ///< Current text colour.
FontSize fontsize; ///< Current font size.
TextColour cur_colour; ///< Current text colour.
std::vector<TextColour> colour_stack; ///< Stack of colours to assist with colour switching.
FontState() : fontsize(FS_END), font_index(INVALID_FONT_INDEX), cur_colour(TC_INVALID) {}
FontState(TextColour colour, FontSize fontsize, FontIndex font_index) : fontsize(fontsize), font_index(font_index), cur_colour(colour) {}
FontState() : fontsize(FS_END), cur_colour(TC_INVALID) {}
FontState(TextColour colour, FontSize fontsize) : fontsize(fontsize), cur_colour(colour) {}
auto operator<=>(const FontState &) const = default;
@@ -66,7 +67,6 @@ struct FontState {
inline void SetFontSize(FontSize f)
{
this->fontsize = f;
this->font_index = FontCache::GetDefaultFontIndex(this->fontsize);
}
};
@@ -85,10 +85,9 @@ template <> struct std::hash<FontState> {
std::size_t operator()(const FontState &state) const noexcept
{
size_t h1 = std::hash<FontSize>{}(state.fontsize);
size_t h2 = std::hash<FontIndex>{}(state.font_index);
size_t h3 = std::hash<TextColour>{}(state.cur_colour);
size_t h4 = std::hash<std::vector<TextColour>>{}(state.colour_stack);
return h1 ^ (h2 << 1) ^ (h3 << 2) ^ (h4 << 3);
size_t h2 = std::hash<TextColour>{}(state.cur_colour);
size_t h3 = std::hash<std::vector<TextColour>>{}(state.colour_stack);
return h1 ^ (h2 << 1) ^ (h3 << 2);
}
};
@@ -97,14 +96,14 @@ template <> struct std::hash<FontState> {
*/
class Font {
public:
FontIndex font_index = INVALID_FONT_INDEX; ///< The font we are using.
TextColour colour = TC_INVALID; ///< The colour this font has to be.
FontCache *fc; ///< The font we are using.
TextColour colour; ///< The colour this font has to be.
inline FontCache &GetFontCache() const { return *FontCache::Get(this->font_index); }
Font(FontSize size, TextColour colour);
};
/** Mapping from index to font. The pointer is owned by FontColourMap. */
using FontMap = std::vector<std::pair<int, Font>>;
using FontMap = std::vector<std::pair<int, Font *>>;
/**
* Interface to glue fallback and normal layouter into one.
@@ -130,7 +129,7 @@ public:
class VisualRun {
public:
virtual ~VisualRun() = default;
virtual const Font &GetFont() const = 0;
virtual const Font *GetFont() const = 0;
virtual int GetGlyphCount() const = 0;
virtual std::span<const GlyphID> GetGlyphs() const = 0;
virtual std::span<const Position> GetPositions() const = 0;
@@ -206,14 +205,18 @@ private:
static LineCacheItem &GetCachedParagraphLayout(std::string_view str, const FontState &state);
using FontColourMap = std::map<TextColour, std::unique_ptr<Font>>;
static FontColourMap fonts[FS_END];
public:
static Font *GetFont(FontSize size, TextColour colour);
Layouter(std::string_view str, int maxw = INT32_MAX, FontSize fontsize = FS_NORMAL);
Dimension GetBounds();
ParagraphLayouter::Position GetCharPosition(std::string_view::const_iterator ch) const;
ptrdiff_t GetCharAtPosition(int x, size_t line_index) const;
static void Initialize();
static void ResetFontCache(FontSize fs);
static void ResetFontCache(FontSize size);
static void ResetLineCache();
};
+17 -14
View File
@@ -10,7 +10,6 @@
#include "stdafx.h"
#include "gfx_layout_fallback.h"
#include "gfx_func.h"
#include "string_func.h"
#include "zoom_func.h"
@@ -44,15 +43,15 @@ public:
std::vector<Position> positions; ///< The positions of the glyphs.
std::vector<int> glyph_to_char; ///< The char index of the glyphs.
Font font; ///< The font used to layout these.
Font *font; ///< The font used to layout these.
public:
FallbackVisualRun(const Font &font, const char32_t *chars, int glyph_count, int char_offset, int x);
const Font &GetFont() const override { return this->font; }
FallbackVisualRun(Font *font, const char32_t *chars, int glyph_count, int char_offset, int x);
const Font *GetFont() const override { return this->font; }
int GetGlyphCount() const override { return static_cast<int>(this->glyphs.size()); }
std::span<const GlyphID> GetGlyphs() const override { return this->glyphs; }
std::span<const Position> GetPositions() const override { return this->positions; }
int GetLeading() const override { return GetCharacterHeight(this->GetFont().GetFontCache().GetSize()); }
int GetLeading() const override { return this->GetFont()->fc->GetHeight(); }
std::span<const int> GetGlyphToCharMap() const override { return this->glyph_to_char; }
};
@@ -110,20 +109,26 @@ public:
* @param char_offset This run's offset from the start of the layout input string.
* @param x The initial x position for this run.
*/
FallbackParagraphLayout::FallbackVisualRun::FallbackVisualRun(const Font &font, const char32_t *chars, int char_count, int char_offset, int x) :
FallbackParagraphLayout::FallbackVisualRun::FallbackVisualRun(Font *font, const char32_t *chars, int char_count, int char_offset, int x) :
font(font)
{
const bool isbuiltin = font->fc->IsBuiltInFont();
this->glyphs.reserve(char_count);
this->glyph_to_char.reserve(char_count);
this->positions.reserve(char_count);
FontCache &fc = this->font.GetFontCache();
int y_offset = fc.GetGlyphYOffset();;
int advance = x;
for (int i = 0; i < char_count; i++) {
const GlyphID &glyph_id = this->glyphs.emplace_back(fc.MapCharToGlyph(chars[i]));
int x_advance = fc.GetGlyphWidth(glyph_id);
this->positions.emplace_back(advance, advance + x_advance - 1, y_offset); // No ascender adjustment.
const GlyphID &glyph_id = this->glyphs.emplace_back(font->fc->MapCharToGlyph(chars[i]));
int x_advance = font->fc->GetGlyphWidth(glyph_id);
if (isbuiltin) {
this->positions.emplace_back(advance, advance + x_advance - 1, font->fc->GetAscender()); // Apply sprite font's ascender.
} else if (chars[i] >= SCC_SPRITE_START && chars[i] <= SCC_SPRITE_END) {
this->positions.emplace_back(advance, advance + x_advance - 1, (font->fc->GetHeight() - ScaleSpriteTrad(FontCache::GetDefaultFontHeight(font->fc->GetSize()))) / 2); // Align sprite font to centre
} else {
this->positions.emplace_back(advance, advance + x_advance - 1, 0); // No ascender adjustment.
}
advance += x_advance;
this->glyph_to_char.push_back(char_offset + i);
}
@@ -228,8 +233,7 @@ std::unique_ptr<const ParagraphLayouter::Line> FallbackParagraphLayout::NextLine
assert(iter != this->runs.end());
}
const FontCache *fc = &iter->second.GetFontCache();
assert(fc != nullptr);
const FontCache *fc = iter->second->fc;
const char32_t *next_run = this->buffer_begin + iter->first;
const char32_t *begin = this->buffer;
@@ -247,7 +251,6 @@ std::unique_ptr<const ParagraphLayouter::Line> FallbackParagraphLayout::NextLine
if (this->buffer == next_run) {
int w = l->GetWidth();
assert(iter->second.font_index != INVALID_FONT_INDEX);
l->emplace_back(iter->second, begin, this->buffer - begin, begin - this->buffer_begin, w);
++iter;
assert(iter != this->runs.end());
-19
View File
@@ -26,24 +26,5 @@ public:
static size_t AppendToBuffer(char32_t *buff, const char32_t *buffer_last, char32_t c);
};
/**
* Swap paired brackets for fallback RTL layouting.
* @param c Character to swap.
* @return Swapped character, or original character if it is not a paired bracket.
*/
inline char32_t SwapRtlPairedCharacters(char32_t c)
{
/* There are many more paired brackets, but for fallback purposes we only handle ASCII brackets. */
/* https://www.unicode.org/Public/UCD/latest/ucd/BidiBrackets.txt */
switch (c) {
case U'(': return U')';
case U')': return U'(';
case U'[': return U']';
case U']': return U'[';
case U'{': return U'}';
case U'}': return U'{';
default: return c;
}
}
#endif /* GFX_LAYOUT_FALLBACK_H */
+31 -69
View File
@@ -11,9 +11,6 @@
#include "gfx_layout_icu.h"
#include "debug.h"
#include "gfx_func.h"
#include "gfx_layout_fallback.h"
#include "string_func.h"
#include "strings_func.h"
#include "language.h"
#include "table/control_codes.h"
@@ -43,7 +40,7 @@ public:
int length; ///< Length of the run in the buffer.
UBiDiLevel level; ///< Embedding level of the run.
UScriptCode script; ///< Script of the run.
Font font; ///< Font of the run.
Font *font; ///< Font of the run.
std::vector<GlyphID> glyphs; ///< The glyphs of the run. Valid after Shape() is called.
std::vector<int> advance; ///< The advance (width) of the glyphs. Valid after Shape() is called.
@@ -51,10 +48,9 @@ public:
std::vector<ParagraphLayouter::Position> positions; ///< The positions of the glyphs. Valid after Shape() is called.
int total_advance = 0; ///< The total advance of the run. Valid after Shape() is called.
ICURun(int start, int length, UBiDiLevel level, UScriptCode script, const Font &font) : start(start), length(length), level(level), script(script), font(font) {}
ICURun(int start, int length, UBiDiLevel level, UScriptCode script = USCRIPT_UNKNOWN, Font *font = nullptr) : start(start), length(length), level(level), script(script), font(font) {}
void Shape(UChar *buff, size_t length);
void FallbackShape(UChar *buff);
};
/**
@@ -70,7 +66,7 @@ public:
std::vector<int> glyph_to_char;
int total_advance;
Font font;
const Font *font;
public:
ICUVisualRun(const ICURun &run, int x);
@@ -79,8 +75,8 @@ public:
std::span<const Position> GetPositions() const override { return this->positions; }
std::span<const int> GetGlyphToCharMap() const override { return this->glyph_to_char; }
const Font &GetFont() const override { return this->font; }
int GetLeading() const override { return GetCharacterHeight(this->font.GetFontCache().GetSize()); }
const Font *GetFont() const override { return this->font; }
int GetLeading() const override { return this->font->fc->GetHeight(); }
int GetGlyphCount() const override { return this->glyphs.size(); }
int GetAdvance() const { return this->total_advance; }
};
@@ -145,46 +141,6 @@ ICUParagraphLayout::ICUVisualRun::ICUVisualRun(const ICURun &run, int x) :
}
}
/**
* Manually shape a run for built-in non-truetype fonts.
* Similar to but not quite the same as \a UniscribeRun::FallbackShape.
* @param buff The complete buffer of the run.
*/
void ICURun::FallbackShape(UChar *buff)
{
FontCache &fc = this->font.GetFontCache();
this->glyphs.reserve(this->length);
this->glyph_to_char.reserve(this->length);
/* Read each UTF-16 character, mapping to an appropriate glyph. */
for (int i = this->start; i < this->start + this->length; i += Utf16IsLeadSurrogate(buff[i]) ? 2 : 1) {
char32_t c = Utf16DecodeChar(reinterpret_cast<uint16_t *>(buff + i));
if (this->level & 1) c = SwapRtlPairedCharacters(c);
this->glyphs.emplace_back(fc.MapCharToGlyph(c));
this->glyph_to_char.push_back(i);
}
/* Reverse the sequence if this run is RTL. */
if (this->level & 1) {
std::reverse(std::begin(this->glyphs), std::end(this->glyphs));
std::reverse(std::begin(this->glyph_to_char), std::end(this->glyph_to_char));
}
this->positions.reserve(this->glyphs.size());
/* Set positions of each glyph. */
int y_offset = fc.GetGlyphYOffset();
int advance = 0;
for (const GlyphID glyph : this->glyphs) {
int x_advance = fc.GetGlyphWidth(glyph);
this->positions.emplace_back(advance, advance + x_advance - 1, y_offset);
this->advance.push_back(x_advance);
advance += x_advance;
}
this->total_advance = advance;
}
/**
* Shape a single run.
*
@@ -193,20 +149,7 @@ void ICURun::FallbackShape(UChar *buff)
*/
void ICURun::Shape(UChar *buff, size_t buff_length)
{
FontCache &fc = this->font.GetFontCache();
/* Make sure any former run is lost. */
this->glyphs.clear();
this->glyph_to_char.clear();
this->positions.clear();
this->advance.clear();
if (fc.IsBuiltInFont()) {
this->FallbackShape(buff);
return;
}
auto hbfont = hb_ft_font_create_referenced(*(static_cast<const FT_Face *>(fc.GetOSHandle())));
auto hbfont = hb_ft_font_create_referenced(*(static_cast<const FT_Face *>(font->fc->GetOSHandle())));
/* Match the flags with how we render the glyphs. */
hb_ft_font_set_load_flags(hbfont, GetFontAAState() ? FT_LOAD_TARGET_NORMAL : FT_LOAD_TARGET_MONO);
@@ -227,6 +170,12 @@ void ICURun::Shape(UChar *buff, size_t buff_length)
auto glyph_info = hb_buffer_get_glyph_infos(hbbuf, &glyph_count);
auto glyph_pos = hb_buffer_get_glyph_positions(hbbuf, &glyph_count);
/* Make sure any former run is lost. */
this->glyphs.clear();
this->glyph_to_char.clear();
this->positions.clear();
this->advance.clear();
/* Reserve space, as we already know the size. */
this->glyphs.reserve(glyph_count);
this->glyph_to_char.reserve(glyph_count);
@@ -234,12 +183,20 @@ void ICURun::Shape(UChar *buff, size_t buff_length)
this->advance.reserve(glyph_count);
/* Prepare the glyphs/position. ICUVisualRun will give the position an offset if needed. */
int y_offset = fc.GetGlyphYOffset();
hb_position_t advance = 0;
for (unsigned int i = 0; i < glyph_count; i++) {
int x_advance = glyph_pos[i].x_advance / FONT_SCALE;
this->glyphs.push_back(glyph_info[i].codepoint);
this->positions.emplace_back(glyph_pos[i].x_offset / FONT_SCALE + advance, glyph_pos[i].x_offset / FONT_SCALE + advance + x_advance - 1, glyph_pos[i].y_offset / FONT_SCALE + y_offset);
int x_advance;
if (buff[glyph_info[i].cluster] >= SCC_SPRITE_START && buff[glyph_info[i].cluster] <= SCC_SPRITE_END && glyph_info[i].codepoint == 0) {
auto glyph = this->font->fc->MapCharToGlyph(buff[glyph_info[i].cluster]);
x_advance = this->font->fc->GetGlyphWidth(glyph);
this->glyphs.push_back(glyph);
this->positions.emplace_back(advance, advance + x_advance - 1, (this->font->fc->GetHeight() - ScaleSpriteTrad(FontCache::GetDefaultFontHeight(this->font->fc->GetSize()))) / 2); // Align sprite font to centre
} else {
x_advance = glyph_pos[i].x_advance / FONT_SCALE;
this->glyphs.push_back(glyph_info[i].codepoint);
this->positions.emplace_back(glyph_pos[i].x_offset / FONT_SCALE + advance, glyph_pos[i].x_offset / FONT_SCALE + advance + x_advance - 1, glyph_pos[i].y_offset / FONT_SCALE);
}
this->glyph_to_char.push_back(glyph_info[i].cluster);
this->advance.push_back(x_advance);
@@ -323,7 +280,7 @@ std::vector<ICURun> ItemizeBidi(UChar *buff, size_t length)
UBiDiLevel level;
ubidi_getLogicalRun(ubidi, start_pos, &logical_pos, &level);
runs.emplace_back(start_pos, logical_pos - start_pos, level, USCRIPT_UNKNOWN, Font{});
runs.emplace_back(start_pos, logical_pos - start_pos, level);
}
assert(static_cast<size_t>(count) == runs.size());
@@ -354,7 +311,7 @@ std::vector<ICURun> ItemizeScript(UChar *buff, size_t length, std::vector<ICURun
int stop_pos = std::min(script_itemizer.getScriptEnd(), cur_run->start + cur_run->length);
assert(stop_pos - cur_pos > 0);
runs.emplace_back(cur_pos, stop_pos - cur_pos, cur_run->level, script_itemizer.getScriptCode(), Font{});
runs.emplace_back(cur_pos, stop_pos - cur_pos, cur_run->level, script_itemizer.getScriptCode());
if (stop_pos == cur_run->start + cur_run->length) cur_run++;
cur_pos = stop_pos;
@@ -402,6 +359,11 @@ std::vector<ICURun> ItemizeStyle(std::vector<ICURun> &runs_current, FontMap &fon
/* Can't layout an empty string. */
if (length == 0) return nullptr;
/* Can't layout our in-built sprite fonts. */
for (auto const &[position, font] : font_mapping) {
if (font->fc->IsBuiltInFont()) return nullptr;
}
auto runs = ItemizeBidi(buff, length);
runs = ItemizeScript(buff, length, runs);
runs = ItemizeStyle(runs, font_mapping);
+2 -9
View File
@@ -677,16 +677,9 @@ public:
/* Draw x-axis labels and markings for graphs based on financial quarters and years. */
if (this->draw_dates) {
TimerGameEconomy::Month month = this->month;
TimerGameEconomy::Year year = this->year;
for (int i = 0; i < this->num_on_x_axis; i++) {
uint year = GetParamMaxValue(this->year.base(), 4, FS_SMALL);
for (uint month = 0; month < 12; ++month) {
x_label_width = std::max(x_label_width, GetStringBoundingBox(GetString(month == 0 ? STR_GRAPH_X_LABEL_MONTH_YEAR : STR_GRAPH_X_LABEL_MONTH, STR_MONTH_ABBREV_JAN + month, year)).width);
month += this->month_increment;
if (month >= 12) {
month = 0;
year++;
}
}
} else {
/* Draw x-axis labels for graphs not based on quarterly performance (cargo payment rates). */
+1
View File
@@ -2383,6 +2383,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bou 'n s
STR_STATION_CLASS_DFLT :Verstek stasie
STR_STATION_CLASS_WAYP :Roetebakens
+1 -3
View File
@@ -2288,10 +2288,8 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :الضواحي
STR_HOUSE_PICKER_CLASS_ZONE4 :الضواحي الداخلية
STR_HOUSE_PICKER_CLASS_ZONE5 :مركز المدينة
STR_HOUSE_PICKER_PROTECT_TITLE :منع الترقيات
STR_HOUSE_PICKER_PROTECT_TOOLTIP :اختر ما اذا كان هذا المنزل محمي من الاستبدال مع نمو المدينة
STR_HOUSE_PICKER_PROTECT_OFF :ايقاف
STR_HOUSE_PICKER_PROTECT_ON :تفعيل
STR_STATION_CLASS_DFLT :المحطة القياسية
STR_STATION_CLASS_WAYP :نقطة عبور
+1
View File
@@ -2263,6 +2263,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Geltokia
STR_STATION_CLASS_DFLT :Geltoki lehenetsia
STR_STATION_CLASS_WAYP :Bidepuntuak
+1
View File
@@ -3100,6 +3100,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Пабу
STR_STATION_CLASS_DFLT :Стандартная станцыя
STR_STATION_CLASS_DFLT_STATION :Стандартная чыг. станцыя
STR_STATION_CLASS_DFLT_ROADSTOP :Стандартны прыпынак
+10 -9
View File
@@ -219,15 +219,15 @@ STR_UNITS_VELOCITY_GAMEUNITS_SEC :{DECIMAL}{NBSP}
STR_UNITS_VELOCITY_KNOTS :{DECIMAL}{NBSP}nós
STR_UNITS_POWER_IMPERIAL :{DECIMAL}{NBSP}hp
STR_UNITS_POWER_METRIC :{DECIMAL}{NBSP}hp
STR_UNITS_POWER_METRIC :{DECIMAL}{NBSP}cv
STR_UNITS_POWER_SI :{DECIMAL}{NBSP}kW
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hp/t
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hp/t
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/t
STR_UNITS_POWER_METRIC_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hp/t
STR_UNITS_POWER_METRIC_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hp/t
STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/t
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/Mg
STR_UNITS_POWER_METRIC_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}cv/t
STR_UNITS_POWER_METRIC_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}cv/t
STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}cv/Mg
STR_UNITS_POWER_SI_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}kW/t
STR_UNITS_POWER_SI_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}kW/t
STR_UNITS_POWER_SI_TO_WEIGHT_SI :{DECIMAL}{NBSP}W/kg
@@ -2135,7 +2135,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Unidades de pot
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Sempre que a potência de um veículo for exibida na interface de usuário, mostrar nessas unidades
###length 3
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL :Imperial (hp)
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_METRIC :Métrico (hp)
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_METRIC :Métrico (cv)
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_SI :SI (kW)
STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT :Unidades de peso: {STRING}
@@ -2879,10 +2879,11 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Periferia Dista
STR_HOUSE_PICKER_CLASS_ZONE4 :Periferia Próxima
STR_HOUSE_PICKER_CLASS_ZONE5 :Centro da cidade
STR_HOUSE_PICKER_PROTECT_TITLE :Não permitir atualizações
STR_HOUSE_PICKER_PROTECT :Impedir atualizações
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Escolher se essa casa será protegida contra substituição quando a cidade crescer
STR_HOUSE_PICKER_PROTECT_OFF :Desativado
STR_HOUSE_PICKER_PROTECT_ON :Ativado
STR_HOUSE_PICKER_REPLACE :Substituir existentes
STR_HOUSE_PICKER_REPLACE_TOOLTIP :Escolha se deseja remover automaticamente a casa existente no local onde esta casa será colocada
STR_STATION_CLASS_DFLT :Padrão
STR_STATION_CLASS_DFLT_STATION :Estação padrão
+1
View File
@@ -2823,6 +2823,7 @@ STR_HOUSE_PICKER_CLASS_ZONE4 :Вътрешн
STR_HOUSE_PICKER_CLASS_ZONE5 :Градски център
STR_STATION_CLASS_DFLT :Станция по подразбиране
STR_STATION_CLASS_DFLT_STATION :Товарна станция по подразбиране
STR_STATION_CLASS_DFLT_ROADSTOP :Спирка по подразбиране
+17 -12
View File
@@ -313,6 +313,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Activant
STR_BUTTON_DEFAULT :{BLACK}Predeterminat
STR_BUTTON_CANCEL :{BLACK}Cancel·la
STR_BUTTON_OK :{BLACK}D'acord
STR_BUTTON_MOVE :{BLACK}Mou
# On screen keyboard window
STR_OSK_KEYBOARD_LAYOUT :`1234567890-= qwertyuiop[]asdfghjkl;'#\zxcvbnm,./ .
@@ -2862,15 +2863,15 @@ STR_PICKER_HOUSE_CLASS_TOOLTIP :Trieu quina zon
STR_PICKER_HOUSE_TYPE_TOOLTIP :Trieu quin tipus de casa construir. Amb Ctrl+clic, s'afegeix o es trau l'element de la llista de desats.
STR_HOUSE_PICKER_CAPTION :Selecció de cases
STR_HOUSE_PICKER_NAME :{BLACK}Nom: {ORANGE}{STRING}
STR_HOUSE_PICKER_POPULATION :{BLACK}Habitants: {ORANGE}{NUM}
STR_HOUSE_PICKER_YEARS :{BLACK}Anys: {ORANGE}{NUM}-{NUM}
STR_HOUSE_PICKER_YEARS_ANY :{BLACK}Anys: {ORANGE}Qualssevol
STR_HOUSE_PICKER_YEARS_FROM :{BLACK}Anys: {ORANGE}De {NUM}
STR_HOUSE_PICKER_YEARS_UNTIL :{BLACK}Anys: {ORANGE}Fins al {NUM}
STR_HOUSE_PICKER_SIZE :{BLACK}Mida: {ORANGE}{NUM}x{NUM} caselles
STR_HOUSE_PICKER_CARGO_ACCEPTED :{BLACK}Càrrega acceptada: {ORANGE}
STR_HOUSE_PICKER_CARGO_PRODUCED :{BLACK}Càrrega produïda: {ORANGE}{CARGO_LIST}
STR_HOUSE_PICKER_NAME :{BLACK}Nom: {GOLD}{STRING}
STR_HOUSE_PICKER_POPULATION :{BLACK}Habitants: {GOLD}{NUM}
STR_HOUSE_PICKER_YEARS :{BLACK}Anys: {GOLD}{NUM}-{NUM}
STR_HOUSE_PICKER_YEARS_ANY :{BLACK}Anys: {GOLD}Qualssevol
STR_HOUSE_PICKER_YEARS_FROM :{BLACK}Anys: {GOLD}De {NUM}
STR_HOUSE_PICKER_YEARS_UNTIL :{BLACK}Anys: {GOLD}Fins al {NUM}
STR_HOUSE_PICKER_SIZE :{BLACK}Mida: {GOLD}{NUM}x{NUM} caselles
STR_HOUSE_PICKER_CARGO_ACCEPTED :{BLACK}Càrrega acceptada: {GOLD}
STR_HOUSE_PICKER_CARGO_PRODUCED :{BLACK}Càrrega produïda: {GOLD}{CARGO_LIST}
STR_HOUSE_PICKER_CLASS_ZONE1 :Vora
STR_HOUSE_PICKER_CLASS_ZONE2 :Afores
@@ -2878,10 +2879,8 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Suburbi exterio
STR_HOUSE_PICKER_CLASS_ZONE4 :Suburbi interior
STR_HOUSE_PICKER_CLASS_ZONE5 :Centre de la població
STR_HOUSE_PICKER_PROTECT_TITLE :Evita les millores
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Escolliu si aquesta casa s'ha de protegir i evitar que es reemplaci quan creixi la població.
STR_HOUSE_PICKER_PROTECT_OFF :Desactivat
STR_HOUSE_PICKER_PROTECT_ON :Activat
STR_STATION_CLASS_DFLT :Per defecte
STR_STATION_CLASS_DFLT_STATION :Estació per defecte
@@ -3905,12 +3904,14 @@ STR_CARGO_RATING_EXCELLENT :Excel·lent
STR_CARGO_RATING_OUTSTANDING :Excepcional
STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Centra la vista principal al lloc de l'estació. Amb Ctrl+clic, s'obre una vista al lloc de l'estació.
STR_STATION_VIEW_EDIT_TOOLTIP :{BLACK}Canvia el nom de l'estació o mou-ne el senyal.
STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Mostra tots els trens que tinguin aquesta estació en el seu itinerari
STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Mostra tots els vehicles que tinguin aquesta estació en el seu itinerari
STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Mostra tots els avions que tinguin aquest aeroport en el seu itinerari
STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Mostra tots els vaixells que tinguin aquest port en el seu itinerari
STR_STATION_VIEW_EDIT_STATION_SIGN :{WHITE}Edita el senyal de l'estació
STR_STATION_VIEW_CLOSE_AIRPORT :{BLACK}Tanca l'aeroport
STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Evita que els avions aterrin en aquest aeroport
@@ -3918,9 +3919,11 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Evita qu
# Waypoint/buoy view window
STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT}
STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centra la vista principal al lloc del punt de pas. Amb Ctrl+clic, s'obre una vista al lloc del punt de pas.
STR_WAYPOINT_VIEW_EDIT_TOOLTIP :{BLACK}Canvia el nom del punt de pas o mou-ne el senyal.
STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centra la vista principal en la boia. Amb Ctrl+clic, s'obre una vista centrada a la boia.
STR_BUOY_VIEW_RENAME_TOOLTIP :{BLACK}Canvia el nom de la boia
STR_WAYPOINT_VIEW_EDIT_WAYPOINT_SIGN :{WHITE}Edita el senyal del punt de pas
# Finances window
STR_FINANCES_CAPTION :{WHITE}Finances de {COMPANY} {BLACK}{COMPANY_NUM}
@@ -5134,6 +5137,7 @@ STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Masses e
STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Massa prop d'un altre moll
STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Massa prop d'un altre aeroport
STR_ERROR_CAN_T_RENAME_STATION :{WHITE}No es pot canviar el nom de l'estació...
STR_ERROR_CAN_T_MOVE_STATION_NAME :{WHITE}El senyal de l'estació no es pot moure...
STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... aquesta carretera és propietat d'una població.
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... sentit de la carretera en la direcció incorrecta
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... les estacions d'autobús de pas no poden tenir cantonades
@@ -5165,6 +5169,7 @@ STR_ERROR_CAN_T_BUILD_RAIL_WAYPOINT :{WHITE}Aquí no
STR_ERROR_CAN_T_BUILD_ROAD_WAYPOINT :{WHITE}Aquí no es pot construir un punt de pas de carretera...
STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Aquí no es pot situar una boia...
STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}No es pot canviar el nom del punt de pas...
STR_ERROR_CAN_T_MOVE_WAYPOINT_NAME :{WHITE}El senyal del punt de pas no es pot moure...
STR_ERROR_CAN_T_REMOVE_RAIL_WAYPOINT :{WHITE}Aquí no es pot treure un punt de pas de tren...
STR_ERROR_CAN_T_REMOVE_ROAD_WAYPOINT :{WHITE}Aquí no es pot traure cap punt de pas de carretera...
+1
View File
@@ -1067,6 +1067,7 @@ STR_CONTENT_DETAIL_VERSION :{SILVER}Вер
# Signal window
# Bridge selection window
+1
View File
@@ -2526,6 +2526,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Napravi
STR_STATION_CLASS_DFLT :Zadana postaja
STR_STATION_CLASS_WAYP :Čvorišta
+1 -3
View File
@@ -2916,10 +2916,8 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Vnější před
STR_HOUSE_PICKER_CLASS_ZONE4 :Vnitní předměstí
STR_HOUSE_PICKER_CLASS_ZONE5 :Centrum města
STR_HOUSE_PICKER_PROTECT_TITLE :Zabránit vylepšování
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Vyber, zdali bude tento dům chráněn před nahrazením, jak se bude město rozrůstat
STR_HOUSE_PICKER_PROTECT_OFF :Vypnuto
STR_HOUSE_PICKER_PROTECT_ON :Zapnuto
STR_STATION_CLASS_DFLT :Původní
STR_STATION_CLASS_DFLT_STATION :Původní stanice
+36 -13
View File
@@ -254,6 +254,7 @@ STR_UNITS_FORCE_SI :{DECIMAL} kN
STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL} fod
STR_UNITS_HEIGHT_METRIC :{DECIMAL} m
STR_UNITS_HEIGHT_SI :{DECIMAL} m
STR_UNITS_HEIGHT_GAMEUNITS :{DECIMAL}{NBSP}level{P "" s}
# Time units used in string control characters
STR_UNITS_DAYS :{COMMA}{NBSP}dag{P "" s}
@@ -311,6 +312,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Ved at a
STR_BUTTON_DEFAULT :{BLACK}Standard
STR_BUTTON_CANCEL :{BLACK}Annullér
STR_BUTTON_OK :{BLACK}OK
STR_BUTTON_MOVE :{BLACK}Flyt
# On screen keyboard window
STR_OSK_KEYBOARD_LAYOUT :`1234567890-= qwertyuiop[]asdfghjkl;'#\zxcvbnm,./ .
@@ -2162,6 +2164,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_HELPTEXT :Når højde er
STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL :Imperisk (fod)
STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :Metrisk (m)
STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (m)
STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_GAMEUNITS :Spillenheder (levels)
STR_CONFIG_SETTING_LOCALISATION :Lokalisering
STR_CONFIG_SETTING_GRAPHICS :Grafiksæt / Manglende grafik
@@ -2859,15 +2862,15 @@ STR_PICKER_HOUSE_CLASS_TOOLTIP :Vælg en byzone
STR_PICKER_HOUSE_TYPE_TOOLTIP :Vælg en hustype at bygge. Ctrl+klik for at tilføje eller fjerne i gemte elementer
STR_HOUSE_PICKER_CAPTION :Husvalg
STR_HOUSE_PICKER_NAME :{BLACK}Navn: {ORANGE}{STRING}
STR_HOUSE_PICKER_POPULATION :{BLACK}Befolkning: {ORANGE}{NUM}
STR_HOUSE_PICKER_YEARS :{BLACK}År: {ORANGE}{NUM}-{NUM}
STR_HOUSE_PICKER_YEARS_ANY :{BLACK}År: {ORANGE}Any
STR_HOUSE_PICKER_YEARS_FROM :{BLACK}År: {ORANGE}Fra {NUM}
STR_HOUSE_PICKER_YEARS_UNTIL :{BLACK}År: {ORANGE}til {NUM}
STR_HOUSE_PICKER_SIZE :{BLACK}Størrelse: {ORANGE}{NUM}x{NUM} fliser
STR_HOUSE_PICKER_CARGO_ACCEPTED :{BLACK}Gods accepteret: {ORANGE}
STR_HOUSE_PICKER_CARGO_PRODUCED :{BLACK}Produceret last: {ORANGE}{CARGO_LIST}
STR_HOUSE_PICKER_NAME :{BLACK}Navn: {GOLD}{STRING}
STR_HOUSE_PICKER_POPULATION :{BLACK}Befolkning: {GOLD}{NUM}
STR_HOUSE_PICKER_YEARS :{BLACK}År: {GOLD}{NUM}-{NUM}
STR_HOUSE_PICKER_YEARS_ANY :{BLACK}År: {GOLD}Any
STR_HOUSE_PICKER_YEARS_FROM :{BLACK}År: {GOLD}From {NUM}
STR_HOUSE_PICKER_YEARS_UNTIL :{BLACK}År: {GOLD}til {NUM}
STR_HOUSE_PICKER_SIZE :{BLACK}Størrelse: {GOLD}{NUM}x{NUM} fliser
STR_HOUSE_PICKER_CARGO_ACCEPTED :{BLACK}Last accepteret: {GOLD}
STR_HOUSE_PICKER_CARGO_PRODUCED :{BLACK}Produceret last: {GOLD}{CARGO_LIST}
STR_HOUSE_PICKER_CLASS_ZONE1 :Kant
STR_HOUSE_PICKER_CLASS_ZONE2 :Udkant
@@ -2875,10 +2878,11 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Ydre Forstæder
STR_HOUSE_PICKER_CLASS_ZONE4 :Indre Forstæder
STR_HOUSE_PICKER_CLASS_ZONE5 :Bymidte
STR_HOUSE_PICKER_PROTECT_TITLE :Forhindre opgraderinger
STR_HOUSE_PICKER_PROTECT :Forhindre opgraderinger
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Vælg om dette hus skal beskyttes mod udskiftning i takt med at byen vokser
STR_HOUSE_PICKER_PROTECT_OFF :Slukket
STR_HOUSE_PICKER_PROTECT_ON :ndt
STR_HOUSE_PICKER_REPLACE :Erstat eksisterende
STR_HOUSE_PICKER_REPLACE_TOOLTIP :Vælg om et eksisterende hus automatisk skal fjernes på den flise, hvor dette hus er placeret
STR_STATION_CLASS_DFLT :Standard station
STR_STATION_CLASS_DFLT_STATION :Standard station
@@ -3425,6 +3429,10 @@ STR_MAPGEN_NORTHWEST :{BLACK}Nordvest
STR_MAPGEN_NORTHEAST :{BLACK}Nordøst
STR_MAPGEN_SOUTHEAST :{BLACK}Sydøst
STR_MAPGEN_SOUTHWEST :{BLACK}Sydvest
STR_MAPGEN_NORTHWEST_TOOLTIP :Skift mellem vand- eller friformskant på den nordvestlige kortkant
STR_MAPGEN_NORTHEAST_TOOLTIP :Skift mellem vand- eller friformskant på den nordøstlige kortkant
STR_MAPGEN_SOUTHEAST_TOOLTIP :Skift mellem vand- eller friformskant på den sydøstlige kortkant
STR_MAPGEN_SOUTHWEST_TOOLTIP :Skift mellem vand- eller friformskant på den sydvestlige kortkant
STR_MAPGEN_BORDER_FREEFORM :{BLACK}Fri udformning
STR_MAPGEN_BORDER_WATER :{BLACK}Vand
STR_MAPGEN_BORDER_RANDOM :{BLACK}Tilfældige
@@ -3471,6 +3479,8 @@ STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Landskab
STR_GENERATION_RIVER_GENERATION :{BLACK}Flod-generering
STR_GENERATION_CLEARING_TILES :{BLACK}Generer råt og stenet område
STR_GENERATION_TOWN_GENERATION :{BLACK}By generation
STR_GENERATION_LAND_INDUSTRY_GENERATION :{BLACK}Generering af jordindustrien
STR_GENERATION_WATER_INDUSTRY_GENERATION :{BLACK}Generering af vandindustrien
STR_GENERATION_OBJECT_GENERATION :{BLACK}Ikke-flytbar generering
STR_GENERATION_TREE_GENERATION :{BLACK}Trægenerering
STR_GENERATION_SETTINGUP_GAME :{BLACK}Klargør spil
@@ -3679,7 +3689,7 @@ STR_SIGN_LIST_MATCH_CASE :{BLACK}Match st
STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Vis matchende stort/lille bogstav når der sammenlignes skiltenavne med filter teksten
# Sign window
STR_EDIT_SIGN_CAPTION :{WHITE}Ændre skiltets tekst
STR_EDIT_SIGN_CAPTION :{WHITE}Rediger skilt
STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Centrér skærmen ved skiltets placering. Ctrl+klik åbner et nyt vindue ved skiltets placering
STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Gå til næste skilt
STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Gå til forrige skilt
@@ -3896,12 +3906,14 @@ STR_CARGO_RATING_EXCELLENT :Fortrinlig
STR_CARGO_RATING_OUTSTANDING :Enestående
STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Centrer skærmen over stationens lokalitet. Ctrl+Klik åbner et nyt vindue ved stationens lokalitet.
STR_STATION_VIEW_EDIT_TOOLTIP :{BLACK}Omdøb station eller flyt skilt
STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Vis alle toge, som har denne station i deres ruteplan
STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Vis alle køretøjer, som har denne station i deres ruteplan
STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Vis alle fly, som har denne lufthavn i deres ruteplan
STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Vis alle skibe, som har denne station i deres ruteplan
STR_STATION_VIEW_EDIT_STATION_SIGN :{WHITE}Rediger stationsskilt
STR_STATION_VIEW_CLOSE_AIRPORT :{BLACK}Luk lufthavn
STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Forhindre at fly lander i denne lufthavn
@@ -3909,9 +3921,11 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Forhindr
# Waypoint/buoy view window
STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT}
STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centrer skærmen over rutepunktets lokalitet. Ctrl+Klik åbner et nyt vindue ved rutepunktets lokalitet.
STR_WAYPOINT_VIEW_EDIT_TOOLTIP :{BLACK}Omdøb rutepunkt eller flyt skilt
STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centrér skærmen ved bøjens placering. Ctrl+klik åbner et nyt vindue ved bøjens placering
STR_BUOY_VIEW_RENAME_TOOLTIP :{BLACK}Ændr navnet på bøjen
STR_WAYPOINT_VIEW_EDIT_WAYPOINT_SIGN :{WHITE}Rediger rutepunkt skilt
# Finances window
STR_FINANCES_CAPTION :{WHITE}{COMPANY} Finanser {BLACK}{COMPANY_NUM}
@@ -5125,6 +5139,7 @@ STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}For mang
STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}For tæt på en anden havn
STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}For tæt på en anden lufthavn
STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Kan ikke omdøbe stationen...
STR_ERROR_CAN_T_MOVE_STATION_NAME :{WHITE}Kan ikke flytte stationsskiltet...
STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... denne vej er ejet af en by
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... vejen peger i den forkerte retning
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... drive-through stops kan ikke have hjørner
@@ -5156,6 +5171,7 @@ STR_ERROR_CAN_T_BUILD_RAIL_WAYPOINT :{WHITE}Kan ikke
STR_ERROR_CAN_T_BUILD_ROAD_WAYPOINT :{WHITE}Kan ikke bygge rutepunkt her...
STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Kan ikke placere en bøje her...
STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Kan ikke omdøbe rutepunkt...
STR_ERROR_CAN_T_MOVE_WAYPOINT_NAME :{WHITE}Kan ikke flytte rutepunkt skiltet...
STR_ERROR_CAN_T_REMOVE_RAIL_WAYPOINT :{WHITE}Kan ikke fjerne rutepunkt for tog her...
STR_ERROR_CAN_T_REMOVE_ROAD_WAYPOINT :{WHITE}Kan ikke fjerne rutepunkt...
@@ -5264,6 +5280,13 @@ STR_ERROR_START_AND_END_MUST_BE_IN :{WHITE}Start- o
STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}... begge ender af en bro skal være på land
STR_ERROR_BRIDGE_TOO_LONG :{WHITE}... broen er for lang
STR_ERROR_BRIDGE_THROUGH_MAP_BORDER :{WHITE}Broen ville slutte udenfor kortet
STR_ERROR_BRIDGE_TOO_LOW_FOR_STATION :{WHITE}Broen er {HEIGHT} for lav til en station
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROADSTOP :{WHITE}Broen er {HEIGHT} for lav til et vej stoppested
STR_ERROR_BRIDGE_TOO_LOW_FOR_DOCK :{WHITE}Broen er {HEIGHT} for lav til havnen
STR_ERROR_BRIDGE_TOO_LOW_FOR_BUOY :{WHITE} Broen er {HEIGHT} for lav til en bøje
STR_ERROR_BRIDGE_TOO_LOW_FOR_RAIL_WAYPOINT :{WHITE}Broen er {HEIGHT} for lav til et rutepunkt
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROAD_WAYPOINT :{WHITE}Broen er {HEIGHT} for lav til et rutepunkt
STR_ERROR_BRIDGE_TOO_LOW_FOR_LOCK :{WHITE}Bro er {HEIGHT} for lav til slusen
# Tunnel related errors
STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Kan ikke bygge en tunnel her...
+1 -3
View File
@@ -2877,10 +2877,8 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Buitenste voors
STR_HOUSE_PICKER_CLASS_ZONE4 :Binnenste voorsteden
STR_HOUSE_PICKER_CLASS_ZONE5 :Stadscentrum
STR_HOUSE_PICKER_PROTECT_TITLE :Opwaarderen voorkomen
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Kies of dit huis wordt beschermd tegen vervangen als de stad groeit
STR_HOUSE_PICKER_PROTECT_OFF :Uit
STR_HOUSE_PICKER_PROTECT_ON :Aan
STR_STATION_CLASS_DFLT :Standaard
STR_STATION_CLASS_DFLT_STATION :Standaard station
-2
View File
@@ -1090,8 +1090,6 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :Check this box
STR_GAME_OPTIONS_GUI_FONT_SPRITE :Use traditional sprite font
STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :Check this box if you prefer to use the traditional fixed-size sprite font
STR_GAME_OPTIONS_GUI_FONT_DEFAULT :Prefer default font
STR_GAME_OPTIONS_GUI_FONT_DEFAULT_TOOLTIP :Check this box if you prefer to use the default font over discovered fallback fonts
STR_GAME_OPTIONS_GUI_FONT_AA :Anti-alias fonts
STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :Check this box to anti-alias resizable fonts
+4 -3
View File
@@ -2878,10 +2878,11 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Outer Suburbs
STR_HOUSE_PICKER_CLASS_ZONE4 :Inner Suburbs
STR_HOUSE_PICKER_CLASS_ZONE5 :Town centre
STR_HOUSE_PICKER_PROTECT_TITLE :Prevent upgrades
STR_HOUSE_PICKER_PROTECT :Prevent upgrades
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Choose whether this house will be protected from replacement as the town grows
STR_HOUSE_PICKER_PROTECT_OFF :Off
STR_HOUSE_PICKER_PROTECT_ON :On
STR_HOUSE_PICKER_REPLACE :Replace existing
STR_HOUSE_PICKER_REPLACE_TOOLTIP :Choose whether to automatically remove an existing house on the tile where this house is placed
STR_STATION_CLASS_DFLT :Default
STR_STATION_CLASS_DFLT_STATION :Default station
+4 -3
View File
@@ -2878,10 +2878,11 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Outer Suburbs
STR_HOUSE_PICKER_CLASS_ZONE4 :Inner Suburbs
STR_HOUSE_PICKER_CLASS_ZONE5 :Town center
STR_HOUSE_PICKER_PROTECT_TITLE :Prevent upgrades
STR_HOUSE_PICKER_PROTECT :Prevent upgrades
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Choose whether this house will be protected from replacement as the town grows
STR_HOUSE_PICKER_PROTECT_OFF :Off
STR_HOUSE_PICKER_PROTECT_ON :On
STR_HOUSE_PICKER_REPLACE :Replace existing
STR_HOUSE_PICKER_REPLACE_TOOLTIP :Choose whether to automatically remove an existing house on the tile where this house is placed
STR_STATION_CLASS_DFLT :Default
STR_STATION_CLASS_DFLT_STATION :Default station
+1
View File
@@ -2742,6 +2742,7 @@ STR_HOUSE_PICKER_CLASS_ZONE2 :Periferioj
STR_HOUSE_PICKER_CLASS_ZONE3 :Eksteraj Antaŭurboj
STR_STATION_CLASS_DFLT :Defaŭlta
STR_STATION_CLASS_DFLT_STATION :Defaŭlta stacio
STR_STATION_CLASS_DFLT_ROADSTOP :Defaŭlta vojhaltejo
+1
View File
@@ -2847,6 +2847,7 @@ STR_HOUSE_PICKER_CLASS_ZONE4 :Eeslinnad
STR_HOUSE_PICKER_CLASS_ZONE5 :Kesklinn
STR_STATION_CLASS_DFLT :Vaikimisi
STR_STATION_CLASS_DFLT_STATION :Vaikimisi jaam
STR_STATION_CLASS_DFLT_ROADSTOP :Vaikimisi peatus
+1
View File
@@ -2163,6 +2163,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bygg ein
STR_STATION_CLASS_DFLT :Vanlig støð
STR_STATION_CLASS_WAYP :Waypoint
+8 -7
View File
@@ -2878,10 +2878,11 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Ulommat lähiö
STR_HOUSE_PICKER_CLASS_ZONE4 :Sisemmät lähiöt
STR_HOUSE_PICKER_CLASS_ZONE5 :Keskusta
STR_HOUSE_PICKER_PROTECT_TITLE :Estä uudistaminen
STR_HOUSE_PICKER_PROTECT :Estä parannukset
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Valitse, suojataanko tämä talo korvaamiselta kunnan kasvaessa
STR_HOUSE_PICKER_PROTECT_OFF :Ei
STR_HOUSE_PICKER_PROTECT_ON :Kyllä
STR_HOUSE_PICKER_REPLACE :Korvaa entinen
STR_HOUSE_PICKER_REPLACE_TOOLTIP :Valitse, poistetaanko olemassa oleva talo automaattisesti ruudulta, jolle taloa sijoitetaan
STR_STATION_CLASS_DFLT :Oletus
STR_STATION_CLASS_DFLT_STATION :Oletusasema
@@ -4638,10 +4639,10 @@ STR_ORDER_GO_VIA :Mene kautta
STR_ORDER_GO_NON_STOP_VIA :Mene pysähtymättä kautta
STR_ORDER_TOOLTIP_NON_STOP :{BLACK}Muuta korostetun käskyn pysähtymiskäyttäytymistä
STR_ORDER_TOGGLE_FULL_LOAD :{BLACK}Lastaa täyteen mikä tahansa rahtityyppi
STR_ORDER_TOGGLE_FULL_LOAD :{BLACK}Lastaa täyteen mitä tahansa rahtia
STR_ORDER_DROP_LOAD_IF_POSSIBLE :Lastaa jos saatavilla
STR_ORDER_DROP_FULL_LOAD_ALL :Lastaa täyteen kaikki rahtityypit
STR_ORDER_DROP_FULL_LOAD_ANY :Lastaa täyteen mikä tahansa rahtityyppi
STR_ORDER_DROP_FULL_LOAD_ANY :Lastaa täyteen mitä tahansa rahtia
STR_ORDER_DROP_NO_LOADING :Älä lastaa rahtia
STR_ORDER_TOOLTIP_FULL_LOAD :{BLACK}Muuta korostetun käskyn lastauskäyttäytymistä
@@ -4713,7 +4714,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :Mene lähimmäl
STR_ORDER_GO_TO_NEAREST_HANGAR :Mene lähimpään lentokonehalliin
STR_ORDER_CONDITIONAL :Ehdollinen hyppykäsky
STR_ORDER_SHARE :Jaa käskyt
STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Lisää uuden käskyn ennen valittua, tai lisää listan viimeiseksi. Ctrl+napsautuksella asemakäskyistä tulee ”lastaa täyteen mikä tahansa rahti”, reittipistekäskyille ”oletuksena pysähtymättä” -asetuksen vastakohta, ja veturitallikäskyistä tulee ”sumanpurku”. Napsauta toista kulkuneuvoa kopioidaksesi sen käskyt tai Ctrl+napsauta luodaksesi jaetun käskyn. Tallikäsky poistaa automaattiset huollot
STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Lisää uuden käskyn ennen valittua, tai lisää listan viimeiseksi. Ctrl+napsautuksella asemakäskyistä tulee ”lastaa täyteen mitä tahansa rahtia”, reittipistekäskyillä ”oletuksena pysähtymättä” -asetuksen vastakohta, ja varikkokäskyistä tulee ”sumanpurku”. Napsauta toista kulkuneuvoa kopioidaksesi sen käskyt tai Ctrl+napsauta luodaksesi jaetun käskyn. Varikkokäsky poistaa kulkuneuvon automaattiset huollot käytöstä
STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Näytä kaikki kulkuneuvot, jotka jakavat nämä käskyt
@@ -4763,7 +4764,7 @@ STR_ORDER_NO_UNLOAD_NO_LOAD :{SPACE}(Ei purk
STR_ORDER_AUTO_REFIT :{SPACE}(Sovita rahdille {STRING})
STR_ORDER_FULL_LOAD_REFIT :{SPACE}(Sovita rahdille {STRING} ja lastaa täyteen)
STR_ORDER_FULL_LOAD_ANY_REFIT :{SPACE}(Sovita rahdille {STRING} ja lastaa täyteen mitä tahansa rahtia)
STR_ORDER_FULL_LOAD_ANY_REFIT :{SPACE}(Sovita rahdille {STRING} ja lastaa täyteen)
STR_ORDER_UNLOAD_REFIT :{SPACE}(Pura lasti, sovita rahdille {STRING}, ota rahti)
STR_ORDER_UNLOAD_FULL_LOAD_REFIT :{SPACE}(Pura lasti, sovita rahdille {STRING}, odota täyttä lastia)
STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :{SPACE}(Pura lasti, sovita rahdille {STRING}, odota mitä tahansa täyttä lastia)
+1 -3
View File
@@ -2878,10 +2878,8 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Banlieue extér
STR_HOUSE_PICKER_CLASS_ZONE4 :Banlieue intérieure
STR_HOUSE_PICKER_CLASS_ZONE5 :Centre-ville
STR_HOUSE_PICKER_PROTECT_TITLE :Empêcher les améliorations
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Définit si cette maison sera protégée contre son remplacement lors de la croissance de la ville
STR_HOUSE_PICKER_PROTECT_OFF :Désactivé
STR_HOUSE_PICKER_PROTECT_ON :Activé
STR_STATION_CLASS_DFLT :Par défaut
STR_STATION_CLASS_DFLT_STATION :Stations par défaut
+1
View File
@@ -2264,6 +2264,7 @@ STR_STATION_BUILD_DRAG_DROP :Sleepe en los l
STR_STATION_CLASS_DFLT :Standert stasjon
STR_STATION_CLASS_WAYP :Kontrôleposten
+1
View File
@@ -2565,6 +2565,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Tog stè
STR_STATION_CLASS_DFLT :Stèisean bunaiteach
STR_STATION_CLASS_WAYP :Puingean-turais
+1 -3
View File
@@ -2879,10 +2879,8 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Suburbios da pe
STR_HOUSE_PICKER_CLASS_ZONE4 :Suburbios interiores
STR_HOUSE_PICKER_CLASS_ZONE5 :Centro da vila
STR_HOUSE_PICKER_PROTECT_TITLE :Evitar melloras
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Escolle se esta casa estará protexida do remprazo a medida que a vila medra
STR_HOUSE_PICKER_PROTECT_OFF :Desactivado
STR_HOUSE_PICKER_PROTECT_ON :Activado
STR_STATION_CLASS_DFLT :Por defecto
STR_STATION_CLASS_DFLT_STATION :Estación por defecto
+1 -3
View File
@@ -2879,10 +2879,8 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Äußere Vorort
STR_HOUSE_PICKER_CLASS_ZONE4 :Innere Vororte
STR_HOUSE_PICKER_CLASS_ZONE5 :Stadtmitte
STR_HOUSE_PICKER_PROTECT_TITLE :Aufwertungen verhindern
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Auswählen, ob dieses Haus vor dem Ersetzen geschützt wird, wenn die Stadt wächst.
STR_HOUSE_PICKER_PROTECT_OFF :Aus
STR_HOUSE_PICKER_PROTECT_ON :An
STR_STATION_CLASS_DFLT :Standard
STR_STATION_CLASS_DFLT_STATION :Standart-Haltestelle
+4 -3
View File
@@ -2971,10 +2971,11 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Εξωτερι
STR_HOUSE_PICKER_CLASS_ZONE4 :Εσωτερικά Προάστια
STR_HOUSE_PICKER_CLASS_ZONE5 :Κέντρο της πόλης
STR_HOUSE_PICKER_PROTECT_TITLE :Αποτροπή αναβαθμίσεων
STR_HOUSE_PICKER_PROTECT :Αποτροπή αναβαθμίσεων
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Επιλέξτε αν αυτό το σπίτι θα προστατεύεται από αντικατάσταση καθώς η πόλη μεγαλώνει
STR_HOUSE_PICKER_PROTECT_OFF :Ανενεργό
STR_HOUSE_PICKER_PROTECT_ON :Ενεργό
STR_HOUSE_PICKER_REPLACE :Αντικατάσταση υπάρχοντος
STR_HOUSE_PICKER_REPLACE_TOOLTIP :Επιλέξτε εάν θα αφαιρεθεί αυτόματα ένα υπάρχον σπίτι στο πλακίδιο όπου τοποθετείται αυτό το σπίτι
STR_STATION_CLASS_DFLT :Προεπιλεγμένος
STR_STATION_CLASS_DFLT_STATION :Προεπιλεγμένος σταθμός
+48 -1
View File
@@ -183,6 +183,7 @@ STR_LITERS :{P 0 "ליטר
STR_ITEMS :{P 0 "פריט " ""}{COMMA}{P "" "פריטים"}
STR_CRATES :{P 0 "ארגז " ""}{COMMA}{P "" "ארגזים"}
STR_COLOUR_DEFAULT :ברירת מחדל
###length 17
STR_COLOUR_DARK_BLUE :כחול כהה
STR_COLOUR_PALE_GREEN :ירוק חיוור
@@ -200,10 +201,13 @@ STR_COLOUR_ORANGE :כתום
STR_COLOUR_BROWN :חום
STR_COLOUR_GREY :אפור
STR_COLOUR_WHITE :לבן
STR_COLOUR_RANDOM :אקראי
###length 17
STR_COLOUR_SECONDARY_DARK_BLUE :כחול כהה
STR_COLOUR_SECONDARY_PALE_GREEN :ירוק חיוור
STR_COLOUR_SECONDARY_SECONDARY_PINK :ורוד
STR_COLOUR_SECONDARY_YELLOW :צהוב
STR_COLOUR_SECONDARY_RED :אדום
STR_COLOUR_SECONDARY_LIGHT_BLUE :כחול בהיר
STR_COLOUR_SECONDARY_GREEN :ירוק
@@ -215,6 +219,7 @@ STR_COLOUR_SECONDARY_PURPLE :סגול
STR_COLOUR_SECONDARY_ORANGE :כתום
STR_COLOUR_SECONDARY_BROWN :חום
STR_COLOUR_SECONDARY_GREY :אפור
STR_COLOUR_SECONDARY_WHITE :לבן
STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :כמו הראשי
@@ -906,7 +911,15 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TOOLTIP :{BLACK}העתק
STR_GAME_OPTIONS_CAPTION :{WHITE}אפשרויות משחק
STR_GAME_OPTIONS_TAB_GENERAL :כללי
STR_GAME_OPTIONS_TAB_GENERAL_TOOLTIP :בחר הגדרות כלליות
STR_GAME_OPTIONS_TAB_GRAPHICS :גרפיקות
STR_GAME_OPTIONS_TAB_GRAPHICS_TOOLTIP :בחר הגדרות גרפיקה
STR_GAME_OPTIONS_TAB_SOUND :שמע
STR_GAME_OPTIONS_TAB_SOUND_TOOLTIP :בחר הגדרות שמע ומוזיקה
STR_GAME_OPTIONS_TAB_SOCIAL :חברתי
STR_GAME_OPTIONS_TAB_SOCIAL_TOOLTIP :בחר הגדרות שילוב חברתי
STR_GAME_OPTIONS_TAB_ADVANCED :הגדרות מתקדמות
STR_GAME_OPTIONS_TAB_ADVANCED_TOOLTIP :שנה את ההגדרות המתקדמות
@@ -989,6 +1002,10 @@ STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :סמן תיבה
STR_GAME_OPTIONS_GUI_SCALE_BEVELS :התאם שוליים
STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :סמן תיבה זו כדי להתאים את השוליים לפי גודל הממשק
STR_GAME_OPTIONS_GUI_FONT_SPRITE :השתמש בגופן ספרייט מסורתי
STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :סמן תיבה זו אם אתה מעדיף להשתמש בגופן הספרייט המסורתי בעל גודל קבוע
STR_GAME_OPTIONS_GUI_FONT_AA :גופנים חלקים
STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :סמן תיבה זו כדי להחליק גופנים בעלי גודל משתנה
STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}x
@@ -1299,9 +1316,11 @@ STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :מימין
###length 2
STR_CONFIG_SETTING_SHOWFINANCES :הראה את חלון מערך הכספים בכל סוף שנה : {STRING}
STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :הראה את חלון מערך הכספים בכל סוף תקופה: {STRING}
###length 2
STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :אם מאופשר, חלון הכספים מופיע בסוף כל שנה כדי לאפשר בחינה קלה של המצב הכספי של החברה
STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :אם מאופשר, חלון הכספים מופיע בסוף כל תקופה כדי לאפשר בחינה קלה של המצב הכספי של החברה
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :הוראות חדשות הם תמיד 'לא לעצור' כבחירת מחדל: {STRING}
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :בדרך כלל, רכב יעצור בכל תחנה בה הוא עובר. ע"י הפעלת הגדרה זו, הוא יסע דרך כל התחנות בדרך על יעדו הסופי מבלי לעצור. שים לב, הגדרה זו רק קובעת ערך ברירת מחדל עבור הוראות חדשות. הוראות פרטניות יכולות להיות מוגדרות במפורש לכל אחת מבין ההתנהגויות בכל מקרה
@@ -1613,6 +1632,7 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :{STRING}: שמ
STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :השאר את כלי הבנייה עבור גשרים, מנהרות וכו' פתוחים אחרי השימוש
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :הסר רמזורים אוטומטית במהלך בניית פסי רכבת: {STRING}
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :הסר רמזורים אוטומטית במהלך בניית פסי רכבת אם הרמזורים נמצאים בדרך. הסרה זו עלולה לגרום לתאונות רכבת
STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :הגבלת מהירות הרצה קדימה: {STRING}
STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :הגבלת מהירות המשחק כאשר הרצה קדימה מופעלת. 0 = ללא הגבלה (מהר ככל שהמחשב שלך מאפשר). ערכים מתחת ל-100% מאטים את המשחק. הגבול העליון תלוי במפרט המחשב שלך ועשוי להשתנות בהתאם למשחק.
@@ -1628,9 +1648,11 @@ STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :השמע צלי
###length 2
STR_CONFIG_SETTING_SOUND_NEW_YEAR :סוף שנה: {STRING}
STR_CONFIG_SETTING_SOUND_NEW_PERIOD :סוף תקופה: {STRING}
###length 2
STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :השמע צליל בסוף שנה המסכם את תפקוד החברה בהשוואה לשנה הקודמת
STR_CONFIG_SETTING_SOUND_NEW_PERIOD_HELPTEXT :השמע צליל בסוף תקופה המסכם את תפקוד החברה במהלך התקופה בהשוואה לתקופה הקודמת
STR_CONFIG_SETTING_SOUND_CONFIRM :בנייה: {STRING}
STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :השמע צליל בעת הצלחת בנייה או פעולות אחרות
@@ -2180,6 +2202,10 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}הצטר
STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}רענן שרת
STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}רענן את המידע המוצג לגבי השרת
STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}חפש באינטרנט
STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}חפש שרתים פומביים באינטרנט
STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}חפש ברשת המקומית
STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}חפש שרתים ברשת המקורית
STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}הוסף שרת
STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}מוסיף שרת לרשימה שתמיד תבדק למשחקים פעילים.
STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}הפעל שרת
@@ -2475,6 +2501,10 @@ STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLA
STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}העמסת יתר
# Linkgraph tooltip
STR_LINKGRAPH_STATS_TOOLTIP_MONTH :{BLACK}{CARGO_LONG} ישונעו בחודש מ{STATION} ל{STATION} ({COMMA}% מהקיבולת){STRING}
STR_LINKGRAPH_STATS_TOOLTIP_MINUTE :{BLACK}{CARGO_LONG} ישונעו בדקה מ{STATION} ל{STATION} ({COMMA}% מהקיבולת){STRING}
STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} ישונעו חזרה ({COMMA}% מהקיבולת)
STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}זמן מסע ממוצע: {UNITS_DAYS_OR_SECONDS}
# Base for station construction window(s)
STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}הדגשת שטח הכיסוי
@@ -2549,6 +2579,7 @@ STR_PICKER_MODE_SAVED_TOOLTIP :החלף הצג
STR_STATION_CLASS_DFLT :ברירת מחדל
STR_STATION_CLASS_DFLT_STATION :תחנת ברירת מחדל
STR_STATION_CLASS_DFLT_ROADSTOP :תחנת ברירת מחדל
@@ -3598,6 +3629,14 @@ STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}דורש
STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}דורש:
STR_INDUSTRY_VIEW_ACCEPT_CARGO_SUFFIX :{YELLOW}{0:STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_SUFFIX :{YELLOW}{0:STRING}{BLACK}: {1:CARGO_SHORT} ממתינים{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_SUFFIX.singular :{YELLOW}{0:STRING}{BLACK}: {1:CARGO_SHORT} ממתין{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_SUFFIX.plural :{YELLOW}{0:STRING}{BLACK}: {1:CARGO_SHORT} ממתינים{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_NOSUFFIX :{YELLOW}{0:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_NOSUFFIX :{YELLOW}{0:STRING}{BLACK}: {1:CARGO_SHORT} ממתינים
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_NOSUFFIX.singular :{YELLOW}{0:STRING}{BLACK}: {1:CARGO_SHORT} ממתין
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_NOSUFFIX.plural :{YELLOW}{0:STRING}{BLACK}: {1:CARGO_SHORT} ממתינים
STR_CONFIG_GAME_PRODUCTION :{WHITE}שנה תפוקה (כפולות של 8, עד 2040)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}שינוי ברמת ההפקה (עד 800% אחוז)
@@ -3809,7 +3848,7 @@ STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TOOLTIP :{BLACK}מכור
STR_DEPOT_AUTOREPLACE_TRAIN_TOOLTIP :{BLACK}החלף אוטומטית את כל הרכבות שבמוסך
STR_DEPOT_AUTOREPLACE_ROAD_VEHICLE_TOOLTIP :{BLACK}החלף אוטומטית את כל הרכבים שבמוסך
STR_DEPOT_AUTOREPLACE_SHIP_TOOLTIP :{BLACK}החלף אוטומטית את כל כלי השייט שבמבדוק
STR_DEPOT_AUTOREPLACE_AIRCRAFT_TOOLTIP :{BLACK}החלף אוטומאטית את כל כלי הטייס שבסככה
STR_DEPOT_AUTOREPLACE_AIRCRAFT_TOOLTIP :{BLACK}החלף אוטומטית את כל כלי הטייס שבסככה
###length VEHICLE_TYPES
STR_DEPOT_TRAIN_NEW_VEHICLES_BUTTON :{BLACK}כלים חדשים
@@ -3878,6 +3917,8 @@ STR_ENGINE_PREVIEW_SHIP :כלי שייט
STR_ENGINE_PREVIEW_COST_WEIGHT :עלות: {CURRENCY_LONG} משקל: {WEIGHT_SHORT}
STR_ENGINE_PREVIEW_COST_MAX_SPEED :עלות: {CURRENCY_LONG} מהירות מרבית: {VELOCITY}
STR_ENGINE_PREVIEW_RUNCOST_YEAR :עלות הפעלה: {CURRENCY_LONG} לשנה
STR_ENGINE_PREVIEW_RUNCOST_PERIOD :עלות הפעלה: {CURRENCY_LONG} לתקופה
# Autoreplace window
STR_REPLACE_VEHICLES_WHITE :{WHITE}החלף {STRING} - {STRING}
@@ -4481,6 +4522,7 @@ STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}... הג
STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... הגעת למגבלת פינוי המשבצות
STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}... הגעת למגבלת נטיעת העצים
STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}השם חייב להיות ייחודי
STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}חוסם את הדרך {STRING}
STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}אסור בזמן שהמשחק מושהה
# Local authority errors
@@ -4785,12 +4827,17 @@ STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}לא נ
###length VEHICLE_TYPES
###length VEHICLE_TYPES
STR_ERROR_CAN_T_AUTOREPLACE_TRAIN :{WHITE}לא ניתן להחליף את הרכבות אוטומטית...
STR_ERROR_CAN_T_AUTOREPLACE_ROAD_VEHICLE :{WHITE}לא ניתן להחליף את כלי הרכב אוטומטית...
STR_ERROR_CAN_T_AUTOREPLACE_SHIP :{WHITE}לא ניתן להחליף את כלי השייט אוטומטית...
STR_ERROR_CAN_T_AUTOREPLACE_AIRCRAFT :{WHITE}לא ניתן להחליף את כלי הטייס אוטומטית...
STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}יותר מידי כלי תעבורה במשחק
STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}לא ניתן לשנות את מרווחי הטיפול...
STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... הרכב נהרס
STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... לא כל כלי הרכב זהים
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}כלי תחבורה לא יהיו זמינים
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}שנה הגדרות NewGRF
+1
View File
@@ -885,6 +885,7 @@ STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}अक
STR_STATION_CLASS_DFLT :मानक स्टेशन
STR_STATION_CLASS_WAYP :पथ-संकेत
+4 -3
View File
@@ -2942,10 +2942,11 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Külső kertvá
STR_HOUSE_PICKER_CLASS_ZONE4 :Belső kertváros
STR_HOUSE_PICKER_CLASS_ZONE5 :Városközpont
STR_HOUSE_PICKER_PROTECT_TITLE :Frissítések megelőzése
STR_HOUSE_PICKER_PROTECT :Növekedés megakadályozása
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Válaszd ki, hogy a város növekedésével ez a ház védve legyen-e a cserétől
STR_HOUSE_PICKER_PROTECT_OFF :Ki
STR_HOUSE_PICKER_PROTECT_ON :Be
STR_HOUSE_PICKER_REPLACE :Meglévő kicserélése
STR_HOUSE_PICKER_REPLACE_TOOLTIP :Válaszd ki, hogy automatikusan eltávolítsa-e a meglévő házat arról a mezőről, ahova ez a ház lerakásra kerül
STR_STATION_CLASS_DFLT :Alapértelmezett
STR_STATION_CLASS_DFLT_STATION :Alapértelmezett állomás
+1
View File
@@ -2214,6 +2214,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Byggja l
STR_STATION_CLASS_DFLT :Sjálfgefin stöð
STR_STATION_CLASS_WAYP :Millistöð
+1
View File
@@ -963,6 +963,7 @@ STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Aceptas:
# Signal window
# Bridge selection window
+1
View File
@@ -2717,6 +2717,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Membangu
STR_STATION_CLASS_DFLT :Standar
STR_STATION_CLASS_DFLT_STATION :Stasiun standar
STR_STATION_CLASS_DFLT_ROADSTOP :Pemberhentian jalan standar
+1
View File
@@ -2538,6 +2538,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Tóg st
STR_STATION_CLASS_DFLT :Stáisiún réamhshocraithe
STR_STATION_CLASS_WAYP :Pointí bealaigh
+1
View File
@@ -2886,6 +2886,7 @@ STR_HOUSE_PICKER_CLASS_ZONE4 :Sobborghi inter
STR_HOUSE_PICKER_CLASS_ZONE5 :Centro città
STR_STATION_CLASS_DFLT :Predefinita
STR_STATION_CLASS_DFLT_STATION :Stazione predefinita
STR_STATION_CLASS_DFLT_ROADSTOP :Fermata stradale predefinita
+1
View File
@@ -2657,6 +2657,7 @@ STR_PICKER_MODE_ALL :すべて
STR_STATION_CLASS_DFLT :標準駅
STR_STATION_CLASS_WAYP :中継駅
+4 -3
View File
@@ -2879,10 +2879,11 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :바깥쪽 시
STR_HOUSE_PICKER_CLASS_ZONE4 :안쪽 시내
STR_HOUSE_PICKER_CLASS_ZONE5 :도시 중심
STR_HOUSE_PICKER_PROTECT_TITLE :업그레이드 방지
STR_HOUSE_PICKER_PROTECT :업그레이드 방지
STR_HOUSE_PICKER_PROTECT_TOOLTIP :이 건물이 도시가 성장함에 따라 교체되는 것을 막을지 여부를 선택합니다
STR_HOUSE_PICKER_PROTECT_OFF :끄기
STR_HOUSE_PICKER_PROTECT_ON :켜기
STR_HOUSE_PICKER_REPLACE :이미 설치된 것 교체
STR_HOUSE_PICKER_REPLACE_TOOLTIP :이 건물이 배치된 칸에서 기존 건물을 자동으로 제거할지 여부를 선택합니다
STR_STATION_CLASS_DFLT :기본
STR_STATION_CLASS_DFLT_STATION :기본 역
+1
View File
@@ -2570,6 +2570,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Struere
STR_STATION_CLASS_DFLT :Statio solita
STR_STATION_CLASS_WAYP :Interloci
+1 -3
View File
@@ -2879,10 +2879,8 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Ārējās priek
STR_HOUSE_PICKER_CLASS_ZONE4 :Iekšējās priekšpilsētas
STR_HOUSE_PICKER_CLASS_ZONE5 :Pilsētas centrs
STR_HOUSE_PICKER_PROTECT_TITLE :Novērst uzlabojumus
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Izvēlieties, vai šī māja tiks aizsargāta pret nomaiņu, pilsētai augot
STR_HOUSE_PICKER_PROTECT_OFF :Izslēgts
STR_HOUSE_PICKER_PROTECT_ON :Ieslēgts
STR_STATION_CLASS_DFLT :Noklusējuma
STR_STATION_CLASS_DFLT_STATION :Noklusējuma stacija
+1
View File
@@ -2935,6 +2935,7 @@ STR_PICKER_MODE_ALL :Visi
STR_HOUSE_PICKER_CLASS_ZONE1 :Kraštas
STR_STATION_CLASS_DFLT :Numatytoji
STR_STATION_CLASS_DFLT_STATION :Numatytoji stotelė
STR_STATION_CLASS_DFLT_ROADSTOP :Numatytoji kelio stotelė
+1 -3
View File
@@ -2878,10 +2878,8 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Aner Viruerter
STR_HOUSE_PICKER_CLASS_ZONE4 :Bannescht Viruerter
STR_HOUSE_PICKER_CLASS_ZONE5 :Stadzentrum
STR_HOUSE_PICKER_PROTECT_TITLE :Upgrades verhënneren
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Wiel aus ob dëst Haus firun engem Ersetze geschützt gëtt wann d'Stad wiisst
STR_HOUSE_PICKER_PROTECT_OFF :Aus
STR_HOUSE_PICKER_PROTECT_ON :Un
STR_STATION_CLASS_DFLT :Standard
STR_STATION_CLASS_DFLT_STATION :Standardstatioun
+1
View File
@@ -1304,6 +1304,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Изгр
# Signal window
STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Влез сигнализација (електрика){}Зелено е се додека има барем еден зелен излез-сигнал во продолжението на траката, во спротивно е црвено.
STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Излез Сигнализација (електрика){}Се однесува на ист начин како блок-сигналот, но потребно е да ја има точната боја на влезен и комбо пресигнал.
+1
View File
@@ -2110,6 +2110,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bina ste
STR_STATION_CLASS_DFLT :Stesen lazim
STR_STATION_CLASS_WAYP :Tandatuju
+1
View File
@@ -892,6 +892,7 @@ STR_NETWORK_SERVER_MESSAGE :*** {STRING}
# Signal window
# Bridge selection window
+1 -3
View File
@@ -2877,10 +2877,8 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Paenoho Waho
STR_HOUSE_PICKER_CLASS_ZONE4 :Paenoho Roto
STR_HOUSE_PICKER_CLASS_ZONE5 :Pokapū Tāone
STR_HOUSE_PICKER_PROTECT_TITLE :Āraia ngā whakamohoa
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Kōwhiria mehemea ka tiakina tēnei whare kei whakakapi ina tupu ake te tāone
STR_HOUSE_PICKER_PROTECT_OFF :Poko
STR_HOUSE_PICKER_PROTECT_ON :Kā
STR_STATION_CLASS_DFLT :Taunoa
STR_STATION_CLASS_DFLT_STATION :Teihana taunoa
+1
View File
@@ -1198,6 +1198,7 @@ STR_NETWORK_SERVER_MESSAGE :*** {STRING}
# Signal window
# Bridge selection window
+4 -3
View File
@@ -2880,10 +2880,11 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Ytre forsteder
STR_HOUSE_PICKER_CLASS_ZONE4 :Indre forsteder
STR_HOUSE_PICKER_CLASS_ZONE5 :Bysentrum
STR_HOUSE_PICKER_PROTECT_TITLE :Forhindre oppgraderinger
STR_HOUSE_PICKER_PROTECT :Forhindre oppgraderinger
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Velg hvorvidt dette huset skal være beskyttet mot å bli byttet ut når byen vokser
STR_HOUSE_PICKER_PROTECT_OFF :Av
STR_HOUSE_PICKER_PROTECT_ON :
STR_HOUSE_PICKER_REPLACE :Erstatt eksisterende
STR_HOUSE_PICKER_REPLACE_TOOLTIP :Velg hvorvidt eksisterende hus skal fjernes automatisk på ruten hvor dette huset blir plassert
STR_STATION_CLASS_DFLT :Standard
STR_STATION_CLASS_DFLT_STATION :Standard stasjon
+1
View File
@@ -2286,6 +2286,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bygg sta
STR_STATION_CLASS_DFLT :Standard stasjon
STR_STATION_CLASS_WAYP :Kontrollpunkt
+1 -3
View File
@@ -2309,10 +2309,8 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :حومه‌ها
STR_HOUSE_PICKER_CLASS_ZONE4 :حومه‌های داخلی
STR_HOUSE_PICKER_CLASS_ZONE5 :مرکز شهر
STR_HOUSE_PICKER_PROTECT_TITLE :جلوگیری از ارتقا
STR_HOUSE_PICKER_PROTECT_TOOLTIP :انتخاب کنید که آیا این خانه با رشد شهر از جایگزینی در امان خواهد بود یا خیر
STR_HOUSE_PICKER_PROTECT_OFF :خاموش
STR_HOUSE_PICKER_PROTECT_ON :روشن
STR_STATION_CLASS_DFLT :ایستگاه پیش فرض
STR_STATION_CLASS_WAYP :نقطه مسیر ها
+9 -8
View File
@@ -2659,7 +2659,7 @@ STR_HELP_WINDOW_README :{BLACK}Plik „
STR_HELP_WINDOW_CHANGELOG :{BLACK}Lista Zmian
STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}Znane Błędy
STR_HELP_WINDOW_LICENSE :{BLACK}Licencja
STR_HELP_WINDOW_FONTS :{BLACK}Fonty
STR_HELP_WINDOW_FONTS :{BLACK}Fonty (pot. czcionki)
STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD
STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}Podręcznik / Wiki
STR_HELP_WINDOW_BUGTRACKER :{BLACK}Zgłoś Błąd
@@ -3258,10 +3258,11 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Przedmieścia z
STR_HOUSE_PICKER_CLASS_ZONE4 :Przedmieścia wewnętrzne
STR_HOUSE_PICKER_CLASS_ZONE5 :Centrum miasta
STR_HOUSE_PICKER_PROTECT_TITLE :Zapobieganie modernizacji
STR_HOUSE_PICKER_PROTECT :Zapobiegaj modernizacji
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Określ, czy ten budynek ma być chroniony przed zastąpieniem w miarę rozwoju miasta
STR_HOUSE_PICKER_PROTECT_OFF :Wył.
STR_HOUSE_PICKER_PROTECT_ON :Wł.
STR_HOUSE_PICKER_REPLACE :Zastąp istniejące budynki
STR_HOUSE_PICKER_REPLACE_TOOLTIP :Określ, czy chcesz budować nowe budunki w miejscu innych budynków. Jeśli tak, to stary budunek zostanie automatycznie usunięty, jeśli nie, to w wypadku takiej próby umieszczenia zostanie wyświetlony komunikat o błędnym umiejscowieniu budunku
STR_STATION_CLASS_DFLT :Standardowa
STR_STATION_CLASS_DFLT_STATION :Standardowa stacja
@@ -3961,11 +3962,11 @@ STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Wyrówny
STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Wyrównywanie sprite'a: Action 0xA, {COMMA} ({STRING}:{NUM})
STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Wyrównywanie sprite'a: Action 0x5, typ {HEX}, {COMMA} ({STRING}:{NUM})
STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Następny sprite
STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Idź do następnego normalnego sprite'a, pomijając jakiekolwiek pseudo / przebarwione / czcionkowe sprite'y, a po ostatnim przejdź do pierwszego
STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Idź do następnego sprite'a (pomijając sprite'y: pseudo, zmiany kolorów, fontów), a po ostatnim przejdź do pierwszego
STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Idź do sprite'a
STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Idź do danego sprite'a. Jeśli dany sprite nie jest normalnym spritem, przejdź do następnego normalnego sprite'a
STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Poprzedni sprite
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Idź do poprzedniego normalnego sprite'a, pomijając jakiekolwiek pseudo / przebarwione / czcionkowe sprite'y, a po pierwszym przejdź do ostatniego
STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Idź do poprzedniego sprite'a (pomijając sprite'y: pseudo, zmiany kolorów, fontów), a po pierwszym przejdź do ostatniego
STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Prezentacja wybranego sprite'a. Wyrównanie jest ignorowane podczas rysowania tego sprite'a
STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Poruszaj spritem, zmieniając przesunięcia X i Y. Użyj Ctrl, aby przesunąć o 8 jednostek na raz
STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM}
@@ -5334,8 +5335,8 @@ STR_TEXTFILE_JUMPLIST_TOOLTIP :{BLACK}Przeskoc
STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING}
STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Cofnij się w historii nawigacji
STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Powrót do przodu w historii nawigacji
STR_TEXTFILE_WRAP_TEXT :{WHITE}Zawijaj tekst
STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Zawiń tekst w oknie, aby zmieścił się bez konieczności przewijania
STR_TEXTFILE_WRAP_TEXT :{WHITE}Zawijaj wiersze
STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Zawiń tekst, aby zmieścił się w oknie bez konieczności przewijania w poziomie
STR_TEXTFILE_VIEW_README :{BLACK}Plik „readme”
STR_TEXTFILE_VIEW_README_TOOLTIP :Wyświetl plik „readme” dla tej zawartości
STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Lista zmian
+69 -68
View File
@@ -211,38 +211,38 @@ STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :Igual à Primá
# Units used in OpenTTD
STR_UNITS_VELOCITY_IMPERIAL :{DECIMAL}{NBSP}mph
STR_UNITS_VELOCITY_IMPERIAL :{DECIMAL}{NBSP}mi/h
STR_UNITS_VELOCITY_METRIC :{DECIMAL}{NBSP}km/h
STR_UNITS_VELOCITY_SI :{DECIMAL}{NBSP}m/s
STR_UNITS_VELOCITY_GAMEUNITS_DAY :{DECIMAL}{NBSP}mosaicos/dia
STR_UNITS_VELOCITY_GAMEUNITS_SEC :{DECIMAL}{NBSP}mosaicos/seg
STR_UNITS_VELOCITY_KNOTS :{DECIMAL}{NBSP}nó{P 0 "" s}
STR_UNITS_POWER_IMPERIAL :{DECIMAL}cv
STR_UNITS_POWER_METRIC :{DECIMAL}cv
STR_UNITS_POWER_IMPERIAL :{DECIMAL}{NBSP}hp
STR_UNITS_POWER_METRIC :{DECIMAL}{NBSP}cv
STR_UNITS_POWER_SI :{DECIMAL}kW
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hp/t
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hp/tn
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hp/t
STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/Mg
STR_UNITS_POWER_METRIC_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hp/t
STR_UNITS_POWER_METRIC_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hp/t
STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/Mg
STR_UNITS_POWER_SI_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}kW/t
STR_UNITS_POWER_METRIC_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}cv/tn
STR_UNITS_POWER_METRIC_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}cv/t
STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}cv/Mg
STR_UNITS_POWER_SI_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}kW/tn
STR_UNITS_POWER_SI_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}kW/t
STR_UNITS_POWER_SI_TO_WEIGHT_SI :{DECIMAL}{NBSP}W/kg
STR_UNITS_WEIGHT_SHORT_IMPERIAL :{DECIMAL}t
STR_UNITS_WEIGHT_SHORT_METRIC :{DECIMAL}t
STR_UNITS_WEIGHT_SHORT_SI :{DECIMAL}kg
STR_UNITS_WEIGHT_SHORT_IMPERIAL :{DECIMAL}{NBSP}tn
STR_UNITS_WEIGHT_SHORT_METRIC :{DECIMAL}{NBSP}t
STR_UNITS_WEIGHT_SHORT_SI :{DECIMAL}{NBSP}kg
STR_UNITS_WEIGHT_LONG_IMPERIAL :{DECIMAL}{NBSP}ton{P "" s}
STR_UNITS_WEIGHT_LONG_METRIC :{DECIMAL}{NBSP}tonelada{P "" s}
STR_UNITS_WEIGHT_LONG_SI :{DECIMAL}{NBSP}kg
STR_UNITS_VOLUME_SHORT_IMPERIAL :{DECIMAL}gal
STR_UNITS_VOLUME_SHORT_METRIC :{DECIMAL}l
STR_UNITS_VOLUME_SHORT_SI :{DECIMAL}m³
STR_UNITS_VOLUME_SHORT_IMPERIAL :{DECIMAL}{NBSP}gal
STR_UNITS_VOLUME_SHORT_METRIC :{DECIMAL}{NBSP}L
STR_UNITS_VOLUME_SHORT_SI :{DECIMAL}{NBSP}
STR_UNITS_VOLUME_LONG_IMPERIAL :{DECIMAL}{NBSP}gal{P ão ões}
STR_UNITS_VOLUME_LONG_METRIC :{DECIMAL}{NBSP}litro{P "" s}
@@ -514,10 +514,10 @@ STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construção de
# Road construction menu
STR_ROAD_MENU_ROAD_CONSTRUCTION :Construção de estradas
STR_ROAD_MENU_TRAM_CONSTRUCTION :Construção de carris para elétricos
STR_ROAD_MENU_TRAM_CONSTRUCTION :Construção de linhas de elétrico
# Waterways construction menu
STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Construção de vias fluviais
STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Construção de rotas navais
# Aairport construction menu
STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Construção de aeroportos
@@ -670,7 +670,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Gestor de Tráf
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Coordenador de Transportes
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ROUTE_SUPERVISOR :Supervisor de Rotas
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_DIRECTOR :Diretor
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHIEF_EXECUTIVE :Chefe Executivo
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHIEF_EXECUTIVE :Diretor Sénior
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Diretor Executivo
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :Presidente
STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Magnata
@@ -878,8 +878,8 @@ STR_NEWS_DISASTER_SMALL_UFO :{BIG_FONT}{BLAC
STR_NEWS_DISASTER_AIRPLANE_OIL_REFINERY :{BIG_FONT}{BLACK}Explosão em refinaria de petróleo perto de {TOWN}!
STR_NEWS_DISASTER_HELICOPTER_FACTORY :{BIG_FONT}{BLACK}Fábrica perto de {TOWN} foi destruída em circunstâncias suspeitas!
STR_NEWS_DISASTER_BIG_UFO :{BIG_FONT}{BLACK}OVNI pousa em {TOWN}!
STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLACK}Afundamento em mina de carvão perto de {TOWN} causa rasto de destruição!
STR_NEWS_DISASTER_FLOOD_VEHICLE :{BIG_FONT}{BLACK}Inundações!{}Pelo menos {COMMA} pessoa{P 0 "" s} desaparecida{P 0 "" s} ou morta{P 0 "" s} após terrível desastre!
STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLACK}Afundamento em mina de carvão perto de {TOWN} deixa rasto de destruição!
STR_NEWS_DISASTER_FLOOD_VEHICLE :{BIG_FONT}{BLACK}Inundações!{}Pelo menos {COMMA} pessoa{P 0 "" s} desaparecida{P 0 "" s}, presumivelmente morta{P 0 "" s} após terrível desastre!
STR_NEWS_COMPANY_IN_TROUBLE_TITLE :{BIG_FONT}{BLACK}Empresa de transportes em dificuldades!
STR_NEWS_COMPANY_IN_TROUBLE_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} será vendida ou declarada falida a menos que melhore os seus rendimentos em breve!
@@ -888,7 +888,7 @@ STR_NEWS_COMPANY_MERGER_DESCRIPTION :{BIG_FONT}{BLAC
STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLACK}Faliu!
STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} foi encerrada por credores e todos os ativos foram vendidos!
STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Nova empresa de transportes!
STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} inicia construção em {TOWN}!
STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} inicia construção perto de {TOWN}!
STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} foi adquirida por {STRING} por um valor não declarado!
STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Presidente)
@@ -909,7 +909,7 @@ STR_NEWS_END_OF_RECESSION :{BIG_FONT}{BLAC
STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL :{BIG_FONT}{BLACK}{G 0 "" "O " "A " "Os " "As "}{INDUSTRY} aumenta{G 0 "" "" "" m m} a produção!
STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_COAL :{BIG_FONT}{BLACK}Foi descoberto um novo estrato de carvão {G 0 em no na nos nas} {INDUSTRY}!{}Espera-se duplicar a produção!
STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL :{BIG_FONT}{BLACK}Novas reservas de petróleo encontradas {G 0 em no na nos nas} {INDUSTRY}!{}Espera-se duplicar a produção!
STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM :{BIG_FONT}{BLACK}Nova técnica de cultivo leva à duplicação da produção {G 0 em no na nos nas} {INDUSTRY}!
STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM :{BIG_FONT}{BLACK}Nova técnica de cultivo deverá duplicar a produção {G 0 em no na nos nas} {INDUSTRY}!
STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK}Produção de {STRING} {G 1 em no na nos nas} {INDUSTRY} aumenta {COMMA}%!
STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLACK}Produção d{G 0 e o a os as} {INDUSTRY} reduzida em 50%!
STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Praga de insetos causa estragos {G 0 em no na nos nas} {INDUSTRY}!{}A produção diminui 50%!
@@ -1037,7 +1037,7 @@ STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iraniano
STR_GAME_OPTIONS_CURRENCY_RUB :Novo Rublo Russo
STR_GAME_OPTIONS_CURRENCY_MXN :Peso Mexicano
STR_GAME_OPTIONS_CURRENCY_NTD :Novo Dólar Taiwanês
STR_GAME_OPTIONS_CURRENCY_CNY :Remimbi chinês
STR_GAME_OPTIONS_CURRENCY_CNY :Remimbi Chinês
STR_GAME_OPTIONS_CURRENCY_HKD :Dólar de Hong Kong
STR_GAME_OPTIONS_CURRENCY_INR :Rupia Indiana
STR_GAME_OPTIONS_CURRENCY_IDR :Rupia Indonésia
@@ -1071,7 +1071,7 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :outra
STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM}
STR_GAME_OPTIONS_VIDEO_ACCELERATION :Aceleração por hardware
STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :Marque esta opção para permitir que o OpenTTD tente usar a aceleração por hardware. Uma definição alterada só será aplicada após reiniciar o jogo
STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :Marque esta opção para permitir que o OpenTTD tente usar aceleração por hardware. Se for alterada, esta configuração só terá efeito após reiniciar o jogo
STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}A definição só terá efeito após reiniciar o jogo
STR_GAME_OPTIONS_VIDEO_VSYNC :VSync
@@ -1087,7 +1087,7 @@ STR_GAME_OPTIONS_GUI_SCALE_AUTO :Detetar automat
STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :Marque esta opção para detetar automaticamente o tamanho do interface
STR_GAME_OPTIONS_GUI_SCALE_BEVELS :Escalar rebordos
STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :Marque esta opção para dimensionar os chanfros por tamanho de interface
STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :Marque esta opção para dimensionar os rebordos das janelas em relação ao tamanho da interface
STR_GAME_OPTIONS_GUI_FONT_SPRITE :Usar o tipo de letra com gráficos tradicionais
STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :Marque esta opção se prefere usar o tipo de letra tradicional de tamanho fixo
@@ -1172,7 +1172,7 @@ STR_CURRENCY_CUSTOM_CURRENCY_PREVIEW_TOOLTIP :{BLACK}10000 Li
STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Mudar parâmetro da moeda personalizada
STR_NONE :Nenhum
STR_FUNDING_ONLY :Financiamento apenas
STR_FUNDING_ONLY :Apenas com financiamento
STR_MINIMAL :Mínimo
STR_NUM_VERY_LOW :Muito Baixo
STR_NUM_LOW :Baixo
@@ -2086,7 +2086,7 @@ STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Muito Rápido
STR_CONFIG_SETTING_LARGER_TOWNS :Proporção de localidades que se tornarão cidades: {STRING}
STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Quantidade de localidades que se tornarão cidades, ou seja uma localidade que começa maior e crescerá mais depressa.
STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 em {COMMA}
STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 em cada {COMMA}
###setting-zero-is-special
STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Nenhum
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador inicial para a dimensão das metrópoles: {STRING}
@@ -2124,7 +2124,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequentemente
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unidades de velocidade (terrestre): {STRING}
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Unidades de velocidade (náutica): {STRING}
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Quando uma velocidade é mostrada no interface de utilizador, mostrar na unidade selecionada
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mi/h)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Métrico (km/h)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_DAYS :Unidades do jogo (mosaicos/dia)
@@ -2135,21 +2135,21 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Unidades de pot
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Quando a potência de um veículo é mostrada no interface de utilizador, mostrar na unidade selecionada
###length 3
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL :Imperial (hp)
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_METRIC :Métrico (hp)
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_METRIC :Métrico (cv)
STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_SI :SI (kW)
STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT :Unidades de peso: {STRING}
STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_HELPTEXT :Quando um peso é mostrado na interface de utilizador, mostrar na unidade selecionada
###length 3
STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_IMPERIAL :Imperial (short t/ton)
STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_IMPERIAL :Imperial (tn/ton curta)
STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_METRIC :Métrico (t/tonelada)
STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_SI :SI (kg)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME :Unidades de volume: {STRING}
STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_HELPTEXT :Quando uma quantidade de volume é mostrada na interface de utilizador, mostrar na unidade selecionada
###length 3
STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL :Imperial (galões)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_METRIC :Métrico (l)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL :Imperial (gal)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_METRIC :Métrico (L)
STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_SI :SI (m³)
STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :Unidades de esforço de tração: {STRING}
@@ -2254,7 +2254,7 @@ STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Selecion
STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Abrir opções de jogo
STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Abrir tabela de classificações
STR_INTRO_TOOLTIP_HELP :{BLACK}Obter acesso a documentação e recursos online
STR_INTRO_TOOLTIP_HELP :{BLACK}Aceder a documentação e outros recursos online
STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Verificar conteúdo novo e atualizado para descarga
STR_INTRO_TOOLTIP_QUIT :{BLACK}Sair de 'OpenTTD'
@@ -2296,7 +2296,7 @@ STR_CHEAT_NO_JETCRASH :{LTBLUE}Aviões
STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Editar altura máxima do mapa: {ORANGE}{NUM}
STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Editar altura máxima de montanhas no mapa
STR_CHEAT_CHANGE_DATE :{LTBLUE}Alterar data: {ORANGE}{DATE_SHORT}
STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Alterar ano atual
STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Alterar o ano atual
STR_CHEAT_SETUP_PROD :{LTBLUE}Ativar modificação de valores de produção: {ORANGE}{STRING}
STR_CHEAT_STATION_RATING :{LTBLUE}Afixar as classificações da estação em 100%: {ORANGE}{STRING}
@@ -2676,9 +2676,9 @@ STR_CONTENT_MATRIX_TOOLTIP :{BLACK}Clique n
STR_CONTENT_SELECT_ALL_CAPTION :{BLACK}Selecionar tudo
STR_CONTENT_SELECT_ALL_CAPTION_TOOLTIP :{BLACK}Marcar todo o conteúdo para ser descarregado
STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK}Sel. atualizações
STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}Marcar todo o conteúdo que seja atualização ao conteúdo existente a ser descarregado
STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}Marcar para descarregar todo o conteúdo que seja uma atualização ao conteúdo já presente no seu sistema
STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK}Desselecionar tudo
STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}Marcar todo o conteúdo que não deva ser descarregado
STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}Desmarcar todo o conteúdo selecionado
STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Pesquisar em páginas externas
STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Escolher conteúdo não disponível no serviço de conteúdo do OpenTTD em páginas não associadas ao OpenTTD
STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Está a sair do OpenTTD!
@@ -2879,10 +2879,11 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Subúrbios Peri
STR_HOUSE_PICKER_CLASS_ZONE4 :Subúrbios Centrais
STR_HOUSE_PICKER_CLASS_ZONE5 :Centro da localidade
STR_HOUSE_PICKER_PROTECT_TITLE :Impedir atualizações
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Escolha se esta casa será protegida contra a substituição à medida que localidade cresce
STR_HOUSE_PICKER_PROTECT_OFF :Desativado
STR_HOUSE_PICKER_PROTECT_ON :Ativado
STR_HOUSE_PICKER_PROTECT :Impedir atualizações
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Escolha se esta casa será protegida contra a substituição à medida que a localidade cresce
STR_HOUSE_PICKER_REPLACE :Substituir existentes
STR_HOUSE_PICKER_REPLACE_TOOLTIP :Escolha se deseja remover automaticamente a casa existente no mosaico onde esta nova casa será colocada.
STR_STATION_CLASS_DFLT :Padrão
STR_STATION_CLASS_DFLT_STATION :Estação padrão
@@ -2972,7 +2973,7 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Orienta
STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Selecionar orientação do terminal de carga para elétricos
# Waterways toolbar (last two for SE only)
STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Construção de Vias Fluviais
STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Construção de Rotas Navais
STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Canais
STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Construir canais. Ctrl+Clique+Arrastar para selecionar a área diagonalmente. Pressione também Shift para apenas mostrar o custo estimado
STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Construir eclusas. Pressione também Shift para apenas mostrar o custo estimado
@@ -3018,7 +3019,7 @@ STR_AIRPORT_CLASS_HELIPORTS :Heliportos
STR_STATION_BUILD_NOISE :{BLACK}Ruído gerado: {GOLD}{COMMA}
# Landscaping toolbar
STR_LANDSCAPING_TOOLBAR :{WHITE}Terreno
STR_LANDSCAPING_TOOLBAR :{WHITE}Paisagem
STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Baixar um canto do terreno. Clique+Arraste para rebaixar o primeiro canto selecionado e nivelar o terreno da área selecionada para a nova altura do canto. Ctrl+Clique+Arraste para selecionar a área na diagonal. Pressione também Shift para apenas mostrar o custo estimado
STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Elevar um canto do terreno. Clique+Arrastar para elevar o primeiro canto selecionado e nivelar a área selecionada com a altura do novo canto. Ctrl+Clique+Arrastar para selecionar a área na diagonal. Pressione também Shift para apenas mostrar o custo estimado
STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Nivelar uma área de terreno até a altura do primeiro canto selecionado. Ctrl+Clique+Arrastar para selecionar a área na diagonal. Pressione também Shift para apenas mostrar o custo estimado
@@ -3364,13 +3365,13 @@ STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}Gerador
STR_MAPGEN_MAPSIZE :{BLACK}Dim. do mapa:
STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Selecionar o tamanho do mapa em mosaicos. O número de mosaicos disponíveis será ligeiramente menor
STR_MAPGEN_BY :{BLACK}*
STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Num. de localidades:
STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Núm. de localidades:
STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Selecionar a densidade das cidades, ou um número personalizado
STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Nomes das localidades:
STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Selecionar o estilo dos nomes das localidades
STR_MAPGEN_DATE :{BLACK}Data:
STR_MAPGEN_DATE_TOOLTIP :{BLACK}Selecionar a data inicial
STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Num. de indústrias:
STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Núm. de indústrias:
STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Selecionar a densidade das indústrias, ou um número personalizado
STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Pico mais alto:
STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Escolher o pico mais alto que o jogo tentará criar, medido em elevação acima do nível do mar
@@ -3453,7 +3454,7 @@ STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Altura d
STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Pico mais alto
STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Cobertura de neve (em %)
STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Cobertura do deserto (em %)
STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Mudar ano de início
STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Alterar o ano inicial
# SE Map generation
STR_SE_MAPGEN_CAPTION :{WHITE}Tipo de cenário
@@ -3480,7 +3481,7 @@ STR_GENERATION_RIVER_GENERATION :{BLACK}A gerar
STR_GENERATION_CLEARING_TILES :{BLACK}A gerar zonas rochosas e montanhosas
STR_GENERATION_TOWN_GENERATION :{BLACK}A gerar localidades
STR_GENERATION_LAND_INDUSTRY_GENERATION :{BLACK}A gerar indústrias terrestres
STR_GENERATION_WATER_INDUSTRY_GENERATION :{BLACK}A gerar indústrias fluviais
STR_GENERATION_WATER_INDUSTRY_GENERATION :{BLACK}A gerar indústrias fluviais/marítimas
STR_GENERATION_OBJECT_GENERATION :{BLACK}A gerar objetos
STR_GENERATION_TREE_GENERATION :{BLACK}A gerar árvores
STR_GENERATION_SETTINGUP_GAME :{BLACK}A configurar jogo
@@ -3517,7 +3518,7 @@ STR_NEWGRF_SETTINGS_MOVEUP :{BLACK}Para Cim
STR_NEWGRF_SETTINGS_MOVEUP_TOOLTIP :{BLACK}Move o ficheiro NewGRF selecionado para cima na lista
STR_NEWGRF_SETTINGS_MOVEDOWN :{BLACK}Para Baixo
STR_NEWGRF_SETTINGS_MOVEDOWN_TOOLTIP :{BLACK}Move o ficheiro NewGRF selecionado para baixo na lista
STR_NEWGRF_SETTINGS_UPGRADE :{BLACK}Atualiza
STR_NEWGRF_SETTINGS_UPGRADE :{BLACK}Atualizar
STR_NEWGRF_SETTINGS_UPGRADE_TOOLTIP :{BLACK}Atualiza ficheiros NewGRF para os quais tens uma versão mais recente instalada
STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Uma lista dos ficheiros NewGRF que estão instalados
@@ -3990,7 +3991,7 @@ STR_COMPANY_VIEW_INFRASTRUCTURE :{GOLD}Infraestr
STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL :{WHITE}{COMMA} secç{P ão ões} de linha ferroviária
STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD :{WHITE}{COMMA} secç{P ão ões} de estrada
STR_COMPANY_VIEW_INFRASTRUCTURE_WATER :{WHITE}{COMMA} mosaico{P "" s} com água
STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} mosaico{P "" s} com estaç{P ão ões}
STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} mosaico{P "" s} com {P "uma " ""}estaç{P ão ões}
STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} aeroporto{P "" s}
STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Nenhuma
@@ -4358,7 +4359,7 @@ STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Está p
# Engine preview window
STR_ENGINE_PREVIEW_CAPTION :{WHITE}Mensagem de um fabricante de veículos
STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Desenvolvemos u{G 0 m m ma ns mas} nov{G 0 "o modelo de" o a os as} {STRING} - estaria interessado num ano de exclusividade de uso deste{G 0 "" "" "" s s} veículo{G 0 "" "" "" s s}, de modo a que possamos avaliar o {G 0 "seu " "seu " "seu " "" ""}desempenho antes de o{G 0 "" "" "" s s} disponibilizar globalmente?
STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Desenvolvemos u{G 0 m m ma ns mas} nov{G 0 "o modelo de" o a os as} {STRING} - estaria interessado num ano de uso exclusivo deste{G 0 "" "" "" s s} veículo{G 0 "" "" "" s s}, de modo a que possamos avaliar o {G 0 "seu " "seu " "seu " "" ""}desempenho antes de o{G 0 "" "" "" s s} disponibilizar globalmente?
STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :{G=f}locomotiva ferroviária
STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :{G=f}locomotiva elétrica ferroviária
@@ -4494,7 +4495,7 @@ STR_VEHICLE_STATUS_STOPPED :{RED}Parado
STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}{VELOCITY} - A parar
STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Sem energia
STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}A esperar por caminho livre
STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Longe de mais do próximo destino
STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Demasiado longe do próximo destino
STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - Dirige-se para {G 0 "" "o " "a " "os " "as "}{0:STATION}
STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - Sem ordens
@@ -4739,7 +4740,7 @@ STR_ORDER_REFIT_ORDER :{SPACE}(Adaptar
STR_ORDER_REFIT_STOP_ORDER :{SPACE}(Adaptar para transportar {STRING} e parar)
STR_ORDER_STOP_ORDER :{SPACE}(Parar)
STR_ORDER_WAIT_TO_UNBUNCH :{SPACE}(Esperar por desagrupar)
STR_ORDER_WAIT_TO_UNBUNCH :{SPACE}(Esperar para desagrupar)
STR_ORDER_GO_TO_STATION :{STRING} {STATION}
STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Não pode usar a estação){POP_COLOUR} {STRING} {STATION}
@@ -4780,7 +4781,7 @@ STR_ORDER_AUTO_REFIT_ANY :mercadoria disp
###length 3
STR_ORDER_STOP_LOCATION_NEAR_END :{SPACE}[início]
STR_ORDER_STOP_LOCATION_MIDDLE :{SPACE}[meio]
STR_ORDER_STOP_LOCATION_FAR_END :{SPACE}[final]
STR_ORDER_STOP_LOCATION_FAR_END :{SPACE}[fim]
STR_ORDER_OUT_OF_RANGE :{RED} (Próximo destino está fora de alcance)
@@ -4807,7 +4808,7 @@ STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Viajar (durante
STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Viajar (por {STRING}, sem programação) no máximo a {VELOCITY}
STR_TIMETABLE_STAY_FOR_ESTIMATED :{SPACE}(permanecer por {STRING}, sem horário)
STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :{SPACE}(viajar durante {STRING}, sem horário)
STR_TIMETABLE_STAY_FOR :{SPACE}e ficar por {STRING}
STR_TIMETABLE_STAY_FOR :{SPACE}e permanecer por {STRING}
STR_TIMETABLE_AND_TRAVEL_FOR :{SPACE}e viajar durante {STRING}
STR_TIMETABLE_APPROX_TIME :{BLACK}Este horário levará aproximadamente {STRING} para concluir
@@ -4950,13 +4951,13 @@ STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING}
STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Recuar no histórico de navegação
STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Avançar no histórico de navegação
STR_TEXTFILE_WRAP_TEXT :{WHITE}Envolver o texto
STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Envolve o texto da janela de forma que não é necessário deslizar listagem
STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Envolve o texto da janela de forma em que não seja necessário deslizar o conteúdo na horizontal
STR_TEXTFILE_VIEW_README :{BLACK}Leia-me
STR_TEXTFILE_VIEW_README_TOOLTIP :Ver 'Leia-me' para este conteúdo
STR_TEXTFILE_VIEW_README_TOOLTIP :Ver 'Leia-me' deste conteúdo
STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Lista de alterações
STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Ver o registo de alterações para este conteúdo
STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Ver o registo de alterações deste conteúdo
STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licença
STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Ver a licença para este conteúdo
STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Ver a licença deste conteúdo
###length 5
STR_TEXTFILE_README_CAPTION :{WHITE}Leiame {STRING} de {STRING}
STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}Lista de alterações {STRING} de {STRING}
@@ -4983,7 +4984,7 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Lucro Es
# Saveload messages
STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Gravação ainda em curso,{}por favor aguarde!
STR_ERROR_AUTOSAVE_FAILED :{WHITE}Falha ao guardar automaticamente
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Não é possível ler unidade
STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Não é possível ler unidade do sistema
STR_ERROR_GAME_SAVE_FAILED :{WHITE}Falha ao guardar jogo...
STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Não é possível eliminar ficheiro
STR_ERROR_GAME_LOAD_FAILED :{WHITE}Falha ao carregar jogo...
@@ -5046,12 +5047,12 @@ STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... a á
STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}... atingido o limite para terraformação
STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... limite para limpeza de mosaicos atingido
STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}... limite de plantação de árvores alcançado
STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}Nome deve ser único
STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}O nome tem que ser único
STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}{STRING} no caminho
STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Não permitido durante pausa
# Local authority errors
STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}A autoridade local de {TOWN} não autorizou
STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}A autoridade local de {TOWN} não autoriza
STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}A autoridade local de {TOWN} recusa-se a permitir a construção de outro aeroporto nesta localidade
STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}A autoridade local de {TOWN} não permite a construção do aeroporto devido à poluição sonora
STR_ERROR_BRIBE_FAILED :{WHITE}A sua tentativa de suborno foi descoberta por um investigador regional
@@ -5114,7 +5115,7 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... a fl
STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... só se pode construir acima da linha da neve
STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... só se pode construir abaixo da linha da neve
STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}O financiamento falhou em prospetar devido ao azar; tente novamente
STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}Por azar o financiamento da prospeção falhou; tente novamente
STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Não havia locais adequados para prospetar esta indústria
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Não foram encontrados locais adequados para '{STRING}' indústrias
STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Altera os parâmetros de geração do mapa para obter um mapa melhor
@@ -5138,7 +5139,7 @@ STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Demasiad
STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Demasiadas estações de carga
STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Muito perto de outra doca
STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Demasiado perto de outro aeroporto
STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Não pode alterar o nome da estação...
STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Não é possível alterar o nome da estação...
STR_ERROR_CAN_T_MOVE_STATION_NAME :{WHITE}Não é possível mover o letreiro da estação...
STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... estrada pertence a uma localidade
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... estrada orientada na direção incorreta
@@ -5207,10 +5208,10 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Não é
STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Tipo de depósito errado
# Depot unbunching related errors
STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... só pode ter uma ordem de desagrupar
STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... não é possível usar ordens de carga completa quando o veículo tem uma ordem de desagrupar
STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... só pode ter uma ordem para desagrupar
STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... não é possível usar ordens de carga completa quando o veículo tem uma ordem para desagrupar
STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... não é possível desagrupar um veículo com ordem de carga completa
STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... não é possível usar ordens condicionais quando um veículo tem uma ordem de desagrupar
STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... não é possível usar ordens condicionais quando um veículo tem uma ordem para desagrupar
STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... não é possível desagrupar um veículo com uma ordem condicional
# Autoreplace related errors
@@ -5393,8 +5394,8 @@ STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... nem
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Nenhum veículo estará disponível
STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Mudar a sua configuração NewGRF
STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Nenhum veículo ainda disponível
STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Começar um novo jogo depois de {DATE_SHORT} ou utilizar um NewGRF que forneça veículos iniciais
STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Ainda não existe veículos disponíveis
STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Começar um novo jogo depois de {DATE_SHORT} ou utilizar um NewGRF que forneça veículos iniciais nesta data
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Não está disponível nenhum tipo de estrada edificável para localidades
STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Mudar a sua configuração NewGRF
@@ -5420,7 +5421,7 @@ STR_ERROR_CAN_T_MOVE_THIS_ORDER :{WHITE}Não é
STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}Não é possível saltar a ordem atual...
STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Não é possível saltar a ordem selecionada...
STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... veiculo não pode ir a todas as estações
STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... veiculo não pode ir a essa estação
STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... veiculo não pode ir para essa estação
STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... um veículo a partilhar esta ordem não pode ir a essa estação
STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... nem todos os veículos têm as mesmas ordens
STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... nem todos os veículos estão a partilhar ordens
@@ -5890,7 +5891,7 @@ STR_FORMAT_DEPOT_NAME_SHIP :{G=m}Estaleiro
STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :{G=m}Estaleiro Naval de {TOWN} #{COMMA}
###next-name-looks-similar
STR_FORMAT_DEPOT_NAME_AIRCRAFT :{G=m}Hangar de {STATION}
STR_FORMAT_DEPOT_NAME_AIRCRAFT :{G=m}Hangar {G de do da dos das} {STATION}
# _SERIAL version of AIRACRAFT doesn't exist
STR_UNKNOWN_STATION :estação desconhecida
+1 -3
View File
@@ -2833,10 +2833,8 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Suburbiile peri
STR_HOUSE_PICKER_CLASS_ZONE4 :Suburbiile urbane
STR_HOUSE_PICKER_CLASS_ZONE5 :Centrul orașului
STR_HOUSE_PICKER_PROTECT_TITLE :Preveniți upgrade-urile
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Alege dacă această casă va fi protejată împotriva înlocuirii pe măsură ce orașul crește
STR_HOUSE_PICKER_PROTECT_OFF :Oprit
STR_HOUSE_PICKER_PROTECT_ON :Pornit
STR_STATION_CLASS_DFLT :Implicită
STR_STATION_CLASS_DFLT_STATION :Stație implicită
+5 -4
View File
@@ -2103,7 +2103,7 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_SUMMARY :кратко
STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :полностью
STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Цветные газеты появляются в {STRING} году
STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Обычно в газетах печатают чёрно-белые изображения, а начиная с указанного года - цветные
STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :В старых газетах печатают чёрно-белые изображения, а начиная с указанного года - цветные
STR_CONFIG_SETTING_STARTING_YEAR :Год начала игры: {STRING}
STR_CONFIG_SETTING_ENDING_YEAR :Последний год игры: {STRING}
@@ -3049,10 +3049,11 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Перифер
STR_HOUSE_PICKER_CLASS_ZONE4 :Центральные районы
STR_HOUSE_PICKER_CLASS_ZONE5 :Центр
STR_HOUSE_PICKER_PROTECT_TITLE :Запрет улучшений
STR_HOUSE_PICKER_PROTECT :Запретить обновление
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Вы можете указать, что это здание нельзя заменять другим, несмотря на рост и расширение города.
STR_HOUSE_PICKER_PROTECT_OFF :отключён
STR_HOUSE_PICKER_PROTECT_ON :включён
STR_HOUSE_PICKER_REPLACE :Автозамена
STR_HOUSE_PICKER_REPLACE_TOOLTIP :Укажите, заменять ли автоматически уже стоящие здания
STR_STATION_CLASS_DFLT :Стандартная станция
STR_STATION_CLASS_DFLT_STATION :Стандартная ж/д станция
+1
View File
@@ -2912,6 +2912,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Gradnja
STR_STATION_CLASS_DFLT :Podrazumevana stanica
STR_STATION_CLASS_WAYP :Putanje
+4 -3
View File
@@ -2878,10 +2878,11 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :外郊区
STR_HOUSE_PICKER_CLASS_ZONE4 :内郊区
STR_HOUSE_PICKER_CLASS_ZONE5 :城镇中心
STR_HOUSE_PICKER_PROTECT_TITLE :防止升级
STR_HOUSE_PICKER_PROTECT :阻止重盖建筑
STR_HOUSE_PICKER_PROTECT_TOOLTIP :选择是否保护房屋以防止房屋随着城镇发展被替换
STR_HOUSE_PICKER_PROTECT_OFF :关闭
STR_HOUSE_PICKER_PROTECT_ON :开启
STR_HOUSE_PICKER_REPLACE :替换现有建筑
STR_HOUSE_PICKER_REPLACE_TOOLTIP :选择是否自动移除选中格子上已经存在的房屋
STR_STATION_CLASS_DFLT :默认
STR_STATION_CLASS_DFLT_STATION :默认车站
+1
View File
@@ -2849,6 +2849,7 @@ STR_PICKER_HOUSE_CLASS_TOOLTIP :Zvoľ veľkosť
STR_HOUSE_PICKER_CLASS_ZONE1 :Okraj
STR_STATION_CLASS_DFLT :Pôvodná
STR_STATION_CLASS_DFLT_STATION :Predvolená stanica
STR_STATION_CLASS_DFLT_ROADSTOP :Predvolená zastávka
+1
View File
@@ -2509,6 +2509,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Zgradi p
STR_STATION_CLASS_DFLT :Privzeta postaja
STR_STATION_CLASS_WAYP :Točke poti
+1 -3
View File
@@ -2847,10 +2847,8 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Suburbios exter
STR_HOUSE_PICKER_CLASS_ZONE4 :Suburbios interiores
STR_HOUSE_PICKER_CLASS_ZONE5 :Centro urbano
STR_HOUSE_PICKER_PROTECT_TITLE :Evitar mejoras
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Selecciona si esta casa estará protegida de reemplazos cuando el municipio crezca
STR_HOUSE_PICKER_PROTECT_OFF :No
STR_HOUSE_PICKER_PROTECT_ON :Sí
STR_STATION_CLASS_DFLT :Por defecto
STR_STATION_CLASS_DFLT_STATION :Estación por defecto
+1 -3
View File
@@ -2871,10 +2871,8 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Suburbios exter
STR_HOUSE_PICKER_CLASS_ZONE4 :Suburbios interiores
STR_HOUSE_PICKER_CLASS_ZONE5 :Centro
STR_HOUSE_PICKER_PROTECT_TITLE :Prevenir mejoras
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Optar por que el edificio no sea reemplazado cuando el pueblo crezca
STR_HOUSE_PICKER_PROTECT_OFF :No
STR_HOUSE_PICKER_PROTECT_ON :Sí
STR_STATION_CLASS_DFLT :por defecto
STR_STATION_CLASS_DFLT_STATION :Estación por defecto
+9 -8
View File
@@ -2878,10 +2878,11 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Yttrerförorter
STR_HOUSE_PICKER_CLASS_ZONE4 :Innerförorter
STR_HOUSE_PICKER_CLASS_ZONE5 :Stadskärnan
STR_HOUSE_PICKER_PROTECT_TITLE :Förhindra uppgraderingar
STR_HOUSE_PICKER_PROTECT :Hindra uppgraderingar
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Välj huruvida detta hus ska skyddas från att ersättas i samband med att staden växer
STR_HOUSE_PICKER_PROTECT_OFF :Av
STR_HOUSE_PICKER_PROTECT_ON :
STR_HOUSE_PICKER_REPLACE :Ersätt befintlig
STR_HOUSE_PICKER_REPLACE_TOOLTIP :Välj om befintliga hus automatiskt ska tas bort när denna byggnad placeras
STR_STATION_CLASS_DFLT :Original
STR_STATION_CLASS_DFLT_STATION :Standardstation
@@ -5729,7 +5730,7 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_MAIL_TRUCK :MPS Postbil
STR_VEHICLE_NAME_ROAD_VEHICLE_REYNARD_MAIL_TRUCK :Reynard Postbil
STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_MAIL_TRUCK :Perry Postbil
STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_MAIL_TRUCK :MightyMover postbil
STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_MAIL_TRUCK :Powernaught Postbil
STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_MAIL_TRUCK :Powernaught postbil
STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_MAIL_TRUCK :Wizzowow Postbil
STR_VEHICLE_NAME_ROAD_VEHICLE_WITCOMBE_OIL_TANKER :Witcombe Oljetanker
STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_OIL_TANKER :Foster Oljetanker
@@ -5773,7 +5774,7 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_FRUIT_TRUCK :Kelling Fruktla
STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_RUBBER_TRUCK :Balogh Gummidumper
STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_RUBBER_TRUCK :Uhl Gummidumper
STR_VEHICLE_NAME_ROAD_VEHICLE_RMT_RUBBER_TRUCK :RMT Gummidumper
STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_SUGAR_TRUCK :MightyMover Sockerlastare
STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_SUGAR_TRUCK :MightyMover sockerlastare
STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_SUGAR_TRUCK :Powernaught sockerlastare
STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_SUGAR_TRUCK :Wizzowow sockerlastare
STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COLA_TRUCK :MightyMover kolalastare
@@ -5782,10 +5783,10 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COLA_TRUCK :Wizzowow kolala
STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COTTON_CANDY :MightyMover sockervaddslastare
STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COTTON_CANDY :Powernaught sockervaddslastare
STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COTTON_CANDY_TRUCK :Wizzowow sockervaddslastare
STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOFFEE_TRUCK :MightyMover Knäcklastare
STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOFFEE_TRUCK :MightyMover knäcklastare
STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOFFEE_TRUCK :Powernaught knäcklastare
STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOFFEE_TRUCK :Wizzowow knäcklastare
STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOY_VAN :MightyMover Leksaksbil
STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOY_VAN :MightyMover leksaksbil
STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOY_VAN :Powernaught leksaksbil
STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOY_VAN :Wizzowow leksaksbil
STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_CANDY_TRUCK :MightyMover godislastare
@@ -5797,7 +5798,7 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BATTERY_TRUCK :Wizzowow batter
STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_FIZZY_DRINK :MightyMover läsklastbil
STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_FIZZY_DRINK :Powernaught läsklastbil
STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_FIZZY_DRINK_TRUCK :Wizzowow läsklastbil
STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_PLASTIC_TRUCK :MightyMover Plastlastare
STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_PLASTIC_TRUCK :MightyMover plastlastare
STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_PLASTIC_TRUCK :Powernaught plastlastare
STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_PLASTIC_TRUCK :Wizzowow plastlastbil
STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_BUBBLE_TRUCK :MightyMover bubbellastbil
+1
View File
@@ -2542,6 +2542,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}இழ
STR_STATION_CLASS_DFLT :இயல்பிருப்பு
STR_STATION_CLASS_DFLT_STATION :இயல்பிருப்பு நிலையம்
STR_STATION_CLASS_DFLT_ROADSTOP :இயல்பிருப்பு சாலை நிறுத்தம்
+1
View File
@@ -2399,6 +2399,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}สร
STR_STATION_CLASS_DFLT :สถานีมาตรฐาน
STR_STATION_CLASS_WAYP :จุดตรวจ
+6 -5
View File
@@ -1705,7 +1705,7 @@ STR_CONFIG_SETTING_LIVERIES_NONE :不顯示
STR_CONFIG_SETTING_LIVERIES_OWN :自家公司
STR_CONFIG_SETTING_LIVERIES_ALL :所有公司
STR_CONFIG_SETTING_PREFER_TEAMCHAT :傾向以 <ENTER> 鍵開啟小隊交談功能{STRING}
STR_CONFIG_SETTING_PREFER_TEAMCHAT :使用 <Enter> 與隊伍聊天{STRING}
STR_CONFIG_SETTING_PREFER_TEAMCHAT_HELPTEXT :選擇是否以 <ENTER> 鍵取代 <Ctrl+ENTER> 鍵作切換公眾交談窗與公司內部交談窗之用。
STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER :滾輪地圖捲動速度:{STRING}
@@ -2878,10 +2878,11 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :遠郊
STR_HOUSE_PICKER_CLASS_ZONE4 :近郊
STR_HOUSE_PICKER_CLASS_ZONE5 :市鎮中心
STR_HOUSE_PICKER_PROTECT_TITLE :防止升級
STR_HOUSE_PICKER_PROTECT_TOOLTIP :選擇是否保護房屋以免房屋隨著市鎮發展而被替換
STR_HOUSE_PICKER_PROTECT_OFF :關閉
STR_HOUSE_PICKER_PROTECT_ON :開啟
STR_HOUSE_PICKER_PROTECT :防止升級
STR_HOUSE_PICKER_PROTECT_TOOLTIP :選擇是否保護房屋以免房屋隨著市鎮發展而被替換
STR_HOUSE_PICKER_REPLACE :替換現有
STR_HOUSE_PICKER_REPLACE_TOOLTIP :選擇是否自動移除該房屋所在地上的現有房屋
STR_STATION_CLASS_DFLT :預設
STR_STATION_CLASS_DFLT_STATION :預設車站
+175 -33
View File
@@ -170,7 +170,7 @@ STR_LITERS :{COMMA}{NBSP}li
STR_ITEMS :{COMMA}{NBSP}adet
STR_CRATES :{COMMA}{NBSP}kasa
STR_COLOUR_DEFAULT :Varsayılan
STR_COLOUR_DEFAULT :Öntanımlı
###length 17
STR_COLOUR_DARK_BLUE :Koyu Mavi
STR_COLOUR_PALE_GREEN :Soluk Yeşil
@@ -308,9 +308,10 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP_TOOLTIP :{BLACK}Bu düğ
STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Bu düğme etkinleştirildiğinde, gizli uçaklar da görüntülenir
# Query window
STR_BUTTON_DEFAULT :{BLACK}Varsayılan
STR_BUTTON_DEFAULT :{BLACK}Öntanımlı
STR_BUTTON_CANCEL :{BLACK}İptal
STR_BUTTON_OK :{BLACK}Tamam
STR_BUTTON_MOVE :{BLACK}Taşı
# On screen keyboard window
STR_OSK_KEYBOARD_LAYOUT :"1234567890*-\qwertyuıopğüasdfghjklşi,' zxcvbnmöç. .
@@ -452,6 +453,12 @@ STR_SETTINGS_MENU_SANDBOX_OPTIONS :Sandbox ayarlar
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Şeffaflık seçenekleri
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Şehir isimlerini göster
STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :İstasyon isimlerini göster
STR_SETTINGS_MENU_STATION_NAMES_TRAIN :Tren istasyonları
STR_SETTINGS_MENU_STATION_NAMES_LORRY :Kamyon durakları
STR_SETTINGS_MENU_STATION_NAMES_BUS :Otobüs durakları
STR_SETTINGS_MENU_STATION_NAMES_SHIP :İskeleler
STR_SETTINGS_MENU_STATION_NAMES_PLANE :Havalimanları
STR_SETTINGS_MENU_STATION_NAMES_GHOST :Hayalet
STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Ara nokta isimlerini göster
STR_SETTINGS_MENU_SIGNS_DISPLAYED :Tabelaları göster
STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Rakip tabela ve isimlerini göster
@@ -614,22 +621,37 @@ STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Taşına
STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Şirket performans değerlendirmeleri (azami=1000)
STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Şirket Değerleri Grafiği
STR_GRAPH_LAST_24_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Son 24 dakika
STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Son 72 dakika
STR_GRAPH_LAST_288_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Son 288 dakika
STR_GRAPH_LAST_24_MONTHS :{TINY_FONT}{BLACK}2 yıl (aylık)
STR_GRAPH_LAST_24_QUARTERS :{TINY_FONT}{BLACK}6 yıl (çeyreklik)
STR_GRAPH_LAST_24_YEARS :{TINY_FONT}{BLACK}24 yıl (yıllık)
STR_GRAPH_TOGGLE_RANGE :Bu veri aralığı için grafiği aç
STR_GRAPH_SELECT_SCALE :Grafiğin yatay ölçeğini değiştir
STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Kargo Ödeme Seviyeleri
STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Transit günler
STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Geçişte saniyeler
STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}20 karelik yolda 10 birim (ya da 10,000 litre) için ödeme
STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Tümünü aç
STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Tümünü kapat
STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Tümü
STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Hiçbiri
STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Kargo ödeme tablosunda tüm kargo türlerini göster
STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Kargo ödeme tablosunda hiçbir kargo türünü gösterme
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Kargo türünü göster/gizle
STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Bu kargo türünün grafiğini aç
STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING}
STR_GRAPH_INDUSTRY_CAPTION :{WHITE}{INDUSTRY} - Kargo Geçmişi
STR_GRAPH_INDUSTRY_RANGE_PRODUCED :Üretilen
STR_GRAPH_INDUSTRY_RANGE_TRANSPORTED :Taşınan
STR_GRAPH_INDUSTRY_RANGE_DELIVERED :Taşınan
STR_GRAPH_INDUSTRY_RANGE_WAITING :Bekleyen
STR_GRAPH_TOWN_CARGO_CAPTION :{WHITE}{TOWN} - Kargo Geçmişi
STR_GRAPH_TOWN_RANGE_PRODUCED :Kaynak
STR_GRAPH_TOWN_RANGE_TRANSPORTED :Taşınan
STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Detaylı performans oranlarını göster
@@ -811,6 +833,7 @@ STR_SMALLMAP_SHOW_INDUSTRY_NAMES :{BLACK}Fabrika
STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Haritada fabrika gösterme
STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Haritada tüm fabrikaları göster
STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Yükseklik haritasının gösterimini aç/kapa
STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRY_NAMES :{BLACK}Endüstri isimlerini göster/gizle
STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Haritada şirket mülkü gösterme
STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Haritada şirketlerin tüm mülklerini göster
STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Haritada hiçbir kargo türünü gösterme
@@ -958,12 +981,16 @@ STR_GAME_OPTIONS_TAB_SOUND :Ses
STR_GAME_OPTIONS_TAB_SOUND_TOOLTIP :Ses ve müzik ayarlarını seçin
STR_GAME_OPTIONS_TAB_SOCIAL :Sosyal
STR_GAME_OPTIONS_TAB_SOCIAL_TOOLTIP :Sosyal entegre ayarlarını seçin
STR_GAME_OPTIONS_TAB_ADVANCED :Gelişmiş
STR_GAME_OPTIONS_TAB_ADVANCED_TOOLTIP :Gelişmiş ayarları değiştir
STR_GAME_OPTIONS_VOLUME :Ses seviyesi
STR_GAME_OPTIONS_SFX_VOLUME :Ses efektleri
STR_GAME_OPTIONS_MUSIC_VOLUME :Müzik
STR_GAME_OPTIONS_SETTING :{STRING}: {ORANGE}{STRING}
STR_GAME_OPTIONS_VOLUME_MARK :%{NUM}
STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :Para birimleri
STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :Para birimi seçimi
@@ -1015,6 +1042,8 @@ STR_GAME_OPTIONS_CURRENCY_IDR :Endonezya Rupia
STR_GAME_OPTIONS_CURRENCY_MYR :Malezya Ringgiti
STR_GAME_OPTIONS_CURRENCY_LVL :Letonya Latsı
STR_GAME_OPTIONS_CURRENCY_PTE :Portekiz Esküdosu
STR_GAME_OPTIONS_CURRENCY_UAH :Ukrayna Grivnası
STR_GAME_OPTIONS_CURRENCY_VND :Vietnam Dongu
STR_GAME_OPTIONS_AUTOSAVE_FRAME :Otomatik Kaydet
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :Otomatik kaydetme sıklığını seçin
@@ -1032,7 +1061,7 @@ STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :Görünen dili
STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} (%{NUM} tamamlandı)
STR_GAME_OPTIONS_FULLSCREEN :Tam ekran
STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :Tam ekran oynamak için bunu isaretleyin
STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :OpenTTD'yi tam ekran oynamak için bu kutucuğu işaretleyin
STR_GAME_OPTIONS_RESOLUTION :Ekran Çözünürlüğü
STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :Kullanılacak ekran çözünürlüğünü seçin
@@ -1048,6 +1077,7 @@ STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :Dikey senkroniz
STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :Geçerli sürücü: {STRING}
STR_GAME_OPTIONS_INTERFACE :Arayüz
STR_GAME_OPTIONS_GUI_SCALE_FRAME :Arayüz büyüklüğü
STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :Arayüz büyüklüğünü ayarlamak için kaydırın. Sürekli ayarlama için Ctrl tuşunu basılı tutun
@@ -1060,8 +1090,9 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :Eğimi arayüz
STR_GAME_OPTIONS_GUI_FONT_SPRITE : Geleneksel yazı tipini kullan
STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :Yazı tipini geleneksel sabit boyutlu haline döndürmek için bu kutucuğu işaretleyin
STR_GAME_OPTIONS_GUI_FONT_AA :Yazı tipi kenarlarını yumuşatma
STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :Yeniden boyutlandırılabilir yazı tiplerinin kenarlarını yumuşatmak için bu kutuyu işaretleyin
STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :Yeniden boyutlandırılabilir yazı tiplerinin kenarlarını yumuşatmak için bu kutucuğu işaretleyin
STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}x
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :Otomatik anket
STR_GAME_OPTIONS_PARTICIPATE_SURVEY :Otomatik ankete katılın
@@ -1071,6 +1102,7 @@ STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :Bu, otomatik an
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :Anket sonucunu önizleyin
STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :Mevcut çalışan oyunun anket sonucunu göster
STR_GAME_OPTIONS_DISPLAY :Görüntü
STR_GAME_OPTIONS_REFRESH_RATE :Tazeleme oranını görüntüle
STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :Kullanılacak tazeleme oranını seç
@@ -1089,8 +1121,10 @@ STR_GAME_OPTIONS_BASE_MUSIC :Temel müzik k
STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :Kullanılacak temel müzik kümesini seçin
STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :Temel müzik hakkında daha fazla bilgi
STR_GAME_OPTIONS_ONLINE_CONTENT :İçerik Al
STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :İndirilecek yeni ve güncellenmiş içeriği kontrol et
STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(yüklü sosyal platformlarla entegre edilecek eklenti yok)
STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :(yüklü sosyal platformlarla entegre edilecek eklenti yok)
STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{STRING} ({STRING})
STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :Platform:
@@ -1284,6 +1318,9 @@ STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Borç faiz oran
STR_CONFIG_SETTING_RUNNING_COSTS :İşletme giderleri: {STRING}
STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Araçlar ve altyapı için bakım ve işletme giderlerinin seviyesini ayarlayın
###length 3
STR_CONFIG_SETTING_RUNNING_COSTS_LOW :Düşük
STR_CONFIG_SETTING_RUNNING_COSTS_MEDIUM :Orta
STR_CONFIG_SETTING_RUNNING_COSTS_HIGH :Yüksek
STR_CONFIG_SETTING_CONSTRUCTION_SPEED :İnşaat hızı: {STRING}
STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :YZ'ler için inşaat hareketi sayısını sınırlayın
@@ -1306,6 +1343,9 @@ STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Teşvik yok
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :İnşaat maliyetleri: {STRING}
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :İnşaat ve satın alma maliyet seviyesini belirleyin
###length 3
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_LOW :Düşük
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_MEDIUM :Orta
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HIGH :Yüksek
STR_CONFIG_SETTING_RECESSIONS :Ekonomik krizler: {STRING}
STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Etkinleştirilirse, periyodik olarak bir ekonomik durgunluk yaşanır. Durgunluk süresince tüm üretim seviyeleri belirgin oranda düşer (durgunluk sona erdiğinde önceki seviyesine tekrar yükselir)
@@ -1491,6 +1531,8 @@ STR_CONFIG_SETTING_WARN_INCOME_LESS :Bir aracın gel
STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Etkinleştirildiğinde, eğer bir araç bir yıl içerisinde hiç kâr etmezse bir haber mesajı gönderilir.
STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Etkinleştirildiğinde, eğer bir araç bir periyot içerisinde hiç kâr etmezse bir haber mesajı gönderilir.
STR_CONFIG_SETTING_WARN_OLD_VEHICLE :Araç yaşlanınca uyar: {STRING}
STR_CONFIG_SETTING_WARN_OLD_VEHICLE_HELPTEXT :Etkinleştirildiğinde, eğer bir araç yaşlanırsa haber mesajı gönderilir.
STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Eski araçlar sürekli üretilsin: {STRING}
STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Etkinleştirildiğinde, tüm araç modelleri piyasaya çıkışlarından itibaren sonsuza dek satın alınabilir.
@@ -1649,6 +1691,8 @@ STR_CONFIG_SETTING_SCROLLMODE_LMB :Sol Fare Tuşu
STR_CONFIG_SETTING_SMOOTH_SCROLLING :Düzgün bakış noktası kaydırması: {STRING}
STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Küçük haritaya tıklandığında veya harita üzerindeki belli bir nesneye gidilmesi için komut verildiğinde ana görüntünün nasıl kaydırılacağını kontrol eder. Etkinleştirildiğinde harita kayarak ilerler, kapatıldığında ise doğrudan hedeflenen noktaya atlama yapar.
STR_CONFIG_SETTING_TOOLBAR_DROPDOWN_AUTOSELECT :Geleneksel araç çubuğu menüsü seçimi davranışı: {STRING}
STR_CONFIG_SETTING_TOOLBAR_DROPDOWN_AUTOSELECT_HELPTEXT :Araç çubuğu seçimi davranışını seçin. Kapalıysa araç çubuğu menüleri seçim yapılana kadar açık kalır. Açıksa araç çubuğu menüleri fare tuşu bırakıldığında aktifleşir.
STR_CONFIG_SETTING_MEASURE_TOOLTIP :İnşa araçları kullanılırken ölçüm ipucu göster: {STRING}
STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :İnşaat işlemleri sırasında fareyi sürükleyince kare-uzaklıkları ve yükseklik farklarını göster.
@@ -1755,7 +1799,7 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Köprü, tünel
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Ray yapımı sırasında sinyalleri otomatik olarak kaldır: {STRING}
STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Ray yapımı sırasında sinyaller yolun üzerinde ise otomatik kaldır. Bunun potansiyel olarak tren kazalarına yol açabileceğini unutmayın
STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :İleri sarma hız limiti: {STRING}
STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :İleri sarma hız sınırı: {STRING}
STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Hızlı ileri sarma etkinleştirildiğinde oyunun ne kadar hızlı sarıldığını sınırlayın. 0 = sınır yok (bilgisayarın el verdiği kadar). %100'ün altındaki değerler oyunu yavaşlatır. Üst sınır bilgisayarının özelliklerine ve oyuna göre değişkenlik gösterebilir
STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :%{NUM} normal oyun hızı
###setting-zero-is-special
@@ -1835,6 +1879,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Yeni hava araç
STR_CONFIG_SETTING_SERVINT_SHIPS :Gemiler için varsayılan bakım aralığı: {STRING}
STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Yeni gemiler için varsayılan bakım aralığını ayarlar, eğer araç için özel bir bakım aralığı belirtilmemişse geçerlidir
###length 3
STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}Gün
STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}Dakika
STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}%{NBSP}
###setting-zero-is-special
STR_CONFIG_SETTING_SERVINT_DISABLED :Etkisiz
@@ -1970,7 +2017,12 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Yasak
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :İzin verildi
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :İzin verildi, özel kasaba yerleşimi
STR_CONFIG_SETTING_HOUSE_PLACER :Binaları şehre teker teker yerleştirme: {STRING}
STR_CONFIG_SETTING_HOUSE_PLACER_HELPTEXT :Bu ayarı etkinleştirmek, oyuncuların şehir binaları inşa etmesine izin verir
###length 3
STR_CONFIG_SETTING_HOUSE_PLACER_FORBIDDEN :Yasak
STR_CONFIG_SETTING_HOUSE_PLACER_ALLOWED :İzinli
STR_CONFIG_SETTING_HOUSE_PLACER_FULLY_CONSTRUCTED :İzinli, inşası bitmiş
STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Şehrin kargo üretimi: {STRING}
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Şehrin genel nüfusuna oranla, şehirlerdeki evler tarafından ne kadar kargo üretiliyor.{}Üstel büyüme: İki katı büyüklükteki bir şehir dört katı büyüklükte yolcuya sahip olur.{}Lineer büyüme: İki katı büyüklükteki bir şehir iki katı büyüklükte yolcuya sahip olur.
@@ -2110,6 +2162,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_HELPTEXT :Kullanıcı ara
STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL :Imperial (Ingiliz ölçü birimleri) (ft)
STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :Metrik (m)
STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (Uluslararası Ölçüm Sistemi) (m)
STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_GAMEUNITS :Oyun birimleri (seviyeler)
STR_CONFIG_SETTING_LOCALISATION :Yerelleştirme
STR_CONFIG_SETTING_GRAPHICS :Grafikler
@@ -2168,6 +2221,8 @@ STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... uyum
STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... GPU sürücüsü oyunu çökertti. Donanım hızlandırma devre dışı bırakıldı
# Intro window
STR_INTRO_CAPTION :{WHITE}OpenTTD
STR_INTRO_VERSION :OpenTTD {REV}
STR_INTRO_NEW_GAME :{BLACK}Yeni Oyun
STR_INTRO_LOAD_GAME :{BLACK}Oyun Yükle
@@ -2179,7 +2234,7 @@ STR_INTRO_MULTIPLAYER :{BLACK}Çok Oyu
STR_INTRO_GAME_OPTIONS :{BLACK}Seçenekler
STR_INTRO_HIGHSCORE :{BLACK}Puan Tablosu
STR_INTRO_HELP :{BLACK}Yardım ve Kılavuzlar
STR_INTRO_ONLINE_CONTENT :{BLACK}Çevrimiçi İçeriği Kontrol Et
STR_INTRO_ONLINE_CONTENT :{BLACK}Çevrimiçi İçerik
STR_INTRO_QUIT :{BLACK}Çıkış
STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Yeni oyuna başla. Ctrl+Tıklama harita ayarlamasını atlar.
@@ -2222,6 +2277,7 @@ STR_HELP_WINDOW_README :{BLACK}Beni oku
STR_HELP_WINDOW_CHANGELOG :{BLACK}Değişiklik günlüğü
STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}Bilinen Hatalar
STR_HELP_WINDOW_LICENSE :{BLACK}Lisans
STR_HELP_WINDOW_FONTS :{BLACK}Yazı Tipleri
STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD
STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}Kılavuz / Wiki
STR_HELP_WINDOW_BUGTRACKER :{BLACK}Hata Bildir
@@ -2300,16 +2356,19 @@ STR_FACE_SIMPLE_TOOLTIP :{BLACK}Basit y
STR_FACE_LOAD :{BLACK}Yükle
STR_FACE_LOAD_TOOLTIP :{BLACK}Tercih edilen yüzü yükle
STR_FACE_LOAD_DONE :{WHITE}Tercih edilen yüz OpenTTD ayar dosyasından yüklendi
STR_FACE_FACECODE :{BLACK}Oyuncu yüzü no.
STR_FACE_FACECODE_TOOLTIP :{BLACK}Şirket başkanının yüz portre numarasını göster ve/veya düzenle
STR_FACE_FACECODE_CAPTION :{WHITE}Şirket başkanının yüz portre numarasını göster ve/veya düzenle
STR_FACE_FACECODE_SET :{WHITE}Surat numarası ayarlandı
STR_FACE_FACECODE_ERR :{WHITE}Şirket başkanının yüz portre numarası hatalıdır. - Yüz portre numarası 0 ve 4,294,967,295 arasında bir sayı olmalıdır!
STR_FACE_FACECODE :{BLACK}Oyuncu surat kodu
STR_FACE_FACECODE_TOOLTIP :{BLACK}Şirket başkanının surat kodunu göster ve/veya düzenle
STR_FACE_FACECODE_CAPTION :{WHITE}Şirket başkanının surat kodunu göster ve/veya düzenle
STR_FACE_FACECODE_SET :{WHITE}Yeni surat kodu ayarlandı
STR_FACE_FACECODE_ERR :{WHITE}Şirket başkanının surat kodu ayarlanamadı - geçerli bir etiket ve numara olmalıdır
STR_FACE_SAVE :{BLACK}Kaydet
STR_FACE_SAVE_TOOLTIP :{BLACK}Tercih edilen yüzü kaydet
STR_FACE_SAVE_DONE :{WHITE}Bu yüz OpenTTD ayar dosyasına favoriniz olarak kaydedilecek
STR_FACE_SETTING_TOGGLE :{STRING} {ORANGE}{STRING}
STR_FACE_SETTING_NUMERIC :{STRING} {ORANGE}{NUM} / {NUM}
STR_FACE_YES :Evet
STR_FACE_NO :Hayır
STR_FACE_STYLE :Biçem:
STR_FACE_HAIR :Saç:
STR_FACE_EYEBROWS :Kaşlar:
STR_FACE_EYECOLOUR :Göz rengi:
@@ -2527,6 +2586,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Kullanı
STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Sunucu adınız ayarlanmamış. Ad Çok Oyunculu penceresinin üstünden ayarlanabilir
STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Bu istemcinin revizyonu sunucununki ile aynı değil
STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Yanlış parola
STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}İzin verilen istemciler arasında değilsiniz
STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Sunucu dolu
STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Sunucuya girmeniz yasaklandı
STR_NETWORK_ERROR_KICKED :{WHITE}Oyundan atıldınız
@@ -2741,8 +2801,8 @@ STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Maglev Yapımı
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Demiryolu yap. Ctrl+Sol tık ile yerleştirilen rayı kaldırabilirsiniz. Ayrıca maliyetini görmek için Shift tuşuna basabilirsiniz.
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Otoray kipinde ray yap. Ctrl+ sol tık yerleştirilen rayı kaldırır. Ayrıca maliyetini görmek için Shift tuşuna basabilirsiniz.
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Tren garajı yap (tren yapımı ve bakımı için). Ayrıca maliyetini görmek için Shift tuşuna basabilirsiniz.
STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Demir yolunda bir işaret oluşturur. Ctrl+Sol tıklayarak başka bir işaret ile seçim yapabilirsiniz. Maliyetini görmek için Shift tuşuna basabilirsiniz.
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Tren istasyonu yap. Ctrl+Sol tık ile istasyonu başka bir istasyon ile beraber seçebilirsiniz. Ayrıca maliyetini görmek için Shift tuşuna basabilirsiniz.
STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Demir yolunda bir işaret oluşturur. Ctrl+Sol tıklayarak başka bir işaret ile seçim yapabilirsiniz. Ayrıca maliyetini görmek için Shift'e basabilirsiniz
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Tren istasyonu yap. Ctrl+Sol tık ile istasyonu başka bir istasyon ile beraber seçebilirsiniz. Ayrıca maliyetini görmek için Shift'e basabilirsiniz
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Demiryolu sinyali yap. Ctrl+Sol tık semafor/ışıklı işaret seçimi yapar{} Fare ile sürükleme seçilen sinyal aralığına uyarak tıklanan yere kadar sinyal koyar. Ctrl ile sürükleme sonraki kavşak veya istasyona kadar sinyalleri koyar. Ayrıca maliyetini görmek için Shift tuşuna basabilirsiniz.
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Demiryolu köprüsü yap. Ayrıca maliyetini görmek için Shift tuşuna basabilirsiniz.
STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Demiryolu tüneli yap. Ayrıca maliyetini görmek için Shift tuşuna basabilirsiniz.
@@ -2779,22 +2839,33 @@ STR_PICKER_MODE_USED_TOOLTIP :Yalnızca mevcu
STR_PICKER_MODE_SAVED :Kaydedilen
STR_PICKER_MODE_SAVED_TOOLTIP :Yalnızca kaydedilen öğeleri göstermeyi aç/kapat
STR_PICKER_PREVIEW_SHRINK :-
STR_PICKER_PREVIEW_SHRINK_TOOLTIP :Önizleme resimlerinin yüksekliğini azaltır. En düşüğe çekmek için Ctrl + Sol Tık yapın
STR_PICKER_PREVIEW_EXPAND :+
STR_PICKER_PREVIEW_EXPAND_TOOLTIP :Önizleme resimlerinin yüksekliğini arttır. En yükseğe çekmek için Ctrl + Sol Tık yapın
STR_PICKER_STATION_CLASS_TOOLTIP :Görüntülenecek istasyon sınıfını seçin
STR_PICKER_STATION_TYPE_TOOLTIP :İnşa edilecek istasyon türünü seçin. Kayıtlı öğelerde ekleme çıkarma için Ctrl+Tıklayabilirsiniz
STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Görüntülenecek bir yol noktası türünü seçin
STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Görüntülenecek otobüs istasyonunu seçin
STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :İnşa edilecek otobüs istasyonunu seçin. Kayıtlı öğelerde ekleme çıkarma için Ctrl+Tıklayabilirsiniz
STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Görüntülenecek bir kamyon istasyonu türünü seçin
STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :İnşa edilecek bir tür kamyon istasyonu seçin. Kaydedilen öğelerde eklemek veya kaldırmak istiyorsanız Ctrl+Tık ile yapabilirsiniz.
STR_PICKER_OBJECT_CLASS_TOOLTIP :Görüntülenecek öğe sınıfını seçin
STR_PICKER_OBJECT_TYPE_TOOLTIP :İnşa edilecek nesne türünü seçin. Kayıtlı öğelerde ekleme çıkarma için Ctrl+tıklayabilirsiniz. Ctrl+Tıkla+Sürükle yaparak köşeden köşeye seçim yapabilirsiniz. Shift'e basarak sadece fiyat önizlemesi yapabilirsiniz
STR_PICKER_HOUSE_CLASS_TOOLTIP :Görüntülemek için bir şehir bölgesi seçin
STR_PICKER_HOUSE_TYPE_TOOLTIP :Bir konut türü seçin. Kaydedilmiş öğelere eklemek veya kaldırmak için Ctrl+Tıklayın
STR_HOUSE_PICKER_CAPTION :Ev Seçimi
STR_HOUSE_PICKER_NAME :{BLACK}İsim: {ORANGE}{STRING}
STR_HOUSE_PICKER_POPULATION :{BLACK}Nüfus: {ORANGE}{NUM}
STR_HOUSE_PICKER_YEARS :{BLACK}Yıl: {ORANGE}{NUM}-{NUM} arası
STR_HOUSE_PICKER_YEARS_ANY :{BLACK}Yıl: {ORANGE}Her zaman
STR_HOUSE_PICKER_YEARS_FROM :{BLACK}Yıl: {ORANGE}{NUM} tarihinden beri
STR_HOUSE_PICKER_YEARS_UNTIL :{BLACK}Yıl: {ORANGE}{NUM} tarihine kadar
STR_HOUSE_PICKER_SIZE :{BLACK}Boyut: {ORANGE}{NUM}x{NUM} kare
STR_HOUSE_PICKER_CARGO_ACCEPTED :{BLACK}Kabul edilen kargo: {ORANGE}
STR_HOUSE_PICKER_NAME :{BLACK}İsim: {GOLD}{STRING}
STR_HOUSE_PICKER_POPULATION :{BLACK}Nüfus: {GOLD}{NUM}
STR_HOUSE_PICKER_YEARS :{BLACK}Yıl: {GOLD}{NUM}-{NUM}
STR_HOUSE_PICKER_YEARS_ANY :{BLACK}Yıl: {GOLD}Herhangi biri
STR_HOUSE_PICKER_YEARS_FROM :{BLACK}Yıl: {GOLD}{NUM} yılından itibaren
STR_HOUSE_PICKER_YEARS_UNTIL :{BLACK}Yıl: {GOLD}{NUM} yılına kadar
STR_HOUSE_PICKER_SIZE :{BLACK}Boyut: {GOLD}{NUM}x{NUM} kare
STR_HOUSE_PICKER_CARGO_ACCEPTED :{BLACK}Kabul edilen kargo: {GOLD}
STR_HOUSE_PICKER_CARGO_PRODUCED :{BLACK}Üretilen kargo: {GOLD}{CARGO_LIST}
STR_HOUSE_PICKER_CLASS_ZONE1 :Kenar
STR_HOUSE_PICKER_CLASS_ZONE2 :Banliyöler
@@ -2802,6 +2873,11 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Dış banliyöl
STR_HOUSE_PICKER_CLASS_ZONE4 :İç banliyöler
STR_HOUSE_PICKER_CLASS_ZONE5 :Şehir merkezi
STR_HOUSE_PICKER_PROTECT :Yükseltmeyi engelle
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Bu evin şehir büyüdüğünde değiştirilmekten korunup korunmayacağını seç
STR_HOUSE_PICKER_REPLACE :Mevcut olanları değiştir
STR_HOUSE_PICKER_REPLACE_TOOLTIP :Bu evin bulunduğu karede mevcut olan evlerin otomatik olarak kaldırılıp kaldırılmayacağını seç
STR_STATION_CLASS_DFLT :Varsayılan
STR_STATION_CLASS_DFLT_STATION :Varsayılan istasyon
@@ -2854,10 +2930,12 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Otomatik
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Otomatik ray kipini kullanarak tramvay yolu inşa et. Ctrl + Sol tık yaparak rayı silebilirsin. Shift'e basılı tutarak tıklarsanız sadece maliyetini gösterir.
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Garaj inşa et (araç alımı ve bakımı için). Shift'e basılı tutarak tıklarsanız sadece maliyetini gösterir.
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Tramvay garı inşa et (araç alımı ve bakımı için). Ayrıca maliyetini görmek için Shift tuşuna basabilirsiniz.
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Otobüs durağı inşa et. Ctrl + Sol Tık istasyonları birleştirmeyi aktif eder. Shift'e basılı tutarak tıklarsanız sadece maliyetini gösterir.
STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD_TO_WAYPOINT :{BLACK}Yola yerimi inşa et. Ctrl + Sol Tık birleştirmek için başka yerimi seçtirir. Ayrıca maliyetini görmek için Shift'e basabilirsiniz
STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM_TO_WAYPOINT :{BLACK}Tramvaya yerimi inşa et. Ctrl + Sol Tık birleştirmek için başka yerimi seçtirir. Ayrıca maliyetini görmek için Shift'e basabilirsiniz
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Otobüs durağı inşa et. Ctrl + Sol Tık istasyonları birleştirmeyi aktif eder. Ayrıca maliyetini görmek için Shift'e basabilirsiniz
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Yolcu tramvayı istasyonu inşa et. Ctrl + Sol Tık birleştirmeyi mümkün kılar. Shift'e basılı tutarak tıklarsanız sadece maliyetini gösterir.
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Kamyon yükleme bölgesi inşa et. Ctrl + Sol Tık istasyonları birleştirmeyi mümkün kılar. Shift'e basılı tutarak tıklarsanız sadece maliyetini gösterir.
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Yük tramvayı istasyonu inşa et. Ctrl + Sol Tık ile tıklayarak istasyonları birleştirebilirsiniz. Shift'e basılı tutarak tıklarsanız sadece maliyetini gösterir.
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Yük tramvayı istasyonu inşa et. Ctrl + Sol Tık ile tıklayarak istasyonları birleştirebilirsiniz. Ayrıca maliyetini görmek için Shift'e basabilirsiniz
STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Tek yönlü yolları etkinleştir/kapat
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Köprü inşa et. Shift'e basılı tutarak tıklarsanız sadece maliyetini gösterir.
STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Tramvay köprüsü yap. Ayrıca maliyetini görmek için Shift tuşuna basabilirsiniz.
@@ -3004,6 +3082,11 @@ STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Şehir b
STR_FOUND_TOWN_CITY :{BLACK}Şehir
STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Şehirler normal kasabalardan daha hızlı büyürler{}Ayarlara göre değişmekle birlikte, ilk kurulduklarında daha büyük olurlar.
STR_FOUND_TOWN_EXPAND_MODE :{YELLOW}Şehir genişletme:
STR_FOUND_TOWN_EXPAND_BUILDINGS :Binalar
STR_FOUND_TOWN_EXPAND_BUILDINGS_TOOLTIP :Şehrin binalarını arttır
STR_FOUND_TOWN_EXPAND_ROADS :Karayolları
STR_FOUND_TOWN_EXPAND_ROADS_TOOLTIP :Şehrin yollarını arttır
STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Kasaba yol yerleşimi:
STR_FOUND_TOWN_SELECT_LAYOUT_TOOLTIP :{BLACK}Bu kasaba için kullanılacak yol yerleşimini seç
@@ -3086,6 +3169,9 @@ STR_LAI_CLEAR_DESCRIPTION_BARE_LAND :Çıplak arazi
STR_LAI_CLEAR_DESCRIPTION_GRASS :Çim
STR_LAI_CLEAR_DESCRIPTION_FIELDS :Mera
STR_LAI_CLEAR_DESCRIPTION_DESERT :Çöl
STR_LAI_CLEAR_DESCRIPTION_SNOWY_ROCKS :Karla örtülü kaya
STR_LAI_CLEAR_DESCRIPTION_SNOWY_ROUGH_LAND :Karla örtülü engebeli arazi
STR_LAI_CLEAR_DESCRIPTION_SNOWY_GRASS :Karla örtülü çimen
STR_LAI_RAIL_DESCRIPTION_TRACK :Ray
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Blok sinyalli ray
@@ -3260,6 +3346,8 @@ STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF:
STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtre:
STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Dosya Üzerine Yaz
STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Mevcut dosyanın üzerine yazmak istediğinizden emin misiniz?
STR_SAVELOAD_DELETE_TITLE :{WHITE}Dosyayı Sil
STR_SAVELOAD_DELETE_WARNING :{YELLOW}Dosyayı silmek istediğinizden emin misiniz?
STR_SAVELOAD_DIRECTORY :{STRING} (Dizin)
STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Ana dizin)
@@ -3335,13 +3423,18 @@ STR_MAPGEN_NORTHWEST :{BLACK}Kuzeybat
STR_MAPGEN_NORTHEAST :{BLACK}Kuzeydoğu
STR_MAPGEN_SOUTHEAST :{BLACK}Güneydoğu
STR_MAPGEN_SOUTHWEST :{BLACK}Güneybatı
STR_MAPGEN_NORTHWEST_TOOLTIP :Haritanın kuzeybatı köşesinde su veya serbest biçimi aç
STR_MAPGEN_NORTHEAST_TOOLTIP :Haritanın kuzeydoğu köşesinde su veya serbest biçimi aç
STR_MAPGEN_SOUTHEAST_TOOLTIP :Haritanın güneydoğu köşesinde su veya serbest biçimi aç
STR_MAPGEN_SOUTHWEST_TOOLTIP :Haritanın güneybatı köşesinde su veya serbest biçimi aç
STR_MAPGEN_BORDER_FREEFORM :{BLACK}Serbest
STR_MAPGEN_BORDER_WATER :{BLACK}Su
STR_MAPGEN_BORDER_RANDOM :{BLACK}Rastgele
###length 3
STR_MAPGEN_BORDER_RANDOMIZE :{BLACK}Rastgele
STR_MAPGEN_BORDER_MANUAL :{BLACK}El ile
STR_MAPGEN_BORDER_RANDOMIZE :Rastgele
STR_MAPGEN_BORDER_MANUAL :El ile
STR_MAPGEN_BORDER_INFINITE_WATER :Sınırsız Su
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Yükseklik haritası döndür:
STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Yükseklik haritası adı:
@@ -3380,6 +3473,8 @@ STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Peyzaj o
STR_GENERATION_RIVER_GENERATION :{BLACK}Nehir oluşturma
STR_GENERATION_CLEARING_TILES :{BLACK}Engebeli ve kayalık alan oluştur
STR_GENERATION_TOWN_GENERATION :{BLACK}Kasaba Oluşumu
STR_GENERATION_LAND_INDUSTRY_GENERATION :{BLACK}Kara endüstrisi oluşturma
STR_GENERATION_WATER_INDUSTRY_GENERATION :{BLACK}Su endüstrisi oluşturma
STR_GENERATION_OBJECT_GENERATION :{BLACK}Nesne oluşturma
STR_GENERATION_TREE_GENERATION :{BLACK}Ağaç üretimi
STR_GENERATION_SETTINGUP_GAME :{BLACK}Oyun ayarlanıyor
@@ -3387,7 +3482,9 @@ STR_GENERATION_PREPARING_TILELOOP :{BLACK}tile-loo
STR_GENERATION_PREPARING_SCRIPT :{BLACK}Betik çalıştırılıyor
STR_GENERATION_PREPARING_GAME :{BLACK}Oyun hazırlanıyor
STR_TOWN_DATA_ERROR_TOWN_FORMATTED_INCORRECTLY :{WHITE}{STRING} veri hatalı şekilde biçimlendirilmiş
STR_TOWN_DATA_ERROR_FAILED_TO_FOUND_TOWN :{WHITE}{NUM} şehri kurmak için uygun yer bulunamadı. Kurulmak istenen yere tabela konuldu
# NewGRF settings
STR_NEWGRF_SETTINGS_CAPTION :{WHITE}NewGRF Ayarları
@@ -3616,9 +3713,15 @@ STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Ana gör
STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Belediye
STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Belediye hakkında bilgi göster
STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Şehrin ismini değiştir
STR_TOWN_VIEW_CARGO_GRAPH :Kargo Grafiği
STR_TOWN_VIEW_CARGO_GRAPH_TOOLTIP :Şehrin kargo geçmişinin grafiğini gösterir
STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}Genişlet
STR_TOWN_VIEW_EXPAND_TOOLTIP :{BLACK}Şehrin boyutunu büyült
STR_TOWN_VIEW_EXPAND_BUILDINGS_BUTTON :{BLACK}Binaları genişlet
STR_TOWN_VIEW_EXPAND_BUILDINGS_TOOLTIP :{BLACK}Şehrin binalarını arttır
STR_TOWN_VIEW_EXPAND_ROADS_BUTTON :{BLACK}Yolları genişlet
STR_TOWN_VIEW_EXPAND_ROADS_TOOLTIP :{BLACK}Şehrin yollarını arttır
STR_TOWN_VIEW_DELETE_BUTTON :{BLACK}Sil
STR_TOWN_VIEW_DELETE_TOOLTIP :{BLACK}Bu şehri tamamen sil
@@ -3792,12 +3895,14 @@ STR_CARGO_RATING_EXCELLENT :Harika
STR_CARGO_RATING_OUTSTANDING :Mükemmel
STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Durağın oldugu yeri ortala. Ctrl + Sol Tıklama durağın olduğu yere ait bir görünüm penceresi açar.
STR_STATION_VIEW_EDIT_TOOLTIP :{BLACK}İstasyon ismini değiştir veya tabelayı taşı
STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Talimat listesinde bu durak olan trenleri listele
STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Talimat listesinde bu durak olan tüm karayolu araçlarını listele
STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Talimat listesinde bu durak olan uçakları listele
STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Talimat listesinde bu durak olan gemileri listele
STR_STATION_VIEW_EDIT_STATION_SIGN :{WHITE}İstasyon tabelasını değiştir
STR_STATION_VIEW_CLOSE_AIRPORT :{BLACK}Havalimanını kapat
STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Uçağın bu havalimanına iniş yapmasını engelle
@@ -3939,6 +4044,8 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Geçen a
STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Geçen dakikadaki üretim:
STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} (%{COMMA} taşındı)
STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Görüntüyü fabrikada ortala. Ctrl+Sol tık ile fabrikanın konumunu gösteren yeni bir pencere açabilirsiniz
STR_INDUSTRY_VIEW_CARGO_GRAPH :{BLACK}Kargo Grafiği
STR_INDUSTRY_VIEW_CARGO_GRAPH_TOOLTIP :{BLACK}Geçmişteki endüstri kargolarının grafiğini gösterir
STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Üretim seviyesi: %{YELLOW}{COMMA}
STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Fabrika çok yakında kapanacağını duyurdu!
@@ -3947,6 +4054,10 @@ STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Üretile
STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Gereken:
STR_INDUSTRY_VIEW_ACCEPT_CARGO_SUFFIX :{YELLOW}{0:STRING}{BLACK}{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_SUFFIX :{YELLOW}{0:STRING}{BLACK}: {1:CARGO_SHORT} bekliyor{3:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_NOSUFFIX :{YELLOW}{0:STRING}
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_NOSUFFIX :{YELLOW}{0:STRING}{BLACK}: {1:CARGO_SHORT} bekliyor
STR_CONFIG_GAME_PRODUCTION :{WHITE}Üretimi değiştir (8'in katı, 2040'a kadar)
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Üretim seviyesini değiştir (yüzde olarak, %800'e kadar)
@@ -4255,6 +4366,7 @@ STR_ENGINE_PREVIEW_RUNCOST_YEAR :İşletim maliy
STR_ENGINE_PREVIEW_RUNCOST_PERIOD :İşletim maliyeti: {CURRENCY_LONG}/periyot
STR_ENGINE_PREVIEW_CAPACITY :Kapasite: {CARGO_LONG}
STR_ENGINE_PREVIEW_CAPACITY_2 :Kapasite: {CARGO_LONG}, {CARGO_LONG}
STR_ENGINE_PREVIEW_RAILTYPES :Ray türleri: {STRING}
# Autoreplace window
STR_REPLACE_VEHICLES_WHITE :{WHITE}Değiştir {STRING} - {STRING}
@@ -4604,6 +4716,8 @@ STR_ORDER_ROAD_VEHICLE_DEPOT :Karayolu Garaj
STR_ORDER_SHIP_DEPOT :Tersane
###next-name-looks-similar
STR_ORDER_GO_TO_NEAREST_HANGAR_FORMAT :{STRING} en yakın Hangar
STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} yakındır {STRING}
STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT}
STR_ORDER_REFIT_ORDER :(Moifiye ile > {STRING})
@@ -4671,14 +4785,15 @@ STR_TIMETABLE_TOOLTIP :{BLACK}Zaman ç
STR_TIMETABLE_NO_TRAVEL :Sefer yok
STR_TIMETABLE_NOT_TIMETABLEABLE :Yolculuk (otomatik; bir sonraki elle verilmiş talimat tarafından zamanlanır)
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Gezi (zamanlı değil)
STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :En çok {VELOCITY} hız ile git (zaman tablosu yok)
STR_TIMETABLE_TRAVEL_FOR :{STRING} boyunca yol al
STR_TIMETABLE_TRAVEL_FOR_SPEED :{STRING} boyunca en çok {VELOCITY} hız ile git
STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Seyahat et ({STRING} için, hareket planı yok)
STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Seyahat et ({STRING} için, hareket planı yok) en fazla {VELOCITY} hızı ile
STR_TIMETABLE_STAY_FOR_ESTIMATED :({STRING} kalma, hareket saati yok)
STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :({STRING} için seyahat, hareket saati yok)
STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :{SPACE}({STRING} için seyahat, hareket saati yok)
STR_TIMETABLE_STAY_FOR :{STRING} bekle
STR_TIMETABLE_AND_TRAVEL_FOR :ve şuraya sefer yap: {STRING}
STR_TIMETABLE_AND_TRAVEL_FOR :{SPACE}ve şuraya sefer yap: {STRING}
STR_TIMETABLE_TOTAL_TIME :{BLACK}Bu zaman çizelgesinin bitmesi {STRING} sürecek
STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Bu zaman çizelgesinin bitmesi en az {STRING} sürecek (tamamı hesaplanmadı)
@@ -4696,12 +4811,14 @@ STR_TIMETABLE_START_SECONDS_QUERY :Zaman çizelges
STR_TIMETABLE_CHANGE_TIME :{BLACK}Zamanı değiştir
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Seçili talimatın harcaması gereken süreyi değiştir. Ctrl+Tıklama bütün talimatların süresini değiştirir
STR_TIMETABLE_CHANGE_TIME_QUERY :Zamanı değiştir
STR_TIMETABLE_CLEAR_TIME :{BLACK}Zamanı Temizle
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Seçili talimatın harcaması gereken süreyi sil. Ctrl+ Sol Tıklama bütün talimatların sürelerini siler
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Hız Sınırını Değiştir
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Seçili emrin azami seyahat hızını değiştir. Ctrl+Sol Tık bütün emirlerin azami hızlarını değiştirir
STR_TIMETABLE_CHANGE_SPEED_QUERY :Hız sınırını değiştir
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Hız Sınırını Kaldır
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Seçili emrin azami seyahat hızını sil. Ctrl+ Sol Tıklama bütün emirlerin azami hızlarını siler
@@ -4901,6 +5018,7 @@ STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Zeminin
STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Arazi yanlış yöne doğru meyilli
STR_ERROR_CAN_T_DO_THIS :{WHITE}Bu yapılamaz...
STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Önce bina yıkılmalı
STR_ERROR_BUILDING_IS_PROTECTED :{WHITE}... bina korunuyor
STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Bu alan temizlenemez...
STR_ERROR_SITE_UNSUITABLE :{WHITE}... yer uygun değil
STR_ERROR_ALREADY_BUILT :{WHITE}... zaten yapıldı
@@ -4992,6 +5110,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Buraya h
STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Birden fazla istasyona bitişik
STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... istasyon çok yayılmış
STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}... desteklenmeyen sayıda şerit
STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}... desteklenmeyen uzunluk
STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Haritada çok fazla istasyon var
STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Çok fazla demiryolu istasyon parçası var
STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Çok fazla durak var
@@ -4999,6 +5119,7 @@ STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Çok faz
STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Başka bir limana çok yakın
STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Başka bir havalimanına çok yakın
STR_ERROR_CAN_T_RENAME_STATION :{WHITE}İsim değiştirilemiyor...
STR_ERROR_CAN_T_MOVE_STATION_NAME :{WHITE}İstasyon tabelası taşınamıyor...
STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... yol kasabaya ait
STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... yol yanlış yönde
STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... yol üstü duraklar köşe üzerine inşa edilemez
@@ -5029,6 +5150,7 @@ STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Diğer y
STR_ERROR_CAN_T_BUILD_RAIL_WAYPOINT :{WHITE}Buraya tren yerimi yapılamaz...
STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Buraya şamandıra yerleştirilemez...
STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Yerimi adı değiştirilemedi...
STR_ERROR_CAN_T_MOVE_WAYPOINT_NAME :{WHITE}Yerimi tabelası taşınamıyor...
STR_ERROR_CAN_T_REMOVE_RAIL_WAYPOINT :{WHITE}Tren yerimi kaldırılamaz...
STR_ERROR_CAN_T_REMOVE_ROAD_WAYPOINT :{WHITE}yol yerimi kaldırılamaz....
@@ -5136,6 +5258,13 @@ STR_ERROR_START_AND_END_MUST_BE_IN :{WHITE}Başlang
STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}... köprünün her iki ucu da karada olmalı
STR_ERROR_BRIDGE_TOO_LONG :{WHITE}... köprü çok uzun
STR_ERROR_BRIDGE_THROUGH_MAP_BORDER :{WHITE}Köprü haritanın dışında sonlanacaktı
STR_ERROR_BRIDGE_TOO_LOW_FOR_STATION :{WHITE}Körü istasyon için {HEIGHT} fazla alçak
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROADSTOP :{WHITE}Köprü karayolu durağı için {HEIGHT} fazla alçak
STR_ERROR_BRIDGE_TOO_LOW_FOR_DOCK :{WHITE}Köprü rıhtım için {HEIGHT} fazla alçak
STR_ERROR_BRIDGE_TOO_LOW_FOR_BUOY :{WHITE}Köprü şamandıra için {HEIGHT} fazla alçak
STR_ERROR_BRIDGE_TOO_LOW_FOR_RAIL_WAYPOINT :{WHITE}Köprü ray durağı için {HEIGHT} fazla alçak
STR_ERROR_BRIDGE_TOO_LOW_FOR_ROAD_WAYPOINT :{WHITE}Köprü karayolu işareti için {HEIGHT} fazla alçak
STR_ERROR_BRIDGE_TOO_LOW_FOR_LOCK :{WHITE}Körpü kilit için {HEIGHT} fazla alçak
# Tunnel related errors
STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Buraya tünel yapılamaz...
@@ -5291,7 +5420,8 @@ STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Uyumlu b
STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE} Körüklü karayolu taşıtları için uygun durak yoktur.{}Körüklü karayolu taşıtları üzerinden geçme durağı gerektirir, körfez durağı değil
STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Bu uçak bu helikopter pistine inemez
STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Helikopter bu havalimanı'na inemez
STR_ERROR_NO_RAIL_WAYPOINT :{WHITE} Demiryolu ara noktası yok
STR_ERROR_NO_RAIL_WAYPOINT :{WHITE} Hiç ray ara noktası yok
STR_ERROR_NO_ROAD_WAYPOINT :{WHITE} Hiç karayolu ara noktası yok
STR_ERROR_NO_BUOY :{WHITE}Şamandıra yok
# Timetable related errors
@@ -5760,7 +5890,9 @@ STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STR
STR_SAVEGAME_NAME_SPECTATOR :İzleyici, {1:STRING}
# Viewport strings
STR_VIEWPORT_TOWN_POP :{WHITE}{TOWN} ({COMMA})
STR_VIEWPORT_TOWN_POP :{TOWN} ({COMMA})
STR_VIEWPORT_TOWN_CITY :{TOWN} {CITY_ICON}
STR_VIEWPORT_TOWN_CITY_POP :{TOWN} ({COMMA}) {CITY_ICON}
STR_VIEWPORT_STATION :{STATION} {STATION_FEATURES}
# Simple strings to get specific types of data
@@ -5784,6 +5916,7 @@ STR_CURRENCY_SHORT_GIGA :{NBSP}bn
STR_CURRENCY_SHORT_TERA :{NBSP}tn
STR_JUST_CARGO :{CARGO_LONG}
STR_JUST_LEFT_ARROW :{LEFT_ARROW}
STR_JUST_RIGHT_ARROW :{RIGHT_ARROW}
STR_JUST_CHECKMARK :{CHECKMARK}
STR_JUST_COMMA :{COMMA}
@@ -5822,3 +5955,12 @@ STR_SHIP :{BLACK}{SHIP}
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
STR_BADGE_NAME_LIST :{STRING}: {GOLD}{STRING}
STR_BADGE_CONFIG_MENU_TOOLTIP :Rozet ayarlarını
STR_BADGE_CONFIG_RESET :Sıfırla
STR_BADGE_CONFIG_ICONS :{WHITE}Rozet Simgeleri
STR_BADGE_CONFIG_FILTERS :{WHITE}Rozet Filtreleri
STR_BADGE_CONFIG_PREVIEW :Önizleme Resmi
STR_BADGE_CONFIG_NAME :İsim
STR_BADGE_FILTER_ANY_LABEL :Her {STRING}
STR_BADGE_FILTER_IS_LABEL :{STRING} eşittir {STRING}
+1 -3
View File
@@ -2986,10 +2986,8 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Передмі
STR_HOUSE_PICKER_CLASS_ZONE4 :Щільне передмістя
STR_HOUSE_PICKER_CLASS_ZONE5 :Центр міста
STR_HOUSE_PICKER_PROTECT_TITLE :Захист від оновлень
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Укажіть, чи буде захищено цю будівлю від змін у разі зростання міста
STR_HOUSE_PICKER_PROTECT_OFF :вимкнено
STR_HOUSE_PICKER_PROTECT_ON :увімкнено
STR_STATION_CLASS_DFLT :Звичайна
STR_STATION_CLASS_DFLT_STATION :Звичайна станція
+1
View File
@@ -1984,6 +1984,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}کھین
STR_STATION_CLASS_DFLT :طے شدہ اسٹیشن
STR_STATION_CLASS_WAYP :گزرگاہیں
+1 -3
View File
@@ -2875,10 +2875,8 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Phía ngoài ng
STR_HOUSE_PICKER_CLASS_ZONE4 :Phía trong ngoại ô
STR_HOUSE_PICKER_CLASS_ZONE5 :Nội thành
STR_HOUSE_PICKER_PROTECT_TITLE :Ngăn chặn nâng cấp
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Chọn nếu ngôi nhà này có được bảo vệ khỏi việc bị thay thế hay không khi thị trấn phát triển
STR_HOUSE_PICKER_PROTECT_OFF :Tắt
STR_HOUSE_PICKER_PROTECT_ON :Bật
STR_STATION_CLASS_DFLT :Mặc định
STR_STATION_CLASS_DFLT_STATION :Trạm mặc định
+1 -3
View File
@@ -2863,10 +2863,8 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Maestrefi Allan
STR_HOUSE_PICKER_CLASS_ZONE4 :Maestrefi Mewnol
STR_HOUSE_PICKER_CLASS_ZONE5 :Canol y ddinas
STR_HOUSE_PICKER_PROTECT_TITLE :Atal uwchraddiadau
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Dewis a fydd y tŷ yma'n cael ei amddiffyn rhag disodli wrth i'r dref tyfu
STR_HOUSE_PICKER_PROTECT_OFF :I ffwrdd
STR_HOUSE_PICKER_PROTECT_ON :Ymlaen
STR_STATION_CLASS_DFLT :Rhagosodiad
STR_STATION_CLASS_DFLT_STATION :Gorsaf rhagosodedig
+23 -22
View File
@@ -8,28 +8,31 @@
/** @file fluidsynth.cpp Playing music via the fluidsynth library. */
#include "../stdafx.h"
#include "../openttd.h"
#include "../sound_type.h"
#include "../debug.h"
#include "fluidsynth.h"
#include "midifile.hpp"
#include <filesystem>
#include <fluidsynth.h>
#include "../mixer.h"
#include <mutex>
#include "../debug.h"
#include "../mixer.h"
#include "midifile.hpp"
#include "../safeguards.h"
static struct {
fluid_settings_t *settings; ///< FluidSynth settings handle
fluid_synth_t *synth; ///< FluidSynth synthesizer handle
fluid_player_t *player; ///< FluidSynth MIDI player handle
std::mutex synth_mutex; ///< Guard mutex for synth access
fluid_settings_t *settings; ///< FluidSynth settings handle
fluid_synth_t *synth; ///< FluidSynth synthesizer handle
fluid_player_t *player; ///< FluidSynth MIDI player handle
std::mutex synth_mutex; ///< Guard mutex for synth access
} _midi; ///< Metadata about the midi we're playing.
/** Factory for the FluidSynth driver. */
static FMusicDriver_FluidSynth iFMusicDriver_FluidSynth;
/** List of sound fonts to try by default. */
static const char *default_sf[] = {
static const char *_default_soundfonts[] = {
/* FluidSynth preferred */
/* See: https://www.fluidsynth.org/api/settings_synth.html#settings_synth_default-soundfont */
"/usr/share/soundfonts/default.sf2",
@@ -47,13 +50,11 @@ static const char *default_sf[] = {
/* Debian/Ubuntu/OpenSUSE alternatives */
"/usr/share/sounds/sf2/TimGM6mb.sf2",
"/usr/share/sounds/sf2/FluidR3_GS.sf2",
nullptr
};
static void RenderMusicStream(int16_t *buffer, size_t samples)
{
std::unique_lock<std::mutex> lock{ _midi.synth_mutex, std::try_to_lock };
std::unique_lock<std::mutex> lock{_midi.synth_mutex, std::try_to_lock};
if (!lock.owns_lock() || _midi.synth == nullptr || _midi.player == nullptr) return;
fluid_synth_write_s16(_midi.synth, samples, buffer, 0, 2, buffer, 1, 2);
@@ -61,7 +62,7 @@ static void RenderMusicStream(int16_t *buffer, size_t samples)
std::optional<std::string_view> MusicDriver_FluidSynth::Start(const StringList &param)
{
std::lock_guard<std::mutex> lock{ _midi.synth_mutex };
std::lock_guard<std::mutex> lock{_midi.synth_mutex};
auto sfont_name = GetDriverParam(param, "soundfont");
int sfont_id;
@@ -97,9 +98,9 @@ std::optional<std::string_view> MusicDriver_FluidSynth::Start(const StringList &
/* If no default soundfont found, try our own list. */
if (sfont_id == FLUID_FAILED) {
for (int i = 0; default_sf[i]; i++) {
if (!fluid_is_soundfont(default_sf[i])) continue;
sfont_id = fluid_synth_sfload(_midi.synth, default_sf[i], 1);
for (const char *soundfont : _default_soundfonts) {
if (!std::filesystem::exists(soundfont) || !fluid_is_soundfont(soundfont)) continue;
sfont_id = fluid_synth_sfload(_midi.synth, soundfont, 1);
if (sfont_id != FLUID_FAILED) break;
}
}
@@ -119,7 +120,7 @@ void MusicDriver_FluidSynth::Stop()
{
MxSetMusicSource(nullptr);
std::lock_guard<std::mutex> lock{ _midi.synth_mutex };
std::lock_guard<std::mutex> lock{_midi.synth_mutex};
if (_midi.player != nullptr) delete_fluid_player(_midi.player);
_midi.player = nullptr;
@@ -141,7 +142,7 @@ void MusicDriver_FluidSynth::PlaySong(const MusicSongInfo &song)
return;
}
std::lock_guard<std::mutex> lock{ _midi.synth_mutex };
std::lock_guard<std::mutex> lock{_midi.synth_mutex};
_midi.player = new_fluid_player(_midi.synth);
if (_midi.player == nullptr) {
@@ -165,7 +166,7 @@ void MusicDriver_FluidSynth::PlaySong(const MusicSongInfo &song)
void MusicDriver_FluidSynth::StopSong()
{
std::lock_guard<std::mutex> lock{ _midi.synth_mutex };
std::lock_guard<std::mutex> lock{_midi.synth_mutex};
if (_midi.player == nullptr) return;
@@ -179,7 +180,7 @@ void MusicDriver_FluidSynth::StopSong()
bool MusicDriver_FluidSynth::IsSongPlaying()
{
std::lock_guard<std::mutex> lock{ _midi.synth_mutex };
std::lock_guard<std::mutex> lock{_midi.synth_mutex};
if (_midi.player == nullptr) return false;
return fluid_player_get_status(_midi.player) == FLUID_PLAYER_PLAYING;
@@ -187,7 +188,7 @@ bool MusicDriver_FluidSynth::IsSongPlaying()
void MusicDriver_FluidSynth::SetVolume(uint8_t vol)
{
std::lock_guard<std::mutex> lock{ _midi.synth_mutex };
std::lock_guard<std::mutex> lock{_midi.synth_mutex};
if (_midi.settings == nullptr) return;
/* Allowed range of synth.gain is 0.0 to 10.0 */
+24 -11
View File
@@ -94,7 +94,7 @@ void CoreTextFontCache::SetFontSize(int pixels)
Debug(fontcache, 2, "Loaded font '{}' with size {}", this->font_name, pixels);
}
GlyphID CoreTextFontCache::MapCharToGlyph(char32_t key)
GlyphID CoreTextFontCache::MapCharToGlyph(char32_t key, bool allow_fallback)
{
assert(IsPrintable(key));
@@ -112,6 +112,10 @@ GlyphID CoreTextFontCache::MapCharToGlyph(char32_t key)
return glyph[0];
}
if (allow_fallback && key >= SCC_SPRITE_START && key <= SCC_SPRITE_END) {
return this->parent->MapCharToGlyph(key);
}
return 0;
}
@@ -207,19 +211,29 @@ public:
* fallback search, use it. Otherwise, try to resolve it by font name.
* @param fs The font size to load.
*/
std::unique_ptr<FontCache> LoadFont(FontSize fs, FontType fonttype, bool search, const std::string &font, std::span<const std::byte>) const override
std::unique_ptr<FontCache> LoadFont(FontSize fs, FontType fonttype) const override
{
if (fonttype != FontType::TrueType) return nullptr;
FontCacheSubSetting *settings = GetFontCacheSubSetting(fs);
std::string font = GetFontCacheFontName(fs);
if (font.empty()) return nullptr;
CFAutoRelease<CTFontDescriptorRef> font_ref;
if (MacOSVersionIsAtLeast(10, 6, 0)) {
if (settings->os_handle != nullptr) {
font_ref.reset(static_cast<CTFontDescriptorRef>(const_cast<void *>(settings->os_handle)));
CFRetain(font_ref.get()); // Increase ref count to match a later release.
}
if (!font_ref && MacOSVersionIsAtLeast(10, 6, 0)) {
/* Might be a font file name, try load it. */
font_ref.reset(LoadFontFromFile(font));
if (!font_ref) ShowInfo("Unable to load file '{}' for {} font, using default OS font selection instead", font, FontSizeToName(fs));
}
if (!font_ref && search) {
if (!font_ref) {
CFAutoRelease<CFStringRef> name(CFStringCreateWithCString(kCFAllocatorDefault, font.c_str(), kCFStringEncodingUTF8));
/* Simply creating the font using CTFontCreateWithNameAndSize will *always* return
@@ -245,7 +259,7 @@ public:
return std::make_unique<CoreTextFontCache>(fs, std::move(font_ref), GetFontCacheFontSize(fs));
}
bool FindFallbackFont(const std::string &language_isocode, FontSizes fontsizes, MissingGlyphSearcher *callback) const override
bool FindFallbackFont(FontCacheSettings *settings, const std::string &language_isocode, MissingGlyphSearcher *callback) const override
{
/* Determine fallback font using CoreText. This uses the language isocode
* to find a suitable font. CoreText is available from 10.5 onwards. */
@@ -291,7 +305,7 @@ public:
/* Skip bold fonts (especially Arial Bold, which looks worse than regular Arial). */
if (symbolic_traits & kCTFontBoldTrait) continue;
/* Select monospaced fonts if asked for. */
if (((symbolic_traits & kCTFontMonoSpaceTrait) == kCTFontMonoSpaceTrait) != fontsizes.Test(FS_MONO)) continue;
if (((symbolic_traits & kCTFontMonoSpaceTrait) == kCTFontMonoSpaceTrait) != callback->Monospace()) continue;
/* Get font name. */
char buffer[128];
@@ -309,9 +323,8 @@ public:
if (name.starts_with(".") || name.starts_with("LastResort")) continue;
/* Save result. */
FontCache::AddFallback(fontsizes, callback->GetLoadReason(), name);
if (callback->FindMissingGlyphs().None()) {
callback->SetFontNames(settings, name);
if (!callback->FindMissingGlyphs()) {
Debug(fontcache, 2, "CT-Font for {}: {}", language_isocode, name);
result = true;
break;
@@ -322,8 +335,8 @@ public:
if (!result) {
/* For some OS versions, the font 'Arial Unicode MS' does not report all languages it
* supports. If we didn't find any other font, just try it, maybe we get lucky. */
FontCache::AddFallback(fontsizes, callback->GetLoadReason(), "Arial Unicode MS");
result = callback->FindMissingGlyphs().None();
callback->SetFontNames(settings, "Arial Unicode MS");
result = !callback->FindMissingGlyphs();
}
callback->FindMissingGlyphs();
+1 -1
View File
@@ -28,7 +28,7 @@ public:
~CoreTextFontCache() {}
void ClearFontCache() override;
GlyphID MapCharToGlyph(char32_t key) override;
GlyphID MapCharToGlyph(char32_t key, bool allow_fallback = true) override;
std::string GetFontName() override { return font_name; }
bool IsBuiltInFont() override { return false; }
const void *GetOSHandle() override { return font.get(); }
+41 -33
View File
@@ -9,7 +9,6 @@
#include "../../stdafx.h"
#include "string_osx.h"
#include "../../gfx_func.h"
#include "../../string_func.h"
#include "../../strings_func.h"
#include "../../core/utf8.hpp"
@@ -53,7 +52,7 @@ extern "C" {
/** Cached current locale. */
static CFAutoRelease<CFLocaleRef> _osx_locale;
/** CoreText cache for font information, cleared when OTTD changes fonts. */
static std::unordered_map<FontIndex, CFAutoRelease<CTFontRef>> _font_cache;
static CFAutoRelease<CTFontRef> _font_cache[FS_END];
/**
@@ -61,6 +60,7 @@ static std::unordered_map<FontIndex, CFAutoRelease<CTFontRef>> _font_cache;
*/
class CoreTextParagraphLayout : public ParagraphLayouter {
private:
const CoreTextParagraphLayoutFactory::CharType *text_buffer;
ptrdiff_t length;
const FontMap &font_map;
@@ -77,18 +77,18 @@ public:
std::vector<int> glyph_to_char;
int total_advance = 0;
Font font;
Font *font;
public:
CoreTextVisualRun(CTRunRef run, const Font &font);
CoreTextVisualRun(CTRunRef run, Font *font, const CoreTextParagraphLayoutFactory::CharType *buff);
CoreTextVisualRun(CoreTextVisualRun &&other) = default;
std::span<const GlyphID> GetGlyphs() const override { return this->glyphs; }
std::span<const Position> GetPositions() const override { return this->positions; }
std::span<const int> GetGlyphToCharMap() const override { return this->glyph_to_char; }
const Font &GetFont() const override { return this->font; }
int GetLeading() const override { return GetCharacterHeight(this->font.GetFontCache().GetSize()); }
const Font *GetFont() const override { return this->font; }
int GetLeading() const override { return this->font->fc->GetHeight(); }
int GetGlyphCount() const override { return (int)this->glyphs.size(); }
int GetAdvance() const { return this->total_advance; }
};
@@ -96,7 +96,7 @@ public:
/** A single line worth of VisualRuns. */
class CoreTextLine : public std::vector<CoreTextVisualRun>, public ParagraphLayouter::Line {
public:
CoreTextLine(CFAutoRelease<CTLineRef> line, const FontMap &font_mapping)
CoreTextLine(CFAutoRelease<CTLineRef> line, const FontMap &font_mapping, const CoreTextParagraphLayoutFactory::CharType *buff)
{
CFArrayRef runs = CTLineGetGlyphRuns(line.get());
for (CFIndex i = 0; i < CFArrayGetCount(runs); i++) {
@@ -104,9 +104,9 @@ public:
/* Extract font information for this run. */
CFRange chars = CTRunGetStringRange(run);
const auto &map = std::ranges::upper_bound(font_mapping, chars.location, std::less{}, &std::pair<int, Font>::first);
auto map = std::ranges::upper_bound(font_mapping, chars.location, std::less{}, &std::pair<int, Font *>::first);
this->emplace_back(run, map->second);
this->emplace_back(run, map->second, buff);
}
}
@@ -122,7 +122,7 @@ public:
}
};
CoreTextParagraphLayout(CFAutoRelease<CTTypesetterRef> typesetter, ptrdiff_t len, const FontMap &font_mapping) : length(len), font_map(font_mapping), typesetter(std::move(typesetter))
CoreTextParagraphLayout(CFAutoRelease<CTTypesetterRef> typesetter, const CoreTextParagraphLayoutFactory::CharType *buffer, ptrdiff_t len, const FontMap &font_mapping) : text_buffer(buffer), length(len), font_map(font_mapping), typesetter(std::move(typesetter))
{
this->Reflow();
}
@@ -137,17 +137,17 @@ public:
/** Get the width of an encoded sprite font character. */
static CGFloat CustomFontGetWidth(void *ref_con)
static CGFloat SpriteFontGetWidth(void *ref_con)
{
FontIndex fi = static_cast<FontIndex>(reinterpret_cast<uintptr_t>(ref_con) >> 24);
char32_t c = static_cast<char32_t>(reinterpret_cast<uintptr_t>(ref_con) & 0xFFFFFF);
FontSize fs = (FontSize)((size_t)ref_con >> 24);
char32_t c = (char32_t)((size_t)ref_con & 0xFFFFFF);
return FontCache::Get(fi)->GetGlyphWidth(c);
return GetGlyphWidth(fs, c);
}
static const CTRunDelegateCallbacks _sprite_font_callback = {
kCTRunDelegateCurrentVersion, nullptr, nullptr, nullptr,
&CustomFontGetWidth
&SpriteFontGetWidth
};
/* static */ std::unique_ptr<ParagraphLayouter> CoreTextParagraphLayoutFactory::GetParagraphLayout(CharType *buff, CharType *buff_end, FontMap &font_mapping)
@@ -158,6 +158,11 @@ static const CTRunDelegateCallbacks _sprite_font_callback = {
ptrdiff_t length = buff_end - buff;
if (length == 0) return nullptr;
/* Can't layout our in-built sprite fonts. */
for (const auto &[position, font] : font_mapping) {
if (font->fc->IsBuiltInFont()) return nullptr;
}
/* Make attributed string with embedded font information. */
CFAutoRelease<CFMutableAttributedStringRef> str(CFAttributedStringCreateMutable(kCFAllocatorDefault, 0));
CFAttributedStringBeginEditing(str.get());
@@ -174,26 +179,25 @@ static const CTRunDelegateCallbacks _sprite_font_callback = {
for (const auto &[position, font] : font_mapping) {
if (position - last == 0) continue;
FontCache &fc = font.GetFontCache();
CTFontRef font_handle = static_cast<CTFontRef>(fc.GetOSHandle());
CTFontRef font_handle = static_cast<CTFontRef>(font->fc->GetOSHandle());
if (font_handle == nullptr) {
if (!_font_cache[fc.GetIndex()]) {
if (!_font_cache[font->fc->GetSize()]) {
/* Cache font information. */
CFAutoRelease<CFStringRef> font_name(CFStringCreateWithCString(kCFAllocatorDefault, fc.GetFontName().c_str(), kCFStringEncodingUTF8));
_font_cache[fc.GetIndex()].reset(CTFontCreateWithName(font_name.get(), fc.GetFontSize(), nullptr));
CFAutoRelease<CFStringRef> font_name(CFStringCreateWithCString(kCFAllocatorDefault, font->fc->GetFontName().c_str(), kCFStringEncodingUTF8));
_font_cache[font->fc->GetSize()].reset(CTFontCreateWithName(font_name.get(), font->fc->GetFontSize(), nullptr));
}
font_handle = _font_cache[fc.GetIndex()].get();
font_handle = _font_cache[font->fc->GetSize()].get();
}
CFAttributedStringSetAttribute(str.get(), CFRangeMake(last, position - last), kCTFontAttributeName, font_handle);
CGColorRef colour = CGColorCreateGenericGray((uint8_t)font.colour / 255.0f, 1.0f); // We don't care about the real colours, just that they are different.
CGColorRef colour = CGColorCreateGenericGray((uint8_t)font->colour / 255.0f, 1.0f); // We don't care about the real colours, just that they are different.
CFAttributedStringSetAttribute(str.get(), CFRangeMake(last, position - last), kCTForegroundColorAttributeName, colour);
CGColorRelease(colour);
/* Install a size callback for our custom fonts. */
if (fc.IsBuiltInFont()) {
for (ssize_t c = last; c < position; c++) {
CFAutoRelease<CTRunDelegateRef> del(CTRunDelegateCreate(&_sprite_font_callback, reinterpret_cast<void *>(static_cast<size_t>(buff[c] | (fc.GetIndex() << 24)))));
/* Install a size callback for our special private-use sprite glyphs in case the font does not provide them. */
for (ssize_t c = last; c < position; c++) {
if (buff[c] >= SCC_SPRITE_START && buff[c] <= SCC_SPRITE_END && font->fc->MapCharToGlyph(buff[c], false) == 0) {
CFAutoRelease<CTRunDelegateRef> del(CTRunDelegateCreate(&_sprite_font_callback, (void *)(size_t)(buff[c] | (font->fc->GetSize() << 24))));
/* According to the official documentation, if a run delegate is used, the char should always be 0xFFFC. */
CFAttributedStringReplaceString(str.get(), CFRangeMake(c, 1), replacement_str.get());
CFAttributedStringSetAttribute(str.get(), CFRangeMake(c, 1), kCTRunDelegateAttributeName, del.get());
@@ -207,7 +211,7 @@ static const CTRunDelegateCallbacks _sprite_font_callback = {
/* Create and return typesetter for the string. */
CFAutoRelease<CTTypesetterRef> typesetter(CTTypesetterCreateWithAttributedString(str.get()));
return typesetter ? std::make_unique<CoreTextParagraphLayout>(std::move(typesetter), length, font_mapping) : nullptr;
return typesetter ? std::make_unique<CoreTextParagraphLayout>(std::move(typesetter), buff, length, font_mapping) : nullptr;
}
/* virtual */ std::unique_ptr<const ParagraphLayouter::Line> CoreTextParagraphLayout::NextLine(int max_width)
@@ -223,10 +227,10 @@ static const CTRunDelegateCallbacks _sprite_font_callback = {
this->cur_offset += len;
if (!line) return nullptr;
return std::make_unique<CoreTextLine>(std::move(line), this->font_map);
return std::make_unique<CoreTextLine>(std::move(line), this->font_map, this->text_buffer);
}
CoreTextParagraphLayout::CoreTextVisualRun::CoreTextVisualRun(CTRunRef run, const Font &font) : font(font)
CoreTextParagraphLayout::CoreTextVisualRun::CoreTextVisualRun(CTRunRef run, Font *font, const CoreTextParagraphLayoutFactory::CharType *buff) : font(font)
{
this->glyphs.resize(CTRunGetGlyphCount(run));
@@ -243,15 +247,19 @@ CoreTextParagraphLayout::CoreTextVisualRun::CoreTextVisualRun(CTRunRef run, cons
CTRunGetAdvances(run, CFRangeMake(0, 0), advs.get());
this->positions.reserve(this->glyphs.size());
int y_offset = this->font.GetFontCache().GetGlyphYOffset();
/* Convert glyph array to our data type. At the same time, substitute
* the proper glyphs for our private sprite glyphs. */
auto gl = std::make_unique<CGGlyph[]>(this->glyphs.size());
CTRunGetGlyphs(run, CFRangeMake(0, 0), gl.get());
for (size_t i = 0; i < this->glyphs.size(); i++) {
this->glyphs[i] = gl[i];
this->positions.emplace_back(pts[i].x, pts[i].x + advs[i].width - 1, pts[i].y + y_offset);
if (buff[this->glyph_to_char[i]] >= SCC_SPRITE_START && buff[this->glyph_to_char[i]] <= SCC_SPRITE_END && (gl[i] == 0 || gl[i] == 3)) {
/* A glyph of 0 indicates not found, while apparently 3 is what char 0xFFFC maps to. */
this->glyphs[i] = font->fc->MapCharToGlyph(buff[this->glyph_to_char[i]]);
this->positions.emplace_back(pts[i].x, pts[i].x + advs[i].width - 1, (font->fc->GetHeight() - ScaleSpriteTrad(FontCache::GetDefaultFontHeight(font->fc->GetSize()))) / 2); // Align sprite font to centre
} else {
this->glyphs[i] = gl[i];
this->positions.emplace_back(pts[i].x, pts[i].x + advs[i].width - 1, pts[i].y);
}
}
this->total_advance = (int)std::ceil(CTRunGetTypographicBounds(run, CFRangeMake(0, 0), nullptr, nullptr, nullptr));
}
+18 -31
View File
@@ -120,10 +120,6 @@ FT_Error GetFontByFaceName(std::string_view font_name, FT_Face *face)
}
}
if (err != FT_Err_Ok) {
ShowInfo("Unable to find '{}' font", font_name);
}
return err;
}
@@ -143,7 +139,7 @@ static int GetPreferredWeightDistance(int weight)
return 0;
}
bool FontConfigFindFallbackFont(const std::string &language_isocode, FontSizes fontsizes, MissingGlyphSearcher *callback)
bool FontConfigFindFallbackFont(FontCacheSettings *settings, const std::string &language_isocode, MissingGlyphSearcher *callback)
{
bool ret = false;
@@ -152,25 +148,22 @@ bool FontConfigFindFallbackFont(const std::string &language_isocode, FontSizes f
auto fc_instance = AutoRelease<FcConfig, FcConfigDestroy>(FcConfigReference(nullptr));
assert(fc_instance != nullptr);
/* Get set of required characters. */
auto chars = callback->GetRequiredGlyphs(fontsizes);
/* Fontconfig doesn't handle full language isocodes, only the part
* before the _ of e.g. en_GB is used, so "remove" everything after
* the _. */
std::string lang = language_isocode.empty() ? "" : fmt::format(":lang={}", language_isocode.substr(0, language_isocode.find('_')));
std::string lang = fmt::format(":lang={}", language_isocode.substr(0, language_isocode.find('_')));
/* First create a pattern to match the wanted language. */
auto pat = AutoRelease<FcPattern, FcPatternDestroy>(FcNameParse(ToFcString(lang)));
/* We only want to know these attributes. */
auto os = AutoRelease<FcObjectSet, FcObjectSetDestroy>(FcObjectSetBuild(FC_FILE, FC_INDEX, FC_SPACING, FC_SLANT, FC_WEIGHT, FC_CHARSET, nullptr));
auto os = AutoRelease<FcObjectSet, FcObjectSetDestroy>(FcObjectSetBuild(FC_FILE, FC_INDEX, FC_SPACING, FC_SLANT, FC_WEIGHT, nullptr));
/* Get the list of filenames matching the wanted language. */
auto fs = AutoRelease<FcFontSet, FcFontSetDestroy>(FcFontList(nullptr, pat.get(), os.get()));
if (fs == nullptr) return ret;
int best_weight = -1;
std::string best_font;
const char *best_font = nullptr;
int best_index = 0;
for (FcPattern *font : std::span(fs->fonts, fs->nfont)) {
@@ -181,7 +174,7 @@ bool FontConfigFindFallbackFont(const std::string &language_isocode, FontSizes f
/* Get a font with the right spacing .*/
int value = 0;
FcPatternGetInteger(font, FC_SPACING, 0, &value);
if (fontsizes.Test(FS_MONO) != (value == FC_MONO) && value != FC_DUAL) continue;
if (callback->Monospace() != (value == FC_MONO) && value != FC_DUAL) continue;
/* Do not use those that explicitly say they're slanted. */
FcPatternGetInteger(font, FC_SLANT, 0, &value);
@@ -192,32 +185,26 @@ bool FontConfigFindFallbackFont(const std::string &language_isocode, FontSizes f
int weight = GetPreferredWeightDistance(value);
if (best_weight != -1 && weight > best_weight) continue;
size_t matching_chars = 0;
FcCharSet *charset;
FcPatternGetCharSet(font, FC_CHARSET, 0, &charset);
for (const char32_t &c : chars) {
if (FcCharSetHasChar(charset, c)) ++matching_chars;
}
if (matching_chars < chars.size()) {
Debug(fontcache, 1, "Font \"{}\" misses {} glyphs", reinterpret_cast<const char *>(file), chars.size() - matching_chars);
continue;
}
/* Possible match based on attributes, get index. */
int32_t index;
res = FcPatternGetInteger(font, FC_INDEX, 0, &index);
if (res != FcResultMatch) continue;
best_weight = weight;
best_font = FromFcString(file);
best_index = index;
callback->SetFontNames(settings, FromFcString(file), &index);
bool missing = callback->FindMissingGlyphs();
Debug(fontcache, 1, "Font \"{}\" misses{} glyphs", FromFcString(file), missing ? "" : " no");
if (!missing) {
best_weight = weight;
best_font = FromFcString(file);
best_index = index;
}
}
if (best_font.empty()) return false;
FontCache::AddFallbackWithHandle(fontsizes, callback->GetLoadReason(), best_font, best_index);
FontCache::LoadFontCaches(fontsizes);
if (best_font == nullptr) return false;
callback->SetFontNames(settings, best_font, &best_index);
FontCache::LoadFontCaches(callback->Monospace() ? FontSizes{FS_MONO} : FONTSIZES_REQUIRED);
return true;
}
+1 -1
View File
@@ -19,7 +19,7 @@
FT_Error GetFontByFaceName(std::string_view font_name, FT_Face *face);
bool FontConfigFindFallbackFont(const std::string &language_isocode, FontSizes fontsizes, MissingGlyphSearcher *callback);
bool FontConfigFindFallbackFont(FontCacheSettings *settings, const std::string &language_isocode, MissingGlyphSearcher *callback);
#endif /* WITH_FONTCONFIG */

Some files were not shown because too many files have changed in this diff Show More