mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2026-07-17 08:09:44 +00:00
Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ca42564da8 | |||
| 9062d25456 | |||
| 4213c62edd | |||
| a97587b3fe | |||
| 8ac9762a84 | |||
| 4ad85e0fe6 | |||
| ab1ae7ec1a | |||
| 84c3ac6852 | |||
| a6994a9550 | |||
| f22f9d8b18 | |||
| 4b701e053f | |||
| b575769a7f | |||
| 04f1a114dd |
@@ -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')
|
||||
|
||||
@@ -105,4 +105,4 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Check annotations
|
||||
uses: OpenTTD/actions/annotation-check@v5
|
||||
uses: OpenTTD/actions/annotation-check@v6
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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::"
|
||||
|
||||
@@ -57,4 +57,4 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Check annotations
|
||||
uses: OpenTTD/actions/annotation-check@v5
|
||||
uses: OpenTTD/actions/annotation-check@v6
|
||||
|
||||
@@ -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::"
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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 }} \
|
||||
|
||||
@@ -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 }} \
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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 */
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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());
|
||||
|
||||
@@ -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
@@ -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
@@ -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). */
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 :نقطة عبور
|
||||
|
||||
@@ -2263,6 +2263,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Geltokia
|
||||
|
||||
|
||||
|
||||
|
||||
STR_STATION_CLASS_DFLT :Geltoki lehenetsia
|
||||
STR_STATION_CLASS_WAYP :Bidepuntuak
|
||||
|
||||
|
||||
@@ -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 :Стандартны прыпынак
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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...
|
||||
|
||||
@@ -1067,6 +1067,7 @@ STR_CONTENT_DETAIL_VERSION :{SILVER}Вер
|
||||
|
||||
|
||||
|
||||
|
||||
# Signal window
|
||||
|
||||
# Bridge selection window
|
||||
|
||||
@@ -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
@@ -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
@@ -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 :tæ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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -2163,6 +2163,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bygg ein
|
||||
|
||||
|
||||
|
||||
|
||||
STR_STATION_CLASS_DFLT :Vanlig støð
|
||||
STR_STATION_CLASS_WAYP :Waypoint
|
||||
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -885,6 +885,7 @@ STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}अक
|
||||
|
||||
|
||||
|
||||
|
||||
STR_STATION_CLASS_DFLT :मानक स्टेशन
|
||||
STR_STATION_CLASS_WAYP :पथ-संकेत
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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öð
|
||||
|
||||
|
||||
@@ -963,6 +963,7 @@ STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Aceptas:
|
||||
|
||||
|
||||
|
||||
|
||||
# Signal window
|
||||
|
||||
# Bridge selection window
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -2657,6 +2657,7 @@ STR_PICKER_MODE_ALL :すべて
|
||||
|
||||
|
||||
|
||||
|
||||
STR_STATION_CLASS_DFLT :標準駅
|
||||
STR_STATION_CLASS_WAYP :中継駅
|
||||
|
||||
|
||||
+4
-3
@@ -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 :기본 역
|
||||
|
||||
@@ -2570,6 +2570,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Struere
|
||||
|
||||
|
||||
|
||||
|
||||
STR_STATION_CLASS_DFLT :Statio solita
|
||||
STR_STATION_CLASS_WAYP :Interloci
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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ė
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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}Излез Сигнализација (електрика){}Се однесува на ист начин како блок-сигналот, но потребно е да ја има точната боја на влезен и комбо пресигнал.
|
||||
|
||||
@@ -2110,6 +2110,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bina ste
|
||||
|
||||
|
||||
|
||||
|
||||
STR_STATION_CLASS_DFLT :Stesen lazim
|
||||
STR_STATION_CLASS_WAYP :Tandatuju
|
||||
|
||||
|
||||
@@ -892,6 +892,7 @@ STR_NETWORK_SERVER_MESSAGE :*** {STRING}
|
||||
|
||||
|
||||
|
||||
|
||||
# Signal window
|
||||
|
||||
# Bridge selection window
|
||||
|
||||
+1
-3
@@ -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
|
||||
|
||||
@@ -1198,6 +1198,7 @@ STR_NETWORK_SERVER_MESSAGE :*** {STRING}
|
||||
|
||||
|
||||
|
||||
|
||||
# Signal window
|
||||
|
||||
# Bridge selection window
|
||||
|
||||
@@ -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 :På
|
||||
|
||||
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
|
||||
|
||||
@@ -2286,6 +2286,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bygg sta
|
||||
|
||||
|
||||
|
||||
|
||||
STR_STATION_CLASS_DFLT :Standard stasjon
|
||||
STR_STATION_CLASS_WAYP :Kontrollpunkt
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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}m³
|
||||
|
||||
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
|
||||
|
||||
@@ -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ă
|
||||
|
||||
@@ -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 :Стандартная ж/д станция
|
||||
|
||||
@@ -2912,6 +2912,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Gradnja
|
||||
|
||||
|
||||
|
||||
|
||||
STR_STATION_CLASS_DFLT :Podrazumevana stanica
|
||||
STR_STATION_CLASS_WAYP :Putanje
|
||||
|
||||
|
||||
@@ -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 :默认车站
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 :På
|
||||
|
||||
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
|
||||
|
||||
@@ -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 :இயல்பிருப்பு சாலை நிறுத்தம்
|
||||
|
||||
@@ -2399,6 +2399,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}สร
|
||||
|
||||
|
||||
|
||||
|
||||
STR_STATION_CLASS_DFLT :สถานีมาตรฐาน
|
||||
STR_STATION_CLASS_WAYP :จุดตรวจ
|
||||
|
||||
|
||||
@@ -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
@@ -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ı aç
|
||||
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}
|
||||
|
||||
@@ -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 :Звичайна станція
|
||||
|
||||
@@ -1984,6 +1984,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}کھین
|
||||
|
||||
|
||||
|
||||
|
||||
STR_STATION_CLASS_DFLT :طے شدہ اسٹیشن
|
||||
STR_STATION_CLASS_WAYP :گزرگاہیں
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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 ¶m)
|
||||
{
|
||||
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
@@ -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();
|
||||
|
||||
@@ -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(); }
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user