diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index aec09828f7..a492089f0b 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -42,7 +42,7 @@ Some things are not automated, and forgotten often. This list is a reminder for * This PR touches english.txt or translations? Check the [guidelines](https://github.com/OpenTTD/OpenTTD/blob/master/docs/eints.md) * This PR affects the save game format? (label 'savegame upgrade') * This PR affects the GS/AI API? (label 'needs review: Script API') - * ai_changelog.hpp, gs_changelog.hpp need updating. + * ai_changelog.hpp, game_changelog.hpp need updating. * The compatibility wrappers (compat_*.nut) need updating. * This PR affects the NewGRF API? (label 'needs review: NewGRF') * newgrf_debug_data.h may need updating. diff --git a/.github/windowdesc-ini-key.py b/.github/windowdesc-ini-key.py new file mode 100644 index 0000000000..16fa3053d8 --- /dev/null +++ b/.github/windowdesc-ini-key.py @@ -0,0 +1,50 @@ +""" +Script to scan the OpenTTD source-tree for ini_key issues in WindowDesc entries. +""" + +import glob +import os +import re +import sys + + +def scan_source_files(path, ini_keys=None): + if ini_keys is None: + ini_keys = set() + + errors = [] + + for new_path in glob.glob(f"{path}/*.cpp"): + if os.path.isdir(new_path): + errors.append(scan_source_files(new_path, ini_keys)) + continue + + with open(new_path) as fp: + output = fp.read() + + for (name, ini_key, widgets) in re.findall(r"^static WindowDesc ([a-zA-Z0-9_]*).*?, (?:\"(.*?)\")?.*?,(?:\s+(.*?),){6}", output, re.S|re.M): + if ini_key: + if ini_key in ini_keys: + errors.append(f"{new_path}: {name} ini_key is a duplicate") + ini_keys.add(ini_key) + widget = re.findall("static const (?:struct )?NWidgetPart " + widgets + ".*?(?:WWT_(DEFSIZE|STICKY)BOX.*?)?;", output, re.S)[0] + if widget and not ini_key: + errors.append(f"{new_path}: {name} has WWT_DEFSIZEBOX/WWT_STICKYBOX without ini_key") + if ini_key and not widget: + errors.append(f"{new_path}: {name} has ini_key without WWT_DEFSIZEBOX/WWT_STICKYBOX") + + return errors + + +def main(): + errors = scan_source_files("src") + + if errors: + print("\n".join(errors)) + sys.exit(1) + + print("OK") + + +if __name__ == "__main__": + main() diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index bf30fbcc9e..f94d2c02af 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-20.04 container: # If you change this version, change the number in the cache step too. - image: emscripten/emsdk:3.1.37 + image: emscripten/emsdk:3.1.42 steps: - name: Checkout @@ -42,12 +42,13 @@ jobs: uses: actions/cache@v3 with: path: /emsdk/upstream/emscripten/cache - key: 3.1.37-${{ runner.os }} + key: 3.1.42-${{ runner.os }} - - name: Patch Emscripten to support LZMA + - name: Patch Emscripten to support LZMA and nlohmann-json run: | cd /emsdk/upstream/emscripten patch -p1 < ${GITHUB_WORKSPACE}/os/emscripten/emsdk-liblzma.patch + patch -p1 < ${GITHUB_WORKSPACE}/os/emscripten/emsdk-nlohmann-json.patch - name: Build (host tools) run: | diff --git a/.github/workflows/preview-build.yml b/.github/workflows/preview-build.yml new file mode 100644 index 0000000000..a968899edf --- /dev/null +++ b/.github/workflows/preview-build.yml @@ -0,0 +1,103 @@ +name: Preview build + +on: + workflow_call: + secrets: + PREVIEW_CLOUDFLARE_API_TOKEN: + description: API token to upload a preview to Cloudflare Pages + required: true + PREVIEW_CLOUDFLARE_ACCOUNT_ID: + description: Account ID to upload a preview to Cloudflare Pages + required: true + +jobs: + preview: + name: Build preview + + environment: + name: preview + url: https://preview.openttd.org/pr${{ github.event.pull_request.number }}/ + + runs-on: ubuntu-latest + container: + # If you change this version, change the number in the cache step too. + image: emscripten/emsdk:3.1.42 + + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + ref: ${{ github.event.pull_request.head.sha }} + + - name: Name branch + run: | + git config --global --add safe.directory ${GITHUB_WORKSPACE} + git checkout -b pr${{ github.event.pull_request.number }} + + - name: Setup cache + uses: actions/cache@v3 + with: + path: /emsdk/upstream/emscripten/cache + key: 3.1.42-${{ runner.os }} + + - name: Patch Emscripten to support LZMA and nlohmann_json + run: | + cd /emsdk/upstream/emscripten + patch -p1 < ${GITHUB_WORKSPACE}/os/emscripten/emsdk-liblzma.patch + patch -p1 < ${GITHUB_WORKSPACE}/os/emscripten/emsdk-nlohmann-json.patch + + - name: Build (host tools) + run: | + mkdir build-host + cd build-host + + echo "::group::CMake" + cmake .. -DOPTION_TOOLS_ONLY=ON + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + make -j$(nproc) tools + echo "::endgroup::" + + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master + + - name: Build + run: | + mkdir build + cd build + + echo "::group::CMake" + emcmake cmake .. \ + -DHOST_BINARY_DIR=../build-host \ + -DCMAKE_BUILD_TYPE=Release \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + cmake --build . -j $(nproc) --target openttd + echo "::endgroup::" + + - name: Prepare preview + run: | + mkdir public + + cp build/openttd.data public/ + cp build/openttd.html public/ + cp build/openttd.js public/ + cp build/openttd.wasm public/ + + # Ensure we use the latest version of npm; the one we get with current + # emscripten doesn't allow running "npx wrangler" as root. + npm install -g npm + + - name: Publish preview + uses: cloudflare/pages-action@v1 + with: + apiToken: ${{ secrets.PREVIEW_CLOUDFLARE_API_TOKEN }} + accountId: ${{ secrets.PREVIEW_CLOUDFLARE_ACCOUNT_ID }} + projectName: ${{ vars.PREVIEW_CLOUDFLARE_PROJECT_NAME }} + directory: public + branch: pr${{ github.event.pull_request.number }} diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml new file mode 100644 index 0000000000..97ab31955b --- /dev/null +++ b/.github/workflows/preview.yml @@ -0,0 +1,20 @@ +name: Preview + +on: + pull_request_target: + types: + - labeled + - synchronize + branches: + - master + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number }} + cancel-in-progress: true + +jobs: + preview: + if: ${{ (github.event.action == 'labeled' && github.event.label.name == 'preview') || (github.event.action != 'labeled' && contains(github.event.pull_request.labels.*.name, 'preview')) }} + name: Preview + uses: ./.github/workflows/preview-build.yml + secrets: inherit diff --git a/.github/workflows/preview_build.yml b/.github/workflows/preview_build.yml deleted file mode 100644 index b73d993665..0000000000 --- a/.github/workflows/preview_build.yml +++ /dev/null @@ -1,134 +0,0 @@ -name: Preview build - -on: - repository_dispatch: - types: - - Preview* - -jobs: - preview: - name: Build preview - - runs-on: ubuntu-20.04 - container: - # If you change this version, change the number in the cache step too. - image: emscripten/emsdk:3.1.37 - - steps: - - name: Update deployment status to in progress - uses: octokit/request-action@v2.x - with: - route: POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses - mediaType: | - previews: - - ant-man - - flash - owner: ${{ github.event.repository.owner.login }} - repo: ${{ github.event.repository.name }} - deployment_id: ${{ github.event.client_payload.deployment_id }} - state: in_progress - env: - GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} - - - name: Checkout - uses: actions/checkout@v3 - with: - ref: ${{ github.event.client_payload.sha }} - - - name: Name branch - run: | - git config --global --add safe.directory ${GITHUB_WORKSPACE} - name=$(echo "${{ github.event.client_payload.folder }}") - git checkout -b ${name} - - - name: Setup cache - uses: actions/cache@v3 - with: - path: /emsdk/upstream/emscripten/cache - key: 3.1.37-${{ runner.os }} - - - name: Patch Emscripten to support LZMA - run: | - cd /emsdk/upstream/emscripten - patch -p1 < ${GITHUB_WORKSPACE}/os/emscripten/emsdk-liblzma.patch - - - name: Build (host tools) - run: | - mkdir build-host - cd build-host - - echo "::group::CMake" - cmake .. -DOPTION_TOOLS_ONLY=ON - echo "::endgroup::" - - echo "::group::Build" - echo "Running on $(nproc) cores" - make -j$(nproc) tools - echo "::endgroup::" - - - name: Install GCC problem matcher - uses: ammaraskar/gcc-problem-matcher@master - - - name: Build - run: | - mkdir build - cd build - - echo "::group::CMake" - emcmake cmake .. \ - -DHOST_BINARY_DIR=../build-host \ - -DCMAKE_BUILD_TYPE=Release \ - # EOF - echo "::endgroup::" - - echo "::group::Build" - echo "Running on $(nproc) cores" - cmake --build . -j $(nproc) --target openttd - echo "::endgroup::" - - - name: Publish preview - run: | - pip3 install awscli - - aws s3 cp --only-show-errors build/openttd.data s3://${{ secrets.PREVIEW_S3_BUCKET }}/${{ github.event.client_payload.folder }}/ - aws s3 cp --only-show-errors build/openttd.html s3://${{ secrets.PREVIEW_S3_BUCKET }}/${{ github.event.client_payload.folder }}/ - aws s3 cp --only-show-errors build/openttd.js s3://${{ secrets.PREVIEW_S3_BUCKET }}/${{ github.event.client_payload.folder }}/ - aws s3 cp --only-show-errors build/openttd.wasm s3://${{ secrets.PREVIEW_S3_BUCKET }}/${{ github.event.client_payload.folder }}/ - - # Invalidate the cache of the CloudFront distribution - aws cloudfront create-invalidation --distribution-id ${{ secrets.PREVIEW_CF_DISTRIBUTION_ID }} --paths "/${{ github.event.client_payload.folder }}/*" - env: - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - - - name: Update deployment status to success - uses: octokit/request-action@v2.x - with: - route: POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses - mediaType: | - previews: - - ant-man - - flash - owner: ${{ github.event.repository.owner.login }} - repo: ${{ github.event.repository.name }} - deployment_id: ${{ github.event.client_payload.deployment_id }} - state: success - environment_url: https://preview.openttd.org/${{ github.event.client_payload.folder }}/ - env: - GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} - - - if: failure() - name: Update deployment status to failure - uses: octokit/request-action@v2.x - with: - route: POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses - mediaType: | - previews: - - ant-man - - flash - owner: ${{ github.event.repository.owner.login }} - repo: ${{ github.event.repository.name }} - deployment_id: ${{ github.event.client_payload.deployment_id }} - state: failure - env: - GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} diff --git a/.github/workflows/preview_label.yml b/.github/workflows/preview_label.yml deleted file mode 100644 index 503d4e53eb..0000000000 --- a/.github/workflows/preview_label.yml +++ /dev/null @@ -1,66 +0,0 @@ -name: Preview label - -on: - pull_request_target: - types: - - labeled - -env: - TEAM_CORE_DEVELOPER: core-developers - -jobs: - check_preview_label: - name: Check for preview label - if: github.event.action == 'labeled' && github.event.label.name == 'preview' - - runs-on: ubuntu-20.04 - - steps: - - name: Check if label was added by core developer - id: core_developer - continue-on-error: true - uses: octokit/request-action@v2.x - with: - route: GET /orgs/OpenTTD/teams/${{ env.TEAM_CORE_DEVELOPER }}/memberships/${{ github.event.sender.login }} - env: - GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} - - - if: steps.core_developer.outcome == 'failure' - name: Remove preview label if not core developer - uses: octokit/request-action@v2.x - with: - route: DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/preview - owner: ${{ github.event.repository.owner.login }} - repo: ${{ github.event.repository.name }} - issue_number: ${{ github.event.number }} - env: - GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} - - - if: steps.core_developer.outcome == 'success' - name: Create deployment - id: deployment - uses: octokit/request-action@v2.x - with: - route: POST /repos/{owner}/{repo}/deployments - mediaType: | - previews: - - ant-man - - flash - owner: ${{ github.event.repository.owner.login }} - repo: ${{ github.event.repository.name }} - ref: ${{ github.event.pull_request.head.sha }} - task: deploy:preview - auto_merge: false - required_contexts: "[]" - environment: preview-pr-${{ github.event.number }} - description: "Preview for Pull Request #${{ github.event.number }}" - env: - GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} - - - if: steps.core_developer.outcome == 'success' - name: Trigger 'preview build' - uses: peter-evans/repository-dispatch@v2 - with: - token: ${{ secrets.PREVIEW_GITHUB_TOKEN }} - event-type: "Preview build #${{ github.event.number }}" - client-payload: '{"folder": "pr${{ github.event.number }}", "sha": "${{ github.event.pull_request.head.sha }}", "deployment_id": "${{ fromJson(steps.deployment.outputs.data).id }}"}' diff --git a/.github/workflows/preview_push.yml b/.github/workflows/preview_push.yml deleted file mode 100644 index 3868c16f90..0000000000 --- a/.github/workflows/preview_push.yml +++ /dev/null @@ -1,66 +0,0 @@ -name: Preview push - -on: - pull_request_target: - types: - - synchronize - -jobs: - check_new_preview: - name: Check preview needs update - - runs-on: ubuntu-20.04 - - steps: - - name: Check if earlier preview exists - id: earlier_preview - uses: octokit/request-action@v2.x - with: - route: GET /repos/{owner}/{repo}/deployments - owner: ${{ github.event.repository.owner.login }} - repo: ${{ github.event.repository.name }} - environment: preview-pr-${{ github.event.number }} - per_page: 1 - env: - GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} - - - if: toJson(fromJson(steps.earlier_preview.outputs.data)) != '[]' - name: Check for preview label - id: preview_label - uses: octokit/request-action@v2.x - with: - route: GET /repos/{owner}/{repo}/issues/{issue_number}/labels - owner: ${{ github.event.repository.owner.login }} - repo: ${{ github.event.repository.name }} - issue_number: ${{ github.event.number }} - env: - GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} - - - if: toJson(fromJson(steps.earlier_preview.outputs.data)) != '[]' && contains(fromJson(steps.preview_label.outputs.data).*.name, 'preview') - name: Create deployment - id: deployment - uses: octokit/request-action@v2.x - with: - route: POST /repos/{owner}/{repo}/deployments - mediaType: | - previews: - - ant-man - - flash - owner: ${{ github.event.repository.owner.login }} - repo: ${{ github.event.repository.name }} - ref: ${{ github.event.pull_request.head.sha }} - task: deploy:preview - auto_merge: false - required_contexts: "[]" - environment: preview-pr-${{ github.event.number }} - description: "Preview for Pull Request #${{ github.event.number }}" - env: - GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} - - - if: toJson(fromJson(steps.earlier_preview.outputs.data)) != '[]' && contains(fromJson(steps.preview_label.outputs.data).*.name, 'preview') - name: Trigger 'preview build' - uses: peter-evans/repository-dispatch@v2 - with: - token: ${{ secrets.PREVIEW_GITHUB_TOKEN }} - event-type: "Preview build #${{ github.event.number }}" - client-payload: '{"folder": "pr${{ github.event.number }}", "sha": "${{ github.event.pull_request.head.sha }}", "deployment_id": "${{ fromJson(steps.deployment.outputs.data).id }}"}' diff --git a/.github/workflows/windowdesc-ini-key.yml b/.github/workflows/windowdesc-ini-key.yml new file mode 100644 index 0000000000..b69172d5af --- /dev/null +++ b/.github/workflows/windowdesc-ini-key.yml @@ -0,0 +1,24 @@ +name: WindowDesc ini_key + +on: + pull_request: + branches: + - master + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/master' }} + +jobs: + windowdesc-ini-key: + name: WindowDesc ini_key issues + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Check for ini_key issues in WindowDesc entries + shell: bash + run: | + python3 .github/windowdesc-ini-key.py diff --git a/CMakeLists.txt b/CMakeLists.txt index e55458a8bb..3d17be9eb0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -409,6 +409,7 @@ if(EMSCRIPTEN) target_link_libraries(WASM::WASM INTERFACE "-s ALLOW_MEMORY_GROWTH=1") target_link_libraries(WASM::WASM INTERFACE "-s INITIAL_MEMORY=33554432") target_link_libraries(WASM::WASM INTERFACE "-s DISABLE_EXCEPTION_CATCHING=0") + target_link_libraries(WASM::WASM INTERFACE "-s WASM_BIGINT") add_definitions(-s DISABLE_EXCEPTION_CATCHING=0) # Export functions to Javascript. diff --git a/CODINGSTYLE.md b/CODINGSTYLE.md index 2c204446c8..9c6bfe6e67 100644 --- a/CODINGSTYLE.md +++ b/CODINGSTYLE.md @@ -416,9 +416,7 @@ There is a check-script on the git server (also available for clients, see below The first line of a message must match: ``` -
 ( #| (, ( #|))*)?: ([
-
``` Keywords are: * Add, Feature: Adding new stuff. Difference between "Feature" and "Add" is somewhat subjective. "Feature" for user-point-of-view stuff, "Add" for other. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b0ca0ab7a9..2c76179dee 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -14,7 +14,7 @@ In return, they should reciprocate that respect in addressing your issue or asse The [issue tracker](https://github.com/OpenTTD/OpenTTD/issues) is the preferred channel for [bug reports](#bug-reports), but please respect the following restrictions: * Please **do not** use the issue tracker for help playing or using OpenTTD. -Please try [irc](https://wiki.openttd.org/en/Development/IRC%20channel), or the [forums](https://www.tt-forums.net/) +Please try [irc](https://wiki.openttd.org/en/Development/IRC%20channel), [Discord](https://discord.gg/openttd), or the [forums](https://www.tt-forums.net/) * Please **do not** derail or troll issues. Keep the discussion on topic and respect the opinions of others. @@ -23,7 +23,7 @@ Use [GitHub's "reactions" feature](https://github.com/blog/2119-add-reactions-to We reserve the right to delete comments which violate this rule. * Please **do not** open issues or pull requests regarding add-on content in NewGRF, GameScripts, AIs, etc. -These are created by third-parties. Please try [irc](https://wiki.openttd.org/en/Development/IRC%20channel) or the [forums](https://www.tt-forums.net/) to discuss these. +These are created by third-parties. Please try [irc](https://wiki.openttd.org/en/Development/IRC%20channel), [Discord](https://discord.gg/openttd), or the [forums](https://www.tt-forums.net/) to discuss these. * Please use [the web translator](https://translator.openttd.org/) to submit corrections and improvements to translations of the game. @@ -108,7 +108,7 @@ Pull requests should fit with the [goals of the project](./CONTRIBUTING.md#proje Every pull request should have a clear scope, with no unrelated commits. -[Code style](https://wiki.openttd.org/en/Development/Coding%20style) must be complied with for pull requests to be accepted; this also includes [commit message format](https://wiki.openttd.org/en/Development/Coding%20style#commit-message). +[Code style](./CODINGSTYLE.md) must be complied with for pull requests to be accepted; this also includes [commit message format](./CODINGSTYLE.md#commit-message). Adhering to the following process is the best way to get your work included in the project: @@ -136,7 +136,7 @@ contain your feature, change, or fix: git checkout upstream/master -b ``` -4. Commit your changes in logical chunks. Please adhere to these [git commit message guidelines](https://wiki.openttd.org/en/Development/Coding%20style#commit-message) or your code is unlikely to be merged into the main project. +4. Commit your changes in logical chunks. Please adhere to these [git commit message guidelines](./CODINGSTYLE.md#commit-message) or your code is unlikely to be merged into the main project. Use Git's [interactive rebase](https://docs.github.com/en/get-started/using-git/about-git-rebase) feature to tidy up your commits before making them public. 5. Locally rebase the upstream development branch into your topic branch: @@ -172,7 +172,7 @@ The results of the CI tests will show on your pull request. By clicking on Details you can further zoom in; in case of a failure it will show you why it failed. In case of success it will report how awesome you were. -Tip: [commit message format](https://wiki.openttd.org/en/Development/Coding%20style#commit-message) is a common reason for pull requests to fail validation. +Tip: [commit message format](./CODINGSTYLE.md#commit-message) is a common reason for pull requests to fail validation. ### Are there any development docs? diff --git a/os/emscripten/Dockerfile b/os/emscripten/Dockerfile index 4ded7fe57c..60a2c6985f 100644 --- a/os/emscripten/Dockerfile +++ b/os/emscripten/Dockerfile @@ -1,4 +1,4 @@ -FROM emscripten/emsdk:3.1.37 +FROM emscripten/emsdk:3.1.42 COPY emsdk-liblzma.patch / RUN cd /emsdk/upstream/emscripten && patch -p1 < /emsdk-liblzma.patch diff --git a/os/emscripten/cmake/Findnlohmann_json.cmake b/os/emscripten/cmake/Findnlohmann_json.cmake index 6ff84544da..8a1c075ad0 100644 --- a/os/emscripten/cmake/Findnlohmann_json.cmake +++ b/os/emscripten/cmake/Findnlohmann_json.cmake @@ -6,15 +6,16 @@ set(CMAKE_REQUIRED_FLAGS "-sUSE_NLOHMANN_JSON=1") check_cxx_source_compiles(" #include int main() { return 0; }" - NLOHMANN_JSON_FOUND + nlohmann_json_FOUND ) -if (NLOHMANN_JSON_FOUND) +if (nlohmann_json_FOUND) add_library(nlohmann_json INTERFACE IMPORTED) set_target_properties(nlohmann_json PROPERTIES INTERFACE_COMPILE_OPTIONS "-sUSE_NLOHMANN_JSON=1" INTERFACE_LINK_LIBRARIES "-sUSE_NLOHMANN_JSON=1" ) + set(nlohmann_json_LIBRARY "nlohmann_json") else() message(WARNING "You are using an emscripten SDK without nlohmann-json support. Please apply 'emsdk-nlohmann_json.patch' to your local emsdk installation.") endif() diff --git a/os/emscripten/pre.js b/os/emscripten/pre.js index 2fb641017c..31858b1894 100644 --- a/os/emscripten/pre.js +++ b/os/emscripten/pre.js @@ -2,7 +2,7 @@ Module.arguments.push('-mnull', '-snull', '-vsdl:relative_mode'); Module['websocket'] = { url: function(host, port, proto) { /* openttd.org hosts a WebSocket proxy for the content service. */ if (host == "content.openttd.org" && port == 3978 && proto == "tcp") { - return "wss://content.openttd.org/"; + return "wss://bananas-server.openttd.org/"; } /* Everything else just tries to make a default WebSocket connection. @@ -41,7 +41,7 @@ Module.preRun.push(function() { /* Check if the OpenGFX baseset is already downloaded. */ if (!FS.analyzePath(content_download_dir + '/baseset/opengfx-0.6.0.tar').exists) { window.openttd_downloaded_opengfx = true; - FS.createPreloadedFile(content_download_dir + '/baseset', 'opengfx-0.6.0.tar', 'https://installer.cdn.openttd.org/emscripten/opengfx-0.6.0.tar', true, true); + FS.createPreloadedFile(content_download_dir + '/baseset', 'opengfx-0.6.0.tar', 'https://binaries.openttd.org/installer/emscripten/opengfx-0.6.0.tar', true, true); } else { /* Fake dependency increase, so the counter is stable. */ Module.addRunDependency('opengfx'); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5fc7611119..8c645672a6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -453,6 +453,7 @@ add_files( stringfilter_type.h strings.cpp strings_func.h + strings_internal.h strings_type.h subsidy.cpp subsidy_base.h diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index 660066f800..9ebff62fc7 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -607,7 +607,7 @@ static const NWidgetPart _nested_build_airport_widgets[] = { }; static WindowDesc _build_airport_desc( - WDP_AUTO, "build_station_air", 0, 0, + WDP_AUTO, nullptr, 0, 0, WC_BUILD_STATION, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, _nested_build_airport_widgets, lengthof(_nested_build_airport_widgets) diff --git a/src/bootstrap_gui.cpp b/src/bootstrap_gui.cpp index d8f5b8703a..2399f318d4 100644 --- a/src/bootstrap_gui.cpp +++ b/src/bootstrap_gui.cpp @@ -262,6 +262,14 @@ public: void OnConnect(bool success) override { + if (!success) { + usererror("Failed to connect to content server. Please acquire a graphics set for OpenTTD. See section 1.4 of README.md."); + /* _exit_game is used to break out of the outer video driver's MainLoop. */ + _exit_game = true; + this->Close(); + return; + } + /* Once connected, request the metadata. */ _network_content_client.RequestContentList(CONTENT_TYPE_BASE_GRAPHICS); } diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index f3ef4267ec..817a1b7ebe 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -309,14 +309,14 @@ void UpdateLandscapingLimits() } /** - * Set the right DParams to get the name of an owner. + * Set the right DParams for STR_ERROR_OWNED_BY. * @param owner the owner to get the name of. * @param tile optional tile to get the right town. * @pre if tile == 0, then owner can't be OWNER_TOWN. */ -void GetNameOfOwner(Owner owner, TileIndex tile) +void SetDParamsForOwnedBy(Owner owner, TileIndex tile) { - SetDParam(2, owner); + SetDParam(OWNED_BY_OWNER_IN_PARAMETERS_OFFSET, owner); if (owner != OWNER_TOWN) { if (!Company::IsValidID(owner)) { @@ -350,7 +350,7 @@ CommandCost CheckOwnership(Owner owner, TileIndex tile) if (owner == _current_company) return CommandCost(); - GetNameOfOwner(owner, tile); + SetDParamsForOwnedBy(owner, tile); return_cmd_error(STR_ERROR_OWNED_BY); } @@ -370,7 +370,7 @@ CommandCost CheckTileOwnership(TileIndex tile) if (owner == _current_company) return CommandCost(); /* no need to get the name of the owner unless we're the local company (saves some time) */ - if (IsLocalCompany()) GetNameOfOwner(owner, tile); + if (IsLocalCompany()) SetDParamsForOwnedBy(owner, tile); return_cmd_error(STR_ERROR_OWNED_BY); } diff --git a/src/company_func.h b/src/company_func.h index 95fa35d312..a6dd57019d 100644 --- a/src/company_func.h +++ b/src/company_func.h @@ -17,7 +17,8 @@ bool MayCompanyTakeOver(CompanyID cbig, CompanyID small); void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner); -void GetNameOfOwner(Owner owner, TileIndex tile); +static const int OWNED_BY_OWNER_IN_PARAMETERS_OFFSET = 2; ///< The index in the parameters for the owner information. +void SetDParamsForOwnedBy(Owner owner, TileIndex tile); void SetLocalCompany(CompanyID new_company); void ShowBuyCompanyDialog(CompanyID company, bool hostile_takeover); void CompanyAdminUpdate(const Company *company); diff --git a/src/company_gui.cpp b/src/company_gui.cpp index b612c87c59..a253c84bd8 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -1181,7 +1181,7 @@ static const NWidgetPart _nested_select_company_livery_widgets [] = { }; static WindowDesc _select_company_livery_desc( - WDP_AUTO, "company_livery", 0, 0, + WDP_AUTO, nullptr, 0, 0, WC_COMPANY_COLOUR, WC_NONE, 0, _nested_select_company_livery_widgets, lengthof(_nested_select_company_livery_widgets) @@ -1798,7 +1798,7 @@ public: /** Company manager face selection window description */ static WindowDesc _select_company_manager_face_desc( - WDP_AUTO, "company_face", 0, 0, + WDP_AUTO, nullptr, 0, 0, WC_COMPANY_MANAGER_FACE, WC_NONE, WDF_CONSTRUCTION, _nested_select_company_manager_face_widgets, lengthof(_nested_select_company_manager_face_widgets) diff --git a/src/core/math_func.hpp b/src/core/math_func.hpp index a73daa477d..b2ce339e1f 100644 --- a/src/core/math_func.hpp +++ b/src/core/math_func.hpp @@ -170,12 +170,12 @@ constexpr To ClampTo(From value) static_assert(std::numeric_limits::is_integer, "Do not clamp from non-integer values"); static_assert(std::numeric_limits::is_integer, "Do not clamp to non-integer values"); - if (sizeof(To) >= sizeof(From) && std::numeric_limits::is_signed == std::numeric_limits::is_signed) { + if constexpr (sizeof(To) >= sizeof(From) && std::numeric_limits::is_signed == std::numeric_limits::is_signed) { /* Same signedness and To type is larger or equal than From type, no clamping is required. */ return static_cast(value); } - if (sizeof(To) > sizeof(From) && std::numeric_limits::is_signed) { + if constexpr (sizeof(To) > sizeof(From) && std::numeric_limits::is_signed) { /* Signed destination and a larger To type, no clamping is required. */ return static_cast(value); } diff --git a/src/departures_gui.cpp b/src/departures_gui.cpp index 65513c7fa4..419894059a 100644 --- a/src/departures_gui.cpp +++ b/src/departures_gui.cpp @@ -877,9 +877,8 @@ void DeparturesWindow::DrawDeparturesListItems(const Rect &r) const } char buf[256] = ""; - int64 args_array[] = { Waypoint::IsValidID(id) ? STR_WAYPOINT_NAME : STR_STATION_NAME, id, icon_via }; - StringParameters tmp_params(args_array); - char *end = GetStringWithArgs(buf, STR_DEPARTURES_VIA_DESCRIPTOR, &tmp_params, lastof(buf)); + auto tmp_params = MakeParameters(Waypoint::IsValidID(id) ? STR_WAYPOINT_NAME : STR_STATION_NAME, id, icon_via); + char *end = GetStringWithArgs(buf, STR_DEPARTURES_VIA_DESCRIPTOR, tmp_params, lastof(buf)); _temp_special_strings[temp_str].assign(buf, end); }; get_single_via_string(0, via); @@ -888,9 +887,8 @@ void DeparturesWindow::DrawDeparturesListItems(const Rect &r) const get_single_via_string(1, via2); char buf[512] = ""; - int64 args_array[] = { SPECSTR_TEMP_START, SPECSTR_TEMP_START + 1 }; - StringParameters tmp_params(args_array); - char *end = GetStringWithArgs(buf, STR_DEPARTURES_VIA_AND, &tmp_params, lastof(buf)); + auto tmp_params = MakeParameters(SPECSTR_TEMP_START, SPECSTR_TEMP_START + 1); + char *end = GetStringWithArgs(buf, STR_DEPARTURES_VIA_AND, tmp_params, lastof(buf)); _temp_special_strings[0].assign(buf, end); } diff --git a/src/engine_gui.cpp b/src/engine_gui.cpp index 39ddf69a46..b2cc4291cb 100644 --- a/src/engine_gui.cpp +++ b/src/engine_gui.cpp @@ -143,7 +143,7 @@ struct EnginePreviewWindow : Window { }; static WindowDesc _engine_preview_desc( - WDP_CENTER, "engine_preview", 0, 0, + WDP_CENTER, nullptr, 0, 0, WC_ENGINE_PREVIEW, WC_NONE, WDF_CONSTRUCTION, _nested_engine_preview_widgets, lengthof(_nested_engine_preview_widgets) @@ -173,22 +173,20 @@ static StringID GetEngineInfoCapacityString(EngineID engine) CargoArray cap = GetCapacityOfArticulatedParts(engine); if (cap.GetSum() == 0) { /* no cargo at all */ - int64 args_array[] = { CT_INVALID, 0 }; - StringParameters tmp_params(args_array); - GetStringWithArgs(buffer, STR_JUST_CARGO, &tmp_params, lastof(buffer)); + auto tmp_params = MakeParameters(CT_INVALID, 0); + GetStringWithArgs(buffer, STR_JUST_CARGO, tmp_params, lastof(buffer)); } else { char *b = buffer; for (uint i = 0; i < NUM_CARGO; i++) { if (cap[i] == 0) continue; if (b != buffer) { - StringParameters tmp_params(nullptr, 0, nullptr); - b = GetStringWithArgs(b, STR_COMMA_SEPARATOR, &tmp_params, lastof(buffer)); + auto tmp_params = MakeParameters(); + b = GetStringWithArgs(b, STR_COMMA_SEPARATOR, tmp_params, lastof(buffer)); } - int64 args_array[] = { i, cap[i] }; - StringParameters tmp_params(args_array); - b = GetStringWithArgs(b, STR_JUST_CARGO, &tmp_params, lastof(buffer)); + auto tmp_params = MakeParameters(i, cap[i]); + b = GetStringWithArgs(b, STR_JUST_CARGO, tmp_params, lastof(buffer)); } } diff --git a/src/error.h b/src/error.h index 51776081b2..dc1eb46d6d 100644 --- a/src/error.h +++ b/src/error.h @@ -30,8 +30,7 @@ enum WarningLevel { class ErrorMessageData { protected: GUITimer display_timer; ///< Timer before closing the message. - uint64 decode_params[20]; ///< Parameters of the message strings. - const char *strings[20]; ///< Copies of raw strings that were used. + std::vector params; ///< Backup of parameters of the message strings. const GRFFile *textref_stack_grffile; ///< NewGRF that filled the #TextRefStack for the error message. uint textref_stack_size; ///< Number of uint32 values to put on the #TextRefStack for the error message. uint32 textref_stack[16]; ///< Values to put on the #TextRefStack for the error message. @@ -43,7 +42,6 @@ protected: public: ErrorMessageData(const ErrorMessageData &data); - ~ErrorMessageData(); ErrorMessageData(StringID summary_msg, StringID detailed_msg, uint duration = 0, int x = 0, int y = 0, const GRFFile *textref_stack_grffile = nullptr, uint textref_stack_size = 0, const uint32 *textref_stack = nullptr, StringID extra_msg = INVALID_STRING_ID); /* Remove the copy assignment, as the default implementation will not do the right thing. */ diff --git a/src/error_gui.cpp b/src/error_gui.cpp index b32c07b29d..4381a097f1 100644 --- a/src/error_gui.cpp +++ b/src/error_gui.cpp @@ -16,6 +16,7 @@ #include "gfx_func.h" #include "string_func.h" #include "company_base.h" +#include "company_func.h" #include "company_manager_face.h" #include "strings_func.h" #include "zoom_func.h" @@ -41,7 +42,7 @@ static const NWidgetPart _nested_errmsg_widgets[] = { }; static WindowDesc _errmsg_desc( - WDP_MANUAL, "error", 0, 0, + WDP_MANUAL, nullptr, 0, 0, WC_ERRMSG, WC_NONE, 0, _nested_errmsg_widgets, lengthof(_nested_errmsg_widgets) @@ -61,7 +62,7 @@ static const NWidgetPart _nested_errmsg_face_widgets[] = { }; static WindowDesc _errmsg_face_desc( - WDP_MANUAL, "error_face", 0, 0, + WDP_MANUAL, nullptr, 0, 0, WC_ERRMSG, WC_NONE, 0, _nested_errmsg_face_widgets, lengthof(_nested_errmsg_face_widgets) @@ -72,24 +73,10 @@ static WindowDesc _errmsg_face_desc( * @param data The data to copy. */ ErrorMessageData::ErrorMessageData(const ErrorMessageData &data) : - display_timer(data.display_timer), textref_stack_grffile(data.textref_stack_grffile), textref_stack_size(data.textref_stack_size), + display_timer(data.display_timer), params(data.params), textref_stack_grffile(data.textref_stack_grffile), textref_stack_size(data.textref_stack_size), summary_msg(data.summary_msg), detailed_msg(data.detailed_msg), extra_msg(data.extra_msg), position(data.position), face(data.face) { memcpy(this->textref_stack, data.textref_stack, sizeof(this->textref_stack)); - memcpy(this->decode_params, data.decode_params, sizeof(this->decode_params)); - memcpy(this->strings, data.strings, sizeof(this->strings)); - for (size_t i = 0; i < lengthof(this->strings); i++) { - if (this->strings[i] != nullptr) { - this->strings[i] = stredup(this->strings[i]); - this->decode_params[i] = (size_t)this->strings[i]; - } - } -} - -/** Free all the strings. */ -ErrorMessageData::~ErrorMessageData() -{ - for (size_t i = 0; i < lengthof(this->strings); i++) free(this->strings[i]); } /** @@ -115,9 +102,6 @@ ErrorMessageData::ErrorMessageData(StringID summary_msg, StringID detailed_msg, this->position.x = x; this->position.y = y; - memset(this->decode_params, 0, sizeof(this->decode_params)); - memset(this->strings, 0, sizeof(this->strings)); - if (textref_stack_size > 0) MemCpyT(this->textref_stack, textref_stack, textref_stack_size); assert(summary_msg != INVALID_STRING_ID); @@ -130,20 +114,16 @@ ErrorMessageData::ErrorMessageData(StringID summary_msg, StringID detailed_msg, */ void ErrorMessageData::CopyOutDParams() { - /* Reset parameters */ - for (size_t i = 0; i < lengthof(this->strings); i++) free(this->strings[i]); - memset(this->decode_params, 0, sizeof(this->decode_params)); - memset(this->strings, 0, sizeof(this->strings)); + if (this->detailed_msg == STR_ERROR_OWNED_BY) { + /* The parameters are set by SetDParamsForOwnedBy. */ + CompanyID company = (CompanyID)GetDParam(OWNED_BY_OWNER_IN_PARAMETERS_OFFSET); + if (company < MAX_COMPANIES) face = company; + } /* Get parameters using type information */ if (this->textref_stack_size > 0) StartTextRefStackUsage(this->textref_stack_grffile, this->textref_stack_size, this->textref_stack); - CopyOutDParam(this->decode_params, this->strings, this->detailed_msg == INVALID_STRING_ID ? this->summary_msg : this->detailed_msg, lengthof(this->decode_params)); + CopyOutDParam(this->params, 20); if (this->textref_stack_size > 0) StopTextRefStackUsage(); - - if (this->detailed_msg == STR_ERROR_OWNED_BY) { - CompanyID company = (CompanyID)GetDParamX(this->decode_params, 2); - if (company < MAX_COMPANIES) face = company; - } } /** @@ -153,7 +133,8 @@ void ErrorMessageData::CopyOutDParams() */ void ErrorMessageData::SetDParam(uint n, uint64 v) { - this->decode_params[n] = v; + if (n >= this->params.size()) this->params.resize(n + 1); + this->params[n] = v; } /** @@ -163,8 +144,8 @@ void ErrorMessageData::SetDParam(uint n, uint64 v) */ void ErrorMessageData::SetDParamStr(uint n, const char *str) { - free(this->strings[n]); - this->strings[n] = stredup(str); + if (n >= this->params.size()) this->params.resize(n + 1); + this->params[n] = str; } /** @@ -174,7 +155,8 @@ void ErrorMessageData::SetDParamStr(uint n, const char *str) */ void ErrorMessageData::SetDParamStr(uint n, const std::string &str) { - this->SetDParamStr(n, str.c_str()); + if (n >= this->params.size()) this->params.resize(n + 1); + this->params[n] = str; } /** The actual queue with errors. */ @@ -199,7 +181,7 @@ public: { switch (widget) { case WID_EM_MESSAGE: { - CopyInDParam(0, this->decode_params, lengthof(this->decode_params)); + CopyInDParam(this->params); if (this->textref_stack_size > 0) StartTextRefStackUsage(this->textref_stack_grffile, this->textref_stack_size, this->textref_stack); this->height_summary = GetStringHeight(this->summary_msg, size->width); @@ -267,7 +249,7 @@ public: void SetStringParameters(int widget) const override { - if (widget == WID_EM_CAPTION) CopyInDParam(0, this->decode_params, lengthof(this->decode_params)); + if (widget == WID_EM_CAPTION) CopyInDParam(this->params); } void DrawWidget(const Rect &r, int widget) const override @@ -280,7 +262,7 @@ public: } case WID_EM_MESSAGE: - CopyInDParam(0, this->decode_params, lengthof(this->decode_params)); + CopyInDParam(this->params); if (this->textref_stack_size > 0) StartTextRefStackUsage(this->textref_stack_grffile, this->textref_stack_size, this->textref_stack); if (this->detailed_msg == INVALID_STRING_ID) { diff --git a/src/fios.cpp b/src/fios.cpp index ecf269b7c6..32556ae547 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -385,8 +385,7 @@ static void FiosGetFileList(SaveLoadOperation fop, fios_getlist_callback_proc *c fios->type = FIOS_TYPE_DIR; fios->mtime = 0; fios->name = d_name; - std::string dirname = fios->name + PATHSEP; - SetDParamStr(0, dirname); + SetDParamStr(0, fios->name + PATHSEP); fios->title = GetString(STR_SAVELOAD_DIRECTORY); } } diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 5aca3ca6a8..df6d52acdd 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -478,7 +478,7 @@ static void GetTileDesc_Industry(TileIndex tile, TileDesc *td) td->owner[0] = i->owner; td->str = is->name; if (!IsIndustryCompleted(tile)) { - SetDParamX(td->dparam, 0, td->str); + td->dparam[0] = td->str; td->str = STR_LAI_TOWN_INDUSTRY_DESCRIPTION_UNDER_CONSTRUCTION; } @@ -2605,9 +2605,8 @@ void Industry::RecomputeProductionMultipliers() void Industry::FillCachedName() const { char buf[256]; - int64 args_array[] = { this->index }; - StringParameters tmp_params(args_array); - char *end = GetStringWithArgs(buf, STR_INDUSTRY_NAME, &tmp_params, lastof(buf)); + auto tmp_params = MakeParameters(this->index); + char *end = GetStringWithArgs(buf, STR_INDUSTRY_NAME, tmp_params, lastof(buf)); this->cached_name.assign(buf, end); } diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp index c76118fc21..742ee464b2 100644 --- a/src/intro_gui.cpp +++ b/src/intro_gui.cpp @@ -518,7 +518,8 @@ void AskExitGame() STR_QUIT_CAPTION, STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD, nullptr, - AskExitGameCallback + AskExitGameCallback, + true ); } @@ -537,6 +538,7 @@ void AskExitToGameMenu() STR_ABANDON_GAME_CAPTION, (_game_mode != GM_EDITOR) ? STR_ABANDON_GAME_QUERY : STR_ABANDON_SCENARIO_QUERY, nullptr, - AskExitToGameMenuCallback + AskExitToGameMenuCallback, + true ); } diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index c75d9947ab..ef3a22060f 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1145,6 +1145,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Links STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Senter STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Regs + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimum aanvanklike lening: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimum bedrag wat 'n maatskappy kan leen (sonder die inagneming van inflasie) ###setting-zero-is-special @@ -1350,7 +1351,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minimale bedrag STR_CONFIG_SETTING_ERRMSG_DURATION :Tyd wat fout boodskap wys: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Tydsduur vir die vertoning van foutboodskappe. Kritiese foutboodskappe word nie outomaties toegemaak nie. -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sekonde{P 0 "" s} STR_CONFIG_SETTING_HOVER_DELAY :wys sleutel-leidraad: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tydsduur voor nutswenke vertoon words as die muis oor koppelvlakelemente gehou word. Alternatiewelik kan die nutswenke ook aan die regter-muisknoppie verbind word indien die stelling na 0 gestel word. diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 578b91f7a8..39f75aa052 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1139,6 +1139,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :يسار STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :متوسط STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :يمين + ###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :سعر الفائدة على القرض يتحكم أيضًا في التضخم ، إذا تم تمكينه @@ -1279,7 +1280,6 @@ STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :عند التم STR_CONFIG_SETTING_AUTORENEW_MONEY :التجديد التلقائي عند توفر السيولة الدنيا للتجديد: {STRING} -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} ثانية ###setting-zero-is-special diff --git a/src/lang/basque.txt b/src/lang/basque.txt index f4b6c21e16..a24e8bc20f 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1108,6 +1108,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Ezkerra STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Erdia STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Eskuina + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Gehienezko mailegua joko hasieran: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Konpainiek eskatu dezaketen gehienezko mailegua(inflazioa kontua hartu gabe) ###setting-zero-is-special @@ -1306,7 +1307,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Bankuan gutxien STR_CONFIG_SETTING_ERRMSG_DURATION :Akats mezuen iraupena: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Lehio gorrian agertzen diren akats mezuen iraupena automatikoki itxi baino lehen. Kontuan hartu zeinbait akats mezu (Kritikoak) ez direla automatikoki itxiko ezarritako denbora pasa eta gero, eskuz itxi behako dira -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} segundu STR_CONFIG_SETTING_HOVER_DELAY :Erakutsi argibideak: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Sagua, interfazeko elementu batzuen gainean jartzerakoan, argibideak bistaratu aurretik pasa beharko den denbora. Elementu batzuetan saguko eskuineko botoia sakatu beharko da diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index a4a0e2add4..7fdb4eb717 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -1456,6 +1456,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :леваруч STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :ў цэнтры STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :праваруч + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Максымальная сума пазыкі: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максымальная сума пазыкі для кампаніі (без уліку інфляцыі) ###setting-zero-is-special @@ -1662,7 +1663,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Мінімал STR_CONFIG_SETTING_ERRMSG_DURATION :Працягласьць паведамленняў аб памылцы: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Працялегласьць паказваньня паведамленьняў аб памылках у чырвоным вакне. Зазначце, што некаторыя (крытычныя) паведамленьні ня будуць аўтаматычна зьнікаць пасьля гэтага часу, але мусяць быць закрытымі уручную. -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} сэкунд{P а ы аў} STR_CONFIG_SETTING_HOVER_DELAY :Паказваць падказкi: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Затрымка паміж навядзеньнем паказальніка мышы на элемент інтэрфейсу і з'яўленьнем падказкі. Калі гэта значэнне роўна 0, падказкі з'яўляюцца па пстрычцы правай кнопкі мышы. diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 4659fd800c..b385200844 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1060,12 +1060,12 @@ STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Taxas de atualização superiores a 60Hz podem afetar o desempenho. STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunto de gráficos base -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecionar o conjunto de gráficos base para usar +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecione o conjunto de gráficos base a usar (não pode ser alterado no jogo, só a partir do menu principal) STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} arquivo{P "" s} faltando/corrompido{P "" s} STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Informações adicionais sobre o conjunto de gráficos base STR_GAME_OPTIONS_BASE_SFX :{BLACK}Conjunto de sons base -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Selecionar o conjunto base de sons para usar +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Selecione o conjunto de sons base a usar (não pode ser alterado no jogo, só a partir do menu principal) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Informações sobre o conjunto de sons base STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Conjunto de músicas base @@ -1235,6 +1235,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Esquerda STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Centro STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Direita + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Empréstimo Inicial Máximo: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Quantia máxima a ser emprestada para uma companhia (sem levar em conta a inflação) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1450,7 +1451,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Quantia mínima STR_CONFIG_SETTING_ERRMSG_DURATION :Duração da mensagem de erro: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Define quanto tempo as janelas de erro (vermelhas) ficam abertas antes de fecharem automaticamente. Erros críticos devem ser fechados manualmente. -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} segundo{P "" s} STR_CONFIG_SETTING_HOVER_DELAY :Exibir dicas: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Intervalo antes das dicas de ferramentas aparecerem ao deixar o mouse sobre algum botão na interface. Em contrapartida, as dicas são mostradas ao se clicar com o botão direito se esse valor for definido para 0. diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index b8e77b4bd8..bf6a1b23a9 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1128,6 +1128,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :ляво STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :център STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :дясно + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Максимален начален заем: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максимално количество заем за компания (без отчитане на инфлацията) ###setting-zero-is-special @@ -1329,7 +1330,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Минимал STR_CONFIG_SETTING_ERRMSG_DURATION :Продължителност на съобщението за грешка: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Време през което съобщенията за грешки се показват в червен прозорец. Някой (критичните) съобщения за грешки не се затварят автоматично след това време, а трябва да бъдат затворени ръчно. -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} секунд{P 0 а и} STR_CONFIG_SETTING_HOVER_DELAY :Покажи съвети: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Изкачване преди съветът да се покаже, когато мишката е върху елемент от интерфейса. Алтернативно съветите могат да бъдат активирани с десния бутон на мишката ако стойността е 0 diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 47787d1807..4629cc2be0 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -605,7 +605,7 @@ STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Gràfic STR_GRAPH_INCOME_CAPTION :{WHITE}Gràfic d'ingressos STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Unitats de càrrega entregada STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Ratis de rendiment de la companyia (rati màxim: 1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Valors de la companyia +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Gràfic del valor de les companyies STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Tarifes de pagament de càrregues STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}Dies en trànsit @@ -847,7 +847,7 @@ STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLAC STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} ha estat tancada pels creditors i s'han venut tots els seus actius STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Creada una nova companyia de transports STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} comença a treballar prop de {TOWN} -STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} ha estat absorbida per {STRING} +STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} ha estat absorbida per {STRING} per una quantitat de diners desconeguda! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(President) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} ha patrocinat la construcció d'una nova població, anomenada {TOWN} @@ -952,6 +952,7 @@ STR_GAME_OPTIONS_VOLUME_100 :100{NBSP}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Moneda STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Selecció de la unitat monetària +STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) ###length 42 STR_GAME_OPTIONS_CURRENCY_GBP :Lliura esterlina @@ -1059,12 +1060,12 @@ STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}{NBSP}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Ratis de refresc major a 60{NBSP}Hz poden causar problemes de rendiment. STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunt de gràfics base -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecciona el conjunt de gràfics base a utilitzar +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecciona el conjunt de gràfics base a utilitzar (no es pot canviar des de dins de la partida; s'ha de canviar des del menú principal). STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} arxiu{P "" s} absent{P "" s} o corromput{P "" s}. STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Informació addicional sobre el conjunt de gràfics base STR_GAME_OPTIONS_BASE_SFX :{BLACK}Conjunt de sons base -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Selecciona un conjunt de sons base a utilitzar +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Selecciona un conjunt de sons base a utilitzar (no es pot canviar des de dins de la partida; s'ha de canviar des del menú principal). STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Informació addicional sobre el joc de sons base STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Conjunt de peces de música base @@ -1234,6 +1235,8 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Esquerra STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Centre STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Dreta +STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}segon{P 0 "" s} + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Préstec inicial màxim: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Quantitat màxima del préstec que pot demanar una companyia (sense tenir en compte la inflació) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1449,7 +1452,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Estableix la qu STR_CONFIG_SETTING_ERRMSG_DURATION :Duració del missatge d'error: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duració dels missatges d'error mostrats en finestres vermelles. Alguns missatges d'error (crítics) no es tanquen automàticament i s'han de tancar manualment -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} segon{P 0 "" s} STR_CONFIG_SETTING_HOVER_DELAY :Mostra descripcions emergents: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Retard abans que les descripcions emergents siguin mostrades quan el ratolí sigui sobre algun element de la interfície. Alternativament, les descripcions emergents poden ser vinculades al botó dret del ratolí si aquest paràmetre s'estableix en 0. @@ -1560,7 +1562,7 @@ STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :De gris a verme STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :Escala de grisos STR_CONFIG_SETTING_SCROLLMODE :Desplaçament del mapa: {STRING} -STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Comportament quan es desplaça el mapa. +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Comportament quan es desplaça el mapa. Les opcions "amb la posició del ratolí fixada" no funcionen en tots els sistemes, com ara versions web, pantalles tàctils, Linux amb Wayland i altres. ###length 4 STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Mou la vista amb el botó dret del ratolí amb la posició del ratolí fixada STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Mou el mapa amb el botó dret del ratolí amb la posició del ratolí fixada @@ -1946,9 +1948,9 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Cap STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador de mida inicial de ciutats: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :La grandària mitjana de les ciutats en relació als pobles a l'inici de la partida. -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Actualitza el graf de distribució cada {STRING}{NBSP}segon{P 0:2 "" s} +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Actualitza el graf de distribució cada {STRING} STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Temps entre actualitzacions de les arestes del graf de distribució. Cada vegada es calcularan els plans d'un dels components del graf. Això vol dir que un valor X d'aquesta opció no significa que es recalculi el graf sencer cada X segons. Només ho farà algun component. Com més curt sigui, farà falta més temps de CPU per a calcular-lo. Com més llarg sigui, més es trigarà a què la distribució de càrrega s'apliqui a les rutes noves. -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Triga {STRING}{NBSP}segon{P 0:2 "" s} per a recalcular el graf de distribució +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Deixa passar {STRING} per a recalcular el graf de distribució STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Temps emprat per a cada actualització del component d'una aresta del graf. Quan comença el recàlcul, s'inicia un fil que pot executar-se durant aquests segons. Com més curt sigui, més probable és que el fil no acabi a temps. Llavors, la partida para fins que finalitzi, provocant una interrupció del desenvolupament de la partida. Com més llarg sigui, més es trigarà a actualitzar el graf de distribució quan es facin canvis de rutes. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Mode de distribució per passatgers: {STRING} @@ -2082,6 +2084,7 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}L'assign # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}S'ha produït un error en la configuració de vídeo... STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... no s'ha trobat cap GPU compatible. Es desactiva l'acceleració per programari. +STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... el controlador de la GPU ha fallat durant la partida. Es desactiva l'acceleració per maquinari. # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -2920,7 +2923,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}Graella STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Aleatòria # Fund new industry window -STR_FUND_INDUSTRY_CAPTION :{WHITE}Finança una nova indústria +STR_FUND_INDUSTRY_CAPTION :{WHITE}Finançament d'indústries STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Escolleix el tipus d'indústria adequada d'aquesta llista STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Crea indústries aleatòries STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Omple el mapa amb indústries situades aleatòriament @@ -2936,14 +2939,14 @@ STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Treu tot STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Esteu segur que voleu treure totes les indústries? # Industry cargoes window -STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Cadena industrial per la indústria {STRING} -STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Cadena industrial per la càrrega {STRING} +STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Cadena industrial ‒ {STRING} +STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Cadena de càrrega ‒ {STRING} STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Indústries productores STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Indústries acceptades STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Cases STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Clica a la indústria per veure els seus proveïdors i clients STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Clica a la càrrega per veure els proveïdors i clients -STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Mostra cadena +STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Cadena d'indústries STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Mostra les càrregues proveïdes i les indústries acceptades STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Enllaç al mapa petit STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Selecciona les indústries mostrades també al mapa petit @@ -3538,8 +3541,8 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{Y STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}Finança la reconstrucció de la xarxa local de carrers. Dificulta notablement el trànsit durant 6 mesos.{}Causa molèsties considerables al trànsit de vehicles de carretera durant 6 mesos.{}{POP_COLOUR}Cost: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Construeix una estàtua en honor a la teva companyia.{}Proporciona una millora permanent dels ratis d'estació de la població.{}{POP_COLOUR}Cost: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Finança la construcció de nous edificis comercials a la població.{}Proporciona una millora temporal del creixement d'aquesta població.{}{POP_COLOUR}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Compra per 1 any els drets exclusius de transport en la població. L'autoritat local només permetrà utilitzar les instal·lacions de la teva companyia de transports als passatgers i les mercaderies.{}L'autoritat local no permetrà que els passatgers i càrregues locals usin les estacions dels oponents.{}{POP_COLOUR}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Suborna les autoritats locals per incrementar el teu rati, a risc de greus penalitzacions si et pesquen.{}{POP_COLOUR}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Compra per 1 any els drets exclusius de transport en la població.{}L'autoritat local no permetrà que els passatgers i càrregues locals facin servir les estacions dels oponents. Si un competidor suborna amb èxit les autoritats, el contracte quedarà cancel·lat.{}{POP_COLOUR}Cost:{NBSP}{CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Suborna les autoritats locals per a incrementar el vostre rati i cancel·lar els drets exclusius de transport del competidor, amb el risc de sancions greus si us pesquen.{}{POP_COLOUR}Cost:{NBSP}{CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Objectius @@ -3761,6 +3764,8 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detalls STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Veure els detalls de la infraestructura de la companyia. STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Dóna diners STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Doneu diners a aquesta companyia. +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}Absorció hostil +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Absorbeix aquesta companyia de manera hostil STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Modifica la cara STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Modifica la cara del president de la companyia. @@ -3776,6 +3781,7 @@ STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nom del preside STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Escriviu la quantitat de diners que voleu donar STR_BUY_COMPANY_MESSAGE :{WHITE}Estem venent la nostra companyia de transports.{}{}Vols comprar {COMPANY} per {CURRENCY_LONG}? +STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}En una absorció hostil de {COMPANY} en comprareu totes les propietats, en pagareu tots els préstecs i beneficis per valors de dos anys.{}{}El total estimat és de {CURRENCY_LONG}.{}{}Voleu continuar amb l'absorció hostil? # Company infrastructure window STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infraestructura de {COMPANY} @@ -3846,7 +3852,8 @@ STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Avions disponib STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Administra la llista STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Envia instruccions a tots els vehicles de la llista STR_VEHICLE_LIST_REPLACE_VEHICLES :Substitueix vehicles -STR_VEHICLE_LIST_SEND_FOR_SERVICING :Envia a fer revisió +STR_VEHICLE_LIST_SEND_FOR_SERVICING :Envia a fer una revisió +STR_VEHICLE_LIST_CREATE_GROUP :Crea un grup STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Benefici enguany: {CURRENCY_LONG} (darrer any: {CURRENCY_LONG}) STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING} @@ -4569,6 +4576,8 @@ STR_TIMETABLE_EXPECTED :{BLACK}Esperat STR_TIMETABLE_SCHEDULED :{BLACK}Planificat STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Canvia entre esperat i planificat +STR_TIMETABLE_ARRIVAL :A: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE :S: {COLOUR}{DATE_TINY} # Date window (for timetable) @@ -4605,8 +4614,8 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Un dels STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}La finestra de depuració dels scripts d'IA/partida només està disponible al servidor. # AI configuration window -STR_AI_CONFIG_CAPTION_AI :{WHITE}Configuració de la IA -STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Configuració de l'script de partida +STR_AI_CONFIG_CAPTION_AI :{WHITE}Opcions de la IA +STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Opcions de l'script de partida STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Aquest és l'script que s'usarà a la propera partida. STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Aquesta llista conté les IA que es carregaran a la propera partida. STR_AI_CONFIG_HUMAN_PLAYER :Jugador humà @@ -5623,6 +5632,8 @@ STR_JUST_DATE_SHORT :{DATE_SHORT} STR_JUST_DATE_LONG :{DATE_LONG} STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} +STR_JUST_STRING1 :{STRING} +STR_JUST_STRING2 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/chuvash.txt b/src/lang/chuvash.txt index af60124b6b..e906b357d7 100644 --- a/src/lang/chuvash.txt +++ b/src/lang/chuvash.txt @@ -584,6 +584,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Сулахай STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Варринче STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Сылтӑмра + ###setting-zero-is-special diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 8097fb7f56..a17caa3e7c 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1248,6 +1248,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Lijevo STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Sredina STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Desno + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Najveći početni zajam: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Najveći iznos koji tvrtka može pozajmiti (ne uzimajući inflaciju u obzir) ###setting-zero-is-special @@ -1454,7 +1455,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Najmanji iznos STR_CONFIG_SETTING_ERRMSG_DURATION :Trajanje poruke s greškom: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Trajanje prikaza poruke s greškom u crvenom prozoru. Uzmite u obzir da se neke (kritične) poruke s greškom ne zatvaraju automatski nakon isteka ovog vremena, nego ih je potrebno zatvoriti ručno -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sekundi STR_CONFIG_SETTING_HOVER_DELAY :Prikaži pojašnjenja alata: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Odgoda prije prikaza objašnjenja alata kada se miš postavi iznad nekog elementa sučelja. Alternativno, objašnjena alata se mogu vezati uz desnu tipku na mišu kada je ova vrijednost postavljena na 0. diff --git a/src/lang/czech.txt b/src/lang/czech.txt index b1bb768ccb..11f10f646d 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1293,6 +1293,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :vlevo STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :uprostřed STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :vpravo + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximální půjčka: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Jak moc si může společnost půjčit (bez ohledu na inflaci) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1508,7 +1509,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minimální č STR_CONFIG_SETTING_ERRMSG_DURATION :Doba zobrazení chybové zprávy: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Doba zobrazení chybových zpráv v červeném okně. Některé zprávy o (kritických) chybách však nejsou zavírány automaticky a musí být zavřeny ručně. -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sekund STR_CONFIG_SETTING_HOVER_DELAY :Zobrazení kontextové nápovědy: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Prodleva před zobrazením nápovědy, pokud kurzor leží nad nějakým ovládacím prvkem. Nápověda může být rovněž vyvolána pravým tlačítkem myši. diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 525fed90c3..9c4ddd7291 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1059,12 +1059,12 @@ STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Opdateringshastigheder over 60Hz kan påvirke ydeevnen. STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basis-grafiksæt -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Vælg det basis-grafiksæt der skal bruges +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Vælg det grundlæggende grafiksæt, der skal bruges STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} forsvund{P en ne}/ødelagt{P "" e} fil{P "" er} STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Yderligere information om basis-grafiksættet STR_GAME_OPTIONS_BASE_SFX :{BLACK}Basis-lydsæt -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Vælg basis-lydsættet der skal bruges +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Vælg det grundlæggende lyd sæt, der skal bruges STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Mere information om basis-lydsættet STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Basis-musiksæt @@ -1234,6 +1234,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Venstre STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Center STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Højre + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimum startlån: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimumbeløb et selskab kan låne (uden at tage inflation i betragtning) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1449,7 +1450,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minimal mængde STR_CONFIG_SETTING_ERRMSG_DURATION :Varighed af fejlmeddelelse: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Varighed for visning fejlmeddelelser i en rød vindue. Bemærk, at nogle (kritisk) fejlmeddelelser ikke lukkes automatisk efter dette tidspunkt, men skal lukkes manuelt -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sekund{P 0 "" er} STR_CONFIG_SETTING_HOVER_DELAY :Vis værktøjstip: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Forsinkelse inden tooltips vises, når musen føres over nogle den grænseflade . Alternativt tooltips er bundet til den højre museknap, når denne værdi er sat til 0. diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 610e421fa3..67a22fef53 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -973,7 +973,7 @@ STR_GAME_OPTIONS_CURRENCY_ISK :IJslandse Kroon STR_GAME_OPTIONS_CURRENCY_ITL :Italiaanse Lire STR_GAME_OPTIONS_CURRENCY_NLG :Nederlandse Gulden STR_GAME_OPTIONS_CURRENCY_NOK :Noorse Kroon -STR_GAME_OPTIONS_CURRENCY_PLN :Poolse Zloty +STR_GAME_OPTIONS_CURRENCY_PLN :Poolse Złoty STR_GAME_OPTIONS_CURRENCY_RON :Roemeense Leu STR_GAME_OPTIONS_CURRENCY_RUR :Russische Roebel STR_GAME_OPTIONS_CURRENCY_SIT :Sloveense Tolar @@ -1059,12 +1059,12 @@ STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Verversingssnelheden boven 60 Hz kunnen de prestaties beïnvloeden. STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basisset voor graphics -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecteer de te gebruiken basisset voor grafische elementen +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecteer de te gebruiken basisset voor grafische elementen (kan tijdens het spel niet worden gewijzigd, alleen in het hoofdmenu) STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} ontbrekend{P "" e}/beschadigd{P "" e} bestand{P "" en} STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Aanvullende informatie over de basisset voor graphics STR_GAME_OPTIONS_BASE_SFX :{BLACK}Basisset voor geluidseffecten -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Selecteer de te gebruiken basisset voor geluidseffecten +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Selecteer de te gebruiken basisset voor geluidseffecten (kan tijdens het spel niet worden gewijzigd, alleen in het hoofdmenu) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Aanvullende informatie over de basisset voor geluidseffecten STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Basisset voor muziek @@ -1234,6 +1234,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Links STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Midden STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Rechts + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximale beginlening: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximaal bedrag dat een bedrijf kan lenen (zonder rekening te houden met de inflatie) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1449,7 +1450,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minimumbedrag d STR_CONFIG_SETTING_ERRMSG_DURATION :Duur van foutbericht: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duur voor het weergeven van foutberichten in een rood venster. Merk op dat sommige (kritische) foutmeldingen niet automatisch worden gesloten na deze tijd, deze moeten handmatig worden gesloten -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} seconde{P 0 "" n} STR_CONFIG_SETTING_HOVER_DELAY :Knopinfo weergeven: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Vertraging voordat knopinfo worden weergegeven wanneer je de muis boven een besturingselement houdt. Wanneer de waarde 0 is, wordt knopinfo aan de rechtermuisknop gebonden. diff --git a/src/lang/english.txt b/src/lang/english.txt index 56c5928149..b6d6b651c0 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -431,7 +431,7 @@ STR_FILE_MENU_EXIT :Exit ###length 4 STR_MAP_MENU_MAP_OF_WORLD :Map of world STR_MAP_MENU_EXTRA_VIEWPORT :Extra viewport -STR_MAP_MENU_LINGRAPH_LEGEND :Cargo Flow Legend +STR_MAP_MENU_LINGRAPH_LEGEND :Cargo flow legend STR_MAP_MENU_SIGN_LIST :Sign list # Town menu @@ -604,7 +604,7 @@ STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Operatin STR_GRAPH_INCOME_CAPTION :{WHITE}Income Graph STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Units of cargo delivered STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Company performance ratings (maximum rating=1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Company values +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Company Value Graph STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Cargo Payment Rates STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}Days in transit @@ -636,7 +636,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :President STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Tycoon # Performance detail window -STR_PERFORMANCE_DETAIL :{WHITE}Detailed performance rating +STR_PERFORMANCE_DETAIL :{WHITE}Detailed Performance Rating STR_PERFORMANCE_DETAIL_KEY :{BLACK}Detail STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT}) STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA}) @@ -1234,6 +1234,8 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Left STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Centre STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Right +STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}second{P 0 "" s} + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximum initial loan: {STRING2} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1449,7 +1451,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minimal amount STR_CONFIG_SETTING_ERRMSG_DURATION :Duration of error message: {STRING2} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duration for displaying error messages in a red window. Note that some (critical) error messages are not closed automatically after this time, but must be closed manually -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} second{P 0 "" s} STR_CONFIG_SETTING_HOVER_DELAY :Show tooltips: {STRING2} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Delay before tooltips are displayed when hovering the mouse over some interface element. Alternatively tooltips are bound to the right mouse button when this value is set to 0. @@ -1946,9 +1947,9 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :None STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Initial city size multiplier: {STRING2} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Average size of cities relative to normal towns at start of the game -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Update distribution graph every {STRING2}{NBSP}second{P 0:2 "" s} +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Update distribution graph every {STRING2} STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Time between subsequent recalculations of the link graph. Each recalculation calculates the plans for one component of the graph. That means that a value X for this setting does not mean the whole graph will be updated every X seconds. Only some component will. The shorter you set it the more CPU time will be necessary to calculate it. The longer you set it the longer it will take until the cargo distribution starts on new routes. -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Take {STRING2}{NBSP}second{P 0:2 "" s} for recalculation of distribution graph +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Take {STRING2} for recalculation of distribution graph STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Time taken for each recalculation of a link graph component. When a recalculation is started, a thread is spawned which is allowed to run for this number of seconds. The shorter you set this the more likely it is that the thread is not finished when it's supposed to. Then the game stops until it is ("lag"). The longer you set it the longer it takes for the distribution to be updated when routes change. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distribution mode for passengers: {STRING2} @@ -2921,7 +2922,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}3x3 grid STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Random # Fund new industry window -STR_FUND_INDUSTRY_CAPTION :{WHITE}Fund new industry +STR_FUND_INDUSTRY_CAPTION :{WHITE}Industry Funding STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Choose the appropriate industry from this list STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Create random industries STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Cover the map with randomly placed industries @@ -2937,14 +2938,14 @@ STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Remove a STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Are you sure you want to remove all industries? # Industry cargoes window -STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Industry chain for {STRING} industry -STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Industry chain for {STRING} cargo +STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Industry Chain - {STRING} +STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Cargo Chain - {STRING} STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Producing industries STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Accepting industries STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Houses STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Click at the industry to see its suppliers and customers STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Click at the cargo to see its suppliers and customers -STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Display chain +STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Industry Chain STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Display cargo supplying and accepting industries STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Link to smallmap STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Select the displayed industries at the smallmap as well @@ -3081,7 +3082,7 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{RAW_STRING} The OpenTTD team # Framerate display window -STR_FRAMERATE_CAPTION :{WHITE}Frame rate +STR_FRAMERATE_CAPTION :{WHITE}Frame Rate STR_FRAMERATE_CAPTION_SMALL :{STRING2}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulation rate: {STRING2} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Number of game ticks simulated per second. @@ -3500,7 +3501,7 @@ STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Town gro STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Town is {RED}not{BLACK} growing STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Noise limit in town: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Centre the main view on town location. Ctrl+Click opens a new viewport on town location -STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Local authority +STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Local Authority STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Show information on local authority STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Change town name @@ -3539,8 +3540,8 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{Y STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}Fund the reconstruction of the urban road network.{}Causes considerable disruption to road traffic for up to 6 months.{}{POP_COLOUR}Cost: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Build a statue in honour of your company.{}Provides a permanent boost to station rating in this town.{}{POP_COLOUR}Cost: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Fund the construction of new buildings in the town.{}Provides a temporary boost to town growth in this town.{}{POP_COLOUR}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Buy 1 year's exclusive transport rights in town.{}Town authority will not allow passengers and cargo to use your competitors' stations.{}{POP_COLOUR}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Bribe the local authority to increase your rating, at the risk of a severe penalty if caught.{}{POP_COLOUR}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Buy 1 year's exclusive transport rights in town.{}Town authority will not allow passengers and cargo to use your competitors' stations. A successful bribe from a competitor will cancel this contract.{}{POP_COLOUR}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Bribe the local authority to increase your rating and abort a competitor's exclusive transport rights, at the risk of a severe penalty if caught.{}{POP_COLOUR}Cost: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Goals @@ -3850,16 +3851,16 @@ STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Available Aircr STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Manage list STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Send instructions to all vehicles in this list STR_VEHICLE_LIST_REPLACE_VEHICLES :Replace vehicles -STR_VEHICLE_LIST_SEND_FOR_SERVICING :Send for Servicing +STR_VEHICLE_LIST_SEND_FOR_SERVICING :Send for servicing STR_VEHICLE_LIST_CREATE_GROUP :Create group STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Profit this year: {CURRENCY_LONG} (last year: {CURRENCY_LONG}) STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING1} {STRING1} -STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Send to Depot -STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Send to Depot -STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Send to Depot -STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Send to Hangar +STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Send to depot +STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Send to depot +STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Send to depot +STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Send to hangar STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Click to stop all the vehicles in the list STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Click to start all the vehicles in the list @@ -4612,8 +4613,8 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}One of t STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI/Game Script Debug window is only available for the server # AI configuration window -STR_AI_CONFIG_CAPTION_AI :{WHITE}AI Configuration -STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Game Script Configuration +STR_AI_CONFIG_CAPTION_AI :{WHITE}AI Settings +STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Game Script Settings STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}The Game Script that will be loaded in the next game STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}The AIs that will be loaded in the next game STR_AI_CONFIG_HUMAN_PLAYER :Human player diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 4f367cf9d2..4744f08263 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -431,7 +431,7 @@ STR_FILE_MENU_EXIT :Exit ###length 4 STR_MAP_MENU_MAP_OF_WORLD :Map of world STR_MAP_MENU_EXTRA_VIEWPORT :Extra viewport -STR_MAP_MENU_LINGRAPH_LEGEND :Cargo Flow Legend +STR_MAP_MENU_LINGRAPH_LEGEND :Cargo flow legend STR_MAP_MENU_SIGN_LIST :Sign list # Town menu @@ -604,7 +604,7 @@ STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Operatin STR_GRAPH_INCOME_CAPTION :{WHITE}Income Graph STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Units of cargo delivered STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Company performance ratings (maximum rating=1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Company values +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Company Value Graph STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Cargo Payment Rates STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}Days in transit @@ -636,7 +636,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :President STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Tycoon # Performance detail window -STR_PERFORMANCE_DETAIL :{WHITE}Detailed performance rating +STR_PERFORMANCE_DETAIL :{WHITE}Detailed Performance Rating STR_PERFORMANCE_DETAIL_KEY :{BLACK}Detail STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT}) STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA}) @@ -1234,6 +1234,8 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Left STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Centre STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Right +STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}second{P 0 "" s} + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximum initial loan: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1449,7 +1451,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minimum amount STR_CONFIG_SETTING_ERRMSG_DURATION :Duration of error message: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duration for displaying error messages in a red window. Note that some (critical) error messages are not closed automatically after this time, but must be closed manually -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} second{P 0 "" s} STR_CONFIG_SETTING_HOVER_DELAY :Show tooltips: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Delay before tooltips are displayed when hovering the mouse over some interface element. Alternatively tooltips can be bound to the right mouse button @@ -1946,9 +1947,9 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :None STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Initial city size multiplier: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Average size of cities relative to normal towns at start of the game -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Update distribution graph every {STRING}{NBSP}second{P 0:2 "" s} +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Update distribution graph every {STRING} STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Time between subsequent recalculations of the link graph. Each recalculation calculates the plans for one component of the graph. That means that a value X for this setting does not mean the whole graph will be updated every X seconds. Only some component will. The shorter you set it the more CPU time will be necessary to calculate it. The longer you set it the longer it will take until the cargo distribution starts on new routes. -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Take {STRING}{NBSP}second{P 0:2 "" s} for recalculation of distribution graph +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Take {STRING} for recalculation of distribution graph STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Time taken for each recalculation of a link graph component. When a recalculation is started, a thread is spawned which is allowed to run for this number of seconds. The shorter you set this the more likely it is that the thread is not finished when it's supposed to. Then the game stops until it is ("lag"). The longer you set it the longer it takes for the distribution to be updated when routes change. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distribution mode for passengers: {STRING} @@ -2921,7 +2922,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}3x3 grid STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Random # Fund new industry window -STR_FUND_INDUSTRY_CAPTION :{WHITE}Fund new industry +STR_FUND_INDUSTRY_CAPTION :{WHITE}Industry Funding STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Choose the appropriate industry from this list STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Create random industries STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Cover the map with randomly placed industries @@ -2937,14 +2938,14 @@ STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Remove a STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Are you sure you want to remove all industries? # Industry cargoes window -STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Industry chain for {STRING} industry -STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Industry chain for {STRING} cargo +STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Industry Chain - {STRING} +STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Cargo Chain - {STRING} STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Producing industries STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Accepting industries STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Houses STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Click at the industry to see its suppliers and customers STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Click at the cargo to see its suppliers and customers -STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Display chain +STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Industry Chain STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Display cargo supplying and accepting industries STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Link to smallmap STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Select the displayed industries at the smallmap as well @@ -3081,7 +3082,7 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} The OpenTTD team # Framerate display window -STR_FRAMERATE_CAPTION :{WHITE}Frame rate +STR_FRAMERATE_CAPTION :{WHITE}Frame Rate STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulation rate: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Number of game ticks simulated per second. @@ -3500,7 +3501,7 @@ STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Town gro STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Town is {RED}not{BLACK} growing STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Noise limit in town: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Centre the main view on town location. Ctrl+Click opens a new viewport on town location -STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Local authority +STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Local Authority STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Show information on local authority STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Change town name @@ -3539,8 +3540,8 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{Y STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}Fund the reconstruction of the urban road network.{}Causes considerable disruption to road traffic for up to 6 months.{}{POP_COLOUR}Cost: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Build a statue in honour of your company.{}Provides a permanent boost to station rating in this town.{}{POP_COLOUR}Cost: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Fund the construction of new buildings in the town.{}Provides a temporary boost to town growth in this town.{}{POP_COLOUR}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Buy 1 year's exclusive transport rights in town.{}Town authority will not allow passengers and cargo to use your competitors' stations.{}{POP_COLOUR}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Bribe the local authority to increase your rating, at the risk of a severe penalty if caught.{}{POP_COLOUR}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Buy 1 year's exclusive transport rights in town.{}Town authority will not allow passengers and cargo to use your competitors' stations. A successful bribe from a competitor will cancel this contract.{}{POP_COLOUR}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Bribe the local authority to increase your rating and abort a competitor's exclusive transport rights, at the risk of a severe penalty if caught.{}{POP_COLOUR}Cost: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Goals @@ -3850,16 +3851,16 @@ STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Available Aircr STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Manage list STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Send instructions to all vehicles in this list STR_VEHICLE_LIST_REPLACE_VEHICLES :Replace vehicles -STR_VEHICLE_LIST_SEND_FOR_SERVICING :Send for Servicing +STR_VEHICLE_LIST_SEND_FOR_SERVICING :Send for servicing STR_VEHICLE_LIST_CREATE_GROUP :Create group STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Profit this year: {CURRENCY_LONG} (last year: {CURRENCY_LONG}) STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING} -STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Send to Depot -STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Send to Depot -STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Send to Depot -STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Send to Hangar +STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Send to depot +STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Send to depot +STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Send to depot +STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Send to hangar STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Click to stop all the vehicles in the list STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Click to start all the vehicles in the list @@ -4612,8 +4613,8 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}One of t STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI / GameScript Debug window is only available for the server # AI configuration window -STR_AI_CONFIG_CAPTION_AI :{WHITE}AI Configuration -STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Game Script Configuration +STR_AI_CONFIG_CAPTION_AI :{WHITE}AI Settings +STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Game Script Settings STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}The Game Script that will be loaded in the next game STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}The AIs that will be loaded in the next game STR_AI_CONFIG_HUMAN_PLAYER :Human player diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index ff09eff6ad..436ae9e6b5 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -431,7 +431,7 @@ STR_FILE_MENU_EXIT :Quit ###length 4 STR_MAP_MENU_MAP_OF_WORLD :Map of world STR_MAP_MENU_EXTRA_VIEWPORT :Extra viewport -STR_MAP_MENU_LINGRAPH_LEGEND :Cargo Flow Legend +STR_MAP_MENU_LINGRAPH_LEGEND :Cargo flow legend STR_MAP_MENU_SIGN_LIST :Sign list # Town menu @@ -604,7 +604,7 @@ STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Operatin STR_GRAPH_INCOME_CAPTION :{WHITE}Income Graph STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Units of cargo delivered STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Company performance ratings (maximum rating=1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Company values +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Company Value Graph STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Cargo Payment Rates STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}Days in transit @@ -636,7 +636,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :President STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Tycoon # Performance detail window -STR_PERFORMANCE_DETAIL :{WHITE}Detailed performance rating +STR_PERFORMANCE_DETAIL :{WHITE}Detailed Performance Rating STR_PERFORMANCE_DETAIL_KEY :{BLACK}Detail STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT}) STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA}) @@ -846,7 +846,7 @@ STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLAC STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} has been closed down by creditors and all assets sold off! STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}New transport company launched! STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} starts construction near {TOWN}! -STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} has been taken over by {STRING}! +STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} has been taken over by {STRING} for an undisclosed amount! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(President) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} sponsored construction of new town {TOWN}! @@ -951,6 +951,7 @@ STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Currency units STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Currency units selection +STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) ###length 42 STR_GAME_OPTIONS_CURRENCY_GBP :British Pound @@ -972,7 +973,7 @@ STR_GAME_OPTIONS_CURRENCY_ISK :Icelandic Krona STR_GAME_OPTIONS_CURRENCY_ITL :Italian Lira STR_GAME_OPTIONS_CURRENCY_NLG :Dutch Guilder STR_GAME_OPTIONS_CURRENCY_NOK :Norwegian Krone -STR_GAME_OPTIONS_CURRENCY_PLN :Polish Złoty +STR_GAME_OPTIONS_CURRENCY_PLN :Polish Zloty STR_GAME_OPTIONS_CURRENCY_RON :Romanian Leu STR_GAME_OPTIONS_CURRENCY_RUR :Russian Ruble STR_GAME_OPTIONS_CURRENCY_SIT :Slovenian Tolar @@ -1058,12 +1059,12 @@ STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Refresh rates higher than 60Hz might impact performance. STR_GAME_OPTIONS_BASE_GRF :{BLACK}Base graphics set -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Select the base graphics set to use +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Select the base graphics set to use (cannot be changed in-game, only from the main menu) STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} missing/corrupted file{P "" s} STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Additional information about the base graphics set STR_GAME_OPTIONS_BASE_SFX :{BLACK}Base sounds set -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Select the base sounds set to use +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Select the base sounds set to use (cannot be changed in-game, only from the main menu) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Additional information about the base sounds set STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Base music set @@ -1233,6 +1234,8 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Left STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Center STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Right +STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}second{P 0 "" s} + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximum initial loan: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximum amount a company can loan (without taking inflation into account) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1448,7 +1451,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minimal amount STR_CONFIG_SETTING_ERRMSG_DURATION :Duration of error message: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duration for displaying error messages in a red window. Note that some (critical) error messages are not closed automatically after this time, but must be closed manually -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} second{P 0 "" s} STR_CONFIG_SETTING_HOVER_DELAY :Show tooltips: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Delay before tooltips are displayed when hovering the mouse over some interface element. Alternatively tooltips are bound to the right mouse button when this value is set to 0. @@ -1559,7 +1561,7 @@ STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :Gray to red STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :Grayscale STR_CONFIG_SETTING_SCROLLMODE :Viewport scroll behavior: {STRING} -STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Behavior when scrolling the map +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Behavior when scrolling the map. The "mouse position locked" options don't work on all systems, like web-based versions, touchscreens, Linux with Wayland, and others ###length 4 STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Move viewport with RMB, mouse position locked STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Move map with RMB, mouse position locked @@ -1945,9 +1947,9 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :None STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Initial city size multiplier: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Average size of cities relative to normal towns at start of the game -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Update distribution graph every {STRING}{NBSP}second{P 0:2 "" s} +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Update distribution graph every {STRING} STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Time between subsequent recalculations of the link graph. Each recalculation calculates the plans for one component of the graph. That means that a value X for this setting does not mean the whole graph will be updated every X seconds. Only some component will. The shorter you set it the more CPU time will be necessary to calculate it. The longer you set it the longer it will take until the cargo distribution starts on new routes. -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Take {STRING}{NBSP}second{P 0:2 "" s} for recalculation of distribution graph +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Take {STRING} for recalculation of distribution graph STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Time taken for each recalculation of a link graph component. When a recalculation is started, a thread is spawned which is allowed to run for this number of seconds. The shorter you set this the more likely it is that the thread is not finished when it's supposed to. Then the game stops until it is ("lag"). The longer you set it the longer it takes for the distribution to be updated when routes change. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distribution mode for passengers: {STRING} @@ -2081,6 +2083,7 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Allocati # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}Error with video settings... STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... no compatible GPU found. Hardware acceleration disabled +STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... GPU driver crashed the game. Hardware acceleration disabled # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -2919,7 +2922,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}3x3 grid STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Random # Fund new industry window -STR_FUND_INDUSTRY_CAPTION :{WHITE}Fund new industry +STR_FUND_INDUSTRY_CAPTION :{WHITE}Industry Funding STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Choose the appropriate industry from this list STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Create random industries STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Cover the map with randomly placed industries @@ -2935,14 +2938,14 @@ STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Remove a STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Are you sure you want to remove all industries? # Industry cargoes window -STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Industry chain for {STRING} industry -STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Industry chain for {STRING} cargo +STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Industry Chain - {STRING} +STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Cargo Chain - {STRING} STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Producing industries STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Accepting industries STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Houses STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Click at the industry to see its suppliers and customers STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Click at the cargo to see its suppliers and customers -STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Display chain +STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Industry Chain STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Display cargo supplying and accepting industries STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Link to minimap STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Select the displayed industries at the minimap as well @@ -3079,7 +3082,7 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} The OpenTTD team # Framerate display window -STR_FRAMERATE_CAPTION :{WHITE}Frame rate +STR_FRAMERATE_CAPTION :{WHITE}Frame Rate STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulation rate: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Number of game ticks simulated per second. @@ -3498,7 +3501,7 @@ STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Town gro STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Town is {RED}not{BLACK} growing STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Noise limit in town: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Center the main view on town location. Ctrl+Click opens a new viewport on town location -STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Local authority +STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Local Authority STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Show information on local authority STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Change town name @@ -3537,8 +3540,8 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{Y STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}Fund the reconstruction of the urban road network.{}Causes considerable disruption to road traffic for up to 6 months.{}{POP_COLOUR}Cost: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Build a statue in honor of your company.{}Provides a permanent boost to station rating in this town.{}{POP_COLOUR}Cost: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Fund the construction of new buildings in the town.{}Provides a temporary boost to town growth in this town.{}{POP_COLOUR}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Buy 1 year's exclusive transport rights in town.{}Town authority will not allow passengers and cargo to use your competitors' stations.{}{POP_COLOUR}Cost: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Bribe the local authority to increase your rating, at the risk of a severe penalty if caught.{}{POP_COLOUR}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Buy 1 year's exclusive transport rights in town.{}Town authority will not allow passengers and cargo to use your competitors' stations. A successful bribe from a competitor will cancel this contract.{}{POP_COLOUR}Cost: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Bribe the local authority to increase your rating and abort a competitor's exclusive transport rights, at the risk of a severe penalty if caught.{}{POP_COLOUR}Cost: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Goals @@ -3760,6 +3763,8 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Details STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}View detailed infrastructure counts STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Give money STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Give money to this company +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}Hostile takeover +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Do a hostile takeover of this company STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}New Face STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Select new face for president @@ -3775,6 +3780,7 @@ STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :President's Nam STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Enter the amount of money you want to give STR_BUY_COMPANY_MESSAGE :{WHITE}We are looking for a transport company to take-over our company.{}{}Do you want to purchase {COMPANY} for {CURRENCY_LONG}? +STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}In a hostile takeover of {COMPANY} you will purchase all assets, pay off all loans, and pay two years worth of profits.{}{}The total is estimated to be {CURRENCY_LONG}.{}{}Do you want to continue this hostile takeover? # Company infrastructure window STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastructure of {COMPANY} @@ -3845,15 +3851,16 @@ STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Available Aircr STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Manage list STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Send instructions to all vehicles in this list STR_VEHICLE_LIST_REPLACE_VEHICLES :Replace vehicles -STR_VEHICLE_LIST_SEND_FOR_SERVICING :Send for Maintenance +STR_VEHICLE_LIST_SEND_FOR_SERVICING :Send for maintenance +STR_VEHICLE_LIST_CREATE_GROUP :Create group STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Profit this year: {CURRENCY_LONG} (last year: {CURRENCY_LONG}) STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING} -STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Send to Depot -STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Send to Depot -STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Send to Depot -STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Send to Hangar +STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Send to depot +STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Send to depot +STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Send to depot +STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Send to hangar STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Click to stop all vehicles in the list STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Click to start all the vehicles in the list @@ -4568,6 +4575,8 @@ STR_TIMETABLE_EXPECTED :{BLACK}Expected STR_TIMETABLE_SCHEDULED :{BLACK}Scheduled STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Switch between expected and scheduled +STR_TIMETABLE_ARRIVAL :A: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE :D: {COLOUR}{DATE_TINY} # Date window (for timetable) @@ -4604,8 +4613,8 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}One of t STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI/Game Script Debug window is only available for the server # AI configuration window -STR_AI_CONFIG_CAPTION_AI :{WHITE}AI Configuration -STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Game Script Configuration +STR_AI_CONFIG_CAPTION_AI :{WHITE}AI Settings +STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Game Script Settings STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}The Game Script that will be loaded in the next game STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}The AIs that will be loaded in the next game STR_AI_CONFIG_HUMAN_PLAYER :Human player @@ -5622,6 +5631,8 @@ STR_JUST_DATE_SHORT :{DATE_SHORT} STR_JUST_DATE_LONG :{DATE_LONG} STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} +STR_JUST_STRING1 :{STRING} +STR_JUST_STRING2 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 4515f0626e..2e0a434086 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1304,6 +1304,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Maldekstre STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Centre STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Dekstre + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimuma komenca prunto: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimuma monsumo kiun kompanio povas prunti (sen enkalkulado de inflacio) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1512,8 +1513,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY :Minimuma mono p STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minimuma monkvanto kiu devas resti en la banko antaŭ eventuala aŭtomata renovigo de veturiloj STR_CONFIG_SETTING_ERRMSG_DURATION :Daŭro de erarmesaĝo: {STRING} -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sekundo{P 0 "" j} -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE.n :{COMMA} sekundo{P 0 "" j}n STR_CONFIG_SETTING_HOVER_DELAY :Montri ŝpruchelpilojn: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Ŝvebu dum {COMMA} milisekundo{P 0 "" j} diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index f834ee760a..06c665c948 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1262,6 +1262,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Vasakul STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Keskel STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Paremal + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Stardilaenu ülempiirang: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Suurim summa, mida ettevõte saab laenata (arvestamata inflatsiooni) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1477,7 +1478,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Väikseim panga STR_CONFIG_SETTING_ERRMSG_DURATION :Veateadete kestvus: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Punases aknas olevate veateadete näitamise kestvus. On ka mõned (tähtsad) veateated, mis ise ei sulgu, vaid mis tuleb käsitsi sulgeda -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sekund{P 0 "" it} STR_CONFIG_SETTING_HOVER_DELAY :Vihjeid näidatakse pärast: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Viivitus, kui kaua peab hiirega liidese osale osutama, enne kui selle kohta vihjet näidatakse. On ka võimalik vihjeid parema hiireklõpsuga näidata diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index c00b29d8b7..b67cfccc58 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1087,6 +1087,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Vinstra STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Miðja STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Høgra + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Hægst loyvda byrjunar lán: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Mest loyvda upphæddin ein fyritøka kann lána (uttan at taka virðisminkan til eftirtektar) ###setting-zero-is-special @@ -1285,7 +1286,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minsta nøgd av STR_CONFIG_SETTING_ERRMSG_DURATION :Tíðarlongd av villuboðum: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Tíðarbili ið villu boð verða víst í einum reyðum vindeyga. Legg til merkis at nøkur (umráðandi) villu boð ikki verða sjálvvirkandi afturlatin eftir hetta tíðarbil, men mugu latast aftur manuelt -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sekund{P 0 "" ir} STR_CONFIG_SETTING_HOVER_DELAY :Vís góð ráð: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Seinking áðrenn góð ráð vera víst tá músin sveimar yvur ein lut á takførisflatuni. Í øðrum lagi kunnu góðu ráðini bindast at høgra músa knøtti diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 4a96a3412b..dc509e7a97 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1234,6 +1234,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :vasemmalla STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :keskellä STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :oikealla + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Suurin mahdollinen laina alussa: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Suurin mahdollinen yhtiön ottama laina (ottamatta huomioon inflaatiota) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1449,7 +1450,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Vähimmäisraha STR_CONFIG_SETTING_ERRMSG_DURATION :Virheilmoitusten näyttöaika: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Aika virheilmoitusten näyttämiseen punaisessa ikkunassa. Huomaa, että jotkut (kriittiset) virheilmoitukset eivät sulkeudu automaattisesti tämän ajan jälkeen, vaan ne on suljettava käsin -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sekunti{P 0 "" a} STR_CONFIG_SETTING_HOVER_DELAY :Näytä työkaluvihjeet: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Viive ennen työkaluvihjeen näyttämistä, kun hiiren kursoria pidetään käyttöliittymäelementin päällä. Vaihtoehtoisesti työkaluvihjeen saa myös näkymiin painamalla hiiren oikeata painiketta, kun arvoksi on määritetty 0. diff --git a/src/lang/french.txt b/src/lang/french.txt index 818e417de6..7fafe02715 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -605,7 +605,7 @@ STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Graphiqu STR_GRAPH_INCOME_CAPTION :{WHITE}Graphique du revenu STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Cargaison livrée STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Historique de performance (performance max. = 1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Valeur de la compagnie +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Graphique de la valeur de la compagnie STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Valeur des marchandises STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}Jours de transit @@ -1060,12 +1060,12 @@ STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE} Les taux de rafraîchissement supérieurs à 60Hz peuvent avoir un impact sur les performances. STR_GAME_OPTIONS_BASE_GRF :{BLACK}Graphiques de base -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Sélectionner les graphiques de base à utiliser +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Sélectionner les graphiques de base à utiliser (ne peuvent pas être modifiés en jeu, que depuis le menu principal) STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} fichier{P "" s} manquant{P "" s}/corrompu{P "" s} STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Informations additionnelles sur les graphiques de base STR_GAME_OPTIONS_BASE_SFX :{BLACK}Sons de base -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Sélectionner les sons de base à utiliser +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Sélectionner les sons de base à utiliser (ne peuvent pas être modifiés en jeu, que depuis le menu principal) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Informations additionnelles sur les sons de base STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Musique de base @@ -1235,6 +1235,8 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :À gauche STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Centrée STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :À droite +STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}seconde{P 0 "" s} + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Emprunt initial maximum{NBSP}: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Montant maximum qu'une compagnie peut emprunter (sans tenir compte de l'inflation) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1450,7 +1452,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Quantité minim STR_CONFIG_SETTING_ERRMSG_DURATION :Temps d'affichage des messages d'erreur{NBSP}: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Durée pour l'affichage des messages d'erreur dans une fenêtre rouge. Noter que certains messages d'erreur (critique) ne sont pas fermés automatiquement après ce délai, mais doivent être fermés manuellement -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} seconde{P 0 "" s} STR_CONFIG_SETTING_HOVER_DELAY :Affichage des infobulles{NBSP}: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Délai avant que les infobulles soient affichées lorsque la souris survole certains éléments de l'interface. Les infobulles peuvent également être affectées au bouton droit de la souris en réglant cette valeur à 0. @@ -1947,9 +1948,9 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Aucune STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicateur initial pour la taille des métropoles{NBSP}: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Taille moyenne des métropoles par rapport aux villes normales au début de la partie -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Mise à jour le graphe de distribution toutes les {STRING}{NBSP}seconde{P 0:2 "" s} +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Mise à jour le graphe de distribution toutes les {STRING} STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Intervalle entre les recalculs successifs du graphe de liaison. Chaque recalcul planifie un composant du graphe. Cela signifie qu'une valeur X pour ce paramètre ne signifie pas que l'ensemble du graphe sera mis à jour toutes les X secondes. Seul un composant le sera. Plus vous définissez cet intervalle court, plus le temps de processeur nécessaire pour le calcul sera important. Plus vous définissez cet intervalle long, plus il faudra de temps pour que la distribution de marchandises commence sur de nouveaux itinéraires. -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Prend {STRING}{NBSP}seconde{P 0:2 "" s} pour le recalcul du graphe de distribution +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Prend {STRING} pour le recalcul du graphe de distribution STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Temps pris pour chaque recalcul d'un composant du graphe de liaison. Lorsqu'un recalcul est lancé, un fil d'exécution est créé et autorisé à fonctionner pendant ce nombre de secondes. Plus vous définissez cette durée courte, plus il est probable que le fil ne soit pas terminé lorsqu'il est censé l'être. Ensuite, le jeu s'arrête jusqu'à ce qu'il le soit ("lag"). Plus vous définissez cette durée longue, plus il faut de temps pour que la distribution soit mise à jour lorsque les itinéraires changent. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Type de distribution pour les passagers{NBSP}: {STRING} @@ -2387,7 +2388,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Créer u STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}C'est vous STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}C'est l'hôte du jeu STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} client{P "" s} - {NUM}/{NUM} companie{P "" s} -STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP :{BLACK}Actuellement, le nombre de clients connectés, le nombre d'entreprises et le nombre d'entreprises maximum autorisées par l'administrateur du serveur est atteint. +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP :{BLACK}Actuellement, le nombre de clients connectés, le nombre de compagnies et le nombre de compagnies maximum autorisées par l'administrateur du serveur est atteint. # Matches ConnectionType ###length 5 @@ -2922,7 +2923,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}Grille 3 STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Aléatoire # Fund new industry window -STR_FUND_INDUSTRY_CAPTION :{WHITE}Financer une nouvelle industrie +STR_FUND_INDUSTRY_CAPTION :{WHITE}Financement d'industrie STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Choisir l'industrie appropriée dans cette liste STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Créer des industries au hasard STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Couvrir la carte d'industries placées au hasard @@ -2938,14 +2939,14 @@ STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Enlever STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Êtes-vous sûr de vouloir enlever toutes les industries{NBSP}? # Industry cargoes window -STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Chaîne industrielle pour l'industrie «{NBSP}{STRING}{NBSP}» -STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Chaîne industrielle pour le type de marchandise «{NBSP}{STRING}{NBSP}» +STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Chaîne industrielle - «{NBSP}{STRING}{NBSP}» +STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Chaîne de chargement - «{NBSP}{STRING}{NBSP}» STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Industries fournisseuses STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Industries clientes STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Maisons STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Cliquer sur l'industrie pour voir ses fournisseurs et ses clients STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Cliquer sur le type de marchandise pour voir ses fournisseurs et ses clients -STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Afficher la chaîne +STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Chaîne d'industries STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Afficher la chaîne des industries fournisseuses et clientes de ce type de marchandise STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Lier à la mini-carte STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Afficher les industries correspondantes sur la mini-carte @@ -3540,8 +3541,8 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{Y STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}Financer la reconstruction du réseau routier.{}Provoque une perturbation considérable du trafic pendant 6 mois au maximum.{}{POP_COLOUR}Coût : {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Construire une statue en l'honneur de votre compagnie.{}Augmente en permanence le classement de vos stations dans cette ville.{}{POP_COLOUR}Coût{NBSP}:{CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Financer la construction de nouveaux immeubles commerciaux.{}Stimule temporairement la croissance dans cette ville.{}{POP_COLOUR}Coût{NBSP}:{CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Achetez les droits de transport exclusifs d'un an pour la ville.{} La municipalité n'autorisera pas les passagers et les marchandises à utiliser les gares de vos concurrents.{}{POP_COLOUR}Coût{NBSP}: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Corrompre la municipalité pour améliorer votre réputation. Risque de pénalisation si le pot-de-vin est dévoilé.{}{POP_COLOUR}Coût{NBSP}: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Achetez les droits de transport exclusifs d'un an pour la ville.{} La municipalité n'autorisera pas les passagers et les marchandises à utiliser les gares de vos concurrents. Un pot-de-vin réussi d'un concurrent annulera ce contrat.{}{POP_COLOUR}Coût{NBSP}: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Corrompre la municipalité pour améliorer votre réputation et annuler les droits de transports exclusifs d'un concurrent, au risque de pénalisation si le pot-de-vin est dévoilé.{}{POP_COLOUR}Coût{NBSP}: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}Objectifs de {COMPANY} @@ -4613,8 +4614,8 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}L'un des STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}La fenêtre de débogage de scripts n'est disponible que pour le serveur # AI configuration window -STR_AI_CONFIG_CAPTION_AI :{WHITE}Configuration d'IA -STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Configuration du script de jeu +STR_AI_CONFIG_CAPTION_AI :{WHITE}Paramètres d'IA +STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Paramètres du scripts de jeu STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Le script de jeu qui sera chargé dans la prochaine partie STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Les IAs qui seront chargées dans la prochaine partie STR_AI_CONFIG_HUMAN_PLAYER :Joueur humain diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index f1164007b3..d23f10e6e7 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -1145,6 +1145,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Lofts STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Midden STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Rjochts + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimale startersliening: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimale bedrach hokker troch in bedriuw lient wurde kin (sûnder acht te slaan op de ynflaasje) ###setting-zero-is-special @@ -1347,7 +1348,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Bedrach wat oer STR_CONFIG_SETTING_ERRMSG_DURATION :Doer flatermeldings: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Doer fan reade flatermeldings. Guon krityske flater wurde net automatysk ôfsluten -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} seconde{P "" s} STR_CONFIG_SETTING_HOVER_DELAY :Arktips sjen litte: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tiid wernei arktips sjen litten wurde at jo de mûs de boppe hâlde. Arktips kinne ek oan de rjochtermûsknop bûn wurde asto dizze wearde op 0 set diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index bd159a301c..94a01c9e0e 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -1329,6 +1329,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Ris an taobh ch STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Sa mheadhan STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Ris an taobh deas + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Iasad tòiseachaidh as motha: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :An t-airgead as motha as urrainn dha chompanaidh fhaighinn mar iasad (a' fàgail an atmhorachd dhan darna taobh) ###setting-zero-is-special @@ -1532,7 +1533,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Feumaidh an uir STR_CONFIG_SETTING_ERRMSG_DURATION :An ùine a mhaireas brath mearachd: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :An ùine a mhaireas brath mearachd ann an uinneag dearg. Thoir an aire nach dùin cuid dhe na brathan as cudromaiche leotha fhèin is gum feum thu an toirt air falbh a làimh. -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} {P 0 diog dhiog diogan diog} STR_CONFIG_SETTING_HOVER_DELAY :Seall gliocasan-sgrìn: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Dèan dàil mus tèid gliocasan-sgrìn a shealltainn nuair a chumas mi an luchag os cionn eileamaid na h-eadar-aghaidh. Mar roghainn eile, thèid gliocasan-sgrìn nasgadh ri putan deas na luchaige ma chuireas tu an luach air 0. diff --git a/src/lang/galician.txt b/src/lang/galician.txt index d2fd658d31..f515b145f2 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1234,6 +1234,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Esquerda STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Centro STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Dereita + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Crédito máximo inicial: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Cantidade máxima de cartos que unha compañía pode pedir (sen ter en conta a inflación) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1449,7 +1450,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Cantidade míni STR_CONFIG_SETTING_ERRMSG_DURATION :Duración das mesaxes de erro: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duración das mesaxes de erro que aparecen nunha ventá vermella. Ten en conta que algunhas mesaxes de errores (críticos) non se pechan automáticamente despois deste tempo, senón que deben ser pechadas manualmente -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} segundo{P 0 "" s} STR_CONFIG_SETTING_HOVER_DELAY :Amosar consellos sobre as ferramentas: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Retardo antes de que os consellos aparezan ao despraza-lo rato sobre algúns elementos da interface. Alternativamente, os consellos poden ser asignados ao botón dereito do rato diff --git a/src/lang/german.txt b/src/lang/german.txt index 3d665b7679..ea9ce61fbb 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -346,8 +346,8 @@ STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Auftrags STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Spiel anhalten STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Zeitraffer (Zeit vergeht schnellstmöglich) STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Optionen und Einstellungen -STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Spiel speichern, Spiel laden, Spiel abbrechen, (OpenTTD) Beenden -STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Weltkarte, zusätzliche Fenster oder Schilderliste anzeigen +STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Spiel speichern, laden oder abbrechen, Programm beenden +STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Weltkarte, zusätzliche Fenster, Warenfluss oder Schilderliste anzeigen STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Städteverzeichnis anzeigen STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Subventionen anzeigen STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Liste der firmeneigenen Stationen anzeigen @@ -355,9 +355,9 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Firmenfi STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Allgemeine Firmeninformationen anzeigen STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Zeigt die Chronik an STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Zeigt die von einem Spielskript festgelegten Ziele an -STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Diagramme anzeigen +STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Firmendiagramme und Frachtraten anzeigen STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Firmentabelle oder Punktestand anzeigen -STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Liste aller Industrien oder Errichtung und Finanzierung einer neuen Industrie +STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Industrien betrachten oder den Bau einer neuen Industrie finanzieren STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Zuglisten der Firmen anzeigen. Strg+Klick wechselt zwischen einfacher und erweiterter Liste STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Fahrzeuglisten der Firmen anzeigen. Strg+Klick wechselt zwischen einfacher und erweiterter Liste STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Schiffslisten der Firmen anzeigen. Strg+Klick wechselt zwischen einfacher und erweiterter Liste @@ -371,8 +371,8 @@ STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Häfen u STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Flughäfen bauen STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Landschaftsbau: Land heben/senken, Bäume pflanzen etc. STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Sound-/Musikfenster anzeigen -STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Zeige letzte Mitteilung/Nachricht, Nachrichtenoptionen anzeigen -STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Gebietsinformation, Konsole, KI- und Skript-Debug, Screenshots, über OpenTTD +STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Zeige letzte Mitteilung/Nachricht, Nachrichtenhistorie oder lösche alle Nachrichten +STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Gebietsinformation, Screenshot, über OpenTTD und Entwicklerwerkzeuge STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Werkzeugleisten wechseln # Extra tooltips for the scenario editor toolbar @@ -847,7 +847,7 @@ STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLAC STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} ist von den Gläubigern geschlossen worden, alles Vermögen wurde veräussert! STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Neue Transportfirma gegründet! STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} startet bei {TOWN}! -STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} wurde von {STRING} übernommen! +STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} wurde von {STRING} für eine geheimgehaltene Summe übernommen! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Manager) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} finanziert die Gründung der Stadt {TOWN}! @@ -935,7 +935,9 @@ STR_GAME_OPTIONS_CAPTION :{WHITE}Spielein STR_GAME_OPTIONS_TAB_GENERAL :Allgemein STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Wähle allgemeine Einstellungen STR_GAME_OPTIONS_TAB_GRAPHICS :Grafik +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Grafikeinstellungen wählen STR_GAME_OPTIONS_TAB_SOUND :Sound +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Sound- und Musikeinstellungen auswählen STR_GAME_OPTIONS_VOLUME :Lautstärke STR_GAME_OPTIONS_SFX_VOLUME :Sound-Effekte @@ -945,10 +947,12 @@ STR_GAME_OPTIONS_VOLUME_0 :0% STR_GAME_OPTIONS_VOLUME_25 :25% STR_GAME_OPTIONS_VOLUME_50 :50% STR_GAME_OPTIONS_VOLUME_75 :75% +STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Währung STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Währung auswählen +STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) ###length 42 STR_GAME_OPTIONS_CURRENCY_GBP :Britische Pfund @@ -1040,7 +1044,11 @@ STR_GAME_OPTIONS_GUI_SCALE_3X :3× STR_GAME_OPTIONS_GUI_SCALE_4X :4× STR_GAME_OPTIONS_GUI_SCALE_5X :5x +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Automatische Umfrage +STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Bei automatischer Umfrage teilnehmen +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_TOOLTIP :{BLACK}Falls aktiviert, wird OpenTTD eine Umfrage beim Verlassen des Spiels übertragen STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}Über Umfrage und Privatsphäre +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK_TOOLTIP :{BLACK}Dies öffnet einen Browser mit mehr Informationen über die automatische Umfrage STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :{BLACK}Vorschau des Umfrageergebnisses STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}Zeige die Umfrageergebnisse des gerade laufenden Spiels an @@ -1052,12 +1060,12 @@ STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Wiederholraten größer als 60Hz beeinträchtigen möglicherweise die Performance. STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basisgrafiken -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Zu benutzendes Set an Basisgrafiken auswählen +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Zu benutzendes Set an Basisgrafiken auswählen (kann nicht im Spiel geändert werden, nur im Hauptmenü) STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} fehlende/fehlerhafte Datei{P "" en} STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Zusatzinformationen zu den Basisgrafiken STR_GAME_OPTIONS_BASE_SFX :{BLACK}Basissounds -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Basissounds auswählen +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Basissounds auswählen (kann nicht im Spiel geändert werden, nur im Hauptmenü) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Zusatzinformationen zu den Basissounds STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Basismusikset @@ -1227,6 +1235,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Links STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Mitte STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Rechts + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Kreditlimit bei Spielbeginn: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximaler Kredit für eine Firma (ohne Berücksichtigung der Inflation) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1442,7 +1451,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Geldbetrag, der STR_CONFIG_SETTING_ERRMSG_DURATION :Anzeigedauer für Fehlermeldungen: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Anzeigedauer für Fehlermeldungen in einem roten Fenster. Bedenken Sie, dass einige (kritische) Fehlermeldungen nicht automatisch nach dieser Dauer geschlossen werden, sondern manuell geschlossen werden müssen -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} Sekunde{P 0 "" n} STR_CONFIG_SETTING_HOVER_DELAY :Zeige kurzen Hilfetext: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Einstellen, wie lange man zum Aufruf von Hilfetexten zur Erklärung der Funktionen im Spiel mit dem Mauszeiger über der gewünschten Stelle stehenbleiben muss. Alternativ werden die Hilfetexte bei einem Rechtsklick sofort angezeigt, wenn dieser Wert auf 0 gesetzt wird. @@ -1553,7 +1561,7 @@ STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :Grau zu rot STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :Graustufe STR_CONFIG_SETTING_SCROLLMODE :Verhalten beim Verschieben der Zusatzansicht: {STRING} -STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Verhalten beim Verschieben der Karte +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Verhalten beim Verschieben der Karte. Die „Mausposition gesperrt“-Optionen funktionieren nicht auf allen Systemen, wie den webbasierten Versionen, Touchscreens, Linux mit Wayland und anderen ###length 4 STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Bewege Zusatzansicht mit rechter Maustaste, Mausposition fixiert STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Bewege die Karte mit rechter Maustaste, Mausposition fixiert @@ -1734,7 +1742,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Wie viel Arbeit STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Wartungsintervalle in Prozent: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Lege fest, ob Fahrzeuge zur Wartung geschickt werden basierend auf der verstrichenen Zeit seit der letzten Wartung oder dem Absinken der Zuverlässigkeit auf einen gewissen Prozentsatz der maximalen Zuverlässigkeit des Fahrzeugtyps +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Falls aktiviert, werden Fahrzeuge versuchen, sich in die Wartung zu begeben, sobald ihre Zuverlässigkeit unter einer bestimmten Prozentzahl unterhalb der maximalen Zuverlässigkeit liegt.{}{}Zum Beispiel: Wenn die maximale Zuverlässigkeit eines Fahrzeugs 90% beträgt und das Wartungsintervall bei 20% liegt, wird das Fahrzeug versuchen, sich in die Wartung zu begeben, sobald es eine Zuverlässigkeit von 72% erreicht. STR_CONFIG_SETTING_SERVINT_TRAINS :Standard-Wartungsintervall für Züge: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Setze das Standardwartungsintervall für Schienenfahrzeuge. Dieses Wartungsintervall wird von allen Zügen eingehalten, denen kein individuelles Wartungsintervall zugewiesen worden ist @@ -1939,6 +1947,10 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Keine STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Größe von Großstädten bei Spielbeginn: {STRING}× STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Durchschnittliche Größe von Großstädten relativ zu normalen Städten bei Spielbeginn +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Verteilungsgraphen jede {STRING}{NBSP}Sekund{P 0:2 "" en} aktualisieren +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Zeit zwischen anfolgenden Neuberechnungen der Warenverteilung. Jede Neuberechnung berechnet die Pläne für eine Komponente des Graphen. Das bedeutet, dass ein Wert X für diese Einstellung nicht bedeutet, dass der gesamte Graph alle X Sekunden aktualisiert wird. Nur ein Teil wird es. Je kürzer du die Zeit festlegst, desto mehr CPU-Zeit wird nötig sein, um ihn zu berechnen. Je länger du die Zeit festlegst, desto länger wird es dauern, bis die Frachtverteilung auf neuen Strecken beginnt. +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :{STRING}{NBSP}Sekund{P 0:2 "" en} für Neuberechnung des Verteilungsgraphen nehmen +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Zeit für jede Neuberechnung einer Warenverteilungskomponente. Wenn eine Neuberechnung gestartet wird, wird ein Thread gestartet, der für diese Anzahl von Sekunden laufen darf. Je kürzer du ihn festlegst, desto wahrscheinlicher ist es, dass der Thread nicht beendet ist, wenn er aber sein sollte. Dann wird das Spiel beendet, sobald dies der Fall ist („Lag“). Je länger du es festlegst, desto länger dauert es, bis die Verteilung aktualisiert wird, wenn sich Routen ändern. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Verteilungsschema für Passagiere: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :„Symmetrisch“ heißt, dass etwa die selbe Zahl von Passagieren von einer Station A zu einer anderen Station B reisen, wie von B nach A. „Asymmetrisch“ heißt, dass Passagiere in beliebigen Zahlen hin- und her fahren können. „Manuell“ heißt, dass keine automatische Verteilung der Passagiere stattfindet. @@ -1964,7 +1976,7 @@ STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Wenn hier wenig STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Auslastung der kürzeren Verbindungen bevor längere Verbindungen gewählt werden: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Häufig gibt es mehrere Verbindungen um von einer Station zu einer anderen zu kommen. Zuerst wird der Algorithmus die kürzesten Verbindungen auslasten, dann die längeren usw. Wenn alle Verbindungen ausgelastet sind, verteilt er die verbliebene Nachfrage gleichmäßig. Diese Einstellung besagt, ab welcher Auslastung eine Verbinudng als „voll“ gilt und der Algorithmus in der ersten Runde die nächst längere wählt. Da die Kapazität der Verbindungen geschätzt wird, ist es sinnvoll, hier weniger als 100% anzugeben, um etwas „Luft“ für Fehlschätzungen zu lassen. -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Geschwindigkeitseinheit: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Geschwindigkeitseinheiten (Land): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Geschwindigkeitseinheit (nautisch): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Immer wenn die Geschwindigkeit angezeigt wird, sie in den gewählten Einheiten anzeigen ###length 5 @@ -1972,6 +1984,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrisch (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Spieleinheiten (Spielfeldkacheln/Tag) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :Knoten STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Leistungseinheit von Fahrzeugen: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Immer wenn die Leistung eins Fahrzeugs angezeigt wird, sie in den gewählten Einheiten anzeigen @@ -2070,6 +2083,7 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Reservie # Video initalization errors STR_VIDEO_DRIVER_ERROR :{WHITE}Fehler mit den Grafikeinstellungen ... STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... keine kompatible GPU gefunden. Hardwarebeschleunigung deaktiviert +STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}… GPU-Treiber brachte das Spiel zum Absturz. Hardwarebeschleunigung deaktiviert # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -2400,6 +2414,9 @@ STR_NETWORK_ASK_RELAY_NO :{BLACK}Nein STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Ja, diesmal STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Ja, nicht erneut fragen +STR_NETWORK_ASK_SURVEY_CAPTION :Bei automatischer Umfrage teilnehmen? +STR_NETWORK_ASK_SURVEY_TEXT :Möchtest du an einer automatischen Umfrage teilnehmen?{}OpenTTD wird beim Verlassen des Spiels eine Umfrage übermitteln.{}Du kannst dies jederzeit unter „Spieloptionen“ ändern. +STR_NETWORK_ASK_SURVEY_PREVIEW :Vorschau des Umfrageergebnisses STR_NETWORK_ASK_SURVEY_LINK :Über Umfrage und Privatsphäre STR_NETWORK_ASK_SURVEY_NO :Nein STR_NETWORK_ASK_SURVEY_YES :Ja @@ -2693,7 +2710,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Stations STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Eine Stationsart zum Anzeigen auswählen STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Die Stationsart auswählen, die gebaut werden soll -STR_STATION_CLASS_DFLT :Standardstation +STR_STATION_CLASS_DFLT :Standard STR_STATION_CLASS_DFLT_STATION :Standart-Haltestelle STR_STATION_CLASS_DFLT_ROADSTOP :Standard-Staßenhaltestelle STR_STATION_CLASS_WAYP :Wegpunkte @@ -3747,6 +3764,7 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Detailli STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Verschenke Geld STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Geld an diese Firma verschenken STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}Feindliche Übernahme +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Feindliche Übernahme dieses Unternehmens vornehmen STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Neues Gesicht STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Neues Gesicht für Manager aussuchen @@ -3762,6 +3780,7 @@ STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Name des Manage STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Geben Sie den Betrag des Geldes ein, welchen sie verschenken möchten. STR_BUY_COMPANY_MESSAGE :{WHITE}Wir suchen eine Transportfirma, die unsere Firma übernimmt.{}{}Besteht Interesse daran, {COMPANY} für {CURRENCY_LONG} zu übernehmen? +STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}Bei einer feindlichen Übernahme von {COMPANY} wirst du alle Vermögenswerte erwerben, alle Darlehen zurückzahlen und die Profite im Wert von zwei Jahren zahlen.{}{}Die Gesamtsumme wird auf {CURRENCY_LONG} geschätzt.{}{}Möchtest du mit der feindlichen Übernahme fortfahren? # Company infrastructure window STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastruktur von {COMPANY} @@ -3833,7 +3852,10 @@ STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Liste ve STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Aufträge an alle Fahrzeuge in der Liste verschicken STR_VEHICLE_LIST_REPLACE_VEHICLES :Fahrzeuge ersetzen STR_VEHICLE_LIST_SEND_FOR_SERVICING :Zur Wartung schicken +STR_VEHICLE_LIST_CREATE_GROUP :Gruppe erstellen STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Gewinn im laufenden Jahr: {CURRENCY_LONG} (vergangenes Jahr: {CURRENCY_LONG}) +STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] +STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Ins Depot schicken STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Ins Depot schicken @@ -4553,6 +4575,8 @@ STR_TIMETABLE_EXPECTED :{BLACK}Voraussi STR_TIMETABLE_SCHEDULED :{BLACK}Fahrplanmäßig STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Umschalten zwischen Anzeige der erwarteten Ankunftszeit und des Fahrplans +STR_TIMETABLE_ARRIVAL :An: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE :Ab: {COLOUR}{DATE_TINY} # Date window (for timetable) @@ -4611,7 +4635,7 @@ STR_AI_CONFIG_AI :{SILVER}KIs STR_AI_CONFIG_CHANGE_AI :{BLACK}KI auswählen STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Spielskript auswählen -STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Lade ein anderes Skript +STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Lade ein anderes Skript. Strg+Klick, um alle verfügbaren Versionen anzuzeigen STR_AI_CONFIG_CONFIGURE :{BLACK}Einstellungen STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Einstellungen des Skripts anzeigen oder ändern @@ -4657,6 +4681,7 @@ STR_TEXTFILE_VIEW_LICENCE :{BLACK}Lizenz STR_TEXTFILE_README_CAPTION :{WHITE}{STRING}-Liesmich von {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING}-Änderungen von {STRING} STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING}-Lizenz von {STRING} +STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}Vorschau des Umfragenergebnisses # Vehicle loading indicators @@ -5606,6 +5631,8 @@ STR_JUST_DATE_SHORT :{DATE_SHORT} STR_JUST_DATE_LONG :{DATE_LONG} STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} +STR_JUST_STRING1 :{STRING} +STR_JUST_STRING2 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 2fb3380e09..8e929fcf17 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1312,6 +1312,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Αριστερ STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Κέντρο STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Δεξιά + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Μέγιστο αρχικό δάνειο: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Μέγιστο ποσό που μπορεί να δανειστεί μία εταιρία (χωρίς να λαμβάνεται υπόψη ο πληθωρισμός) ###setting-zero-is-special @@ -1525,7 +1526,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Ελάχιστ STR_CONFIG_SETTING_ERRMSG_DURATION :Διάρκεια μηνύματος σφάλματος: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Διάρκεια εμφάνισης μηνύματων σφάλματος σε κόκκινο παράθυρο. Σημειώστε ότι μερικά (κρίσιμα) μηνύματα σφάλματος δεν κλείνουν αυτόματα μετά από αυτόν τον χρόνο, αλλά πρέπει να κλείσουν χειροκίνητα -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} δευτερόλεπτ{P 0 ο α} STR_CONFIG_SETTING_HOVER_DELAY :Εμφάνιση αναδυόμενων μηνυμάτων: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Καθυστέρηση πριν την εμφάνιση των επεξηγήσεων όταν ο δείκτης του ποντικιού βρίσκεται πάνω από κάποιο στοιχείο της διεπαφής. Εναλλακτικά, οι επεξηγήσεις συνδέονται με το δεξί κουμπί του ποντικιού όταν η τιμή αυτού του πεδίου είναι 0. diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index a347cd66ef..6b5b8667df 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1158,6 +1158,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :שמאל STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :מרכז STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :ימין + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :סכום הלוואה ראשוני: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :סכום מירבי שחברה יכולה ללוות (מבלי לקחת בחשבון אינפלציה) ###setting-zero-is-special @@ -1364,7 +1365,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :סכום כסף STR_CONFIG_SETTING_ERRMSG_DURATION :משך הצגת הודעת שגיאה: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :פרק הזמן להצגת הודעות שגיאה בחלון אדום. יש לשים לב כי כמה הודעות שגיאה (קריטיות) אינן נסגרות אוטומטית אחרי פרק זמן זה, אלא יש לסגור אותן ידנית -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{P 0 "שנייה " ""}{COMMA}{P "" " שניות"} STR_CONFIG_SETTING_HOVER_DELAY :הצג רמזים צצים: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :השהייה טרם הצגת רמזים צצים כאשר העכבר מרחף מעל חלק ממשק. לחלופין, ניתן לקשר רמזים צצים לכפתור העכבר הימני כאשר מוגדר 0. diff --git a/src/lang/hindi.txt b/src/lang/hindi.txt index d980ee5e79..7c309bee87 100644 --- a/src/lang/hindi.txt +++ b/src/lang/hindi.txt @@ -345,6 +345,7 @@ STR_CONFIG_SETTING_COMPANIES_OFF :बन्द ###length 3 + ###setting-zero-is-special diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 3093e9430a..b91d78a6d9 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1290,6 +1290,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Balra STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Középen STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Jobbra + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximális kezdeti hitelkeret: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximálisan kölcsönözhető összeg (az inflációtól eltekintve) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1505,7 +1506,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :A bankban marad STR_CONFIG_SETTING_ERRMSG_DURATION :Hibaüzenetek időtartama: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :A piros ablakban megjelenő hibaüzenetek kijelzésének időtartama. Bizonyos (kritikus) hibaüzenetek nem záródnak be automatikusan egy idő után, hanem kézzel kell őket bezárni -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} másodperc STR_CONFIG_SETTING_HOVER_DELAY :Leírás megjelenítése: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Késleltetés, mielőtt megjelenne az eszközleírás az egér ráhúzása után egy felületi elemen. A leírás elérhető még az egér jobb gombjával is, ha ennek értéke 0-ra van állítva. diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 7051c0fc09..5ba9778fc2 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1086,6 +1086,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Vinstri STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Miðja STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Hægri + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Hámarkslán: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Hámarks upphæð sem fyrirtæki getur fengið lánað (ekki er gert ráð fyrir verðbólgu) ###setting-zero-is-special @@ -1284,7 +1285,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Lágmarksupphæ STR_CONFIG_SETTING_ERRMSG_DURATION :Tími sem villuskilaboð eru sýnileg: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Tími sem villuboð í rauðu gluggunum eru sýnd. Athugið að sumum (alvarlegum) villuboðum er ekki lokað sjálfvirkt eftir þennan tíma, þeim verður að loka handvirkt -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sekúnd{P 0 a ur} STR_CONFIG_SETTING_HOVER_DELAY :Sýna vísbendingar: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Töf áður en vísbendingar eru birtar þegar músinni er haldið yfir einhverju af viðmóts atriðunum. Eins er stundum að finna vísbendingar með því að hægri smella diff --git a/src/lang/ido.txt b/src/lang/ido.txt index 16e7b7bfdb..855918c7b9 100644 --- a/src/lang/ido.txt +++ b/src/lang/ido.txt @@ -558,6 +558,7 @@ STR_CONFIG_SETTING_NONE :Nulo ###length 3 + ###setting-zero-is-special diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index daed78f1ee..9e0f32ba0c 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -195,6 +195,7 @@ STR_UNITS_VELOCITY_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_VELOCITY_METRIC :{DECIMAL}{NBSP}km/jam STR_UNITS_VELOCITY_SI :{DECIMAL}{NBSP}meter/detik STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}ubin/hari +STR_UNITS_VELOCITY_KNOTS :{DECIMAL}{NBSP}knots STR_UNITS_POWER_IMPERIAL :{DECIMAL}{NBSP}dk STR_UNITS_POWER_METRIC :{DECIMAL}{NBSP}dk @@ -343,8 +344,8 @@ STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Buka tam ###length 31 STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Hentikan sementara permainan STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Percepat maju waktu permainan -STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opsi -STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Simpan, batalkan, keluar permainan +STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opsi dan pengaturan +STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Simpan, tinggalkan, keluar OpenTTD STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Tampilkan peta, tambahan viewport atau daftar pengenal STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Tampilkan daftar kota STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Tampilkan subsidi @@ -370,7 +371,7 @@ STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Membangu STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Buka toolbar lansekap untuk menaik-turunkan tanah, menanam pohon, dsb. STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Tampilkan jendela suara/musik STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Tampilkan pesan/berita terkini, tampilkan pilihan berita -STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Informasi area daratan, konsol, AI debug, pengambilan gambar, dan tentang OpenTTD +STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Informasi area daratan, pengambilan gambar, tentang OpenTTD dan alat pengembangan STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Berpindah toolbar # Extra tooltips for the scenario editor toolbar @@ -930,12 +931,27 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Perlihat # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Opsi permainan +STR_GAME_OPTIONS_TAB_GENERAL :Umum +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Pilih setingan umum +STR_GAME_OPTIONS_TAB_GRAPHICS :Grafik +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Setingan pilih grafis +STR_GAME_OPTIONS_TAB_SOUND :Suara +STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}\Pilih suara dan setingan musik +STR_GAME_OPTIONS_VOLUME :Volume +STR_GAME_OPTIONS_SFX_VOLUME :Efek suara +STR_GAME_OPTIONS_MUSIC_VOLUME :Musik +STR_GAME_OPTIONS_VOLUME_0 :0% +STR_GAME_OPTIONS_VOLUME_25 :25% +STR_GAME_OPTIONS_VOLUME_50 :50% +STR_GAME_OPTIONS_VOLUME_75 :75% +STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Mata uang STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Pilih mata uang +STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) ###length 42 STR_GAME_OPTIONS_CURRENCY_GBP :Poundsterling @@ -987,6 +1003,10 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Pilih se # Autosave dropdown ###length 5 STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Mati +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_10_MINUTES :Setiap 10 menit +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_30_MINUTES :Setiap 30 menit +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_60_MINUTES :Setiap 60 menit +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_120_MINUTES :Setiap 120 menit STR_GAME_OPTIONS_LANGUAGE :{BLACK}Bahasa STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Pilih antar muka bahasa yang akan dipergunakan @@ -1023,6 +1043,10 @@ STR_GAME_OPTIONS_GUI_SCALE_3X :3x STR_GAME_OPTIONS_GUI_SCALE_4X :4x STR_GAME_OPTIONS_GUI_SCALE_5X :5x +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Survei Otomatis +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_LINK :{BLACK}Tentang survei dan privasi +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW :{BLACK}Tampilkan hasil survey +STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}Tampilkan hasil survey pada game yang berjalan saat ini STR_GAME_OPTIONS_GRAPHICS :{BLACK}Grafik @@ -1032,12 +1056,12 @@ STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Kecepatan refresh yang lebih tinggi dari 60Hz dapat memengaruhi kinerja. STR_GAME_OPTIONS_BASE_GRF :{BLACK}Set Grafik Dasar -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Pilih grafik dasar yang digunakan +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Pilih grafik dasar yang digunakan (tidak dapat diubah didalam permainan, hanya dari menu utama) STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} berkas hilang atau rusak STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Informasi tambahan tentang set grafik dasar STR_GAME_OPTIONS_BASE_SFX :{BLACK}Set suara dasar -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Pilih set suara dasar yang digunakan +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Pilih set suara dasar yang digunakan (tidak dapat diubah didalam permainan, hanya dari menu utama) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Informasi tambahan tentang set suara dasar STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Set Musik Dasar @@ -1153,6 +1177,7 @@ STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Perluas STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Persempit semua STR_CONFIG_SETTING_RESET_ALL :{BLACK}Atur ulang semua pengaturan STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(penjelasan belum tersedia) +STR_CONFIG_SETTING_VALUE :{PUSH_COLOUR}{ORANGE}{STRING}{POP_COLOUR} STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Nilai standar: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Tipe setting: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE_CLIENT :Setting klien (tidak disimpan di penyimpanan; mempengaruhi semua permainan) @@ -1206,8 +1231,10 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Kiri STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Tengah STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Kanan + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimum pinjaman awal: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Jumlah maksimum yang dapat dipinjam (tanpa menghitung inflasi) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Bunga pinjaman: {STRING} @@ -1419,7 +1446,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Jumlah uang min STR_CONFIG_SETTING_ERRMSG_DURATION :Durasi pesan kesalahan: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Durasi penampilan pesan kesalahan di jendela merah. Beberapa pesan kesalahan tidak ditutup secara otomatis setelah ini, tapi harus ditutup secara manual -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} detik STR_CONFIG_SETTING_HOVER_DELAY :Tampilkan tooltips: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Delay sebelum bantuan peralatan ditampilkan saat mouse diatas sebuah ikon. Selain itu bantuan peralatan juga dapat ditampilkan dengan klik kanan @@ -1916,6 +1942,7 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Tidak ada STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Faktor kali ukuran kota awal: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Ukuran rata-rata kota besar terhadap kota kecil saat permainan dimulai +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Pembaruan grafik distribusi setiap {STRING}{NBSP} detikP 0:2 "" } STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modus distribusi untuk penumpang: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Simetris" berarti kira-kira jumlah penumpang sama akan pergi dari stasiun A ke stasiun B sebagaimana dari B ke A. "Asimetris" berarti jumlah penumpang pergi pada kedua arah bisa berbeda-beda. "Manual" berarti bahwa tidak ada distribusi otomatis akan dilakukan untuk penumpang. @@ -1941,13 +1968,15 @@ STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Mengaturkan ini STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Penjenuhan lintasan pendek sebelum menggunakan lintasan besar: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Biasanya terdapat banyak lintasan antara dua stasiun. Cargodist akan mengisi hingga penuh lintasan yang paling pendek terlebih dahulu, kemudian memenuhkan lintasan terpendek berikutnya dan seterusnya. Penuhnya suatu lintasan akan ditentukan mengikuti perkiraan kapasitas dan penggunaan terencana. Jika semua lintasan sudah penuh, sementara masih ada permintaan, Cargodist akan membebankannya kepada sebarang lintasan, terutama lintasan-lintasan berkapasitas besar. Walau demikian, sering kali algoritma tidak akan memperkirakan kapasitas dengan akurat. Setting ini memungkinkanmu untuk menentukan prosentase maksimum isian sebuah lintasan sebelum mengisi lintasan berikutnya. Aturlah nilainya di bawah 100% untuk menghindarkan stasiun dari kelebihan pengunjung manakala ada kesalahan perkiraan kapasitas. -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Satuan kecepatan: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Satuan kecepatan (darat): {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Satuan kecepatan (bahari): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Apabila kecepatan ditampilkan di antarmuka, nyatakan di satuan yang dipilih ###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mpj) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrik (km/j) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/d) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Unit permainan (ubin/hari) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :Knots STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Satuan daya kendaraan: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Apabila daya kendaraan ditampilkan di antarmuka, nyatakan di satuan yang dipilih @@ -2348,6 +2377,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Perusahaan bar STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Ciptakan perusahaan baru dan bergabung STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Ini adalah Anda STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Ini adalah hos permainan +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} klien{P ""} - {NUM}/{NUM} perusahaan{P ""} # Matches ConnectionType ###length 5 @@ -2374,6 +2404,10 @@ STR_NETWORK_ASK_RELAY_NO :{BLACK}Tidak STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Ya, kali ini STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Iya, Jangan tanya lagi +STR_NETWORK_ASK_SURVEY_PREVIEW :Tampilkan hasil survey +STR_NETWORK_ASK_SURVEY_LINK :Tentang survei dan privasi +STR_NETWORK_ASK_SURVEY_NO :Tidak +STR_NETWORK_ASK_SURVEY_YES :Iya STR_NETWORK_SPECTATORS :Penonton @@ -2664,7 +2698,9 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Membangu STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Pilih kelas stasiun yang akan ditampilkan STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Pilih jenis stasiun yang akan dibangun -STR_STATION_CLASS_DFLT :Stasiun standar +STR_STATION_CLASS_DFLT :Standar +STR_STATION_CLASS_DFLT_STATION :Stasiun standar +STR_STATION_CLASS_DFLT_ROADSTOP :Pemberhentian jalan standar STR_STATION_CLASS_WAYP :Waypoint # Signal window @@ -2691,6 +2727,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Tambah k STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Pilih Jembatan Rel STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Pilih Jembatan STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Pilihan jembatan - Klik pada jembatan yang ingin anda bangun +STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING} +STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY} +STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG} +STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_BRIDGE_NAME_SUSPENSION_STEEL :Suspensi, Baja STR_BRIDGE_NAME_GIRDER_STEEL :Balok, Baja STR_BRIDGE_NAME_CANTILEVER_STEEL :Beton, Baja @@ -3338,6 +3378,8 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Peringatan: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Kesalahan: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatal: {SILVER}{STRING} +STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Kesalahan fatal pada NewGRF "{STRING}" telah terjadi:{}{STRING} +STR_NEWGRF_ERROR_POPUP :{WHITE}Terjadi galat pada NewGRF "{STRING}" telah terjadi:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} tidak akan bekerja dengan versi TTDPatch yang telah dilaporkan oleh OpenTTD STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} untuk TTD versi {2:STRING} STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} didesain untuk digunakan dengan {2:STRING} @@ -3794,7 +3836,10 @@ STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Atur Daf STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Kirim perintah untuk semua kendaraan dalam daftar ini. STR_VEHICLE_LIST_REPLACE_VEHICLES :Ganti kendaraan STR_VEHICLE_LIST_SEND_FOR_SERVICING :Perintahkan untuk diperbaiki +STR_VEHICLE_LIST_CREATE_GROUP :Buat kelompok STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Laba tahun ini: {CURRENCY_LONG} (tahun lalu: {CURRENCY_LONG}) +STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] +STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Perintahkan ke bengkel STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Perintahkan ke Bengkel @@ -4514,6 +4559,8 @@ STR_TIMETABLE_EXPECTED :{BLACK}Harapan STR_TIMETABLE_SCHEDULED :{BLACK}Dijadwalkan STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Ubah antara perkiraan dan jadwal +STR_TIMETABLE_ARRIVAL :T: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE :B: {COLOUR}{DATE_TINY} # Date window (for timetable) @@ -4557,6 +4604,7 @@ STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}AI yg ak STR_AI_CONFIG_HUMAN_PLAYER :Pemain Manusia STR_AI_CONFIG_RANDOM_AI :AI Acak STR_AI_CONFIG_NONE :(tidak ada) +STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}v{NUM} STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Jumlah pesaing maksimal: {ORANGE}{COMMA} STR_AI_CONFIG_MOVE_UP :{BLACK}Naikkan @@ -4570,7 +4618,7 @@ STR_AI_CONFIG_AI :{SILVER}AI STR_AI_CONFIG_CHANGE_AI :{BLACK}Pilih AI STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Skrip Permainan -STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Muat skrip yang lain +STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Muat skrip yang lain. Ctrl+Click untuk menampilkan versi yang tersedia STR_AI_CONFIG_CONFIGURE :{BLACK}Konfigurasikan STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Mengkonfigurasi parameter skrip AI @@ -4598,7 +4646,9 @@ STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Tangkapa STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Tangkapan layar minimap # Script Parameters +STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameter STR_AI_SETTINGS_CAPTION_AI :{WHITE}Parameter AI +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Skrip Permainan STR_AI_SETTINGS_CLOSE :{BLACK}Tutup STR_AI_SETTINGS_RESET :{BLACK}Reset STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} @@ -4614,6 +4664,7 @@ STR_TEXTFILE_VIEW_LICENCE :{BLACK}Lisensi STR_TEXTFILE_README_CAPTION :{WHITE}keterangan {STRING} dari {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}Catatan perubahan {STRING} dari {STRING} STR_TEXTFILE_LICENCE_CAPTION :{WHITE}Lisensi {STRING} dari {STRING} +STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}Tanpilan hasil survei # Vehicle loading indicators @@ -5053,11 +5104,19 @@ STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... terl STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... pesawat tidak dapat menjangkau # Extra messages which go on the third line of errors, explaining why orders failed +STR_ERROR_NO_RAIL_STATION :{WHITE}Tidak ada stasiun kereta +STR_ERROR_NO_BUS_STATION :{WHITE}Tidak ada stasiun bis +STR_ERROR_NO_TRUCK_STATION :{WHITE}Tidak ada stasiun lori +STR_ERROR_NO_AIRPORT :{WHITE}Tidak ada bandara/heliport +STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Tidak ada pemberhentian dengan kompatibilitas tipe jalan +STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Tidak ada pemberhentian yang kompatibel dengan tipe tram +STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Pesawat ini tidak dapat mendarat di heliport ini # Timetable related errors STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Tidak dapat membuat jadwal keberangkatan kendaraan... STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Kendaran hanya dapat menunggu di stasiun STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Kendaraan tidak berhenti pada stasiun ini +STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... Jadway tidak kompatibel # Sign related errors STR_ERROR_TOO_MANY_SIGNS :{WHITE}... terlalu banyak tanda @@ -5537,17 +5596,21 @@ STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} STR_JUST_CARGO :{CARGO_LONG} +STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} STR_JUST_CHECKMARK :{CHECKMARK} STR_JUST_COMMA :{COMMA} STR_JUST_CURRENCY_SHORT :{CURRENCY_SHORT} STR_JUST_CURRENCY_LONG :{CURRENCY_LONG} STR_JUST_CARGO_LIST :{CARGO_LIST} +STR_JUST_DECIMAL :{DECIMAL} STR_JUST_INT :{NUM} STR_JUST_DATE_TINY :{DATE_TINY} STR_JUST_DATE_SHORT :{DATE_SHORT} STR_JUST_DATE_LONG :{DATE_LONG} STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} +STR_JUST_STRING1 :{STRING} +STR_JUST_STRING2 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 3aa4732ed7..0b35b17af8 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1182,6 +1182,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Ar chlé STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Sa lár STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Ar dheis + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Iasacht tosaigh uasta: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Uasmhéid is féidir le cuideachta a chur ar iasacht (gan boilsciú a chur san áireamh) ###setting-zero-is-special @@ -1395,7 +1396,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :An t-íosmhéid STR_CONFIG_SETTING_ERRMSG_DURATION :Fad ama na teachtaireachta earráide: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :An fad a thaispeánfar teachtaireachtaí earráide i bhfuinneog dhearg. Tabhair faoi deara nach ndúnfar teachtaireachtaí (criticiúla) áirithe go huathoibríoch tar éis an fad ama se, agus nach mór iad a dhúnadh de láimh -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} {P sh sh sh s s}oicind STR_CONFIG_SETTING_HOVER_DELAY :Taispeáin leideanna uirlise: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :An mhoill sula dtaispeántar leideanna uirlise agus an luchóg os cionn eilimint den chomhéadan. Mar mhalairt, ceanglaítear leideanna uirlise don deaschlic luchóige má shocraítear an luach seo ag 0. diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 7870f927d2..84121ff438 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1269,6 +1269,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Sinistra STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Centro STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Destra + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Prestito massimo iniziale: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Ammontare massimo di denaro che una compagnia può chiedere in prestito (senza tenere conto dell'inflazione). STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1484,7 +1485,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Ammontare minim STR_CONFIG_SETTING_ERRMSG_DURATION :Durata dei messaggi d'errore: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Durata di visualizzazione dei messaggi d'errore nelle finestre rosse. Nota: alcuni messaggi d'errore (critici) non sono chiusi automaticamente anche allo scadere del tempo, ma devono essere chiusi manualmente -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} second{P 0 o i} STR_CONFIG_SETTING_HOVER_DELAY :Mostra suggerimenti: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Ritardo con cui i suggerimenti sono mostrati al passaggio del mouse su un elemento dell'interfaccia. In alternativa, i messaggi possono essere attivati col pulsante destro del mouse impostando questo valore a 0. diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 2d99525068..0c65a308e3 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -1225,6 +1225,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :左 STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :中央 STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :右 + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :初期の借入最大額: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :初期の借入限度額を設定します (インフレは考慮されません) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1440,7 +1441,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :輸送機器の STR_CONFIG_SETTING_ERRMSG_DURATION :エラーメッセージの表示時間: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :赤地のエラーメッセージが表示されている時間を設定します。注: 致命的なエラーの場合はこの時間を経過しても自動では閉じません。 -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA}秒 STR_CONFIG_SETTING_HOVER_DELAY :ツールチップ表示: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :カーソルをインターフェイス要素に乗せた場合にツールチップが表示されるまでの時間を決定します。"0"に設定するとツールチップは右クリックで表示されるようになります diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 309506dd39..32aa831e43 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -605,7 +605,7 @@ STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}경영 STR_GRAPH_INCOME_CAPTION :{WHITE}수익 그래프 STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}수송 화물량 STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}회사 성취도 (최고 1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}회사 가치 +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}회사가치 그래프 STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}화물 운송단가 비율 STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}통과시간 @@ -1060,12 +1060,12 @@ STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}60Hz를 넘는 화면 주사율을 사용하면 성능에 영향이 갈 수도 있습니다. STR_GAME_OPTIONS_BASE_GRF :{BLACK}기본 그래픽 세트 -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}게임에 사용할 기본 그래픽 세트를 선택하세요 +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}게임에 사용할 기본 그래픽 세트를 선택하세요 (플레이 도중에는 변경할 수 없고 메인 메뉴에서만 변경 가능합니다) STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM}개 파일 손실 STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}기본 그래픽 세트에 대한 추가 정보를 봅니다. STR_GAME_OPTIONS_BASE_SFX :{BLACK}기본 효과음 세트 -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}게임에 사용할 기본 효과음 세트를 선택하세요 +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}게임에 사용할 기본 효과음 세트를 선택하세요 (플레이 도중에는 변경할 수 없고 메인 메뉴에서만 변경 가능합니다) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}기본 효과음 세트에 대한 추가 정보를 봅니다. STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}기본 배경 음악 세트 @@ -1235,6 +1235,8 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :왼쪽 STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :가운데 STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :오른쪽 +STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}초 + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :최대 초기 대출금: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :한 회사가 최대한 빌릴 수 있는 대출금의 양을 조절할 수 있습니다. (여기서 설정한 값은 인플레이션에 의한 효과를 적용하지 않은 값입니다.) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1450,7 +1452,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :차량을 자 STR_CONFIG_SETTING_ERRMSG_DURATION :오류 메시지 표시: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :오류 메시지를 표시할 시간을 설정합니다. 일부 (중요한) 오류 메시지는 이 시간이 지나도 자동으로 사라지지 않고 수동으로 꺼야할 수도 있음을 알아두십시오. -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA}초 동안 STR_CONFIG_SETTING_HOVER_DELAY :도움말 보이기: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :마우스를 올려놓았을 때 도움말이 뜨는데 걸리는 시간을 설정합니다. 마우스 오른쪽 클릭으로 바로 뜨도록 할 수도 있습니다. @@ -1947,9 +1948,9 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :없음 STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :초기 대도시 크기 비율: 일반 도시보다 {STRING}배 크게 시작 STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :게임을 시작했을 때 일반 도시에 대한 대도시의 평균 크기를 설정합니다 -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :분배 그래프를 매 {STRING}초마다 업데이트 +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :분배 그래프를 매 {STRING}마다 업데이트 STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :각 연결 그래프의 하위 시퀀스 재계산 사이의 시간입니다. 각 재계산은 그래프의 한 구성 요소에 대한 계획을 계산합니다. 즉, 이 설정을 X로 설정한다고 해서 전체 그래프를 X초마다 업데이트한다는 뜻은 아닙니다. 일부 구성 요소만 X초마다 업데이트됩니다. 이 값을 더 짧게 설정할 수록 계산하는데 더 많은 CPU 계산 시간이 필요합니다. 값을 더 길게 설정하면 화물 분배가 새 경로로 이뤄지기까지 더 오랜 시간이 걸리게 됩니다. -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :분배 그래프의 재계산을 위해 {STRING}초 사용 +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :분배 그래프의 재계산을 위해 {STRING} 사용 STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :각 연결 그래프의 구성 요소를 재계산하는데 걸리는 시간입니다. 재계산이 시작되면, 이 시간(초) 동안 실행할 수 있는 스레드가 생성됩니다. 이 값을 더 짧게 설정할수록 스레드가 완료되어야 할 때 완료되지 못할 가능성이 높아집니다. 그러면 이를 완료하기 전까지는 게임이 멈추게 됩니다. 값을 더 길게 설정하면 경로가 변경되었을 때 분배가 업데이트되는 데 더 오래 걸립니다. STR_CONFIG_SETTING_DISTRIBUTION_PAX :승객에 대한 분배 형식: {STRING} @@ -2938,14 +2939,14 @@ STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}모든 STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}정말 모든 산업시설을 제거하시겠습니까? # Industry cargoes window -STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}{STRING}{G 0 "과" "와"} 관련된 산업시설 연계도 -STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}{STRING}{G 0 "과" "와"} 관련된 산업시설 연계망 +STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}화물 연계도 - {STRING} +STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}화물 연계망 - {STRING} STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}생산 산업시설 STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}소비 산업시설 STR_INDUSTRY_CARGOES_HOUSES :{WHITE}도시 가구 STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}이 산업시설의 공급자와 고객을 보려면 클릭하세요 STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}이 화물의 공급자와 고객을 보려면 클릭하세요 -STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}산업시설 연계도 보기 +STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}산업시설 연계도 STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}이 산업시설에서 생산/소비하는 화물을 보여줍니다 STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}지도에 표시 STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}위 산업망에 표시된 산업을 소형 지도에서 볼 수 있게 합니다 @@ -3540,8 +3541,8 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{Y STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}도시 도로망 보수공사를 시행합니다.{}앞으로 6개월간 극심한 도로 혼잡을 일으킵니다.{}{POP_COLOUR}가격: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}당신의 회사를 대표하는 '명예의 동상'을 건설합니다.{}이 도시에 있는 역 등급을 영구적으로 올려줍니다.{}{POP_COLOUR}가격: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}도시 상업 건물의 건설에 투자합니다.{}도시의 성장을 일시적으로 빠르게 만들어줍니다.{}{POP_COLOUR}가격: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}1년 간 수송 권한 독점권을 구입합니다.{}도시 당국은 오직 당신 회사의 역에만 승객과 화물을 실을 것입니다.{}{POP_COLOUR}가격: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}성취도를 올리기 위해 처벌을 감수하고 지역 당국에 뇌물을 줍니다.{}{POP_COLOUR}가격: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}1년 간 수송 권한 독점권을 구입합니다.{}도시 당국은 오직 당신 회사의 역에만 승객과 화물을 실을 것입니다.{}경쟁사의 뇌물 수수가 성공하면 이 독점권 계약은 취소됩니다.{}{POP_COLOUR}가격: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}성취도를 올리고 경쟁사의 독점권을 무효화하기 위해 처벌을 감수하고 지역 당국에 뇌물을 줍니다.{}{POP_COLOUR}가격: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} 목표 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 7573c0a942..a8af1b3b6f 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -1321,6 +1321,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Laevo STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Medio STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Dextro + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Creditum maximum in initio: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Copia crediti maxima (sine inflatione) ###setting-zero-is-special @@ -1525,7 +1526,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Copia pecuniae STR_CONFIG_SETTING_ERRMSG_DURATION :Duratio nuntiorum errorum: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duratio nuntia errorum in fenestra rubra ostendendi. Cave, aliquae (severa) nuntia errorum non automatice clauditur, et necesse est lusori claudere -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} secund{P um a} STR_CONFIG_SETTING_HOVER_DELAY :Ostendere nuntia adiuvantia: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Mora antequam nuntia adiuvantia ostenduntur cum mus elemento interfaciei superponitur. Etiam adiuvantia nuntia possunt ostendi globulo muris dextro cum hic valor 0 est diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 23136c86b7..a8d6e6747d 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1208,6 +1208,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :pa kreisi STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :centrā STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :pa labi + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimālais sākotnējais aizdevums: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimālais aizdevuma daudzums, ko uzņēmums var izsniegt (neskaitot inflāciju) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1423,7 +1424,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minimālais nau STR_CONFIG_SETTING_ERRMSG_DURATION :Kļūdas ziņojuma ilgums: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Kļūdas ziņojuma sarkanā logā rādīšanas ilgums. Jāņem vērā ka daži (kritiskie) kļūdu ziņojumi pēc šī laika netiek slēgti automātiski, bet tos ir jāaizver manuāli -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sekun{P 0 di des žu} STR_CONFIG_SETTING_HOVER_DELAY :Rādīt rīku padomus: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Aizkaves ilgums, pirms tiek rādīti rīku padomi, kad peles kursors atrodas virs kāda saskarnes elementa. Rīku padomu rādīšanu pārmaiņus var saistīt ar peles labās pogas klikšķi diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 91c2c9c7ee..8853d4687e 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1399,6 +1399,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Kairėje STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Centruoti STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Dešinėje + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Didžiausia pradinė paskola: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Didžiausia paskola, kokią kompanija gali gauti iš banko (neatsižvelgiant į infliaciją) ###setting-zero-is-special @@ -1612,7 +1613,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Mažiausias bū STR_CONFIG_SETTING_ERRMSG_DURATION :Klaidos pranešimo rodymo trukmė: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Klaidos pranešimų rodymo trukmė, po kurios pranešimas langas bus automatiškai užvertas. Atkreipkite dėmesį, kai kai kurie kritiniai pranešimai automatiškai nėra užveriami -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sekund{P ė ės žių} STR_CONFIG_SETTING_HOVER_DELAY :Rodyti paaiškinimus: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Delsos laikas prieš parodant paaiškinimą, kai pelės žymeklis yra užvedamas virš kurio nors vartotojo sąsajos elemento. Paaiškinimas taip pat gali būti susietas ir su dešiniuoju pelės klavišu, jei delsos laikas nustatomas į 0 milisekundžių diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index f34f485b96..2dc1bb849e 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1206,6 +1206,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Lénks STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Zentréiert STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Riets + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximalen Ufanksloun: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximalwäert den eng Firma kann léinen (ouni Inflatioun matzerechnen) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1421,7 +1422,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minimalt Geld w STR_CONFIG_SETTING_ERRMSG_DURATION :Dauer vun der Feelermeldung: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Zäit déi eng Feelermeldung an enger rouder Fënster ugewisen gëtt. E puer kritesch Meldungen ginn net zougemeet -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} Sekonn{P 0 "" en} STR_CONFIG_SETTING_HOVER_DELAY :Weis Tooltips: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Verzögerung bis d'Tooltips ugewisen ginn, wann een mat der Maus iwwert en Element geet. Alternativ kënnen d'Tooltips och op d'riets Maustast geluet ginn wann dësen Wäert op 0 gesat gouf. diff --git a/src/lang/macedonian.txt b/src/lang/macedonian.txt index 61c71515a5..525f412aa0 100644 --- a/src/lang/macedonian.txt +++ b/src/lang/macedonian.txt @@ -864,6 +864,7 @@ STR_CONFIG_SETTING_REALISTIC :Реален ###length 3 + ###setting-zero-is-special diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 3483b39d2a..f9bc4f6fdf 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1088,6 +1088,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Kiri STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Tengah STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Kanan + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimum pinjaman permulaan: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Rantaian industri ###setting-zero-is-special diff --git a/src/lang/maltese.txt b/src/lang/maltese.txt index 92762595df..2f6beff5f2 100644 --- a/src/lang/maltese.txt +++ b/src/lang/maltese.txt @@ -472,6 +472,7 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :oħrajn ###length 3 + ###setting-zero-is-special diff --git a/src/lang/marathi.txt b/src/lang/marathi.txt index cee23e4047..6571bc1fcf 100644 --- a/src/lang/marathi.txt +++ b/src/lang/marathi.txt @@ -798,6 +798,7 @@ STR_CONFIG_SETTING_REALISTIC :खरेखु ###length 3 + ###setting-zero-is-special diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index c2d1f323c2..1523eae1d0 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1188,6 +1188,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Venstre STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Midtstilt STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Høyre + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimalt innledende lån: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Det maksimale beløp et selskap kan låne (uten å ta inflasjon i betraktning) ###setting-zero-is-special @@ -1402,7 +1403,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minste pengemen STR_CONFIG_SETTING_ERRMSG_DURATION :Varighet av feilmelding: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Varighet for visning av feilmeldinger i et rødt vindu. Vær oppmerksom på at noen (kritiske) feilmeldinger ikke lukkes automatisk etter dette tidspunktet, men må lukkes manuelt -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sekund{P 0 "" er} STR_CONFIG_SETTING_HOVER_DELAY :Vis verktøytips: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Forsinkelse før verktøytips vises når musen svever over elementer i grensesnittet. Alternativt kan verktøytips bindes til den høyre museknappen diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index abeb981543..21619f60e0 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1126,6 +1126,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Venstre STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Midtstilt STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Høgre + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksimalt startlån: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksimalt lån eit firma kan ta opp (utan å reikne med inflasjon) ###setting-zero-is-special @@ -1306,7 +1307,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} månad{ STR_CONFIG_SETTING_AUTORENEW_MONEY :Minimum formue for autofornying av køyretøy: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION :Varighet for feilmelding: {STRING} -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sekund{P 0 "" s} STR_CONFIG_SETTING_HOVER_DELAY :Syn verktøytips: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Hold over i {COMMA} sekund{P 0 "" s} diff --git a/src/lang/persian.txt b/src/lang/persian.txt index 483cca54ed..223875ec1f 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -1106,6 +1106,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :چپ STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :مرکز STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :راست + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :حداکثر اعتبار اولیه: {STRING} ###setting-zero-is-special diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 9e14dca33d..8787a6ca5a 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1439,12 +1439,12 @@ STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Częstotliwość odświeżania wyższa niż 60Hz może mieć wpływ na wydajność. STR_GAME_OPTIONS_BASE_GRF :{BLACK}Podstawowy zestaw grafik -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Wybierz podstawowy zestaw grafik do użycia +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Wybierz podstawowy zestaw grafik (nie można tego zmienić w trakcie gry, jedynie w menu głównym) STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} brak/uszkodzony plik{P "" i ów} STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Dodatkowe informacje o grafice STR_GAME_OPTIONS_BASE_SFX :{BLACK}Podstawowy zestaw dźwięków -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Wybierz podstawowy zestaw dźwięków do użycia +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Wybierz podstawowy zestaw dźwięków (nie można tego zmienić w trakcie gry, jedynie w menu głównym) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Dodatkowe informacje o zestawie podstawowych dźwięków STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Podstawowy zestaw muzyki @@ -1614,6 +1614,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :z lewej strony STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :wyśrodkowany STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :z prawej strony + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maksymalna wysokość początkowej pożyczki: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maksymalna wysokość pożyczki, jaką firma może zaciągnąć (bez uwzględnienia inflacji) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1829,7 +1830,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minimalna iloś STR_CONFIG_SETTING_ERRMSG_DURATION :Czas wyświetlania komunikatów o błędach: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Czas wyświetlania komunikatów o błędach w czerwonym oknie. Niektóre (krytyczne) komunikaty o błędach nie zamykają się automatycznie po tym czasie, tylko muszą zostać zamknięte ręcznie -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sekund{P a y ""} STR_CONFIG_SETTING_HOVER_DELAY :Pokaż podpowiedzi: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Opóźnienie wyświetlania podpowiedzi po najechaniu myszą na element interfejsu. Ewentualnie podpowiedzi mogą być przypisane do prawego przycisku myszy, jeśli wartość ta będzie ustawiona na 0. @@ -2962,7 +2962,7 @@ STR_CONTENT_NO_ZLIB :{WHITE}OpenTTD STR_CONTENT_NO_ZLIB_SUB :{WHITE}... pobieranie zawartości nie jest możliwe! # Order of these is important! -STR_CONTENT_TYPE_BASE_GRAPHICS :Grafiki bazowe +STR_CONTENT_TYPE_BASE_GRAPHICS :Podstawowa grafika STR_CONTENT_TYPE_NEWGRF :NewGRF STR_CONTENT_TYPE_AI :SI STR_CONTENT_TYPE_AI_LIBRARY :Biblioteka SI diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 199599dd9c..7dedb169da 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -432,7 +432,7 @@ STR_FILE_MENU_EXIT :Sair ###length 4 STR_MAP_MENU_MAP_OF_WORLD :Mapa do mundo STR_MAP_MENU_EXTRA_VIEWPORT :Visualizador extra -STR_MAP_MENU_LINGRAPH_LEGEND :Legenda de fluxo de carga +STR_MAP_MENU_LINGRAPH_LEGEND :Legenda do fluxo de carga STR_MAP_MENU_SIGN_LIST :Lista de sinais # Town menu @@ -456,7 +456,7 @@ STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Tarifas por car # Company league menu ###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Classificação de empresas -STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Avaliação detalhada +STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Classificação detalhada de desempenho STR_GRAPH_MENU_HIGHSCORE :Tabela de classificações # Industry menu @@ -604,8 +604,8 @@ STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COM STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Gráfico do Lucro Operacional STR_GRAPH_INCOME_CAPTION :{WHITE}Gráfico de Rendimentos STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Unidades de carga entregues -STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Avaliações da empresa (máximo=1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Valor da empresa +STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Classificações do desempenho da empresa (máximo=1000) +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Gráfico de Valor da Empresa STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Tarifas por carga STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}Dias em trânsito @@ -617,7 +617,7 @@ STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Não mos STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Mostrar/ocultar gráfico para o tipo de carga STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} -STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Exibir detalhes de rendimentos +STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Exibir classificações detalhadas de desempenho # Graph key window STR_GRAPH_KEY_CAPTION :{WHITE}Chave dos gráficos da empresa @@ -637,7 +637,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :Presidente STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Magnata # Performance detail window -STR_PERFORMANCE_DETAIL :{WHITE}Detalhes de rendimentos +STR_PERFORMANCE_DETAIL :{WHITE}Classificação Detalhada de Desempenho STR_PERFORMANCE_DETAIL_KEY :{BLACK}Detalhes STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT}) STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA}) @@ -1060,12 +1060,12 @@ STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Taxas de atualização maiores que 60Hz podem interferir no desempenho. STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunto de gráficos base -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Seleccione o conjunto de gráficos base a usar +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecione o conjunto de gráficos base a usar (não pode ser alterado no jogo, só a partir do menu principal) STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} ficheiro{P "" s} que falta{P "" m} / corrupto{P "" s} STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Informação adicional sobre o conjunto de gráficos base STR_GAME_OPTIONS_BASE_SFX :{BLACK}Conjunto de sons base -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Seleccione o conjunto de sons base a usar +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Selecione o conjunto de sons base a usar (não pode ser alterado no jogo, só a partir do menu principal) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Informação adicional sobre o conjunto de sons base STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Conjunto de música base @@ -1235,6 +1235,8 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Esquerda STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Centro STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Direita +STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}segundo{P 0 "" s} + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Valor máximo do empréstimo inicial: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Quantia máxima que uma companhia pode pedir (sem ter em conta a inflação) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1276,7 +1278,7 @@ STR_CONFIG_SETTING_DISASTERS :Desastres: {STR STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Ativa desastres que podem ocasionalmente bloquear ou destruir veículos ou infraestruturas STR_CONFIG_SETTING_CITY_APPROVAL :Atitude da autoridade local: {STRING} -STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Escolha de que forma o ruído e dano ambiental causado pelas empresas afeta o rating da povoação e futuras ações de construção nessa povoação +STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Escolha o quanto o ruído e os danos ambientais causados pelas empresas afetam a classificação da povoação e outras ações de construção na cidade STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Limite de altura do mapa: {STRING} STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Define a altura máxima do terreno do mapa. Com "(auto)" um bom valor será escolhido após a geração do terreno @@ -1450,7 +1452,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Quantidade mín STR_CONFIG_SETTING_ERRMSG_DURATION :Duração da mensagem de erro: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duração da visualização de mensagens de erro em janela vermelha. Note que algumas mensagens de erro (críticas) não são fechadas após este tempo e têm que ser fechadas manualmente -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} segundo{P 0 "" s} STR_CONFIG_SETTING_HOVER_DELAY :Mostrar textos de ajuda: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Atraso após o qual os textos de ajuda são mostrados após parar o cursor sobre algum elemento da interface. Alternativamente, os textos de ajuda podem ser mostrados com o botão direito do rato quando este valor está definido como 0 @@ -1947,9 +1948,9 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Nenhum STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador inicial para a dimensão das metrópoles: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Tamanho relativo das cidades em relação ao tamanho normal das localidades aquando o início do jogo -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Atualizar o gráfico de distribuição a cada {STRING}{NBSP}segundo{P 0:2 "" s} +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Atualizar o gráfico de distribuição a cada {STRING} STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tempo de intervalo entre recalculos subsequentes do gráfico de ligações. Cada recalculo calcula os planos para um componente do gráfico. Isso significa que um valor X para esta configuração não significa que todo o gráfico será atualizado a cada X segundos. Apenas algum componente será. Quanto mais curto escolher, mais tempo de CPU será necessário para calcular. Quanto mais tempo for definido, mais tempo levará até que a distribuição de carga inicie nas novas rotas. -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Usar {STRING}{NBSP}segundo{P 0:2 "" s} para recalcular o gráfico de distribuição +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Usar {STRING} para recalcular o gráfico de distribuição STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tempo gasto para cada recalculo de um componente de gráfico de ligação. Quando um recalculo é iniciado, um encadeamento é gerado e pode ser executado nesse número de segundos. Quanto mais curto você definir, mais provável será que o encadeamento não seja concluído quando deveria. Então o jogo pára até que seja ("lag"). Quanto mais tempo você definir, mais tempo levará para a distribuição ser atualizada quando as rotas mudarem. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Modo de distribuição para os passageiros: {STRING} @@ -2274,7 +2275,7 @@ STR_NETWORK_SERVER_LIST_YEARS_CAPTION :{BLACK}Anos STR_NETWORK_SERVER_LIST_YEARS_CAPTION_TOOLTIP :{BLACK}Número de anos{}que o jogo vai durar STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Idioma, versão do servidor, etc. -STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Clique num jogo da lista para o seleccionar +STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Clique num jogo da lista para o selecionar STR_NETWORK_SERVER_LIST_LAST_JOINED_SERVER :{BLACK}O servidor em que entraste na última vez: STR_NETWORK_SERVER_LIST_CLICK_TO_SELECT_LAST :{BLACK}Clique para indicar o servidor que jogaste a última vez @@ -2922,7 +2923,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}grelha 3 STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Aleatório # Fund new industry window -STR_FUND_INDUSTRY_CAPTION :{WHITE}Financiar nova indústria +STR_FUND_INDUSTRY_CAPTION :{WHITE}Financiar Indústria STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Escolha a indústria apropriada desta lista STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Criar indústrias aleatórias STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Cobrir o mapa com indústrias colocadas aleatoriamente @@ -2938,14 +2939,14 @@ STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Remover STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Tem a certeza que deseja remover todas as indústrias? # Industry cargoes window -STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Cadeia de indústrias para a indústria {STRING} -STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Cadeia de indústrias para a mercadoria {STRING} +STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Cadeia da Indústria - {STRING} +STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Cadeia de Carga - {STRING} STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Indústrias produtoras STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Indústrias que aceitam STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Casas STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Clique na indústria para ver os seus fornecedores e clientes STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Clique na mercadoria para ver os seus fornecedores e clientes -STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Mostrar cadeia +STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Cadeia da Indústria STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Mostrar indústrias a fornecer e aceitar mercadorias STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Ligar ao mapa pequeno STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Também seleccionar as indústrias mostradas no mapa pequeno @@ -3082,7 +3083,7 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-{STRING} A equipa do OpenTTD # Framerate display window -STR_FRAMERATE_CAPTION :{WHITE}Taxa de fotograma +STR_FRAMERATE_CAPTION :{WHITE}Taxa de fotogramas STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Taxa de simulação: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Numero de quantidades de atraso no percurso simulados por segundo. @@ -3501,7 +3502,7 @@ STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Localida STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Localidade {RED}não{BLACK} está a crescer STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Limite de ruído na localidade: {ORANGE}{COMMA}{BLACK} máx: {ORANGE}{COMMA} STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Centrar visualização na localidade. Ctrl+Clique abre um novo visualizador na localização da localidade -STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Autoridade local +STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Autoridade Local STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Ver informações sobre a autoridade local STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Alterar o nome da localidade @@ -3516,7 +3517,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Renomear Locali STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN} autoridade local STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zona STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Mostrar a zona dentro dos limites da autoridade local -STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Avaliações da empresa de transporte: +STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Classificações de empresas de transporte: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Acções disponíveis: STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lista de acções disponíveis nesta localidade - fazer clique no item para mais detalhes @@ -3540,8 +3541,8 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{Y STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}Financiar a reconstrução da rede rodoviária urbana.{}Causa engarrafamentos consideráveis ao tráfego rodoviário até 6 meses.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Construir uma estátua em honra da sua empresa.{}Providencia um incremento permanente na avaliação das estações nesta localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Financiar a construção de novos edifícios na localidade.{}Providencia um incremento temporário no crescimento desta localidade.{}{POP_COLOUR}Custo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Comprar 1 ano de direitos exclusivos de transportes nesta localidade.{}A autoridade local não permitirá que os passageiros e a carga usem as estações dos seus concorrentes.{}{POP_COLOUR}Custo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Subornar a autoridade local para aumentar a sua avaliação, correndo o risco de uma penalidade severa se for apanhado.{}{POP_COLOUR}Custo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Comprar 1 ano de direitos exclusivos de transportes nesta localidade.{}A autoridade local não permitirá que os passageiros e a carga usem as estações dos seus concorrentes. Um suborno bem-sucedido de um concorrente irá cancelar este contrato.{}{POP_COLOUR}Custo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Subornar a autoridade local para aumentar a sua avaliação e anular o direito de transporte exclusivo da concorrência, correndo o risco de uma penalidade severa se for apanhado.{}{POP_COLOUR}Custo: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Objectivos @@ -3629,9 +3630,9 @@ STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}Aceita: STR_STATION_VIEW_EXCLUSIVE_RIGHTS_SELF :{BLACK}Esta estação tem direitos de transporte exclusivos nesta localidade. STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPANY}{BLACK} comprou direitos exclusivos de transporte nesta localidade. -STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Avaliações -STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Mostrar avaliações da estação -STR_STATION_VIEW_SUPPLY_RATINGS_TITLE :{BLACK}Abastecimento mensal e classificação local: +STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Classificações +STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Exibir classificações da estação +STR_STATION_VIEW_SUPPLY_RATINGS_TITLE :{BLACK}Fornecimento mensal e classificação local: STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%) STR_STATION_VIEW_GROUP :{BLACK}Agrupar por @@ -3851,16 +3852,16 @@ STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Aeronaves Dispo STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Gerir lista STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Enviar instruções a todos os veículos desta lista STR_VEHICLE_LIST_REPLACE_VEHICLES :Substituir Veículos -STR_VEHICLE_LIST_SEND_FOR_SERVICING :Enviar para Serviço +STR_VEHICLE_LIST_SEND_FOR_SERVICING :Enviar para manutenção STR_VEHICLE_LIST_CREATE_GROUP :Criar grupo STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Lucro deste ano: {CURRENCY_LONG} (último ano: {CURRENCY_LONG}) STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING} -STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Enviar para Depósito -STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Enviar para Depósito -STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Enviar para Depósito -STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Enviar para Hangar +STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Enviar para depósito +STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Enviar para depósito +STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Enviar para depósito +STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Enviar para hangar STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Pressione botão esquerdo do rato para imobilizar todos os veículos na lista STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Pressione botão esquerdo do rato para iniciar todos os veículos na lista @@ -4613,8 +4614,8 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Houve um STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}A janela de Depuração de IA/Scripts de jogo está disponível apenas para o servidor # AI configuration window -STR_AI_CONFIG_CAPTION_AI :{WHITE}Configuração de IA -STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Configuração de Script de Jogo +STR_AI_CONFIG_CAPTION_AI :{WHITE}Definições de IA +STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Definições de Script de Jogo STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}O Script de jogo que será carregado no próximo jogo STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}As IAs que serão carregadas no próximo jogo STR_AI_CONFIG_HUMAN_PLAYER :Jogador humano diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index a91e0822c4..4512d26314 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -1233,6 +1233,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :stânga STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :centru STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :dreapta + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Valoarea maximă a împrumutului inițial: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Valoarea maximă pe care o companie o poate împrumuta (fără a ține cont de inflație) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1448,7 +1449,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Suma minimă ca STR_CONFIG_SETTING_ERRMSG_DURATION :Durata de afișare a mesajelor de eroare: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Durata afișării mesajelor de eroare în fereastra roșie. Unele mesaje de eroare (cele critice) nu sunt închise automat după trecerea acestei perioade, și trebuie închise manual. -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} {P 0 secundă secunde "de secunde"} STR_CONFIG_SETTING_HOVER_DELAY :Afișează texte informative: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Durata dinaintea afișării sfaturilor când se ține mausul pe un element al interfeței. Alternativ, afișarea sfaturilor poate fi setată pentru clic-dreapta diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 8f003a4ebf..8e0edd4b7b 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -742,7 +742,7 @@ STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Граф STR_GRAPH_INCOME_CAPTION :{WHITE}График дохода STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Количество доставленного груза STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Рейтинг компании (макс=1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Стоимость компании +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}График изменения стоимости компании STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Оплата за перевозку грузов STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}Дней в пути @@ -1385,6 +1385,8 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :слева STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :посередине STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :справа +STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}секунд{P 0 а ы ""} + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Максимальная сумма кредита: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максимальная сумма кредита для компании (без учета инфляции) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1600,7 +1602,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Минимал STR_CONFIG_SETTING_ERRMSG_DURATION :Длительность сообщения об ошибке: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Длительность показа красных окон с сообщениями об ошибках. Эта настройка не действует на некоторые сообщения (о критических ошибках) - они не закрываются автоматически, только вручную. -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} секунд{P а ы ""} STR_CONFIG_SETTING_HOVER_DELAY :Показывать подсказки: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Задержка между наведением указателя мыши на элемент интерфейса и появлением подсказки. Если это значение равно 0, подсказки появляются по щелчку правой кнопки мыши. @@ -2097,9 +2098,9 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :нет STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Стартовый множитель размера мегаполисов: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Средний размер мегаполисов по сравнению с остальными городами в начале игры -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Обновлять граф распределения кажд{P 0:2 ую ые ые} {STRING}{NBSP}секунд{P 0:2 у ы ""} +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Интервал обновления графа распределения: {STRING} STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Интервалы между перерасчётами графов распределения грузов. Каждый перерасчёт обновляет один компонент графа. То есть, по истечении указанного здесь времени будет обновлён не весь граф, а только один из его компонентов. Чем ниже значение, тем выше нагрузка на процессор. Чем выше значение, тем дольше не будет работать распределение грузов на новых маршрутах. -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Продолжительность перерасчёта графа распределения: {STRING}{NBSP}секунд{P 0:2 а ы ""} +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Продолжительность перерасчёта графа распределения: {STRING} STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Время, выделяемое на каждый перерасчёт одного из компонентов графа распределения грузов. Расчёт выполняется в отдельном вычислительном потоке. Чем ниже значение, тем выше вероятность того, что расчёт не будет выполнен за указанное время; в таком случае игра будет приостановлена до завершения расчёта. Чем выше значение, тем медленнее будет обновляться граф распределения в случае изменения маршрутов. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Распределение пассажиров: {STRING} @@ -3096,7 +3097,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}Решё STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Случайная # Fund new industry window -STR_FUND_INDUSTRY_CAPTION :{WHITE}Создать новое предприятие +STR_FUND_INDUSTRY_CAPTION :{WHITE}Создание предприятий STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Выберите тип предприятия из списка STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Множество различных предприятий STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Разместить на карте различные предприятия случайным образом @@ -3112,14 +3113,14 @@ STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Убра STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Убрать все предприятия с карты? # Industry cargoes window -STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Цепочка грузоперевозок для {STRING.gen} -STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Цепочка грузоперевозок для {STRING.gen} +STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Цепочка грузоперевозок - {STRING} +STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Цепочка грузоперевозок - {STRING} STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Производители STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Потребители STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Городские здания STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Щелчок по предприятию покажет его поставщиков и потребителей STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Щелчок по типу груза покажет его производителей и потребителей -STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Показать цепочку +STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Показать связи STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Показать производителей сырья и потребителей продукции этого предприятия STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Показать на карте STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Показать на карте выбранные предприятия @@ -3714,8 +3715,8 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{Y STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW}Профинансировать реконструкцию городских дорог.{}Вызывает большие нарушения движения на срок до 6 месяцев.{}{POP_COLOUR}Стоимость: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Установить статую в честь вашей компании.{}Она добавит рейтинг вашим станциям.{}{POP_COLOUR}Стоимость: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Профинансировать строительство новых зданий.{}Это временно ускорит рост города.{}{POP_COLOUR}Стоимость: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Приобрести годовые эксклюзивные права на транспортные перевозки в городе.{}Городская администрация разрешит пользоваться ТОЛЬКО вашими станциями.{}{POP_COLOUR}Стоимость: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Дать взятку городской администрации для повышения рейтинга. Существует риск санкций, если факт подкупа раскроется.{}{POP_COLOUR}Цена: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW}Приобрести годовые эксклюзивные права на транспортные перевозки в городе.{}Городская администрация разрешит пользоваться только вашими станциями. Однако контракт может быть аннулирован, если конкурирующей компании удастся подкупить администрацию.{}{POP_COLOUR}Стоимость: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Дать взятку городской администрации для повышения рейтинга и отмены эксклюзивных транспортных прав конкурирующей компании. Существует риск санкций, если факт подкупа раскроется.{}{POP_COLOUR}Цена: {CURRENCY_LONG} # Goal window STR_GOALS_CAPTION :{WHITE}Задачи компании «{COMPANY}» diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 303d02eb45..4d20247dac 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -1401,6 +1401,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Levo STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Sredina STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Desno + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Najveći zajam na početku: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Najveći iznos koji preduzeće može da pozajmi (ne uzimajući u obzir inflaciju) ###setting-zero-is-special @@ -1614,7 +1615,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Najmanji iznos STR_CONFIG_SETTING_ERRMSG_DURATION :Trajanje poruke o greški: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Trajanje prikazivanja poruka o greškama u crvenom prozoru. Neke (kritične) poruke o greškama se ne zatvaraju automatski posle ovog vremena nego moraju da se zatvore ručno -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sekund{P a e i} STR_CONFIG_SETTING_HOVER_DELAY :Prikaži poruke u ispod strelice miša: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Kašnjenje pre prikaza objašnjenja alata kada se miš postavi iznad nekog elementa interfejsa. Alternativno, objašnjenja alata se mogu vezati uz desnu dugmetom na mišu kada je ova vrednost postavljena na 0. diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 532b4b79ba..ea8e45b801 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1206,6 +1206,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :左侧 STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :中央 STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :右侧 + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :最大初始贷款: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :公司最大贷款额(不考虑通货膨胀的影响) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1421,7 +1422,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :启动自动更 STR_CONFIG_SETTING_ERRMSG_DURATION :错误信息持续时间{STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :红色窗口显示错误信息的持续时间,在这个时间内一些紧急的错误信息不会自动关闭,必须手动关闭 -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} 秒 STR_CONFIG_SETTING_HOVER_DELAY :显示提示信息:{STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :此设置决定鼠标停留在图标、按键或功能时显示提示信息的时间。如果此设置被赋值为 0,您必须揿住鼠标右键来显示图标、按键或功能的提示信息。 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 62fff2c04b..2e13dc635a 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1275,6 +1275,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :vľavo STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :v strede STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :vpravo + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximálny počiatočný úver: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximálna množstvo peňazí ktoré si môže spoločnosť požičať (bez inflácie) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1490,7 +1491,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minimálna suma STR_CONFIG_SETTING_ERRMSG_DURATION :Trvanie zobrazenia chybovej hlášky: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Trvanie zobrazenia chybovej hlášky v červenom okne. Uvedomte si že niektoré "kritické" správy nezmiznú po uplynutí času, ale musia byť zatvorené ručne. -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sek{P unda undy únd} STR_CONFIG_SETTING_HOVER_DELAY :Ukázať nápovedu: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Oneskorenie pred zobrazením nápovedy po prejdení prvku rozhrania myšou. Nápoveda môže byť eventuálne nastavené aj na kliknutie pravým tlačidlom myši pri hodnote 0. diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 2acfc3ee44..98cc5dffbc 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1281,6 +1281,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Levo STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Sredina STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Desno + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Najvišje začetno posojilo: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Najvišji znesek, ki si ga podjetje lahko izposodi (ni vključen izračun inflacije) ###setting-zero-is-special @@ -1482,7 +1483,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minimalna vsota STR_CONFIG_SETTING_ERRMSG_DURATION :Trajanje poročila o napaki: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Trajanje sporočil o napakah v rdečem kvadratu. Kritična opozorila se ne zaprejo sama po tem času, ampak ročno. -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sekund{P 0 o i e ""} STR_CONFIG_SETTING_HOVER_DELAY :Prikaz nasvetov orodij: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Čas do prikaza nasvetov orodij, ko je miška na orodju. Lahko se nasvete vidi tudi z desno tipko miške. diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 1b8083c64e..09797e3ee5 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1207,6 +1207,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Izquierda STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Centro STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Derecha + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Préstamo máximo inicial: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Cantidad máxima que una empresa puede recibir como préstamo (sin tener en cuenta la inflación) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1422,7 +1423,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Mínima cantida STR_CONFIG_SETTING_ERRMSG_DURATION :Duración de mensajes de error: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duración de los mensajes de error mostrados en ventanas rojas. Algunos mensajes de error (críticos) no se cierran automáticamente, y deben de ser cerrados manualmente -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} segundo{P 0 "" s} STR_CONFIG_SETTING_HOVER_DELAY :Mostrar mensajes de ayuda: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tiempo necesario del ratón sobre un elemento de la interfaz para que ésta muestre su mensaje de ayuda. De forma alternativa, se puede escoger mostrar estos mensajes al pulsar el botón derecho si el valor de esta opción ha sido establecido a 0. diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index c72ba492f6..17d1681a1e 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1207,6 +1207,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Izquierda STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Centro STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Derecha + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Máximo préstamo inicial: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Máxima cantidad que una empresa puede pedir prestada (sin tener en cuenta la inflación) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1422,7 +1423,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Mínima cantida STR_CONFIG_SETTING_ERRMSG_DURATION :Duración de mensajes de error: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duración de los mensajes de error mostrados en los avisos en rojo. Algunos mensajes de error (críticos) no se cierran automáticamente, solo de forma manual -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} segundo{P 0 "" s} STR_CONFIG_SETTING_HOVER_DELAY :Mostrar información de herramientas: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Tiempo de retraso para mostrar información de ayuda al posar el ratón en un elemento de la interfaz. Si el valor es 0 los mensajes se muestran con el botón derecho del ratón. diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 8254e4621f..608d1b341d 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -345,8 +345,8 @@ STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Öppna o STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausa spelet STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Snabbspola spelet STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Inställningar -STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Spara spelet, avsluta spelet, avsluta -STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Visa karta, extra vyfönster eller skyltlista +STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Spara spelet, öppna spel, avsluta spelet eller avsluta programmet +STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Visa karta, extra vyfönster, godsflöden eller skyltlista STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Visa lista över städer STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Visa subventioner STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Visa lista över företagets stationer @@ -370,8 +370,8 @@ STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Bygg ham STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Bygg flygplatser STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Öppna landskapsarkitektursverktygen för att höja/sänka land, plantera träd, etc. STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Visa ljud-/musikfönster -STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Visa senaste meddelandet/nyheten, visa meddelandeinställningar -STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Markinformation, konsol, felsökning av skript, skärmdumpar, om OpenTTD +STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Visa senaste meddelandet/nyheten, meddelandehistorik eller ta bort alla meddelanden +STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Markinformation, skärmdump, om OpenTTD och utvecklingsverktyg STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Byt verktygsrad # Extra tooltips for the scenario editor toolbar @@ -846,7 +846,7 @@ STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLAC STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} har avvecklats av investerarna och alla tillgångar har sålts ut! STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Nytt transportföretag startat! STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} börjar bygga nära {TOWN}! -STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} har tagits över av {STRING}! +STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} har tagits över av {STRING} för en hemlig summa! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(VD) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} har sponsrat byggnationen av den nya staden {TOWN}! @@ -932,7 +932,9 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Kopiera STR_GAME_OPTIONS_CAPTION :{WHITE}Spelinställningar STR_GAME_OPTIONS_TAB_GENERAL :Allmänt +STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Välj generella inställningar STR_GAME_OPTIONS_TAB_GRAPHICS :Grafik +STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Välj grafik inställningar STR_GAME_OPTIONS_TAB_SOUND :Ljud STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Väljd ljud- och musikinställningar @@ -949,6 +951,7 @@ STR_GAME_OPTIONS_VOLUME_100 :100% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valutaenheter STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Välj valutaenhet +STR_GAME_OPTIONS_CURRENCY_CODE :{STRING} ({STRING}) ###length 42 STR_GAME_OPTIONS_CURRENCY_GBP :Brittiskt pund @@ -1060,7 +1063,7 @@ STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} sakn STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Ytterligare information om basgrafik-settet STR_GAME_OPTIONS_BASE_SFX :{BLACK}Grundljudspaket -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Välj vilket grundljudspaket som ska användas +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Välj vilket grundljudspaket som ska användas (kan inte ändras under spel, utom endast från huvudmenyn) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Ytterligare information om grundljudpaketet STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Musikpaket valt @@ -1176,6 +1179,7 @@ STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Utöka a STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Stäng alla STR_CONFIG_SETTING_RESET_ALL :{BLACK}Återställ alla värden STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(ingen förklaring tillgänglig) +STR_CONFIG_SETTING_VALUE :{PUSH_COLOUR}{ORANGE}{STRING}{POP_COLOUR} STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Standardvärde: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Typ av inställning: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE_CLIENT :Klientinställning (sparas ej i spel-filer och påverkar alla spel) @@ -1229,6 +1233,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Vänster STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Centrerad STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Höger + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Maximalt startlån: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximalt belopp ett företag kan låna (där inflationen inte tas med i beräkningen) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1444,7 +1449,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minsta belopp s STR_CONFIG_SETTING_ERRMSG_DURATION :Visningstid för felmeddelanden: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Tid som felmeddelanden i ett rött fönster ska visas. Notera att vissa (kritiska) felmeddelanden inte stängs automatiskt efter denna tid, utan måste stängas manuellt -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sekund{P 0 "" er} STR_CONFIG_SETTING_HOVER_DELAY :Visa tooltips: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Fördröjning innan tooltips visas när muspekaren hålls över ett gränssnittselement. Alternativt kan tooltips bindas till den högra musknappen när detta värde är satt till 0. @@ -1555,7 +1559,7 @@ STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :Grå till röd STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :Gråskala STR_CONFIG_SETTING_SCROLLMODE :Vyfönsters skrollningsbeteende: {STRING} -STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Beteende vid scrollning av kartan +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Beteende vid scrollning av kartan. Muspositionen låst valet funkar inte på alla system, som tillexempel webbaserade versioner, pekskärmar, Linux med Wayland, med mera ###length 4 STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Rör vyn med höger musknapp, musens position låst STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Rör kartan med höger musknapp, musens position låst @@ -1941,9 +1945,9 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Inga STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Initial stadsstorleks-multiplikator: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Storstäders genomsnittliga storlek i relation till vanliga städers vid spelets början -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Uppdatera distributionsdiagram var {STRING}{NBSP}sekund{P 0:2 "" s} +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Uppdatera distributionsdiagram var {STRING}sekund{P 0:2 "" s} STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Tid mellan efterföljande omräkningar av länkgrafen. Varje omräkning beräknar planerna för en komponent i grafen. Det betyder att ett värde X för den här inställningen inte betyder att hela grafen kommer att uppdateras var X:e sekund. Bara viss komponent kommer att göra det. Ju kortare du ställer in den desto mer CPU-tid kommer att behövas för att beräkna den. Ju längre du ställer in den desto längre tid tar det tills lastdistributionen startar på nya rutter. -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Ta {STRING}{NBSP}sekund{P 0:2 "" s} för omräkning av distributionsdiagrammet +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Ta {STRING} för omräkning av distributionsdiagrammet STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Tid som det tar för varje omräkning av en länkdiagramkomponent. När en omräkning startas skapas en tråd som tillåts köra i detta antal sekunder. Ju kortare du ställer in detta desto mer sannolikt är det att tråden inte är färdig när den ska. Sedan stannar spelet tills det är ("lag"). Ju längre du ställer in den desto längre tid tar det för distributionen att uppdateras när rutter ändras. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distributionssätt för passagerare: {STRING} @@ -1970,7 +1974,7 @@ STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Genom att sätt STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Belastning av korta rutter innan rutter med hög kapacitet används: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Ofta finns det flera rutter mellan två givna stationer. Godsdistributionen kommer att fylla upp den första rutten först och därefter den näst kortaste tills den är mättad osv. Mättnadsgraden bestäms utifrån en uppskattning av kapaciteten och planerad användning. När godsdristributionen har belastat samtliga rutter, och om det finns kvarvarande behov, då kommer samtliga rutter att överbelastas med preferens för rutterna med högst kapacitet. Uppskattningen av kapaciteten kommer oftast inte ske med hög noggrannhet. Denna inställning tillåter dig att ställa in hur många procent som en kort rutt ska belastas innan algoritmen ska välja nästa längre rutt. Sätt värdet till under 100 % om du vill undvika överfulla stationer i händelse av överskattad kapacitet. -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Hastighetsenhet: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Hastighetsenhet (land)t: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Hastighetsenheter (nautical): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Närhelst en hastighet visas i användargränssnittet, visa den i den valda enheten ###length 5 @@ -2704,7 +2708,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bygg en STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Välj vilken stationsklass som ska visas STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Välj stationstyp att bygga -STR_STATION_CLASS_DFLT :Grundinställd station +STR_STATION_CLASS_DFLT :Original STR_STATION_CLASS_DFLT_STATION :Standardstation STR_STATION_CLASS_DFLT_ROADSTOP :Standardvägstopp STR_STATION_CLASS_WAYP :Riktmärken @@ -2932,14 +2936,14 @@ STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Ta bort STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Är du säker på att du vill ta bort alla industrier? # Industry cargoes window -STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Industrikedja för industrin {STRING} -STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Industrikedja för godset {STRING} +STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Industrikedja - {STRING} +STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Godskedja - {STRING} STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Producerande industrier STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Mottagande industrier STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Hus STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Klicka på industrin för att se dess leverantörer och kunder STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Klicka på godset för att se dess leverantörer och kunder -STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Visa kedja +STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Industrikedja STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Visa industrier som levererar och tar emot gods STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Koppla till minikartan STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Markera visade industrier även på minikartan @@ -3846,7 +3850,9 @@ STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Hantera STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Skicka instruktioner till alla fordon på denna lista STR_VEHICLE_LIST_REPLACE_VEHICLES :Byt ut fordon STR_VEHICLE_LIST_SEND_FOR_SERVICING :Skicka på service +STR_VEHICLE_LIST_CREATE_GROUP :Skapa grupp STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Vinst detta år: {CURRENCY_LONG} (förra året: {CURRENCY_LONG}) +STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING} STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Skicka till depå @@ -4567,6 +4573,7 @@ STR_TIMETABLE_EXPECTED :{BLACK}Förvän STR_TIMETABLE_SCHEDULED :{BLACK}Schemalagt STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Ändra mellan förväntat och schemalagt +STR_TIMETABLE_DEPARTURE :D: {COLOUR}{DATE_TINY} # Date window (for timetable) @@ -4625,7 +4632,7 @@ STR_AI_CONFIG_AI :{SILVER}Datorsp STR_AI_CONFIG_CHANGE_AI :{BLACK}Välj datorspelare STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Välj spelskript -STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Läs in ett annat skript +STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Läs in ett annat skript. Ctrl+klick visar alla tillgängliga versioner STR_AI_CONFIG_CONFIGURE :{BLACK}Konfigurera STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Konfigurera datorspelarens parametrar diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 54112d2360..75ae17cc29 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1145,6 +1145,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :இடது STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :நடு STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :வலது + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :அதிகபட்ச ஆரம்ப கடன்: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :ஒரு நிறுவனத்தால் பெறமுடியும் கடன் (பணவீக்கத்தினைக் கணக்கில் எடுத்துக் கொள்ளாமல்) ###setting-zero-is-special @@ -1322,7 +1323,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY :காலாவ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :தானாக புதுப்பிக்கும் வாகனங்களைக் கருத்தில் கொள்வதற்கு முன் வங்கியில் இருக்க வேண்டிய குறைந்தபட்ச பணம் STR_CONFIG_SETTING_ERRMSG_DURATION :பிழை செய்திக்கான கால அளவு: {STRING} -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} விநாடி{P 0 "" கள்} STR_CONFIG_SETTING_HOVER_DELAY :tooltips இனை காட்டு: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_VALUE :{COMMA} விநாடி{P 0 "" கள்} காட்டவும் @@ -2239,6 +2239,7 @@ STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK}தர STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK}தேர்ந்தெடுத்தவற்றின் குறியினை நீக்கு STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}அனைத்தையும் பதிவிறக்க வேண்டாம் என்று குறிக்கவும் STR_CONTENT_SEARCH_EXTERNAL :{BLACK}வெளி இணையதளங்களில் தேடு +STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}OpenTTDஇன் கோப்பு சேவையில் கிடைக்காத கோப்புகளுக்கு OpenTTDஉடன் தொடர்பில்லாத இணையதளங்களில் தேடவும் STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}நீங்கள் OpenTTD ஐ விட்டு வெளியேறுகிறீர்கள்! STR_CONTENT_FILTER_TITLE :{BLACK}குறியீடு/பெயர் வடிகட்டி: STR_CONTENT_OPEN_URL :{BLACK}இணையதளத்தினை பார்வையிடு @@ -2449,6 +2450,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}நீ STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}கப்பல் பணிமனையினைக் கட்டவும்(கப்பல்களை வாங்க மற்றும் பழுதுபார்க்க). Shift அழுத்தினால் கட்டுமான/செலவு மதிப்பீடு காட்டப்படும் STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}கப்பல் துறைமுகத்தினைக் கட்டவும். Ctrl அழுத்தினால் துறைமுகங்களினை இணைக்கலாம். Shift அழுத்தினால் கட்டுமான/செலவு மதிப்பீடு காட்டப்படும் STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}நீர்வாழ்வை உருவாக்குங்கள். Shift கட்டிடம் கட்டுதல் / செலவு மதிப்பீட்டைக் காட்டும் +STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}நீர் பரப்பளவு வரையறுக்கவும்.{}கால்வாய் கட்டவும். கடல் மட்டத்தில் Ctrl அழுத்திவைத்தால், சுற்றில் வெள்ளமாக்கவும் STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}ஆறுகளை அமைக்கவும். Ctrl அழுத்தினால் குறுக்கான பகுதியைத் தேர்ந்தெடுக்கலாம் # Ship depot construction window @@ -2801,6 +2803,7 @@ STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}ஆற STR_MAPGEN_SMOOTHNESS :{BLACK}சமநிலை: STR_MAPGEN_VARIETY :{BLACK}பலவகை பரவல்: STR_MAPGEN_GENERATE :{WHITE}உருவாக்கு +STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF அமைப்புகள் ###length 21 STR_MAPGEN_TOWN_NAME_ORIGINAL_ENGLISH :ஆங்கிலம் (இயற்கையான) diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 721b9311a4..1f42beda71 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1141,6 +1141,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :ซ้าย STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :กลาง STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :ขวา + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :เงินกู้เริ่มต้นสูงสุด: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :บริษัท สามารถกู้ยืมเงินจำนวนสูงสุด (โดยไม่คำนึงถึงอัตราเงินเฟ้อเข้าบัญชี) ###setting-zero-is-special @@ -1342,7 +1343,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :จำนวน STR_CONFIG_SETTING_ERRMSG_DURATION :ระยะเวลาแสดงของข้อความแจ้งความผิดพลาด: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :เป็นระยะเวลาที่จะคงแสดงข้อความแจ้งความผิดพลาดของเกม จะคงอยู่ตามระยะเวลาที่ตั้งค่าไว้ข้างต้น -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} วินาที STR_CONFIG_SETTING_HOVER_DELAY :แสดงบอลลูนข้อความช่วยเหลือ: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :หน่วงระยะเวลาเป็นวินาทีเมื่อนำเมาส์วางไว้เหนือปุ่มต่างๆเพื่อแสดงข้อความช่วยเหลือ diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index becf2bd820..4865c83be3 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1206,6 +1206,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :靠左 STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :置中 STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :靠右 + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :最大貸款額:{STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :公司最多可借多少錢(此設定的值排除了通貨膨脹因素)。 STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1421,7 +1422,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :如果公司銀 STR_CONFIG_SETTING_ERRMSG_DURATION :錯誤訊息持續時間:{STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :設定所有以紅色對話窗顯示的錯誤訊息之持續時間。請注意有些較嚴重的錯誤訊息必須手動關閉。 -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} 秒 STR_CONFIG_SETTING_HOVER_DELAY :顯示工具提示:{STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :設定游標需在工具按鈕之上停留多久才會顯示工具使用提示。如此選項的值為 0,您需在工具按鈕上右撳鼠键以顯示工具使用提示。 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 2ede1a4db2..3591d8c887 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -605,7 +605,7 @@ STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Faaliyet STR_GRAPH_INCOME_CAPTION :{WHITE}Gelir Grafiği STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Taşınan kargo STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Şirket performans değerlendirmeleri (azami=1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Şirket Değerleri +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Şirket Değerleri Grafiği STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Kargo Ödeme Seviyeleri STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}Taşınma süresi @@ -637,7 +637,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :Genel Müdür STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Kodaman # Performance detail window -STR_PERFORMANCE_DETAIL :{WHITE}Ayrıntılı performans değerlendirmesi +STR_PERFORMANCE_DETAIL :{WHITE}Ayrıntılı Performans Reğerlendirmesi STR_PERFORMANCE_DETAIL_KEY :{BLACK}Detay STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT}) STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA}) @@ -1065,7 +1065,7 @@ STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} kay STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Temel grafik setiyle ilgili ilave bilgiler STR_GAME_OPTIONS_BASE_SFX :{BLACK}Temel ses kümesi -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Kullanılacak temel ses kümesini seçin +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Kullanılacak temel ses kümesini seçin (oyun içinde değiştirlemez sadece ana menüde değiştirebilinir) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Temel ses kümesiyle ilgili ilave bilgiler STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Temel müzik kümesi @@ -1235,6 +1235,8 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Sol STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Orta STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Sağ +STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}saniye{P 0 "ler"} + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :En yüsek açılış borcu: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Bir şirketin alabileceği en fazla borç (enflasyon hesaba katılmadan) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1450,7 +1452,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Araçları otom STR_CONFIG_SETTING_ERRMSG_DURATION :Hata mesajının süresi: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Kırmızı penceredeki hata mesajlarının görüntüleneceği süre. Fakat bazı (kritik) hata mesajları bu süre dolduğunda otomatik kapanmaz, el ile kapatılması gerekir. -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} saniye STR_CONFIG_SETTING_HOVER_DELAY :Araçlara dair bilgileri göster: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Fare bir arayüz elemanının üzerine getirildiğinde o araca dair bilgilerin gösterilmesi için geçmesi gereken süre. Alternatif olarak bu işlem için sağ fare tuşu da kullanılabilir. @@ -1947,9 +1948,9 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Hiçbiri STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Birincil şehir büyüklüğü çarpanı: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Oyun başlangıcında şehirlerin normal kasabalara kıyasla ortalama büyüklüğü -STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Dağıtım grafiğini her {STRING}{NBSP}saniyede{P 0:2 ""} güncelle +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Dağıtım grafiğini her {STRING} STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Bağlantı grafiğinin sonraki yeniden hesaplamaları arasındaki süre. Her yeniden hesaplama, grafiğin bir bileşeni için planları hesaplar. Bu, bu ayar için bir X değerinin tüm grafiğin her X saniyede bir güncelleneceği anlamına gelmediği anlamına gelir. Sadece bazı bileşenler olacaktır. Ne kadar kısa ayarlarsanız, hesaplamak için o kadar fazla CPU süresi gerekir. Ne kadar uzun ayarlarsanız, kargo dağıtımının yeni rotalarda başlaması o kadar uzun sürer. -STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Dağıtım grafiğinin yeniden hesaplanması için {STRING}{NBSP}saniye{P 0:2 ""} bekleyin +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Dağılım grafiğinin yeniden hesaplanması için {STRING} bekleyin STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Bir bağlantı grafiği bileşeninin her yeniden hesaplanması için geçen süre. Bir yeniden hesaplama başlatıldığında, bu sayıda saniye boyunca çalışmasına izin verilen bir iş parçacığı oluşturulur. Bunu ne kadar kısa ayarlarsanız, iş parçacığının olması gerektiği zamanda bitmemiş olma olasılığı o kadar artar. Ardından oyun ("gecikme") olana kadar durur. Ne kadar uzun ayarlarsanız, rotalar değiştiğinde dağıtımın güncellenmesi o kadar uzun sürer. STR_CONFIG_SETTING_DISTRIBUTION_PAX :Yolcular için dağıtım kipi: {STRING} @@ -2922,7 +2923,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}3x3 şeb STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Rastgele # Fund new industry window -STR_FUND_INDUSTRY_CAPTION :{WHITE}Yeni fabrika aç +STR_FUND_INDUSTRY_CAPTION :{WHITE}Sanayi Fonla STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Bu listeden uygun fabrikayı seçin STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Rastgele endüstriler oluştur STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Haritayı rastgele fabrikalarla doldur @@ -2938,14 +2939,14 @@ STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Bütün STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Bütün endüstrileri kaldırmak istediğinize emin misiniz? # Industry cargoes window -STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}{STRING} fabrikası için sanayi zinciri -STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}{STRING} kargo türü için sanayi zinciri +STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Sanayi Zinciri - {STRING} +STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Cargo Zinciri - {STRING} STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Üreten fabrikalar STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Kabul eden fabrikalar STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Evler STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Sağlayanlarını ve müşterilerini görmek için fabrikayı tıklayın STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Sağlayanlarını ve müşterilerini görmek için kargoyu tıklayın -STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Zinciri göster +STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Sanayi Zinciri STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Kargo sağlayan ve kabul eden fabrikaları göster STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Küçük haritaya bağla STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Gösterilen fabrikaları küçük haritada da seç @@ -3540,7 +3541,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{Y STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{PUSH_COLOUR}{YELLOW} Yol tamirleri için belediyeye bağış yap.{}6 ay boyunca şehrin yollarında önemli aksamalara sebep olur.{}{POP_COLOUR}Fiyat: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Şirket sahibinin heykelini dik.{}Şehirdeki istasyon derecelendirmesinde kalıcı bir yükseltme sağlar.{}{POP_COLOUR}Fiyatı: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Şehirde ticari binaların yapımı için bağış yap.{}Bu kasabanın büyümesine geçici bir yükseltme sağlar.{}{POP_COLOUR}Fiyatı: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW} Bir yıllık ayrıcalıklı nakliyat haklarını satın al.{} Belediye, rakip istasyonların yolcu ve kargo taşımasına izin vermez.{}{POP_COLOUR} Fiyat: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{PUSH_COLOUR}{YELLOW} Bir yıllık ayrıcalıklı nakliyat haklarını satın al.{} Belediye, rakip istasyonların yolcu ve kargo taşımasına izin vermez. Bir rakipten alınan başarılı bir rüşvet, bu sözleşmeyi iptal edecektir.{}{POP_COLOUR} Fiyat: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Yakalanırsan şiddetli bir ceza alma riskini göze alarak yerel yönetime bölge derecelendirmesini arttırmak için rüşvet ver.{}{POP_COLOUR}Fiyat: {CURRENCY_LONG} # Goal window @@ -4613,7 +4614,7 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Çalış STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}YZ Hata Ayıklama penceresi sadece sunucu içindir # AI configuration window -STR_AI_CONFIG_CAPTION_AI :{WHITE}YZ Yapılandırması +STR_AI_CONFIG_CAPTION_AI :{WHITE}YZ Ayarları STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Oyun Betiği Yapılandırması STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Bir sonraki oyunda yüklenecek Oyun Betiği STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Bir sonraki oyunda yüklenecek YZ'ler diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 796062c2fb..6d2c5705d8 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1355,6 +1355,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :ліворуч STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :по центру STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :праворуч + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Максимальна сума позики: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максимальна сума позики для компанії (без урахування інфляції) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1569,7 +1570,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Мінімал STR_CONFIG_SETTING_ERRMSG_DURATION :Тривалість повідомлення про помилку: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Тривалість відображення повідомлень про помилки (червоне вікно повідомлень). Деякі (критичні) повідомлення необхідно закривати власноруч. -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} секунд{P а и ""} STR_CONFIG_SETTING_HOVER_DELAY :Відображати підказки: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Затримка перед відображенням підказок при наведенні курсором на елементи інтерфейса. Окрім того, відображення підказок можна призначити на праву кнопку миші, якщо це значення поставити на 0. diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index e8e5b78098..2d8e4cb976 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -1059,6 +1059,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :بائیں STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :درمیان STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :دائیں + ###setting-zero-is-special diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 09ab232eff..0cbd96a0c3 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1059,12 +1059,12 @@ STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Tần số quét hơn 60Hz có thể làm ảnh hưởng đến hiệu năng STR_GAME_OPTIONS_BASE_GRF :{BLACK}Gói đồ họa -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Chọn gói đồ họa để sử dụng +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Chọn gói đồ họa để sử dụng (không thể thay đổi khi trong ván chơi, chỉ đổi được khi ở menu chính) STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} thiếu/hỏng file STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Thông tin thêm về gói đồ họa STR_GAME_OPTIONS_BASE_SFX :{BLACK}Bộ âm thanh chuẩn -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Chọn bộ âm thanh chuẩn để dùng +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Chọn bộ âm thanh chuẩn để dùng (không thể thay đổi khi trong ván chơi, chỉ đổi được khi ở menu chính) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Thông tin thêm về bộ âm thanh chuẩn STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Gói nhạc chuẩn @@ -1234,6 +1234,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Trái STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Giữa STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Phải + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Khoảng vay khởi nghiệp tối đa: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Hạn mức tối đa một công ty có thể vay (không tính lạm phát) STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} @@ -1449,7 +1450,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Số dư tiền STR_CONFIG_SETTING_ERRMSG_DURATION :Khoảng thời gian thông báo lỗi xuất hiện trên màn hình: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Khoảng thời gian hiện thị thông báo trong cửa sổ màu đỏ. Lưu ý rằng cửa sổ thông báo sẽ tự đóng khi sau khoảng thời gian này, hoặc là được đóng bằng tay -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} giây STR_CONFIG_SETTING_HOVER_DELAY :Hiện chú thích: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Khoảng thời gian trễ mà hướng dẫn hiện lên khi di chuột tới đối tượng, có thể hiện hướng dẫn bằng bấm nút phải chuột khi giá trị này bằng 0. diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 1898043ed7..4b72bb8de1 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1160,6 +1160,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Chwith STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Canol STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :De + STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Benthyciad agoriadol uchafsymol: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Y swm uchaf y gall cwmni fenthyca (heb ustyried chwyddiant) ###setting-zero-is-special @@ -1369,7 +1370,6 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Lleiafswm arian STR_CONFIG_SETTING_ERRMSG_DURATION :Ystod neges gwall: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Amser i ddangos negeseuon gwall mewn ffenestr coch. Sylwer ni gaiff rhai negeseuon gwall (difrifol) eu cau'n ddiofyn -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} eiliad STR_CONFIG_SETTING_HOVER_DELAY :Dangos cynghorion: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Oediad cyn y dangosir cynghorion wrth ddal y cyrchydd dros rhyw elfen rhyngwyneb. Fel arall rhwymir cynghorion at botwm dde'r llygoden pan fo'r gwerth yma'n 0. diff --git a/src/league_gui.cpp b/src/league_gui.cpp index ec1e828178..7a0b2c9b3b 100644 --- a/src/league_gui.cpp +++ b/src/league_gui.cpp @@ -197,7 +197,7 @@ static const NWidgetPart _nested_performance_league_widgets[] = { }; static WindowDesc _performance_league_desc( - WDP_AUTO, "league", 0, 0, + WDP_AUTO, "performance_league", 0, 0, WC_COMPANY_LEAGUE, WC_NONE, 0, _nested_performance_league_widgets, lengthof(_nested_performance_league_widgets) @@ -429,7 +429,7 @@ static const NWidgetPart _nested_script_league_widgets[] = { }; static WindowDesc _script_league_desc( - WDP_AUTO, "league", 0, 0, + WDP_AUTO, "script_league", 0, 0, WC_COMPANY_LEAGUE, WC_NONE, 0, _nested_script_league_widgets, lengthof(_nested_script_league_widgets) diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index f905cb049e..2116450dcc 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -60,7 +60,7 @@ static const NWidgetPart _nested_land_info_widgets[] = { }; static WindowDesc _land_info_desc( - WDP_AUTO, "land_info", 0, 0, + WDP_AUTO, nullptr, 0, 0, WC_LAND_INFO, WC_NONE, 0, _nested_land_info_widgets, lengthof(_nested_land_info_widgets) @@ -205,7 +205,7 @@ public: if (td.owner_type[i] == STR_NULL) continue; SetDParam(0, STR_LAND_AREA_INFORMATION_OWNER_N_A); - if (td.owner[i] != OWNER_NONE && td.owner[i] != OWNER_WATER) GetNameOfOwner(td.owner[i], tile); + if (td.owner[i] != OWNER_NONE && td.owner[i] != OWNER_WATER) SetDParamsForOwnedBy(td.owner[i], tile); this->landinfo_data.push_back(GetString(td.owner_type[i])); } @@ -231,12 +231,11 @@ public: /* Location */ std::stringstream tile_ss; tile_ss << "0x" << std::setfill('0') << std::setw(4) << std::hex << std::uppercase << tile; // 0x%.4X - std::string tile_str = tile_ss.str(); // Can't pass it directly to SetDParamStr as the string is only a temporary and would be destructed before the GetString call. SetDParam(0, TileX(tile)); SetDParam(1, TileY(tile)); SetDParam(2, GetTileZ(tile)); - SetDParamStr(3, tile_str); + SetDParamStr(3, tile_ss.str()); this->landinfo_data.push_back(GetString(STR_LAND_AREA_INFORMATION_LANDINFO_COORDS)); /* Local authority */ @@ -712,8 +711,7 @@ static WindowDesc _tool_tips_desc( struct TooltipsWindow : public Window { StringID string_id; ///< String to display as tooltip. - byte paramcount; ///< Number of string parameters in #string_id. - uint64 params[5]; ///< The string parameters. + std::vector params; ///< The string parameters. TooltipCloseCondition close_cond; ///< Condition for closing the window. char buffer[DRAW_STRING_BUFFER]; ///< Text to draw int viewport_virtual_left; ///< Owner viewport state: left @@ -724,13 +722,10 @@ struct TooltipsWindow : public Window { this->parent = parent; this->string_id = str; - static_assert(sizeof(this->params[0]) == sizeof(params[0])); - assert(paramcount <= lengthof(this->params)); - if (paramcount > 0) memcpy(this->params, params, sizeof(this->params[0]) * paramcount); - this->paramcount = paramcount; + CopyOutDParam(this->params, paramcount); this->close_cond = close_tooltip; this->delete_next_mouse_loop = false; - if (this->paramcount == 0) GetString(this->buffer, str, lastof(this->buffer)); // Get the text while params are available + if (this->params.size() == 0) GetString(this->buffer, str, lastof(this->buffer)); // Get the text while params are available if (close_tooltip == TCC_HOVER_VIEWPORT) { this->viewport_virtual_left = parent->viewport->virtual_left; this->viewport_virtual_top = parent->viewport->virtual_top; @@ -764,12 +759,11 @@ struct TooltipsWindow : public Window void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { /* There is only one widget. */ - if (this->paramcount == 0) { + if (this->params.size() == 0) { size->width = std::min(GetStringBoundingBox(this->buffer).width, ScaleGUITrad(194)); size->height = GetStringHeight(this->buffer, size->width); } else { - for (uint i = 0; i != this->paramcount; i++) SetDParam(i, this->params[i]); - + CopyInDParam(this->params); size->width = std::min(GetStringBoundingBox(this->string_id).width, ScaleGUITrad(194)); size->height = GetStringHeight(this->string_id, size->width); } @@ -785,12 +779,10 @@ struct TooltipsWindow : public Window GfxFillRect(r, PC_BLACK); GfxFillRect(r.Shrink(WidgetDimensions::scaled.bevel), PC_LIGHT_YELLOW); - if (this->paramcount == 0) { + if (this->params.size() == 0) { DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.framerect).Shrink(WidgetDimensions::scaled.fullbevel), this->buffer, TC_BLACK, SA_CENTER); } else { - for (uint arg = 0; arg < this->paramcount; arg++) { - SetDParam(arg, this->params[arg]); - } + CopyInDParam(this->params); DrawStringMultiLine(r.Shrink(WidgetDimensions::scaled.framerect).Shrink(WidgetDimensions::scaled.fullbevel), this->string_id, TC_BLACK, SA_CENTER); } } @@ -1167,7 +1159,7 @@ static const NWidgetPart _nested_query_string_widgets[] = { }; static WindowDesc _query_string_desc( - WDP_CENTER, "query_string", 0, 0, + WDP_CENTER, nullptr, 0, 0, WC_QUERY_STRING, WC_NONE, 0, _nested_query_string_widgets, lengthof(_nested_query_string_widgets) @@ -1194,7 +1186,7 @@ void ShowQueryString(StringID str, StringID caption, uint maxsize, Window *paren */ struct QueryWindow : public Window { QueryCallbackProc *proc; ///< callback function executed on closing of popup. Window* points to parent, bool is true if 'yes' clicked, false otherwise - uint64 params[10]; ///< local copy of #_global_string_params + std::vector params; ///< local copy of #_global_string_params StringID message; ///< message shown for query window StringID caption; ///< title of window bool precomposed; @@ -1206,7 +1198,7 @@ struct QueryWindow : public Window { /* Create a backup of the variadic arguments to strings because it will be * overridden pretty often. We will copy these back for drawing */ this->precomposed = false; - CopyOutDParam(this->params, 0, lengthof(this->params)); + CopyOutDParam(this->params, 10); this->caption = caption; this->message = message; this->proc = callback; @@ -1249,14 +1241,14 @@ struct QueryWindow : public Window { if (this->precomposed) { _temp_special_strings[0] = this->caption_str; } else { - CopyInDParam(1, this->params, lengthof(this->params)); + CopyInDParam(this->params, 1); } SetDParam(0, this->caption); break; case WID_Q_TEXT: if (!this->precomposed) { - CopyInDParam(0, this->params, lengthof(this->params)); + CopyInDParam(this->params); } break; } @@ -1365,21 +1357,23 @@ static void RemoveExistingQueryWindow(Window *parent, QueryCallbackProc *callbac } /** - * Show a modal confirmation window with standard 'yes' and 'no' buttons + * Show a confirmation window with standard 'yes' and 'no' buttons * The window is aligned to the centre of its parent. * @param caption string shown as window caption * @param message string that will be shown for the window * @param parent pointer to parent window, if this pointer is nullptr the parent becomes * the main window WC_MAIN_WINDOW * @param callback callback function pointer to set in the window descriptor + * @param focus whether the window should be focussed (by default false) */ -void ShowQuery(StringID caption, StringID message, Window *parent, QueryCallbackProc *callback) +void ShowQuery(StringID caption, StringID message, Window *parent, QueryCallbackProc *callback, bool focus) { if (parent == nullptr) parent = GetMainWindow(); RemoveExistingQueryWindow(parent, callback); - new QueryWindow(&_query_desc, caption, message, parent, callback); + QueryWindow *q = new QueryWindow(&_query_desc, caption, message, parent, callback); + if (focus) SetFocusedWindow(q); } /** @@ -1391,13 +1385,14 @@ void ShowQuery(StringID caption, StringID message, Window *parent, QueryCallback * the main window WC_MAIN_WINDOW * @param callback callback function pointer to set in the window descriptor */ -void ShowQuery(std::string caption, std::string message, Window *parent, QueryCallbackProc *callback) +void ShowQuery(std::string caption, std::string message, Window *parent, QueryCallbackProc *callback, bool focus) { if (parent == nullptr) parent = GetMainWindow(); RemoveExistingQueryWindow(parent, callback); - new QueryWindow(&_query_desc, std::move(caption), std::move(message), parent, callback); + QueryWindow *q = new QueryWindow(&_query_desc, std::move(caption), std::move(message), parent, callback); + if (focus) SetFocusedWindow(q); } static const NWidgetPart _modifier_key_toggle_widgets[] = { diff --git a/src/music_gui.cpp b/src/music_gui.cpp index f66ee1195b..673927e416 100644 --- a/src/music_gui.cpp +++ b/src/music_gui.cpp @@ -650,7 +650,7 @@ static const NWidgetPart _nested_music_track_selection_widgets[] = { }; static WindowDesc _music_track_selection_desc( - WDP_AUTO, "music_track", 0, 0, + WDP_AUTO, nullptr, 0, 0, WC_MUSIC_TRACK_SELECTION, WC_NONE, 0, _nested_music_track_selection_widgets, lengthof(_nested_music_track_selection_widgets) diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 0621283cc6..9e09600399 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -859,8 +859,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_ERROR(Packet *p if (error < (ptrdiff_t)lengthof(network_error_strings)) err = network_error_strings[error]; /* In case of kicking a client, we assume there is a kick message in the packet if we can read one byte */ if (error == NETWORK_ERROR_KICKED && p->CanReadFromPacket(1)) { - std::string kick_msg = p->Recv_string(NETWORK_CHAT_LENGTH); - SetDParamStr(0, kick_msg); + SetDParamStr(0, p->Recv_string(NETWORK_CHAT_LENGTH)); ShowErrorMessage(err, STR_NETWORK_ERROR_KICK_MESSAGE, WL_CRITICAL); } else { ShowErrorMessage(err, INVALID_STRING_ID, WL_CRITICAL); diff --git a/src/newgrf.cpp b/src/newgrf.cpp index a746b78c78..b6cdad337d 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -2646,12 +2646,9 @@ static ChangeInfoResult LoadTranslationTable(uint gvid, int numinfo, ByteReader */ static std::string ReadDWordAsString(ByteReader *reader) { - char output[5]; - for (int i = 0; i < 4; i++) output[i] = reader->ReadByte(); - output[4] = '\0'; - StrMakeValidInPlace(output, lastof(output)); - - return std::string(output); + std::string output; + for (int i = 0; i < 4; i++) output.push_back(reader->ReadByte()); + return StrMakeValid(output); } /** diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 7268e4b161..00f88f65cb 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -78,9 +78,8 @@ static void ShowNewGRFInfo(const GRFConfig *c, const Rect &r, bool show_params) for (uint i = 0; i < c->error->param_value.size(); i++) { SetDParam(3 + i, c->error->param_value[i]); } - std::string message = GetString(c->error->message != STR_NULL ? c->error->message : STR_JUST_RAW_STRING); - SetDParamStr(0, message); + SetDParamStr(0, GetString(c->error->message != STR_NULL ? c->error->message : STR_JUST_RAW_STRING)); tr.top = DrawStringMultiLine(tr, c->error->severity); } @@ -112,11 +111,9 @@ static void ShowNewGRFInfo(const GRFConfig *c, const Rect &r, bool show_params) /* Show GRF parameter list */ if (show_params) { - std::string params; if (c->num_params > 0) { - params = GRFBuildParamList(c); SetDParam(0, STR_JUST_RAW_STRING); - SetDParamStr(1, params); + SetDParamStr(1, GRFBuildParamList(c)); } else { SetDParam(0, STR_NEWGRF_SETTINGS_PARAMETER_NONE); } diff --git a/src/newgrf_text.cpp b/src/newgrf_text.cpp index 4589aa094f..2e5f33ed7e 100644 --- a/src/newgrf_text.cpp +++ b/src/newgrf_text.cpp @@ -905,12 +905,11 @@ void RewindTextRefStack() * @param scc the string control code that has been read * @param buff the buffer we're writing to * @param str the string that we need to write - * @param argv the OpenTTD stack of values - * @param argv_size space on the stack \a argv - * @param modify_argv When true, modify the OpenTTD stack. + * @param parameters the OpenTTD string formatting parameters + * @param modify_parameters When true, modify the OpenTTD string formatting parameters. * @return the string control code to "execute" now */ -uint RemapNewGRFStringControlCode(uint scc, char *buf_start, char **buff, const char **str, int64 *argv, uint argv_size, bool modify_argv) +uint RemapNewGRFStringControlCode(uint scc, char *buf_start, char **buff, const char **str, StringParameters ¶meters, bool modify_parameters) { auto too_many_newgrf_params = [&]() { const char *buffer = *str; @@ -963,7 +962,7 @@ uint RemapNewGRFStringControlCode(uint scc, char *buf_start, char **buff, const case SCC_NEWGRF_PRINT_DWORD_FORCE: case SCC_NEWGRF_PRINT_WORD_STATION_NAME: case SCC_NEWGRF_PRINT_WORD_CARGO_NAME: - if (argv_size < 1) { + if (parameters.GetDataLeft() < 1) { too_many_newgrf_params(); return 0; } @@ -973,47 +972,47 @@ uint RemapNewGRFStringControlCode(uint scc, char *buf_start, char **buff, const case SCC_NEWGRF_PRINT_WORD_CARGO_LONG: case SCC_NEWGRF_PRINT_WORD_CARGO_SHORT: case SCC_NEWGRF_PRINT_WORD_CARGO_TINY: - if (argv_size < 2) { + if (parameters.GetDataLeft() < 2) { too_many_newgrf_params(); return 0; } break; } - if (_newgrf_textrefstack.used && modify_argv) { + if (_newgrf_textrefstack.used && modify_parameters) { /* There is data on the NewGRF text stack, and we want to move them to OpenTTD's string stack. - * After this call, a new call is made with `modify_argv` set to false when the string is finally formatted. */ + * After this call, a new call is made with `modify_parameters` set to false when the string is finally formatted. */ switch (scc) { default: NOT_REACHED(); - case SCC_NEWGRF_PRINT_BYTE_SIGNED: *argv = _newgrf_textrefstack.PopSignedByte(); break; - case SCC_NEWGRF_PRINT_QWORD_CURRENCY: *argv = _newgrf_textrefstack.PopSignedQWord(); break; + case SCC_NEWGRF_PRINT_BYTE_SIGNED: parameters.SetParam(0, _newgrf_textrefstack.PopSignedByte()); break; + case SCC_NEWGRF_PRINT_QWORD_CURRENCY: parameters.SetParam(0, _newgrf_textrefstack.PopSignedQWord()); break; case SCC_NEWGRF_PRINT_DWORD_CURRENCY: - case SCC_NEWGRF_PRINT_DWORD_SIGNED: *argv = _newgrf_textrefstack.PopSignedDWord(); break; + case SCC_NEWGRF_PRINT_DWORD_SIGNED: parameters.SetParam(0, _newgrf_textrefstack.PopSignedDWord()); break; - case SCC_NEWGRF_PRINT_BYTE_HEX: *argv = _newgrf_textrefstack.PopUnsignedByte(); break; - case SCC_NEWGRF_PRINT_QWORD_HEX: *argv = _newgrf_textrefstack.PopUnsignedQWord(); break; + case SCC_NEWGRF_PRINT_BYTE_HEX: parameters.SetParam(0, _newgrf_textrefstack.PopUnsignedByte()); break; + case SCC_NEWGRF_PRINT_QWORD_HEX: parameters.SetParam(0, _newgrf_textrefstack.PopUnsignedQWord()); break; case SCC_NEWGRF_PRINT_WORD_SPEED: case SCC_NEWGRF_PRINT_WORD_VOLUME_LONG: case SCC_NEWGRF_PRINT_WORD_VOLUME_SHORT: - case SCC_NEWGRF_PRINT_WORD_SIGNED: *argv = _newgrf_textrefstack.PopSignedWord(); break; + case SCC_NEWGRF_PRINT_WORD_SIGNED: parameters.SetParam(0, _newgrf_textrefstack.PopSignedWord()); break; case SCC_NEWGRF_PRINT_WORD_HEX: case SCC_NEWGRF_PRINT_WORD_WEIGHT_LONG: case SCC_NEWGRF_PRINT_WORD_WEIGHT_SHORT: case SCC_NEWGRF_PRINT_WORD_POWER: case SCC_NEWGRF_PRINT_WORD_STATION_NAME: - case SCC_NEWGRF_PRINT_WORD_UNSIGNED: *argv = _newgrf_textrefstack.PopUnsignedWord(); break; + case SCC_NEWGRF_PRINT_WORD_UNSIGNED: parameters.SetParam(0, _newgrf_textrefstack.PopUnsignedWord()); break; case SCC_NEWGRF_PRINT_DWORD_FORCE: case SCC_NEWGRF_PRINT_DWORD_DATE_LONG: case SCC_NEWGRF_PRINT_DWORD_DATE_SHORT: - case SCC_NEWGRF_PRINT_DWORD_HEX: *argv = _newgrf_textrefstack.PopUnsignedDWord(); break; + case SCC_NEWGRF_PRINT_DWORD_HEX: parameters.SetParam(0, _newgrf_textrefstack.PopUnsignedDWord()); break; /* Dates from NewGRFs have 1920-01-01 as their zero point, convert it to OpenTTD's epoch. */ case SCC_NEWGRF_PRINT_WORD_DATE_LONG: - case SCC_NEWGRF_PRINT_WORD_DATE_SHORT: *argv = _newgrf_textrefstack.PopUnsignedWord() + DAYS_TILL_ORIGINAL_BASE_YEAR; break; + case SCC_NEWGRF_PRINT_WORD_DATE_SHORT: parameters.SetParam(0, _newgrf_textrefstack.PopUnsignedWord() + DAYS_TILL_ORIGINAL_BASE_YEAR); break; case SCC_NEWGRF_DISCARD_WORD: _newgrf_textrefstack.PopUnsignedWord(); break; @@ -1024,17 +1023,17 @@ uint RemapNewGRFStringControlCode(uint scc, char *buf_start, char **buff, const case SCC_NEWGRF_PRINT_WORD_CARGO_LONG: case SCC_NEWGRF_PRINT_WORD_CARGO_SHORT: case SCC_NEWGRF_PRINT_WORD_CARGO_TINY: - argv[0] = GetCargoTranslation(_newgrf_textrefstack.PopUnsignedWord(), _newgrf_textrefstack.grffile); - argv[1] = _newgrf_textrefstack.PopUnsignedWord(); + parameters.SetParam(0, GetCargoTranslation(_newgrf_textrefstack.PopUnsignedWord(), _newgrf_textrefstack.grffile)); + parameters.SetParam(1, _newgrf_textrefstack.PopUnsignedWord()); break; case SCC_NEWGRF_PRINT_WORD_STRING_ID: - *argv = MapGRFStringID(_newgrf_textrefstack.grffile->grfid, _newgrf_textrefstack.PopUnsignedWord()); + parameters.SetParam(0, MapGRFStringID(_newgrf_textrefstack.grffile->grfid, _newgrf_textrefstack.PopUnsignedWord())); break; case SCC_NEWGRF_PRINT_WORD_CARGO_NAME: { CargoID cargo = GetCargoTranslation(_newgrf_textrefstack.PopUnsignedWord(), _newgrf_textrefstack.grffile); - *argv = cargo < NUM_CARGO ? 1ULL << cargo : 0; + parameters.SetParam(0, cargo < NUM_CARGO ? 1ULL << cargo : 0); break; } } diff --git a/src/newgrf_text.h b/src/newgrf_text.h index 66155506c7..b3312e2e8d 100644 --- a/src/newgrf_text.h +++ b/src/newgrf_text.h @@ -53,7 +53,9 @@ void RewindTextRefStack(); bool UsingNewGRFTextStack(); struct TextRefStack *CreateTextRefStackBackup(); void RestoreTextRefStackBackup(struct TextRefStack *backup); -uint RemapNewGRFStringControlCode(uint scc, char *buf_start, char **buff, const char **str, int64 *argv, uint argv_size, bool modify_argv); + +struct StringParameters; +uint RemapNewGRFStringControlCode(uint scc, char *buf_start, char **buff, const char **str, StringParameters ¶meters, bool modify_parameters); /** Mapping of language data between a NewGRF and OpenTTD. */ struct LanguageMap { diff --git a/src/news_gui.cpp b/src/news_gui.cpp index d44bc246bf..7d0ad0eda5 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -281,7 +281,7 @@ struct NewsWindow : Window { this->CreateNestedTree(); /* For company news with a face we have a separate headline in param[0] */ - if (desc == &_company_news_desc) this->GetWidget(WID_N_TITLE)->widget_data = this->ni->params[0]; + if (desc == &_company_news_desc) this->GetWidget(WID_N_TITLE)->widget_data = this->ni->params[0].data; NWidgetCore *nwid = this->GetWidget(WID_N_SHOW_GROUP); if (ni->reftype1 == NR_VEHICLE && nwid != nullptr) { @@ -367,7 +367,7 @@ struct NewsWindow : Window { break; case WID_N_MESSAGE: - CopyInDParam(0, this->ni->params, lengthof(this->ni->params)); + CopyInDParam(this->ni->params); str = this->ni->string_id; break; @@ -435,7 +435,7 @@ struct NewsWindow : Window { break; case WID_N_MESSAGE: - CopyInDParam(0, this->ni->params, lengthof(this->ni->params)); + CopyInDParam(this->ni->params); DrawStringMultiLine(r.left, r.right, r.top, r.bottom, this->ni->string_id, TC_FROMSTRING, SA_CENTER); break; @@ -588,8 +588,8 @@ private: StringID GetCompanyMessageString() const { /* Company news with a face have a separate headline, so the normal message is shifted by two params */ - CopyInDParam(0, this->ni->params + 2, lengthof(this->ni->params) - 2); - return this->ni->params[1]; + CopyInDParam(span(this->ni->params.data() + 2, this->ni->params.size() - 2)); + return this->ni->params[1].data; } StringID GetNewVehicleMessageString(int widget) const @@ -810,7 +810,7 @@ NewsItem::NewsItem(StringID string_id, NewsType type, NewsFlag flags, NewsRefere { /* show this news message in colour? */ if (_cur_year >= _settings_client.gui.coloured_news_year) this->flags |= NF_INCOLOUR; - CopyOutDParam(this->params, 0, lengthof(this->params)); + CopyOutDParam(this->params, 10); } /** @@ -1010,7 +1010,7 @@ void ChangeVehicleNews(VehicleID from_index, VehicleID to_index) for (NewsItem *ni = _oldest_news; ni != nullptr; ni = ni->next) { if (ni->reftype1 == NR_VEHICLE && ni->ref1 == from_index) ni->ref1 = to_index; if (ni->reftype2 == NR_VEHICLE && ni->ref2 == from_index) ni->ref2 = to_index; - if (ni->flags & NF_VEHICLE_PARAM0 && ni->params[0] == from_index) ni->params[0] = to_index; + if (ni->flags & NF_VEHICLE_PARAM0 && ni->params[0].data == from_index) ni->params[0] = to_index; } } @@ -1111,7 +1111,7 @@ void ShowLastNewsMessage() */ static void DrawNewsString(uint left, uint right, int y, TextColour colour, const NewsItem *ni) { - CopyInDParam(0, ni->params, lengthof(ni->params)); + CopyInDParam(ni->params); /* Get the string, replaces newlines with spaces and remove control codes from the string. */ std::string message = StrMakeValid(GetString(ni->string_id), SVS_REPLACE_TAB_CR_NL_WITH_SPACE); diff --git a/src/news_type.h b/src/news_type.h index 9399a5d9be..acc9d9b918 100644 --- a/src/news_type.h +++ b/src/news_type.h @@ -138,7 +138,7 @@ struct NewsItem { std::unique_ptr data; ///< Custom data for the news item that will be deallocated (deleted) when the news item has reached its end. - uint64 params[10]; ///< Parameters for string resolving. + std::vector params; ///< Parameters for string resolving. NewsItem(StringID string_id, NewsType type, NewsFlag flags, NewsReferenceType reftype1, uint32 ref1, NewsReferenceType reftype2, uint32 ref2, const NewsAllocatedData *data); }; diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 4c1ad988f3..e0f709a92b 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -1059,8 +1059,7 @@ void DrawOrderString(const Vehicle *v, const Order *order, int order_index, int SetDParam(4, order->GetXData()); } else if (ocv == OCV_CARGO_WAITING_AMOUNT) { char buf[512] = ""; - int64 args_array[10] = {}; - StringParameters tmp_params(args_array); + ArrayStringParameters<10> tmp_params; StringID substr; tmp_params.SetParam(0, order->GetConditionSkipToOrder() + 1); @@ -1085,7 +1084,7 @@ void DrawOrderString(const Vehicle *v, const Order *order, int order_index, int tmp_params.SetParam(7, order->GetConditionValue()); tmp_params.SetParam(8, GB(order->GetXData(), 0, 16)); } - char *end = GetStringWithArgs(buf, substr, &tmp_params, lastof(buf)); + char *end = GetStringWithArgs(buf, substr, tmp_params, lastof(buf)); _temp_special_strings[0].assign(buf, end); SetDParam(0, SPECSTR_TEMP_START); } else if (ocv == OCV_COUNTER_VALUE) { @@ -1114,9 +1113,8 @@ void DrawOrderString(const Vehicle *v, const Order *order, int order_index, int const DispatchSchedule &ds = v->orders->GetDispatchScheduleByIndex(GB(order->GetXData(), 0, 16)); if (ds.ScheduleName().empty()) { char buf[256]; - int64 args_array[] = { GB(order->GetXData(), 0, 16) + 1 }; - StringParameters tmp_params(args_array); - char *end = GetStringWithArgs(buf, STR_TIMETABLE_ASSIGN_SCHEDULE_ID, &tmp_params, lastof(buf)); + auto tmp_params = MakeParameters(GB(order->GetXData(), 0, 16) + 1); + char *end = GetStringWithArgs(buf, STR_TIMETABLE_ASSIGN_SCHEDULE_ID, tmp_params, lastof(buf)); _temp_special_strings[0].assign(buf, end); } else { _temp_special_strings[0] = ds.ScheduleName(); diff --git a/src/osk_gui.cpp b/src/osk_gui.cpp index b43612f8d9..614fcb6f08 100644 --- a/src/osk_gui.cpp +++ b/src/osk_gui.cpp @@ -335,7 +335,7 @@ static const NWidgetPart _nested_osk_widgets[] = { }; static WindowDesc _osk_desc( - WDP_CENTER, "query_osk", 0, 0, + WDP_CENTER, nullptr, 0, 0, WC_OSK, WC_NONE, 0, _nested_osk_widgets, lengthof(_nested_osk_widgets) diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 826fc67a7d..96f1a8e9a7 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -1271,10 +1271,10 @@ static CommandCost ValidateAutoDrag(Trackdir *trackdir, TileIndex start, TileInd * - p2 = (bit 0-5) - railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev), only used for building * - p2 = (bit 6-8) - track-orientation, valid values: 0-5 (Track enum) * - p2 = (bit 9) - 0 = build, 1 = remove tracks - * - p2 = (bit 10) - 0 = build up to an obstacle, 1 = fail if an obstacle is found (used for AIs). + * - p2 = (bit 10) - 0 = build starting from and up to an obstacle, 1 = fail if an obstacle is found (used for AIs) * - p2 = (bit 11) - No custom bridge heads * - p2 = (bit 12) - No dual rail type - * - p2 = (bit 13) - 0 = error on signal in the way, 1 = auto remove signals when in the way + * - p2 = (bit 13) - 0 = error on signal in the way, 1 = auto remove signals when in the way, only used for building * @param text unused * @return the cost of this operation or an error */ @@ -1284,7 +1284,7 @@ static CommandCost CmdRailTrackHelper(TileIndex tile, DoCommandFlag flags, uint3 RailType railtype = Extract(p2); Track track = Extract(p2); bool remove = HasBit(p2, 9); - bool fail_if_obstacle = HasBit(p2, 10); + bool fail_on_obstacle = HasBit(p2, 10); bool no_custom_bridge_heads = HasBit(p2, 11); bool no_dual_rail_type = HasBit(p2, 12); bool auto_remove_signals = HasBit(p2, 13); @@ -1309,8 +1309,8 @@ static CommandCost CmdRailTrackHelper(TileIndex tile, DoCommandFlag flags, uint3 last_error = ret; if (_rail_track_endtile == INVALID_TILE) _rail_track_endtile = last_endtile; if (last_error.GetErrorMessage() != STR_ERROR_ALREADY_BUILT && !remove) { - if (fail_if_obstacle) return last_error; - break; + if (fail_on_obstacle) return last_error; + if (had_success) break; // Keep going if we haven't constructed any rail yet, skipping the start of the drag } /* Ownership errors are more important. */ @@ -4503,7 +4503,7 @@ static void GetTileDesc_Track(TileIndex tile, TileDesc *td) if (primary_style > 0 || secondary_style > 0) { /* Add suffix about signal style */ - SetDParamX(td->dparam, 0, td->str); + td->dparam[0] = td->str; td->dparam[1] = primary_style == 0 ? STR_BUILD_SIGNAL_DEFAULT_STYLE : _new_signal_styles[primary_style - 1].name; if (secondary_style >= 0) { td->dparam[2] = secondary_style == 0 ? STR_BUILD_SIGNAL_DEFAULT_STYLE : _new_signal_styles[secondary_style - 1].name; @@ -4517,7 +4517,7 @@ static void GetTileDesc_Track(TileIndex tile, TileDesc *td) td->dparam[3] = td->dparam[2]; td->dparam[2] = td->dparam[1]; td->dparam[1] = td->dparam[0]; - SetDParamX(td->dparam, 0, td->str); + td->dparam[0] = td->str; td->str = STR_LAI_RAIL_DESCRIPTION_RESTRICTED_SIGNAL; } break; diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 5d732f2a5b..912ba4b8a4 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -2338,7 +2338,7 @@ static const NWidgetPart _nested_signal_builder_widgets[] = { /** Signal selection window description */ static WindowDesc _signal_builder_desc( - WDP_AUTO, "build_signal", 0, 0, + WDP_AUTO, nullptr, 0, 0, WC_BUILD_SIGNAL, WC_BUILD_TOOLBAR, WDF_CONSTRUCTION, _nested_signal_builder_widgets, lengthof(_nested_signal_builder_widgets), diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 6866908cef..d58eff5204 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -1599,7 +1599,7 @@ CommandCost CmdBuildLongRoad(TileIndex start_tile, DoCommandFlag flags, uint32 p last_error = ret; if (last_error.GetErrorMessage() != STR_ERROR_ALREADY_BUILT) { if (is_ai) return last_error; - break; + if (had_success) break; // Keep going if we haven't constructed any road yet, skipping the start of the drag } } else { had_success = true; @@ -3121,8 +3121,8 @@ CommandCost CmdConvertRoad(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 /* Disallow converting town roads to types which do not allow houses, unless this is allowed */ if (rtt == RTT_ROAD && owner == OWNER_TOWN && HasBit(GetRoadTypeInfo(to_type)->flags, ROTF_NO_HOUSES) && !_settings_game.construction.convert_town_road_no_houses) { + SetDParamsForOwnedBy(OWNER_TOWN, tile); error.MakeError(STR_ERROR_OWNED_BY); - GetNameOfOwner(OWNER_TOWN, tile); continue; } @@ -3137,8 +3137,8 @@ CommandCost CmdConvertRoad(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 } if (rtt == RTT_ROAD && owner == OWNER_TOWN) { + SetDParamsForOwnedBy(OWNER_TOWN, tile); error.MakeError(STR_ERROR_OWNED_BY); - GetNameOfOwner(OWNER_TOWN, tile); continue; } } @@ -3195,8 +3195,8 @@ CommandCost CmdConvertRoad(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 } if (rtt == RTT_ROAD && owner == OWNER_TOWN) { + SetDParamsForOwnedBy(OWNER_TOWN, tile); error.MakeError(STR_ERROR_OWNED_BY); - GetNameOfOwner(OWNER_TOWN, tile); continue; } } diff --git a/src/script/api/script_text.cpp b/src/script/api/script_text.cpp index ad0bd45f28..dbac35ea27 100644 --- a/src/script/api/script_text.cpp +++ b/src/script/api/script_text.cpp @@ -329,10 +329,8 @@ char *ScriptText::_GetEncodedText(char *p, char *lastofp, int ¶m_count, Stri const std::string Text::GetDecodedText() { - const std::string &encoded_text = this->GetEncodedText(); - static char buf[1024]; - ::SetDParamStr(0, encoded_text); + ::SetDParamStr(0, this->GetEncodedText()); ::GetString(buf, STR_JUST_RAW_STRING, lastof(buf)); return buf; } diff --git a/src/script/script_instance.cpp b/src/script/script_instance.cpp index b2b1cb532e..aced1057ef 100644 --- a/src/script/script_instance.cpp +++ b/src/script/script_instance.cpp @@ -570,8 +570,7 @@ bool ScriptInstance::IsPaused() byte len = SlReadByte(); static char buf[std::numeric_limits::max()]; SlArray(buf, len, SLE_CHAR); - StrMakeValidInPlace(buf, buf + len); - if (data != nullptr) data->push_back(std::string(buf)); + if (data != nullptr) data->push_back(StrMakeValid(std::string_view(buf, len))); return true; } diff --git a/src/settings.cpp b/src/settings.cpp index 61522c190c..102936aec3 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -232,6 +232,20 @@ size_t OneOfManySettingDesc::ParseSingleValue(const char *str, size_t len, const return (size_t)-1; } +/** + * Find whether a string was a boolean true or a boolean false. + * + * @param str the current value of the setting for which a value needs found. + * @return Either true/false, or nullopt if no boolean value found. + */ +std::optional BoolSettingDesc::ParseSingleValue(const char *str) +{ + if (strcmp(str, "true") == 0 || strcmp(str, "on") == 0 || strcmp(str, "1") == 0) return true; + if (strcmp(str, "false") == 0 || strcmp(str, "off") == 0 || strcmp(str, "0") == 0) return false; + + return std::nullopt; +} + /** * Find the set-integer value MANYofMANY type in a string * @param many full domain of values the MANYofMANY setting can have @@ -471,8 +485,8 @@ size_t ManyOfManySettingDesc::ParseValue(const char *str) const size_t BoolSettingDesc::ParseValue(const char *str) const { - if (strcmp(str, "true") == 0 || strcmp(str, "on") == 0 || strcmp(str, "1") == 0) return true; - if (strcmp(str, "false") == 0 || strcmp(str, "off") == 0 || strcmp(str, "0") == 0) return false; + auto r = BoolSettingDesc::ParseSingleValue(str); + if (r.has_value()) return *r; ErrorMessageData msg(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_VALUE); msg.SetDParamStr(0, str); @@ -2326,6 +2340,53 @@ static void RemoveEntriesFromIni(IniFile &ini, const SettingTable &table) } } +/** + * Check whether a conversion should be done, and based on what old setting information. + * + * To prevent errors when switching back and forth between older and newer + * version of OpenTTD, the type of a setting is never changed. Instead, the + * setting is renamed, and this function is used to check whether a conversion + * between the old and new setting is required. + * + * This checks if the new setting doesn't exist, and if the old does. + * + * Doing it this way means that if you switch to an older client, the old + * setting is used, and only on the first time starting a new client, the + * old setting is converted to the new. After that, they are independent + * of each other. And you can safely, without errors on either, switch + * between old and new client. + * + * @param ini The ini-file to use. + * @param group The group the setting is in. + * @param old_var The old name of the setting. + * @param new_var The new name of the setting. + * @param[out] old_item The old item to base upgrading on. + * @return Whether upgrading should happen; if false, old_item is a nullptr. + */ +bool IsConversionNeeded(ConfigIniFile &ini, std::string group, std::string old_var, std::string new_var, IniItem **old_item) +{ + *old_item = nullptr; + + IniGroup *igroup = ini.GetGroup(group, false); + /* If the group doesn't exist, there is nothing to convert. */ + if (igroup == nullptr) return false; + + IniItem *tmp_old_item = igroup->GetItem(old_var); + IniItem *new_item = igroup->GetItem(new_var); + + /* If the old item doesn't exist, there is nothing to convert. */ + if (tmp_old_item == nullptr) return false; + + /* If the new item exists, it means conversion was already done. We only + * do the conversion the first time, and after that these settings are + * independent. This allows users to freely change between older and + * newer clients without breaking anything. */ + if (new_item != nullptr) return false; + + *old_item = tmp_old_item; + return true; +} + /** * Load the values from the configuration files * @param startup Load the minimal amount of the configuration to "bootstrap" the blitter and such. @@ -2355,24 +2416,12 @@ void LoadFromConfig(bool startup) /* Load basic settings only during bootstrap, load other settings not during bootstrap */ if (!startup) { - /* Convert network.server_advertise to network.server_game_type, but only if network.server_game_type is set to default value. */ - if (generic_version < IFV_GAME_TYPE) { - if (_settings_client.network.server_game_type == SERVER_GAME_TYPE_LOCAL) { - IniGroup *network = generic_ini.GetGroup("network", false); - if (network != nullptr) { - IniItem *server_advertise = network->GetItem("server_advertise"); - if (server_advertise != nullptr && server_advertise->value == "true") { - _settings_client.network.server_game_type = SERVER_GAME_TYPE_PUBLIC; - } - } - } - } - if (generic_version < IFV_LINKGRAPH_SECONDS) { _settings_newgame.linkgraph.recalc_interval *= SECONDS_PER_DAY; _settings_newgame.linkgraph.recalc_time *= SECONDS_PER_DAY; } + /* Move no_http_content_downloads and use_relay_service from generic_ini to private_ini. */ if (generic_version < IFV_NETWORK_PRIVATE_SETTINGS) { IniGroup *network = generic_ini.GetGroup("network", false); if (network != nullptr) { @@ -2398,6 +2447,13 @@ void LoadFromConfig(bool startup) } } + IniItem *old_item; + + if (generic_version < IFV_GAME_TYPE && IsConversionNeeded(generic_ini, "network", "server_advertise", "server_game_type", &old_item)) { + auto old_value = BoolSettingDesc::ParseSingleValue(old_item->value->c_str()); + _settings_client.network.server_game_type = old_value.value_or(false) ? SERVER_GAME_TYPE_PUBLIC : SERVER_GAME_TYPE_LOCAL; + } + _grfconfig_newgame = GRFLoadConfig(generic_ini, "newgrf", false); _grfconfig_static = GRFLoadConfig(generic_ini, "newgrf-static", true); AILoadConfig(generic_ini, "ai_players"); @@ -2482,13 +2538,7 @@ void SaveToConfig(SaveToConfigFlags flags) } } - /* Remove network.server_advertise. */ - if (generic_version < IFV_GAME_TYPE) { - IniGroup *network = generic_ini.GetGroup("network", false); - if (network != nullptr) { - network->RemoveItem("server_advertise"); - } - } + /* These variables are migrated from generic ini to private ini now. */ if (generic_version < IFV_NETWORK_PRIVATE_SETTINGS) { IniGroup *network = generic_ini.GetGroup("network", false); if (network != nullptr) { diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 87d4b9f7c8..1f1151f7dc 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -986,7 +986,7 @@ static const NWidgetPart _nested_game_options_widgets[] = { }; static WindowDesc _game_options_desc( - WDP_CENTER, "settings_game", 0, 0, + WDP_CENTER, nullptr, 0, 0, WC_GAME_OPTIONS, WC_NONE, 0, _nested_game_options_widgets, lengthof(_nested_game_options_widgets) @@ -1473,9 +1473,8 @@ void SettingEntry::SetValueDParams(uint first_param, int32 value, std::unique_pt double scale = std::exp2(((double)value) / 10); int log = -std::min(0, (int)std::floor(std::log10(scale)) - 2); - int64 args_array[] = { value, (int64)(scale * std::pow(10.f, (float)log)), log }; - StringParameters tmp_params(args_array); - GetStringWithArgs(tempdata->buffer, this->setting->str_val, &tmp_params, lastof(tempdata->buffer)); + auto tmp_params = MakeParameters(value, (int64)(scale * std::pow(10.f, (float)log)), log); + GetStringWithArgs(tempdata->buffer, this->setting->str_val, tmp_params, lastof(tempdata->buffer)); SetDParam(first_param++, STR_JUST_RAW_STRING); SetDParamStr(first_param++, tempdata->buffer); } else { diff --git a/src/settings_internal.h b/src/settings_internal.h index a6954ab5b9..0cb3855c4b 100644 --- a/src/settings_internal.h +++ b/src/settings_internal.h @@ -246,6 +246,8 @@ struct BoolSettingDesc : IntSettingDesc { PreChangeCheck pre_check, PostChangeCallback post_callback) : IntSettingDesc(save, name, flags, guiproc, startup, patx_name, def, 0, 1, 0, str, str_help, str_val, cat, pre_check, post_callback, nullptr) {} + static std::optional ParseSingleValue(const char *str); + bool IsBoolSetting() const override { return true; } size_t ParseValue(const char *str) const override; void FormatIntValue(char *buf, const char *last, uint32 value) const override; diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index d603b33bd0..4160a80da1 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -553,7 +553,7 @@ static const NWidgetPart _nested_query_sign_edit_widgets[] = { }; static WindowDesc _query_sign_edit_desc( - WDP_CENTER, "query_sign", 0, 0, + WDP_CENTER, nullptr, 0, 0, WC_QUERY_STRING, WC_NONE, WDF_CONSTRUCTION, _nested_query_sign_edit_widgets, lengthof(_nested_query_sign_edit_widgets) diff --git a/src/sl/extended_ver_sl.cpp b/src/sl/extended_ver_sl.cpp index c0db11b1b2..f0c661f730 100644 --- a/src/sl/extended_ver_sl.cpp +++ b/src/sl/extended_ver_sl.cpp @@ -628,9 +628,8 @@ static void Load_SLXI() auto version_error = [](StringID str, const char *feature, int64 p1, int64 p2) { char buf[256]; - int64 args_array[] = { _sl_xv_version_label.empty() ? STR_EMPTY : STR_GAME_SAVELOAD_FROM_VERSION, (int64)(size_t)_sl_xv_version_label.c_str(), (int64)(size_t)feature, p1, p2 }; - StringParameters tmp_params(args_array); - GetStringWithArgs(buf, str, &tmp_params, lastof(buf)); + auto tmp_params = MakeParameters(_sl_xv_version_label.empty() ? STR_EMPTY : STR_GAME_SAVELOAD_FROM_VERSION, _sl_xv_version_label, feature, p1, p2); + GetStringWithArgs(buf, str, tmp_params, lastof(buf)); SlError(STR_JUST_RAW_STRING, buf); }; diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index eaa302cec6..03faf4ac6a 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -539,9 +539,8 @@ void UpdateAllStationVirtCoords() void BaseStation::FillCachedName() const { char buf[MAX_LENGTH_STATION_NAME_CHARS * MAX_CHAR_LENGTH]; - int64 args_array[] = { this->index }; - StringParameters tmp_params(args_array); - char *end = GetStringWithArgs(buf, Waypoint::IsExpected(this) ? STR_WAYPOINT_NAME : STR_STATION_NAME, &tmp_params, lastof(buf)); + auto tmp_params = MakeParameters(this->index); + char *end = GetStringWithArgs(buf, Waypoint::IsExpected(this) ? STR_WAYPOINT_NAME : STR_STATION_NAME, tmp_params, lastof(buf)); this->cached_name.assign(buf, end); } diff --git a/src/statusbar_gui.cpp b/src/statusbar_gui.cpp index fecc408267..55f16e8aa3 100644 --- a/src/statusbar_gui.cpp +++ b/src/statusbar_gui.cpp @@ -37,7 +37,7 @@ static bool DrawScrollingStatusText(const NewsItem *ni, int scroll_pos, int left, int right, int top, int bottom) { - CopyInDParam(0, ni->params, lengthof(ni->params)); + CopyInDParam(ni->params); /* Replace newlines and the likes with spaces. */ std::string message = StrMakeValid(GetString(ni->string_id), SVS_REPLACE_TAB_CR_NL_WITH_SPACE); diff --git a/src/string.cpp b/src/string.cpp index b333a411c3..48d1e1ce15 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -192,8 +192,20 @@ const char *str_fix_scc_encoded(char *str, const char *last) } +/** + * Copies the valid (UTF-8) characters from \c str up to \c last to the \c dst. + * Depending on the \c settings invalid characters can be replaced with a + * question mark, as well as determining what characters are deemed invalid. + * + * It is allowed for \c dst to be the same as \c src, in which case the string + * is make valid in place. + * @param dst The destination to write to. + * @param str The string to validate. + * @param last The last valid character of str. + * @param settings The settings for the string validation. + */ template -static void StrMakeValidInPlace(T &dst, const char *str, const char *last, StringValidationSettings settings) +static void StrMakeValid(T &dst, const char *str, const char *last, StringValidationSettings settings) { /* Assume the ABSOLUTE WORST to be in str as it comes from the outside. */ @@ -268,7 +280,7 @@ static void StrMakeValidInPlace(T &dst, const char *str, const char *last, Strin char *StrMakeValidInPlace(char *str, const char *last, StringValidationSettings settings) { char *dst = str; - StrMakeValidInPlace(dst, str, last, settings); + StrMakeValid(dst, str, last, settings); *dst = '\0'; return dst; } @@ -287,8 +299,9 @@ void StrMakeValidInPlace(char *str, StringValidationSettings settings) } /** - * Scans the string for invalid characters and replaces then with a - * question mark '?' (if not ignored). + * Copies the valid (UTF-8) characters from \c str to the returned string. + * Depending on the \c settings invalid characters can be replaced with a + * question mark, as well as determining what characters are deemed invalid. * @param str The string to validate. * @param settings The settings for the string validation. */ @@ -299,7 +312,7 @@ std::string StrMakeValid(std::string_view str, StringValidationSettings settings std::ostringstream dst; std::ostreambuf_iterator dst_iter(dst); - StrMakeValidInPlace(dst_iter, buf, last, settings); + StrMakeValid(dst_iter, buf, last, settings); return dst.str(); } diff --git a/src/strings.cpp b/src/strings.cpp index c047ada866..c4faaa1a37 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -59,38 +59,43 @@ TextDirection _current_text_dir = TD_LTR; ///< Text direction of the currently s std::unique_ptr _current_collator; ///< Collator for the language currently in use. #endif /* WITH_ICU_I18N */ -static uint64 _global_string_params_data[20]; ///< Global array of string parameters. To access, use #SetDParam. -static WChar _global_string_params_type[20]; ///< Type of parameters stored in #_global_string_params -StringParameters _global_string_params(_global_string_params_data, 20, _global_string_params_type); +ArrayStringParameters<20> _global_string_params; ///< Global array of string parameters. To access, use #SetDParam. std::string _temp_special_strings[16]; -/** Reset the type array. */ -void StringParameters::ClearTypeInformation() +/** + * Prepare the string parameters for the next formatting run. This means + * resetting the type information and resetting the offset to the begin. + */ +void StringParameters::PrepareForNextRun() { - assert(this->type != nullptr); - MemSetT(this->type, 0, this->num_param); + for (auto ¶m : this->parameters) param.type = 0; + this->offset = 0; } - /** - * Read an int64 from the argument array. The offset is increased - * so the next time GetInt64 is called the next value is read. + * Get the next parameter from our parameters. + * This updates the offset, so the next time this is called the next parameter + * will be read. + * @return The pointer to the next parameter. */ -int64 StringParameters::GetInt64(WChar type) +StringParameter *StringParameters::GetNextParameterPointer() { - if (this->offset >= this->num_param) { + assert(this->next_type == 0 || (SCC_CONTROL_START <= this->next_type && this->next_type <= SCC_CONTROL_END)); + if (this->offset >= this->parameters.size()) { DEBUG(misc, 0, "Trying to read invalid string parameter"); - return 0; + return nullptr; } - if (this->type != nullptr) { - if (this->type[this->offset] != 0 && this->type[this->offset] != type) { - DEBUG(misc, 0, "Trying to read string parameter with wrong type"); - return 0; - } - this->type[this->offset] = type; + + auto ¶m = this->parameters[this->offset++]; + if (param.type != 0 && param.type != this->next_type) { + DEBUG(misc, 0, "Trying to read string parameter with wrong type"); + this->next_type = 0; + return nullptr; } - return this->data[this->offset++]; + param.type = this->next_type; + this->next_type = 0; + return ¶m; } /** @@ -123,56 +128,62 @@ void SetDParamMaxDigits(uint n, uint count, FontSize size) } /** - * Copy \a num string parameters from array \a src into the global string parameter array. - * @param offs Index in the global array to copy the first string parameter to. - * @param src Source array of string parameters. - * @param num Number of string parameters to copy. + * Copy the parameters from the backup into the global string parameter array. + * @param backup The backup to copy from. */ -void CopyInDParam(int offs, const uint64 *src, int num) +void CopyInDParam(const span backup, uint offset) { - MemCpyT(_global_string_params.GetPointerToOffset(offs), src, num); + for (size_t i = 0; i < backup.size(); i++) { + auto &value = backup[i]; + if (value.string.has_value()) { + _global_string_params.SetParam(i + offset, value.string.value()); + } else { + _global_string_params.SetParam(i + offset, value.data); + } + } } /** - * Copy \a num string parameters from the global string parameter array to the \a dst array. - * @param dst Destination array of string parameters. - * @param offs Index in the global array to copy the first string parameter from. - * @param num Number of string parameters to copy. + * Copy \a num string parameters from the global string parameter array to the \a backup. + * @param backup The backup to write to. + * @param num Number of string parameters to copy. */ -void CopyOutDParam(uint64 *dst, int offs, int num) +void CopyOutDParam(std::vector &backup, size_t num) { - MemCpyT(dst, _global_string_params.GetPointerToOffset(offs), num); + backup.resize(num); + for (size_t i = 0; i < backup.size(); i++) { + const char *str = _global_string_params.GetParamStr(i); + if (str != nullptr) { + backup[i] = str; + } else { + backup[i] = _global_string_params.GetParam(i); + } + } } /** - * Copy \a num string parameters from the global string parameter array to the \a dst array. - * Furthermore clone raw string parameters into \a strings and amend the data in \a dst. - * @param dst Destination array of string parameters. - * @param strings Destination array for clone of the raw strings. Must be of same length as dst. Deallocation left to the caller. - * @param string The string used to determine where raw strings are and where there are no raw strings. - * @param num Number of string parameters to copy. + * Checks whether the global string parameters have changed compared to the given backup. + * @param backup The backup to check against. + * @return True when the parameters have changed, otherwise false. */ -void CopyOutDParam(uint64 *dst, const char **strings, StringID string, int num) +bool HaveDParamChanged(const std::vector &backup) { - char buf[DRAW_STRING_BUFFER]; - GetString(buf, string, lastof(buf)); - - MemCpyT(dst, _global_string_params.GetPointerToOffset(0), num); - for (int i = 0; i < num; i++) { - if (_global_string_params.HasTypeInformation() && _global_string_params.GetTypeAtOffset(i) == SCC_RAW_STRING_POINTER) { - strings[i] = stredup((const char *)(size_t)_global_string_params.GetParam(i)); - dst[i] = (size_t)strings[i]; + bool changed = false; + for (size_t i = 0; !changed && i < backup.size(); i++) { + if (backup[i].string.has_value()) { + changed = backup[i].string.value() != (const char *)(size_t)_global_string_params.GetParam(i); } else { - strings[i] = nullptr; + changed = backup[i].data != _global_string_params.GetParam(i); } } + return changed; } -static char *StationGetSpecialString(char *buff, int x, const char *last); +static char *StationGetSpecialString(char *buff, StationFacility x, const char *last); static char *GetSpecialTownNameString(char *buff, int ind, uint32 seed, const char *last); -static char *GetSpecialNameString(char *buff, int ind, StringParameters *args, const char *last); +static char *GetSpecialNameString(char *buff, int ind, StringParameters &args, const char *last); -static char *FormatString(char *buff, const char *str, StringParameters *args, const char *last, uint case_index = 0, bool game_script = false, bool dry_run = false); +static char *FormatString(char *buff, const char *str, StringParameters &args, const char *last, uint case_index = 0, bool game_script = false, bool dry_run = false); struct LanguagePack : public LanguagePackHeader { char data[]; // list of strings @@ -223,7 +234,7 @@ const char *GetStringPtr(StringID string) * @param game_script The string is coming directly from a game script. * @return Pointer to the final zero byte of the formatted string. */ -char *GetStringWithArgs(char *buffr, StringID string, StringParameters *args, const char *last, uint case_index, bool game_script) +char *GetStringWithArgs(char *buffr, StringID string, StringParameters &args, const char *last, uint case_index, bool game_script) { if (string == 0) return GetStringWithArgs(buffr, STR_UNDEFINED, args, last); @@ -233,7 +244,7 @@ char *GetStringWithArgs(char *buffr, StringID string, StringParameters *args, co switch (tab) { case TEXT_TAB_TOWN: if (index >= 0xC0 && !game_script) { - return GetSpecialTownNameString(buffr, index - 0xC0, args->GetInt32(), last); + return GetSpecialTownNameString(buffr, index - 0xC0, args.GetNextParameter(), last); } break; @@ -278,9 +289,8 @@ char *GetStringWithArgs(char *buffr, StringID string, StringParameters *args, co char *GetString(char *buffr, StringID string, const char *last) { - _global_string_params.ClearTypeInformation(); - _global_string_params.offset = 0; - return GetStringWithArgs(buffr, string, &_global_string_params, last); + _global_string_params.PrepareForNextRun(); + return GetStringWithArgs(buffr, string, _global_string_params, last); } /** @@ -303,18 +313,19 @@ std::string GetString(StringID string) */ void SetDParamStr(uint n, const char *str) { - SetDParam(n, (uint64)(size_t)str); + _global_string_params.SetParam(n, str); } /** - * This function is used to "bind" the C string of a std::string to a OpenTTD dparam slot. - * The caller has to ensure that the std::string reference remains valid while the string is shown. + * This function is used to "bind" the std::string to a OpenTTD dparam slot. + * Contrary to the other \c SetDParamStr function, this moves the string into + * the parameter slot. * @param n slot of the string * @param str string to bind */ -void SetDParamStr(uint n, const std::string &str) +void SetDParamStr(uint n, std::string str) { - SetDParamStr(n, str.c_str()); + _global_string_params.SetParam(n, std::move(str)); } /** @@ -379,7 +390,7 @@ static char *FormatNoCommaNumber(char *buff, int64 number, const char *last) return FormatNumber(buff, number, last, ""); } -static char *FormatZerofillNumber(char *buff, int64 number, int64 count, const char *last) +static char *FormatZerofillNumber(char *buff, int64 number, int count, const char *last) { return FormatNumber(buff, number, last, "", count); } @@ -445,19 +456,17 @@ static char *FormatWallClockString(char *buff, DateTicksScaled ticks, const char seprintf(hour, lastof(hour), "%02i", (int) MINUTES_HOUR(minutes) ); seprintf(minute, lastof(minute), "%02i", (int) MINUTES_MINUTE(minutes)); if (show_date) { - int64 args[3] = { (int64)hour, (int64)minute, ScaledDateTicksToDate(ticks) }; + int64 final_arg = ScaledDateTicksToDate(ticks); if (_settings_client.gui.date_with_time == 1) { YearMonthDay ymd; - ConvertDateToYMD(args[2], &ymd); - args[2] = ymd.year; + ConvertDateToYMD(final_arg, &ymd); + final_arg = ymd.year; } - - StringParameters tmp_params(args); - return FormatString(buff, GetStringPtr(STR_FORMAT_DATE_MINUTES + _settings_client.gui.date_with_time), &tmp_params, last, case_index); + auto tmp_params = MakeParameters(hour, minute, final_arg); + return FormatString(buff, GetStringPtr(STR_FORMAT_DATE_MINUTES + _settings_client.gui.date_with_time), tmp_params, last, case_index); } else { - int64 args[2] = { (int64)hour, (int64)minute }; - StringParameters tmp_params(args); - return FormatString(buff, GetStringPtr(STR_FORMAT_DATE_MINUTES), &tmp_params, last, case_index); + auto tmp_params = MakeParameters(hour, minute); + return FormatString(buff, GetStringPtr(STR_FORMAT_DATE_MINUTES), tmp_params, last, case_index); } } @@ -466,9 +475,8 @@ static char *FormatTimeHHMMString(char *buff, uint time, const char *last, uint char hour[9], minute[3]; seprintf(hour, lastof(hour), "%02i", (int) time / 100); seprintf(minute, lastof(minute), "%02i", (int) time % 100); - int64 args[2] = { (int64)hour, (int64)minute }; - StringParameters tmp_params(args); - return FormatString(buff, GetStringPtr(STR_FORMAT_DATE_MINUTES), &tmp_params, last, case_index); + auto tmp_params = MakeParameters(hour, minute); + return FormatString(buff, GetStringPtr(STR_FORMAT_DATE_MINUTES), tmp_params, last, case_index); } static char *FormatYmdString(char *buff, Date date, const char *last, uint case_index) @@ -476,9 +484,8 @@ static char *FormatYmdString(char *buff, Date date, const char *last, uint case_ YearMonthDay ymd; ConvertDateToYMD(date, &ymd); - int64 args[] = {ymd.day + STR_DAY_NUMBER_1ST - 1, STR_MONTH_ABBREV_JAN + ymd.month, ymd.year}; - StringParameters tmp_params(args); - return FormatString(buff, GetStringPtr(STR_FORMAT_DATE_LONG), &tmp_params, last, case_index); + auto tmp_params = MakeParameters(ymd.day + STR_DAY_NUMBER_1ST - 1, STR_MONTH_ABBREV_JAN + ymd.month, ymd.year); + return FormatString(buff, GetStringPtr(STR_FORMAT_DATE_LONG), tmp_params, last, case_index); } static char *FormatMonthAndYear(char *buff, Date date, const char *last, uint case_index) @@ -486,9 +493,8 @@ static char *FormatMonthAndYear(char *buff, Date date, const char *last, uint ca YearMonthDay ymd; ConvertDateToYMD(date, &ymd); - int64 args[] = {STR_MONTH_JAN + ymd.month, ymd.year}; - StringParameters tmp_params(args); - return FormatString(buff, GetStringPtr(STR_FORMAT_DATE_SHORT), &tmp_params, last, case_index); + auto tmp_params = MakeParameters(STR_MONTH_JAN + ymd.month, ymd.year); + return FormatString(buff, GetStringPtr(STR_FORMAT_DATE_SHORT), tmp_params, last, case_index); } static char *FormatTinyOrISODate(char *buff, Date date, StringID str, const char *last) @@ -497,9 +503,8 @@ static char *FormatTinyOrISODate(char *buff, Date date, StringID str, const char ConvertDateToYMD(date, &ymd); /* Day and month are zero-padded with ZEROFILL_NUM, hence the two 2s. */ - int64 args[] = {ymd.day, 2, ymd.month + 1, 2, ymd.year}; - StringParameters tmp_params(args); - return FormatString(buff, GetStringPtr(str), &tmp_params, last); + auto tmp_params = MakeParameters(ymd.day, 2, ymd.month + 1, 2, ymd.year); + return FormatString(buff, GetStringPtr(str), tmp_params, last); } static char *FormatGenericCurrency(char *buff, const CurrencySpec *spec, Money number, bool compact, const char *last) @@ -980,9 +985,8 @@ static char *FormatUnitWeightRatio(char *buff, const char *last, const Units &un int64 value, decimals; ConvertWeightRatioToDisplay(unit, raw_value, value, decimals); - int64 args_array[2] = { value, decimals }; - StringParameters tmp_params(args_array); - buff = FormatString(buff, tmp_buffer, &tmp_params, last); + auto tmp_params = MakeParameters(value, decimals); + buff = FormatString(buff, tmp_buffer, tmp_params, last); return buff; } @@ -1058,8 +1062,6 @@ uint ConvertDisplayQuantityToCargoQuantity(CargoID cargo, uint quantity) return quantity; } -static std::vector _game_script_raw_strings; - /** * Parse most format codes within a string and write the result to a buffer. * @param buff The buffer to write the final string to. @@ -1068,12 +1070,12 @@ static std::vector _game_script_raw_strings; * @param last Pointer to just past the end of the buff array. * @param dry_run True when the argt array is not yet initialized. */ -static char *FormatString(char *buff, const char *str_arg, StringParameters *args, const char *last, uint case_index, bool game_script, bool dry_run) +static char *FormatString(char *buff, const char *str_arg, StringParameters &args, const char *last, uint case_index, bool game_script, bool dry_run) { - uint orig_offset = args->offset; + uint orig_offset = args.GetOffset(); /* When there is no array with types there is no need to do a dry run. */ - if (args->HasTypeInformation() && !dry_run) { + if (!dry_run) { if (UsingNewGRFTextStack()) { /* Values from the NewGRF text stack are only copied to the normal * argv array at the time they are encountered. That means that if @@ -1088,7 +1090,7 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg FormatString(buff, str_arg, args, last, case_index, game_script, true); } /* We have to restore the original offset here to to read the correct values. */ - args->offset = orig_offset; + args.SetOffset(orig_offset); } WChar b = '\0'; uint next_substr_case_index = 0; @@ -1105,20 +1107,20 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg if (SCC_NEWGRF_FIRST <= b && b <= SCC_NEWGRF_LAST) { /* We need to pass some stuff as it might be modified. */ - //todo: should argve be passed here too? - b = RemapNewGRFStringControlCode(b, buf_start, &buff, &str, (int64 *)args->GetDataPointer(), args->GetDataLeft(), dry_run); + StringParameters remaining = args.GetRemainingParameters(); + b = RemapNewGRFStringControlCode(b, buf_start, &buff, &str, remaining, dry_run); if (b == 0) continue; } + if (b < SCC_CONTROL_START || b > SCC_CONTROL_END) { + if (buff + Utf8CharLen(b) < last) buff += Utf8Encode(buff, b); + continue; + } + + args.SetTypeOfNextParameter(b); switch (b) { case SCC_ENCODED: { - uint64 sub_args_data[20]; - WChar sub_args_type[20]; - bool sub_args_need_free[20]; - StringParameters sub_args(sub_args_data, 20, sub_args_type); - - sub_args.ClearTypeInformation(); - memset(sub_args_need_free, 0, sizeof(sub_args_need_free)); + ArrayStringParameters<20> sub_args; char *p; uint32 stringid = std::strtoul(str, &p, 16); @@ -1188,25 +1190,13 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg sub_args.SetParam(i++, param); } else { s++; // skip the leading \" - char *g = stredup(s); - g[p - s - 1] = '\0'; // skip the trailing \" - - sub_args_need_free[i] = true; - sub_args.SetParam(i++, (uint64)(size_t)g); - _game_script_raw_strings.push_back(g); + sub_args.SetParam(i++, std::string(s, p - s - 1)); // also skip the trailing \". } } /* If we didn't error out, we can actually print the string. */ if (*str != '\0') { str = p; - buff = GetStringWithArgs(buff, MakeStringID(TEXT_TAB_GAMESCRIPT_START, stringid), &sub_args, last, true); - } - - for (int i = 0; i < 20; i++) { - if (sub_args_need_free[i]) { - free((void *)sub_args.GetParam(i)); - _game_script_raw_strings.pop_back(); - } + buff = GetStringWithArgs(buff, MakeStringID(TEXT_TAB_GAMESCRIPT_START, stringid), sub_args, last, true); } break; } @@ -1218,7 +1208,7 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg } case SCC_NEWGRF_PRINT_WORD_STRING_ID: { - StringID substr = args->GetInt32(SCC_NEWGRF_PRINT_WORD_STRING_ID); + StringID substr = args.GetNextParameter(); str_stack.push(GetStringPtr(substr)); case_index = next_substr_case_index; next_substr_case_index = 0; @@ -1230,20 +1220,20 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg /* First read the meta data from the language file. */ uint offset = orig_offset + (byte)*str++; int gender = 0; - if (!dry_run && args->GetTypeAtOffset(offset) != 0) { + if (!dry_run && args.GetTypeAtOffset(offset) != 0) { /* Now we need to figure out what text to resolve, i.e. * what do we need to draw? So get the actual raw string * first using the control code to get said string. */ char input[4 + 1]; - char *p = input + Utf8Encode(input, args->GetTypeAtOffset(offset)); + char *p = input + Utf8Encode(input, args.GetTypeAtOffset(offset)); *p = '\0'; /* Now do the string formatting. */ char buf[256]; bool old_sgd = _scan_for_gender_data; _scan_for_gender_data = true; - StringParameters tmp_params(args->GetPointerToOffset(offset), args->num_param - offset, nullptr); - p = FormatString(buf, input, &tmp_params, lastof(buf)); + StringParameters tmp_params = args.GetRemainingParameters(offset); + p = FormatString(buf, input, tmp_params, lastof(buf)); _scan_for_gender_data = old_sgd; *p = '\0'; @@ -1271,13 +1261,13 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg case SCC_PLURAL_LIST: { // {P} int plural_form = *str++; // contains the plural form for this string uint offset = orig_offset + (byte)*str++; - int64 v = *args->GetPointerToOffset(offset); // contains the number that determines plural + int64 v = args.GetParam(offset); // contains the number that determines plural str = ParseStringChoice(str, DeterminePluralForm(v, plural_form), &buff, last); break; } case SCC_ARG_INDEX: { // Move argument pointer - args->offset = orig_offset + (byte)*str++; + args.SetOffset(orig_offset + (byte)*str++); break; } @@ -1310,10 +1300,9 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg break; case SCC_RAW_STRING_POINTER: { // {RAW_STRING} - const char *raw_string = (const char *)(size_t)args->GetInt64(SCC_RAW_STRING_POINTER); + const char *raw_string = args.GetNextParameterString(); /* raw_string can be(come) nullptr when the parameter is out of range and 0 is returned instead. */ - if (raw_string == nullptr || - (game_script && std::find(_game_script_raw_strings.begin(), _game_script_raw_strings.end(), raw_string) == _game_script_raw_strings.end())) { + if (raw_string == nullptr) { buff = strecat(buff, "(invalid RAW_STRING parameter)", last); break; } @@ -1322,13 +1311,13 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg } case SCC_STRING: {// {STRING} - StringID string_id = args->GetInt32(SCC_STRING); + StringID string_id = args.GetNextParameter(); if (game_script && GetStringTab(string_id) != TEXT_TAB_GAMESCRIPT_START) break; /* WARNING. It's prohibited for the included string to consume any arguments. * For included strings that consume argument, you should use STRING1, STRING2 etc. * To debug stuff you can set argv to nullptr and it will tell you */ - StringParameters tmp_params(args->GetDataPointer(), args->GetDataLeft(), nullptr); - buff = GetStringWithArgs(buff, string_id, &tmp_params, last, next_substr_case_index, game_script); + StringParameters tmp_params(args, 0); + buff = GetStringWithArgs(buff, string_id, tmp_params, last, next_substr_case_index, game_script); next_substr_case_index = 0; break; } @@ -1342,42 +1331,42 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg case SCC_STRING7: case SCC_STRING8: { // {STRING1..8} /* Strings that consume arguments */ - StringID string_id = args->GetInt32(b); + StringID string_id = args.GetNextParameter(); if (game_script && GetStringTab(string_id) != TEXT_TAB_GAMESCRIPT_START) break; uint size = b - SCC_STRING1 + 1; - if (game_script && size > args->GetDataLeft()) { + if (game_script && size > args.GetDataLeft()) { buff = strecat(buff, "(too many parameters)", last); } else { - StringParameters sub_args(*args, size); - buff = GetStringWithArgs(buff, string_id, &sub_args, last, next_substr_case_index, game_script); + StringParameters sub_args(args, size); + buff = GetStringWithArgs(buff, string_id, sub_args, last, next_substr_case_index, game_script); } next_substr_case_index = 0; break; } case SCC_COMMA: // {COMMA} - buff = FormatCommaNumber(buff, args->GetInt64(SCC_COMMA), last); + buff = FormatCommaNumber(buff, args.GetNextParameter(), last); break; case SCC_DECIMAL: {// {DECIMAL} - int64 number = args->GetInt64(SCC_DECIMAL); - int digits = args->GetInt32(SCC_DECIMAL); + int64 number = args.GetNextParameter(); + int digits = args.GetNextParameter(); buff = FormatCommaNumber(buff, number, last, digits); break; } case SCC_DECIMAL1: {// {DECIMAL1} - int64 number = args->GetInt64(SCC_DECIMAL1); + int64 number = args.GetNextParameter(); buff = FormatCommaNumber(buff, number, last, 1); break; } case SCC_NUM: // {NUM} - buff = FormatNoCommaNumber(buff, args->GetInt64(SCC_NUM), last); + buff = FormatNoCommaNumber(buff, args.GetNextParameter(), last); break; case SCC_PLUS_NUM: { // {PLUS_NUM} - int64 num = args->GetInt64(SCC_PLUS_NUM); + int64 num = args.GetNextParameter(); if (num > 0) { buff += seprintf(buff, last, "+"); } @@ -1386,39 +1375,39 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg } case SCC_ZEROFILL_NUM: { // {ZEROFILL_NUM} - int64 num = args->GetInt64(); - buff = FormatZerofillNumber(buff, num, args->GetInt64(), last); + int64 num = args.GetNextParameter(); + buff = FormatZerofillNumber(buff, num, args.GetNextParameter(), last); break; } case SCC_HEX: // {HEX} - buff = FormatHexNumber(buff, (uint64)args->GetInt64(SCC_HEX), last); + buff = FormatHexNumber(buff, args.GetNextParameter(), last); break; case SCC_BYTES: // {BYTES} - buff = FormatBytes(buff, args->GetInt64(), last); + buff = FormatBytes(buff, args.GetNextParameter(), last); break; case SCC_CARGO_TINY: { // {CARGO_TINY} /* Tiny description of cargotypes. Layout: * param 1: cargo type * param 2: cargo count */ - CargoID cargo = args->GetInt32(SCC_CARGO_TINY); + CargoID cargo = args.GetNextParameter(); if (cargo >= CargoSpec::GetArraySize()) break; StringID cargo_str = CargoSpec::Get(cargo)->units_volume; int64 amount = 0; switch (cargo_str) { case STR_TONS: - amount = _units_weight[_settings_game.locale.units_weight].c.ToDisplay(args->GetInt64()); + amount = _units_weight[_settings_game.locale.units_weight].c.ToDisplay(args.GetNextParameter()); break; case STR_LITERS: - amount = _units_volume[_settings_game.locale.units_volume].c.ToDisplay(args->GetInt64()); + amount = _units_volume[_settings_game.locale.units_volume].c.ToDisplay(args.GetNextParameter()); break; default: { - amount = args->GetInt64(); + amount = args.GetNextParameter(); break; } } @@ -1431,7 +1420,7 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg /* Short description of cargotypes. Layout: * param 1: cargo type * param 2: cargo count */ - CargoID cargo = args->GetInt32(SCC_CARGO_SHORT); + CargoID cargo = args.GetNextParameter(); if (cargo >= CargoSpec::GetArraySize()) break; StringID cargo_str = CargoSpec::Get(cargo)->units_volume; @@ -1439,24 +1428,22 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg case STR_TONS: { assert(_settings_game.locale.units_weight < lengthof(_units_weight)); const auto &x = _units_weight[_settings_game.locale.units_weight]; - int64 args_array[] = {x.c.ToDisplay(args->GetInt64()), x.decimal_places}; - StringParameters tmp_params(args_array); - buff = FormatString(buff, GetStringPtr(x.l), &tmp_params, last); + auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); + buff = FormatString(buff, GetStringPtr(x.l), tmp_params, last); break; } case STR_LITERS: { assert(_settings_game.locale.units_volume < lengthof(_units_volume)); const auto &x = _units_volume[_settings_game.locale.units_volume]; - int64 args_array[] = {x.c.ToDisplay(args->GetInt64()), x.decimal_places}; - StringParameters tmp_params(args_array); - buff = FormatString(buff, GetStringPtr(x.l), &tmp_params, last); + auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); + buff = FormatString(buff, GetStringPtr(x.l), tmp_params, last); break; } default: { - StringParameters tmp_params(*args, 1); - buff = GetStringWithArgs(buff, cargo_str, &tmp_params, last); + StringParameters tmp_params(args, 1); + buff = GetStringWithArgs(buff, cargo_str, tmp_params, last); break; } } @@ -1465,17 +1452,17 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg case SCC_CARGO_LONG: { // {CARGO_LONG} /* First parameter is cargo type, second parameter is cargo count */ - CargoID cargo = args->GetInt32(SCC_CARGO_LONG); + CargoID cargo = args.GetNextParameter(); if (cargo != CT_INVALID && cargo >= CargoSpec::GetArraySize()) break; StringID cargo_str = (cargo == CT_INVALID) ? STR_QUANTITY_N_A : CargoSpec::Get(cargo)->quantifier; - StringParameters tmp_args(*args, 1); - buff = GetStringWithArgs(buff, cargo_str, &tmp_args, last); + StringParameters tmp_args(args, 1); + buff = GetStringWithArgs(buff, cargo_str, tmp_args, last); break; } case SCC_CARGO_LIST: { // {CARGO_LIST} - CargoTypes cmask = args->GetInt64(SCC_CARGO_LIST); + CargoTypes cmask = args.GetNextParameter(); bool first = true; for (const auto &cs : _sorted_cargo_specs) { @@ -1506,101 +1493,97 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg } case SCC_CURRENCY_SHORT: // {CURRENCY_SHORT} - buff = FormatGenericCurrency(buff, _currency, args->GetInt64(), true, last); + buff = FormatGenericCurrency(buff, _currency, args.GetNextParameter(), true, last); break; case SCC_CURRENCY_LONG: // {CURRENCY_LONG} - buff = FormatGenericCurrency(buff, _currency, args->GetInt64(SCC_CURRENCY_LONG), false, last); + buff = FormatGenericCurrency(buff, _currency, args.GetNextParameter(), false, last); break; case SCC_DATE_TINY: // {DATE_TINY} - buff = FormatTinyOrISODate(buff, args->GetInt32(SCC_DATE_TINY), STR_FORMAT_DATE_TINY, last); + buff = FormatTinyOrISODate(buff, args.GetNextParameter(), STR_FORMAT_DATE_TINY, last); break; case SCC_DATE_SHORT: // {DATE_SHORT} - buff = FormatMonthAndYear(buff, args->GetInt32(SCC_DATE_SHORT), last, next_substr_case_index); + buff = FormatMonthAndYear(buff, args.GetNextParameter(), last, next_substr_case_index); next_substr_case_index = 0; break; case SCC_DATE_LONG: // {DATE_LONG} - buff = FormatYmdString(buff, args->GetInt32(SCC_DATE_LONG), last, next_substr_case_index); + buff = FormatYmdString(buff, args.GetNextParameter(), last, next_substr_case_index); next_substr_case_index = 0; break; case SCC_DATE_WALLCLOCK_LONG: { // {DATE_WALLCLOCK_LONG} if (_settings_time.time_in_minutes) { - buff = FormatWallClockString(buff, args->GetInt64(SCC_DATE_WALLCLOCK_LONG), last, _settings_client.gui.date_with_time, next_substr_case_index); + buff = FormatWallClockString(buff, args.GetNextParameter(), last, _settings_client.gui.date_with_time, next_substr_case_index); } else { - buff = FormatYmdString(buff, ScaledDateTicksToDate(args->GetInt64(SCC_DATE_WALLCLOCK_LONG)), last, next_substr_case_index); + buff = FormatYmdString(buff, ScaledDateTicksToDate(args.GetNextParameter()), last, next_substr_case_index); } break; } case SCC_DATE_WALLCLOCK_SHORT: { // {DATE_WALLCLOCK_SHORT} if (_settings_time.time_in_minutes) { - buff = FormatWallClockString(buff, args->GetInt64(SCC_DATE_WALLCLOCK_SHORT), last, _settings_client.gui.date_with_time, next_substr_case_index); + buff = FormatWallClockString(buff, args.GetNextParameter(), last, _settings_client.gui.date_with_time, next_substr_case_index); } else { - buff = FormatYmdString(buff, ScaledDateTicksToDate(args->GetInt64(SCC_DATE_WALLCLOCK_SHORT)), last, next_substr_case_index); + buff = FormatYmdString(buff, ScaledDateTicksToDate(args.GetNextParameter()), last, next_substr_case_index); } break; } case SCC_DATE_WALLCLOCK_TINY: { // {DATE_WALLCLOCK_TINY} if (_settings_time.time_in_minutes) { - buff = FormatWallClockString(buff, args->GetInt64(SCC_DATE_WALLCLOCK_TINY), last, false, next_substr_case_index); + buff = FormatWallClockString(buff, args.GetNextParameter(), last, false, next_substr_case_index); } else { - buff = FormatTinyOrISODate(buff, ScaledDateTicksToDate(args->GetInt64(SCC_DATE_WALLCLOCK_TINY)), STR_FORMAT_DATE_TINY, last); + buff = FormatTinyOrISODate(buff, ScaledDateTicksToDate(args.GetNextParameter()), STR_FORMAT_DATE_TINY, last); } break; } case SCC_DATE_WALLCLOCK_ISO: { // {DATE_WALLCLOCK_ISO} if (_settings_time.time_in_minutes) { - buff = FormatWallClockString(buff, args->GetInt64(SCC_DATE_WALLCLOCK_ISO), last, false, next_substr_case_index); + buff = FormatWallClockString(buff, args.GetNextParameter(), last, false, next_substr_case_index); } else { - buff = FormatTinyOrISODate(buff, ScaledDateTicksToDate(args->GetInt64(SCC_DATE_WALLCLOCK_ISO)), STR_FORMAT_DATE_ISO, last); + buff = FormatTinyOrISODate(buff, ScaledDateTicksToDate(args.GetNextParameter()), STR_FORMAT_DATE_ISO, last); } break; } case SCC_DATE_ISO: // {DATE_ISO} - buff = FormatTinyOrISODate(buff, args->GetInt32(), STR_FORMAT_DATE_ISO, last); + buff = FormatTinyOrISODate(buff, args.GetNextParameter(), STR_FORMAT_DATE_ISO, last); break; case SCC_TIME_HHMM: // {TIME_HHMM} - buff = FormatTimeHHMMString(buff, args->GetInt64(SCC_TIME_HHMM), last, next_substr_case_index); + buff = FormatTimeHHMMString(buff, args.GetNextParameter(), last, next_substr_case_index); break; case SCC_TT_TICKS: // {TT_TICKS} case SCC_TT_TICKS_LONG: // {TT_TICKS_LONG} if (_settings_client.gui.timetable_in_ticks) { - int64 args_array[1] = { args->GetInt64(b) }; - StringParameters tmp_params(args_array); - buff = FormatString(buff, GetStringPtr(STR_TIMETABLE_TICKS), &tmp_params, last); + auto tmp_params = MakeParameters(args.GetNextParameter()); + buff = FormatString(buff, GetStringPtr(STR_TIMETABLE_TICKS), tmp_params, last); } else { StringID str = _settings_time.time_in_minutes ? STR_TIMETABLE_MINUTES : STR_TIMETABLE_DAYS; - int64 ticks = args->GetInt64(b); + int64 ticks = args.GetNextParameter(); int64 ratio = DATE_UNIT_SIZE; int64 units = ticks / ratio; int64 leftover = _settings_client.gui.timetable_leftover_ticks ? ticks % ratio : 0; - int64 args_array[1] = { units }; - StringParameters tmp_params(args_array); - buff = FormatString(buff, GetStringPtr(str), &tmp_params, last); + auto tmp_params = MakeParameters(units); + buff = FormatString(buff, GetStringPtr(str), tmp_params, last); if (b == SCC_TT_TICKS_LONG && _settings_time.time_in_minutes && units > 59) { int64 hours = units / 60; int64 minutes = units % 60; - int64 args_array[3] = { + auto tmp_params = MakeParameters( (minutes != 0) ? STR_TIMETABLE_HOURS_MINUTES : STR_TIMETABLE_HOURS, hours, minutes - }; - StringParameters tmp_params(args_array); - buff = FormatString(buff, GetStringPtr(STR_TIMETABLE_MINUTES_SUFFIX), &tmp_params, last); + ); + buff = FormatString(buff, GetStringPtr(STR_TIMETABLE_MINUTES_SUFFIX), tmp_params, last); } if (leftover != 0) { - int64 args_array[1] = { leftover }; - StringParameters tmp_params(args_array); - buff = FormatString(buff, GetStringPtr(STR_TIMETABLE_LEFTOVER_TICKS), &tmp_params, last); + auto tmp_params = MakeParameters(leftover); + buff = FormatString(buff, GetStringPtr(STR_TIMETABLE_LEFTOVER_TICKS), tmp_params, last); } } break; @@ -1608,27 +1591,24 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg case SCC_FORCE: { // {FORCE} assert(_settings_game.locale.units_force < lengthof(_units_force)); const auto &x = _units_force[_settings_game.locale.units_force]; - int64 args_array[] = {x.c.ToDisplay(args->GetInt64()), x.decimal_places}; - StringParameters tmp_params(args_array); - buff = FormatString(buff, GetStringPtr(x.s), &tmp_params, last); + auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); + buff = FormatString(buff, GetStringPtr(x.s), tmp_params, last); break; } case SCC_HEIGHT: { // {HEIGHT} assert(_settings_game.locale.units_height < lengthof(_units_height)); const auto &x = _units_height[_settings_game.locale.units_height]; - int64 args_array[] = {x.c.ToDisplay(args->GetInt64()), x.decimal_places}; - StringParameters tmp_params(args_array); - buff = FormatString(buff, GetStringPtr(x.s), &tmp_params, last); + auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); + buff = FormatString(buff, GetStringPtr(x.s), tmp_params, last); break; } case SCC_POWER: { // {POWER} assert(_settings_game.locale.units_power < lengthof(_units_power)); const auto &x = _units_power[_settings_game.locale.units_power]; - int64 args_array[] = {x.c.ToDisplay(args->GetInt64()), x.decimal_places}; - StringParameters tmp_params(args_array); - buff = FormatString(buff, GetStringPtr(x.s), &tmp_params, last); + auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); + buff = FormatString(buff, GetStringPtr(x.s), tmp_params, last); break; } @@ -1636,58 +1616,52 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg auto setting = _settings_game.locale.units_power * 3u + _settings_game.locale.units_weight; assert(setting < lengthof(_units_power_to_weight)); const auto &x = _units_power_to_weight[setting]; - int64 args_array[] = {x.c.ToDisplay(args->GetInt64()), x.decimal_places}; - StringParameters tmp_params(args_array); - buff = FormatString(buff, GetStringPtr(x.s), &tmp_params, last); + auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); + buff = FormatString(buff, GetStringPtr(x.s), tmp_params, last); break; } case SCC_VELOCITY: { // {VELOCITY} - int64 arg = args->GetInt64(SCC_VELOCITY); + int64 arg = args.GetNextParameter(); // Unpack vehicle type from packed argument to get desired units. VehicleType vt = static_cast(GB(arg, 56, 8)); byte units = GetVelocityUnits(vt); assert(units < lengthof(_units_velocity)); const auto &x = _units_velocity[units]; - int64 args_array[] = {ConvertKmhishSpeedToDisplaySpeed(GB(arg, 0, 56), vt), x.decimal_places}; - StringParameters tmp_params(args_array); - buff = FormatString(buff, GetStringPtr(x.s), &tmp_params, last); + auto tmp_params = MakeParameters(ConvertKmhishSpeedToDisplaySpeed(GB(arg, 0, 56), vt), x.decimal_places); + buff = FormatString(buff, GetStringPtr(x.s), tmp_params, last); break; } case SCC_VOLUME_SHORT: { // {VOLUME_SHORT} assert(_settings_game.locale.units_volume < lengthof(_units_volume)); const auto &x = _units_volume[_settings_game.locale.units_volume]; - int64 args_array[] = {x.c.ToDisplay(args->GetInt64()), x.decimal_places}; - StringParameters tmp_params(args_array); - buff = FormatString(buff, GetStringPtr(x.s), &tmp_params, last); + auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); + buff = FormatString(buff, GetStringPtr(x.s), tmp_params, last); break; } case SCC_VOLUME_LONG: { // {VOLUME_LONG} assert(_settings_game.locale.units_volume < lengthof(_units_volume)); const auto &x = _units_volume[_settings_game.locale.units_volume]; - int64 args_array[] = {x.c.ToDisplay(args->GetInt64(SCC_VOLUME_LONG)), x.decimal_places}; - StringParameters tmp_params(args_array); - buff = FormatString(buff, GetStringPtr(x.l), &tmp_params, last); + auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); + buff = FormatString(buff, GetStringPtr(x.l), tmp_params, last); break; } case SCC_WEIGHT_SHORT: { // {WEIGHT_SHORT} assert(_settings_game.locale.units_weight < lengthof(_units_weight)); const auto &x = _units_weight[_settings_game.locale.units_weight]; - int64 args_array[] = {x.c.ToDisplay(args->GetInt64()), x.decimal_places}; - StringParameters tmp_params(args_array); - buff = FormatString(buff, GetStringPtr(x.s), &tmp_params, last); + auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); + buff = FormatString(buff, GetStringPtr(x.s), tmp_params, last); break; } case SCC_WEIGHT_LONG: { // {WEIGHT_LONG} assert(_settings_game.locale.units_weight < lengthof(_units_weight)); const auto &x = _units_weight[_settings_game.locale.units_weight]; - int64 args_array[] = {x.c.ToDisplay(args->GetInt64(SCC_WEIGHT_LONG)), x.decimal_places}; - StringParameters tmp_params(args_array); - buff = FormatString(buff, GetStringPtr(x.l), &tmp_params, last); + auto tmp_params = MakeParameters(x.c.ToDisplay(args.GetNextParameter()), x.decimal_places); + buff = FormatString(buff, GetStringPtr(x.l), tmp_params, last); break; } @@ -1695,7 +1669,7 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg assert(_settings_game.locale.units_power < lengthof(_units_power)); assert(_settings_game.locale.units_weight < lengthof(_units_weight)); - buff = FormatUnitWeightRatio(buff, last, _units_power[_settings_game.locale.units_power], args->GetInt64()); + buff = FormatUnitWeightRatio(buff, last, _units_power[_settings_game.locale.units_power], args.GetNextParameter()); break; } @@ -1703,70 +1677,62 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg assert(_settings_game.locale.units_force < lengthof(_units_force)); assert(_settings_game.locale.units_weight < lengthof(_units_weight)); - buff = FormatUnitWeightRatio(buff, last, _units_force[_settings_game.locale.units_force], args->GetInt64()); + buff = FormatUnitWeightRatio(buff, last, _units_force[_settings_game.locale.units_force], args.GetNextParameter()); break; } case SCC_COMPANY_NAME: { // {COMPANY} - const Company *c = Company::GetIfValid(args->GetInt32()); + const Company *c = Company::GetIfValid(args.GetNextParameter()); if (c == nullptr) break; if (!c->name.empty()) { - int64 args_array[] = {(int64)(size_t)c->name.c_str()}; - StringParameters tmp_params(args_array); - buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); + auto tmp_params = MakeParameters(c->name.c_str()); + buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, tmp_params, last); } else { - int64 args_array[] = {c->name_2}; - StringParameters tmp_params(args_array); - buff = GetStringWithArgs(buff, c->name_1, &tmp_params, last); + auto tmp_params = MakeParameters(c->name_2); + buff = GetStringWithArgs(buff, c->name_1, tmp_params, last); } break; } case SCC_COMPANY_NUM: { // {COMPANY_NUM} - CompanyID company = (CompanyID)args->GetInt32(); + CompanyID company = args.GetNextParameter(); /* Nothing is added for AI or inactive companies */ if (Company::IsValidHumanID(company)) { - int64 args_array[] = {company + 1}; - StringParameters tmp_params(args_array); - buff = GetStringWithArgs(buff, STR_FORMAT_COMPANY_NUM, &tmp_params, last); + auto tmp_params = MakeParameters(company + 1); + buff = GetStringWithArgs(buff, STR_FORMAT_COMPANY_NUM, tmp_params, last); } break; } case SCC_DEPOT_NAME: { // {DEPOT} - VehicleType vt = (VehicleType)args->GetInt32(SCC_DEPOT_NAME); + VehicleType vt = args.GetNextParameter(); if (vt == VEH_AIRCRAFT) { - uint64 args_array[] = {(uint64)args->GetInt32()}; - WChar types_array[] = {SCC_STATION_NAME}; - StringParameters tmp_params(args_array, 1, types_array); - buff = GetStringWithArgs(buff, STR_FORMAT_DEPOT_NAME_AIRCRAFT, &tmp_params, last); + StringParameters tmp_params = StringParameters(args, 1); + buff = GetStringWithArgs(buff, STR_FORMAT_DEPOT_NAME_AIRCRAFT, tmp_params, last); break; } - const Depot *d = Depot::Get(args->GetInt32()); + const Depot *d = Depot::Get(args.GetNextParameter()); if (!d->name.empty()) { - int64 args_array[] = {(int64)(size_t)d->name.c_str()}; - StringParameters tmp_params(args_array); - buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); + auto tmp_params = MakeParameters(d->name.c_str()); + buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, tmp_params, last); } else { - int64 args_array[] = {d->town->index, d->town_cn + 1}; - StringParameters tmp_params(args_array); - buff = GetStringWithArgs(buff, STR_FORMAT_DEPOT_NAME_TRAIN + 2 * vt + (d->town_cn == 0 ? 0 : 1), &tmp_params, last); + auto tmp_params = MakeParameters(d->town->index, d->town_cn + 1); + buff = GetStringWithArgs(buff, STR_FORMAT_DEPOT_NAME_TRAIN + 2 * vt + (d->town_cn == 0 ? 0 : 1), tmp_params, last); } break; } case SCC_ENGINE_NAME: { // {ENGINE} - int64 arg = args->GetInt64(SCC_ENGINE_NAME); + int64 arg = args.GetNextParameter(); const Engine *e = Engine::GetIfValid(static_cast(arg)); if (e == nullptr) break; if (!e->name.empty() && e->IsEnabled()) { - int64 args_array[] = {(int64)(size_t)e->name.c_str()}; - StringParameters tmp_params(args_array); - buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); + auto tmp_params = MakeParameters(e->name.c_str()); + buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, tmp_params, last); break; } @@ -1779,23 +1745,21 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg assert(grffile != nullptr); StartTextRefStackUsage(grffile, 6); - uint64 tmp_dparam[6] = { 0 }; - WChar tmp_type[6] = { 0 }; - StringParameters tmp_params(tmp_dparam, 6, tmp_type); - buff = GetStringWithArgs(buff, GetGRFStringID(grffile->grfid, 0xD000 + callback), &tmp_params, last); + ArrayStringParameters<6> tmp_params; + buff = GetStringWithArgs(buff, GetGRFStringID(grffile->grfid, 0xD000 + callback), tmp_params, last); StopTextRefStackUsage(); break; } } - StringParameters tmp_params(nullptr, 0, nullptr); - buff = GetStringWithArgs(buff, e->info.string_id, &tmp_params, last); + auto tmp_params = MakeParameters(); + buff = GetStringWithArgs(buff, e->info.string_id, tmp_params, last); break; } case SCC_GROUP_NAME: { // {GROUP} - uint32 id = (uint32)args->GetInt64(); + uint32 id = args.GetNextParameter(); bool recurse = _settings_client.gui.show_group_hierarchy_name && (id & GROUP_NAME_HIERARCHY); id &= ~GROUP_NAME_HIERARCHY; const Group *group = Group::GetIfValid(id); @@ -1804,18 +1768,16 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg auto handle_group = y_combinator([&](auto handle_group, const Group *g) -> void { if (recurse && g->parent != INVALID_GROUP) { handle_group(Group::Get(g->parent)); - StringParameters tmp_params(nullptr, 0, nullptr); - buff = GetStringWithArgs(buff, STR_HIERARCHY_SEPARATOR, &tmp_params, last); + auto tmp_params = MakeParameters(); + buff = GetStringWithArgs(buff, STR_HIERARCHY_SEPARATOR, tmp_params, last); } if (!g->name.empty()) { - int64 args_array[] = {(int64)(size_t)g->name.c_str()}; - StringParameters tmp_params(args_array); - buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); + auto tmp_params = MakeParameters(g->name.c_str()); + buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, tmp_params, last); } else { - int64 args_array[] = {g->index}; - StringParameters tmp_params(args_array); + auto tmp_params = MakeParameters(g->index); - buff = GetStringWithArgs(buff, STR_FORMAT_GROUP_NAME, &tmp_params, last); + buff = GetStringWithArgs(buff, STR_FORMAT_GROUP_NAME, tmp_params, last); } }); handle_group(group); @@ -1823,7 +1785,7 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg } case SCC_INDUSTRY_NAME: { // {INDUSTRY} - const Industry *i = Industry::GetIfValid(args->GetInt32(SCC_INDUSTRY_NAME)); + const Industry *i = Industry::GetIfValid(args.GetNextParameter()); if (i == nullptr) break; static bool use_cache = true; @@ -1833,45 +1795,42 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg } else if (_scan_for_gender_data) { /* Gender is defined by the industry type. * STR_FORMAT_INDUSTRY_NAME may have the town first, so it would result in the gender of the town name */ - StringParameters tmp_params(nullptr, 0, nullptr); - buff = FormatString(buff, GetStringPtr(GetIndustrySpec(i->type)->name), &tmp_params, last, next_substr_case_index); + auto tmp_params = MakeParameters(); + buff = FormatString(buff, GetStringPtr(GetIndustrySpec(i->type)->name), tmp_params, last, next_substr_case_index); } else { /* First print the town name and the industry type name. */ - int64 args_array[2] = {i->town->index, GetIndustrySpec(i->type)->name}; - StringParameters tmp_params(args_array); + auto tmp_params = MakeParameters(i->town->index, GetIndustrySpec(i->type)->name); - buff = FormatString(buff, GetStringPtr(STR_FORMAT_INDUSTRY_NAME), &tmp_params, last, next_substr_case_index); + buff = FormatString(buff, GetStringPtr(STR_FORMAT_INDUSTRY_NAME), tmp_params, last, next_substr_case_index); } next_substr_case_index = 0; break; } case SCC_PRESIDENT_NAME: { // {PRESIDENT_NAME} - const Company *c = Company::GetIfValid(args->GetInt32(SCC_PRESIDENT_NAME)); + const Company *c = Company::GetIfValid(args.GetNextParameter()); if (c == nullptr) break; if (!c->president_name.empty()) { - int64 args_array[] = {(int64)(size_t)c->president_name.c_str()}; - StringParameters tmp_params(args_array); - buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); + auto tmp_params = MakeParameters(c->president_name.c_str()); + buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, tmp_params, last); } else { - int64 args_array[] = {c->president_name_2}; - StringParameters tmp_params(args_array); - buff = GetStringWithArgs(buff, c->president_name_1, &tmp_params, last); + auto tmp_params = MakeParameters(c->president_name_2); + buff = GetStringWithArgs(buff, c->president_name_1, tmp_params, last); } break; } case SCC_STATION_NAME: { // {STATION} - StationID sid = args->GetInt32(SCC_STATION_NAME); + StationID sid = args.GetNextParameter(); const Station *st = Station::GetIfValid(sid); if (st == nullptr) { /* The station doesn't exist anymore. The only place where we might * be "drawing" an invalid station is in the case of cargo that is * in transit. */ - StringParameters tmp_params(nullptr, 0, nullptr); - buff = GetStringWithArgs(buff, STR_UNKNOWN_STATION, &tmp_params, last); + auto tmp_params = MakeParameters(); + buff = GetStringWithArgs(buff, STR_UNKNOWN_STATION, tmp_params, last); break; } @@ -1880,9 +1839,8 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg AutoRestoreBackup cache_backup(use_cache, false); buff = strecpy(buff, st->GetCachedName(), last); } else if (!st->name.empty()) { - int64 args_array[] = {(int64)(size_t)st->name.c_str()}; - StringParameters tmp_params(args_array); - buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); + auto tmp_params = MakeParameters(st->name.c_str()); + buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, tmp_params, last); } else { StringID string_id = st->string_id; if (st->indtype != IT_INVALID) { @@ -1900,16 +1858,14 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg string_id = _extra_station_names[st->extra_name_index].str; } - uint64 args_array[] = {STR_TOWN_NAME, st->town->index, st->index}; - WChar types_array[] = {0, SCC_TOWN_NAME, SCC_NUM}; - StringParameters tmp_params(args_array, 3, types_array); - buff = GetStringWithArgs(buff, string_id, &tmp_params, last); + auto tmp_params = MakeParameters(STR_TOWN_NAME, st->town->index, st->index); + buff = GetStringWithArgs(buff, string_id, tmp_params, last); } break; } case SCC_TOWN_NAME: { // {TOWN} - const Town *t = Town::GetIfValid(args->GetInt32(SCC_TOWN_NAME)); + const Town *t = Town::GetIfValid(args.GetNextParameter()); if (t == nullptr) break; static bool use_cache = true; @@ -1917,9 +1873,8 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg AutoRestoreBackup cache_backup(use_cache, false); buff = strecpy(buff, t->GetCachedName(), last); } else if (!t->name.empty()) { - int64 args_array[] = {(int64)(size_t)t->name.c_str()}; - StringParameters tmp_params(args_array); - buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); + auto tmp_params = MakeParameters(t->name.c_str()); + buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, tmp_params, last); } else { buff = GetTownName(buff, t, last); } @@ -1928,38 +1883,35 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg case SCC_VIEWPORT_TOWN_LABEL1: case SCC_VIEWPORT_TOWN_LABEL2: { // {VIEWPORT_TOWN_LABEL1..2} - int32 t = args->GetInt32(b); - uint64 data = (uint64)args->GetInt64(b); + int32 t = args.GetNextParameter(); + uint64 data = args.GetNextParameter(); bool tiny = (b == SCC_VIEWPORT_TOWN_LABEL2); StringID string_id = STR_VIEWPORT_TOWN_COLOUR; if (!tiny) string_id += GB(data, 40, 2); - int64 args_array[] = {t, GB(data, 32, 8), GB(data, 0, 32)}; - StringParameters tmp_params(args_array); - buff = GetStringWithArgs(buff, string_id, &tmp_params, last); + auto tmp_params = MakeParameters(t, GB(data, 32, 8), GB(data, 0, 32)); + buff = GetStringWithArgs(buff, string_id, tmp_params, last); break; } case SCC_WAYPOINT_NAME: { // {WAYPOINT} - Waypoint *wp = Waypoint::GetIfValid(args->GetInt32(SCC_WAYPOINT_NAME)); + Waypoint *wp = Waypoint::GetIfValid(args.GetNextParameter()); if (wp == nullptr) break; if (!wp->name.empty()) { - int64 args_array[] = {(int64)(size_t)wp->name.c_str()}; - StringParameters tmp_params(args_array); - buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); + auto tmp_params = MakeParameters(wp->name.c_str()); + buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, tmp_params, last); } else { - int64 args_array[] = {wp->town->index, wp->town_cn + 1}; - StringParameters tmp_params(args_array); + auto tmp_params = MakeParameters(wp->town->index, wp->town_cn + 1); StringID string_id = ((wp->string_id == STR_SV_STNAME_BUOY) ? STR_FORMAT_BUOY_NAME : STR_FORMAT_WAYPOINT_NAME); if (wp->town_cn != 0) string_id++; - buff = GetStringWithArgs(buff, string_id, &tmp_params, last); + buff = GetStringWithArgs(buff, string_id, tmp_params, last); } break; } case SCC_VEHICLE_NAME: { // {VEHICLE} - uint32 id = (uint32)args->GetInt64(SCC_VEHICLE_NAME); + uint32 id = args.GetNextParameter(); uint8 vehicle_names = _settings_client.gui.vehicle_names; if (id & VEHICLE_NAME_NO_GROUP) { id &= ~VEHICLE_NAME_NO_GROUP; @@ -1971,25 +1923,21 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg if (v == nullptr) break; if (!v->name.empty()) { - int64 args_array[] = {(int64)(size_t)v->name.c_str()}; - StringParameters tmp_params(args_array); - buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); + auto tmp_params = MakeParameters(v->name.c_str()); + buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, tmp_params, last); } else if (v->group_id != DEFAULT_GROUP && vehicle_names != 0 && v->type < VEH_COMPANY_END) { /* The vehicle has no name, but is member of a group, so print group name */ uint32 group_name = v->group_id; if (_settings_client.gui.show_vehicle_group_hierarchy_name) group_name |= GROUP_NAME_HIERARCHY; if (vehicle_names == 1) { - int64 args_array[] = {group_name, v->unitnumber}; - StringParameters tmp_params(args_array); - buff = GetStringWithArgs(buff, STR_FORMAT_GROUP_VEHICLE_NAME, &tmp_params, last); + auto tmp_params = MakeParameters(group_name, v->unitnumber); + buff = GetStringWithArgs(buff, STR_FORMAT_GROUP_VEHICLE_NAME, tmp_params, last); } else { - int64 args_array[] = {group_name, STR_TRADITIONAL_TRAIN_NAME + v->type, v->unitnumber}; - StringParameters tmp_params(args_array); - buff = GetStringWithArgs(buff, STR_FORMAT_GROUP_VEHICLE_NAME_LONG, &tmp_params, last); + auto tmp_params = MakeParameters(group_name, STR_TRADITIONAL_TRAIN_NAME + v->type, v->unitnumber); + buff = GetStringWithArgs(buff, STR_FORMAT_GROUP_VEHICLE_NAME_LONG, tmp_params, last); } } else { - int64 args_array[] = {v->unitnumber}; - StringParameters tmp_params(args_array); + auto tmp_params = MakeParameters(v->unitnumber); StringID string_id; if (v->type < VEH_COMPANY_END) { @@ -1998,51 +1946,48 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg string_id = STR_INVALID_VEHICLE; } - buff = GetStringWithArgs(buff, string_id, &tmp_params, last); + buff = GetStringWithArgs(buff, string_id, tmp_params, last); } break; } case SCC_SIGN_NAME: { // {SIGN} - const Sign *si = Sign::GetIfValid(args->GetInt32()); + const Sign *si = Sign::GetIfValid(args.GetNextParameter()); if (si == nullptr) break; if (!si->name.empty()) { - int64 args_array[] = {(int64)(size_t)si->name.c_str()}; - StringParameters tmp_params(args_array); - buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); + auto tmp_params = MakeParameters(si->name); + buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, tmp_params, last); } else { - StringParameters tmp_params(nullptr, 0, nullptr); - buff = GetStringWithArgs(buff, STR_DEFAULT_SIGN_NAME, &tmp_params, last); + auto tmp_params = MakeParameters(); + buff = GetStringWithArgs(buff, STR_DEFAULT_SIGN_NAME, tmp_params, last); } break; } case SCC_TR_SLOT_NAME: { // {TRSLOT} - const TraceRestrictSlot *slot = TraceRestrictSlot::GetIfValid(args->GetInt32(SCC_TR_SLOT_NAME)); + const TraceRestrictSlot *slot = TraceRestrictSlot::GetIfValid(args.GetNextParameter()); if (slot == nullptr) break; - int64 args_array[] = {(int64)(size_t)slot->name.c_str()}; - StringParameters tmp_params(args_array); - buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); + auto tmp_params = MakeParameters(slot->name.c_str()); + buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, tmp_params, last); break; } case SCC_TR_COUNTER_NAME: { // {TRCOUNTER} - const TraceRestrictCounter *ctr = TraceRestrictCounter::GetIfValid(args->GetInt32(SCC_TR_SLOT_NAME)); + const TraceRestrictCounter *ctr = TraceRestrictCounter::GetIfValid(args.GetNextParameter()); if (ctr == nullptr) break; - int64 args_array[] = {(int64)(size_t)ctr->name.c_str()}; - StringParameters tmp_params(args_array); - buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, &tmp_params, last); + auto tmp_params = MakeParameters(ctr->name.c_str()); + buff = GetStringWithArgs(buff, STR_JUST_RAW_STRING, tmp_params, last); break; } case SCC_STATION_FEATURES: { // {STATIONFEATURES} - buff = StationGetSpecialString(buff, args->GetInt32(SCC_STATION_FEATURES), last); + buff = StationGetSpecialString(buff, args.GetNextParameter(), last); break; } case SCC_COLOUR: {// {COLOUR} - int64 tc = args->GetInt64(SCC_COLOUR); + int64 tc = args.GetNextParameter(); if (tc >= 0 && tc < TC_END) { buff += Utf8Encode(buff, SCC_BLUE + tc); } @@ -2063,7 +2008,7 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg } -static char *StationGetSpecialString(char *buff, int x, const char *last) +static char *StationGetSpecialString(char *buff, StationFacility x, const char *last) { if ((x & FACIL_TRAIN) && (buff + Utf8CharLen(SCC_TRAIN) < last)) buff += Utf8Encode(buff, SCC_TRAIN); if ((x & FACIL_TRUCK_STOP) && (buff + Utf8CharLen(SCC_LORRY) < last)) buff += Utf8Encode(buff, SCC_LORRY); @@ -2195,22 +2140,22 @@ static char *GenPresidentName(char *buff, uint32 x, const char *last) return buff; } -static char *GetSpecialNameString(char *buff, int ind, StringParameters *args, const char *last) +static char *GetSpecialNameString(char *buff, int ind, StringParameters &args, const char *last) { switch (ind) { case 1: // not used - return strecpy(buff, _silly_company_names[std::min(args->GetInt32() & 0xFFFF, lengthof(_silly_company_names) - 1)], last); + return strecpy(buff, _silly_company_names[std::min(args.GetNextParameter() & 0xFFFF, lengthof(_silly_company_names) - 1)], last); case 2: // used for Foobar & Co company names - return GenAndCoName(buff, args->GetInt32(), last); + return GenAndCoName(buff, args.GetNextParameter(), last); case 3: // President name - return GenPresidentName(buff, args->GetInt32(), last); + return GenPresidentName(buff, args.GetNextParameter(), last); } /* town name? */ if (IsInsideMM(ind - 6, 0, SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1)) { - buff = GetSpecialTownNameString(buff, ind - 6, args->GetInt32(), last); + buff = GetSpecialTownNameString(buff, ind - 6, args.GetNextParameter(), last); return strecpy(buff, " Transport", last); } diff --git a/src/strings_func.h b/src/strings_func.h index b1cba014a6..5514f29263 100644 --- a/src/strings_func.h +++ b/src/strings_func.h @@ -11,12 +11,17 @@ #define STRINGS_FUNC_H #include "strings_type.h" +#include "strings_internal.h" #include "string_type.h" #include "gfx_type.h" #include "core/bitmath_func.hpp" +#include "core/span_type.hpp" #include "vehicle_type.h" +#include #include +extern ArrayStringParameters<20> _global_string_params; + /** * Extract the StringTab from a StringID. * @param str String identifier @@ -59,121 +64,9 @@ static inline StringID MakeStringID(StringTab tab, uint index) return (tab << TAB_SIZE_BITS) + index; } -class StringParameters { - StringParameters *parent; ///< If not nullptr, this instance references data from this parent instance. - uint64 *data; ///< Array with the actual data. - WChar *type; ///< Array with type information about the data. Can be nullptr when no type information is needed. See #StringControlCode. - -public: - uint offset; ///< Current offset in the data/type arrays. - uint num_param; ///< Length of the data array. - - /** Create a new StringParameters instance. */ - StringParameters(uint64 *data, uint num_param, WChar *type) : - parent(nullptr), - data(data), - type(type), - offset(0), - num_param(num_param) - { } - - /** Create a new StringParameters instance. */ - template - StringParameters(int64 (&data)[Tnum_param]) : - parent(nullptr), - data((uint64 *)data), - type(nullptr), - offset(0), - num_param(Tnum_param) - { - static_assert(sizeof(data[0]) == sizeof(uint64)); - } - - /** - * Create a new StringParameters instance that can reference part of the data of - * the given partent instance. - */ - StringParameters(StringParameters &parent, uint size) : - parent(&parent), - data(parent.data + parent.offset), - offset(0), - num_param(size) - { - assert(size <= parent.GetDataLeft()); - if (parent.type == nullptr) { - this->type = nullptr; - } else { - this->type = parent.type + parent.offset; - } - } - - ~StringParameters() - { - if (this->parent != nullptr) { - this->parent->offset += this->num_param; - } - } - - void ClearTypeInformation(); - - int64 GetInt64(WChar type = 0); - - /** Read an int32 from the argument array. @see GetInt64. */ - int32 GetInt32(WChar type = 0) - { - return (int32)this->GetInt64(type); - } - - /** Get a pointer to the current element in the data array. */ - uint64 *GetDataPointer() const - { - return &this->data[this->offset]; - } - - /** Return the amount of elements which can still be read. */ - uint GetDataLeft() const - { - return this->num_param - this->offset; - } - - /** Get a pointer to a specific element in the data array. */ - uint64 *GetPointerToOffset(uint offset) const - { - assert(offset < this->num_param); - return &this->data[offset]; - } - - /** Does this instance store information about the type of the parameters. */ - bool HasTypeInformation() const - { - return this->type != nullptr; - } - - /** Get the type of a specific element. */ - WChar GetTypeAtOffset(uint offset) const - { - assert(offset < this->num_param); - assert(this->HasTypeInformation()); - return this->type[offset]; - } - - void SetParam(uint n, uint64 v) - { - assert(n < this->num_param); - this->data[n] = v; - } - - uint64 GetParam(uint n) const - { - assert(n < this->num_param); - return this->data[n]; - } -}; -extern StringParameters _global_string_params; - char *GetString(char *buffr, StringID string, const char *last); std::string GetString(StringID string); -char *GetStringWithArgs(char *buffr, StringID string, StringParameters *args, const char *last, uint case_index = 0, bool game_script = false); +char *GetStringWithArgs(char *buffr, StringID string, StringParameters &args, const char *last, uint case_index = 0, bool game_script = false); const char *GetStringPtr(StringID string); uint32 GetStringGRFID(StringID string); @@ -195,17 +88,6 @@ static inline int64 PackVelocity(uint speed, VehicleType type) WChar GetDecimalSeparatorChar(); -/** - * Set a string parameter \a v at index \a n in a given array \a s. - * @param s Array of string parameters. - * @param n Index of the string parameter. - * @param v Value of the string parameter. - */ -static inline void SetDParamX(uint64 *s, uint n, uint64 v) -{ - s[n] = v; -} - /** * Set a string parameter \a v at index \a n in the global string parameter array. * @param n Index of the string parameter. @@ -220,23 +102,11 @@ void SetDParamMaxValue(uint n, uint64 max_value, uint min_count = 0, FontSize si void SetDParamMaxDigits(uint n, uint count, FontSize size = FS_NORMAL); void SetDParamStr(uint n, const char *str); -void SetDParamStr(uint n, const std::string &str); -void SetDParamStr(uint n, std::string &&str) = delete; // block passing temporaries to SetDParamStr - -void CopyInDParam(int offs, const uint64 *src, int num); -void CopyOutDParam(uint64 *dst, int offs, int num); -void CopyOutDParam(uint64 *dst, const char **strings, StringID string, int num); +void SetDParamStr(uint n, std::string str); -/** - * Get the current string parameter at index \a n from parameter array \a s. - * @param s Array of string parameters. - * @param n Index of the string parameter. - * @return Value of the requested string parameter. - */ -static inline uint64 GetDParamX(const uint64 *s, uint n) -{ - return s[n]; -} +void CopyInDParam(const span backup, uint offset = 0); +void CopyOutDParam(std::vector &backup, size_t num); +bool HaveDParamChanged(const std::vector &backup); /** * Get the current string parameter at index \a n from the global string parameter array. diff --git a/src/strings_internal.h b/src/strings_internal.h new file mode 100644 index 0000000000..fb54f48efa --- /dev/null +++ b/src/strings_internal.h @@ -0,0 +1,244 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file strings_interal.h Types and functions related to the internal workings of formatting OpenTTD's strings. */ + +#ifndef STRINGS_INTERNAL_H +#define STRINGS_INTERNAL_H + +#include "strings_func.h" +#include "string_func.h" +#include "core/span_type.hpp" + +#include + +/** The data required to format and validate a single parameter of a string. */ +struct StringParameter { + uint64_t data; ///< The data of the parameter. + const char *string_view; ///< The string value, if it has any. + std::unique_ptr string; ///< Copied string value, if it has any. + char32_t type; ///< The #StringControlCode to interpret this data with when it's the first parameter, otherwise '\0'. +}; + +class StringParameters { +protected: + StringParameters *parent = nullptr; ///< If not nullptr, this instance references data from this parent instance. + span parameters = {}; ///< Array with the actual parameters. + + size_t offset = 0; ///< Current offset in the parameters span. + char32_t next_type = 0; ///< The type of the next data that is retrieved. + + StringParameters(span parameters = {}) : + parameters(parameters) + {} + + StringParameter *GetNextParameterPointer(); + +public: + /** + * Create a new StringParameters instance that can reference part of the data of + * the given partent instance. + */ + StringParameters(StringParameters &parent, size_t size) : + parent(&parent), + parameters(parent.parameters.subspan(parent.offset, size)) + {} + + ~StringParameters() + { + if (this->parent != nullptr) { + this->parent->offset += this->parameters.size(); + } + } + + void PrepareForNextRun(); + void SetTypeOfNextParameter(char32_t type) { this->next_type = type; } + + /** + * Get the current offset, so it can be backed up for certain processing + * steps, or be used to offset the argument index within sub strings. + * @return The current offset. + */ + size_t GetOffset() { return this->offset; } + + /** + * Set the offset within the string from where to return the next result of + * \c GetInt64 or \c GetInt32. + * @param offset The offset. + */ + void SetOffset(size_t offset) + { + /* + * The offset must be fewer than the number of parameters when it is + * being set. Unless restoring a backup, then the original value is + * correct as well as long as the offset was not changed. In other + * words, when the offset was already at the end of the parameters and + * the string did not consume any parameters. + */ + assert(offset < this->parameters.size() || this->offset == offset); + this->offset = offset; + } + + /** + * Get the next parameter from our parameters. + * This updates the offset, so the next time this is called the next parameter + * will be read. + * @return The next parameter's value. + */ + template + T GetNextParameter() + { + auto ptr = GetNextParameterPointer(); + return static_cast(ptr == nullptr ? 0 : ptr->data); + } + + /** + * Get the next string parameter from our parameters. + * This updates the offset, so the next time this is called the next parameter + * will be read. + * @return The next parameter's value. + */ + const char *GetNextParameterString() + { + auto ptr = GetNextParameterPointer(); + if (ptr == nullptr) return nullptr; + return ptr->string != nullptr ? ptr->string->c_str() : ptr->string_view; + } + + /** + * Get a new instance of StringParameters that is a "range" into the + * remaining existing parameters. Upon destruction the offset in the parent + * is not updated. However, calls to SetDParam do update the parameters. + * + * The returned StringParameters must not outlive this StringParameters. + * @return A "range" of the string parameters. + */ + StringParameters GetRemainingParameters() { return GetRemainingParameters(this->offset); } + + /** + * Get a new instance of StringParameters that is a "range" into the + * remaining existing parameters from the given offset. Upon destruction the + * offset in the parent is not updated. However, calls to SetDParam do + * update the parameters. + * + * The returned StringParameters must not outlive this StringParameters. + * @param offset The offset to get the remaining parameters for. + * @return A "range" of the string parameters. + */ + StringParameters GetRemainingParameters(size_t offset) + { + return StringParameters(this->parameters.subspan(offset, GetDataLeft())); + } + + /** Return the amount of elements which can still be read. */ + size_t GetDataLeft() const + { + return this->parameters.size() - this->offset; + } + + /** Get the type of a specific element. */ + char32_t GetTypeAtOffset(size_t offset) const + { + assert(offset < this->parameters.size()); + return this->parameters[offset].type; + } + + void SetParam(size_t n, uint64_t v) + { + assert(n < this->parameters.size()); + this->parameters[n].data = v; + this->parameters[n].string.reset(); + this->parameters[n].string_view = nullptr; + } + + //template ::value, int> = 0> + //void SetParam(size_t n, T v) + //{ + // SetParam(n, v.base()); + //} + + void SetParam(size_t n, const char *str) + { + assert(n < this->parameters.size()); + this->parameters[n].data = 0; + this->parameters[n].string.reset(); + this->parameters[n].string_view = str; + } + + void SetParam(size_t n, std::string str) + { + assert(n < this->parameters.size()); + this->parameters[n].data = 0; + this->parameters[n].string = std::make_unique(std::move(str)); + this->parameters[n].string_view = nullptr; + } + + uint64_t GetParam(size_t n) const + { + assert(n < this->parameters.size()); + assert(this->parameters[n].string_view == nullptr && this->parameters[n].string == nullptr); + return this->parameters[n].data; + } + + /** + * Get the stored string of the parameter, or \c nullptr when there is none. + * @param n The index into the parameters. + * @return The stored string. + */ + const char *GetParamStr(size_t n) const + { + assert(n < this->parameters.size()); + auto ¶m = this->parameters[n]; + return param.string != nullptr ? param.string->c_str() : param.string_view; + } +}; + +/** + * Extension of StringParameters with its own statically allocated buffer for + * the parameters. + */ +class AllocatedStringParameters : public StringParameters { + std::vector params; ///< The actual parameters + +public: + AllocatedStringParameters(size_t parameters = 0) : params(parameters) + { + this->parameters = span(params.data(), params.size()); + } +}; + +/** + * Extension of StringParameters with its own statically sized buffer for + * the parameters. + */ +template +class ArrayStringParameters : public StringParameters { + std::array params = {}; ///< The actual parameters + +public: + ArrayStringParameters() + { + this->parameters = span(params.data(), params.size()); + } +}; + +/** + * Helper to create the StringParameters with its own buffer with the given + * parameter values. + * @param args The parameters to set for the to be created StringParameters. + * @return The constructed StringParameters. + */ +template +static auto MakeParameters(const Args&... args) +{ + ArrayStringParameters parameters; + size_t index = 0; + (parameters.SetParam(index++, std::forward(args)), ...); + return parameters; +} + +#endif /* STRINGS_INTERNAL_H */ diff --git a/src/strings_type.h b/src/strings_type.h index b7b350e35b..245eb0c5f0 100644 --- a/src/strings_type.h +++ b/src/strings_type.h @@ -10,6 +10,8 @@ #ifndef STRINGS_TYPE_H #define STRINGS_TYPE_H +#include + /** * Numeric value that represents a string, independent of the selected language. */ @@ -92,4 +94,34 @@ enum SpecialStrings { SPECSTR_TEMP_START = 0x7000, }; +/** Data that is to be stored when backing up StringParameters. */ +struct StringParameterBackup { + uint64_t data; ///< The data field; valid *when* string has no value. + std::optional string; ///< The string value. + + /** + * Assign the numeric data with the given value, while clearing the stored string. + * @param data The new value of the data field. + * @return This object. + */ + StringParameterBackup &operator=(uint64_t data) + { + this->string.reset(); + this->data = data; + return *this; + } + + /** + * Assign a copy of the given string to the string field, while clearing the data field. + * @param string The new value of the string. + * @return This object. + */ + StringParameterBackup &operator=(const std::string_view string) + { + this->data = 0; + this->string.emplace(string); + return *this; + } +}; + #endif /* STRINGS_TYPE_H */ diff --git a/src/table/settings/settings.ini b/src/table/settings/settings.ini index cfa5d6209b..3b1c100c92 100644 --- a/src/table/settings/settings.ini +++ b/src/table/settings/settings.ini @@ -1111,7 +1111,7 @@ min = 4 max = 90 interval = 1 str = STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL -strval = STR_JUST_COMMA +strval = STR_CONFIG_SETTING_SECONDS_VALUE strhelp = STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT [SDT_VAR] @@ -1123,7 +1123,7 @@ min = 1 max = 9000 interval = 1 str = STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME -strval = STR_JUST_COMMA +strval = STR_CONFIG_SETTING_SECONDS_VALUE strhelp = STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT [SDT_NAMED_NULL] @@ -4659,7 +4659,7 @@ min = 0 max = 20 str = STR_CONFIG_SETTING_ERRMSG_DURATION strhelp = STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT -strval = STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE +strval = STR_CONFIG_SETTING_SECONDS_VALUE [SDTC_VAR] var = gui.hover_delay_ms diff --git a/src/textbuf_gui.h b/src/textbuf_gui.h index e07d949b88..6de6085901 100644 --- a/src/textbuf_gui.h +++ b/src/textbuf_gui.h @@ -29,8 +29,8 @@ DECLARE_ENUM_AS_BIT_SET(QueryStringFlags) typedef void QueryCallbackProc(Window*, bool); void ShowQueryString(StringID str, StringID caption, uint max_len, Window *parent, CharSetFilter afilter, QueryStringFlags flags); -void ShowQuery(StringID caption, StringID message, Window *w, QueryCallbackProc *callback); -void ShowQuery(std::string caption, std::string message, Window *parent, QueryCallbackProc *callback); +void ShowQuery(StringID caption, StringID message, Window *w, QueryCallbackProc *callback, bool focus = false); +void ShowQuery(std::string caption, std::string message, Window *parent, QueryCallbackProc *callback, bool focus = false); /** The number of 'characters' on the on-screen keyboard. */ static const uint OSK_KEYBOARD_ENTRIES = 50; diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index e4672f595d..2d016a6ede 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -933,7 +933,7 @@ static void GetTileDesc_Town(TileIndex tile, TileDesc *td) td->str = GetHouseName(house, tile); if (!IsHouseCompleted(tile)) { - SetDParamX(td->dparam, 0, td->str); + td->dparam[0] = td->str; td->str = STR_LAI_TOWN_INDUSTRY_DESCRIPTION_UNDER_CONSTRUCTION; } @@ -3699,6 +3699,7 @@ static CommandCost TownActionBuyRights(Town *t, DoCommandFlag flags) { /* Check if it's allowed to buy the rights */ if (!_settings_game.economy.exclusive_rights) return CMD_ERROR; + if (t->exclusivity != INVALID_COMPANY) return CMD_ERROR; if (flags & DC_EXEC) { t->exclusive_counter = 12; @@ -3750,6 +3751,10 @@ static CommandCost TownActionBribe(Town *t, DoCommandFlag flags) } } else { ChangeTownRating(t, RATING_BRIBE_UP_STEP, RATING_BRIBE_MAXIMUM, DC_EXEC); + if (t->exclusivity != _current_company && t->exclusivity != INVALID_COMPANY) { + t->exclusivity = INVALID_COMPANY; + t->exclusive_counter = 0; + } } } return CommandCost(); @@ -3794,7 +3799,7 @@ uint GetMaskOfTownActions(int *nump, CompanyID cid, const Town *t) if (cur == TACT_BRIBE && (!_settings_game.economy.bribe || t->ratings[cid] >= RATING_BRIBE_MAXIMUM)) continue; /* Is the company not able to buy exclusive rights ? */ - if (cur == TACT_BUY_RIGHTS && !_settings_game.economy.exclusive_rights) continue; + if (cur == TACT_BUY_RIGHTS && (!_settings_game.economy.exclusive_rights || t->exclusive_counter != 0)) continue; /* Is the company not able to fund buildings ? */ if (cur == TACT_FUND_BUILDINGS && !_settings_game.economy.fund_buildings) continue; diff --git a/src/townname.cpp b/src/townname.cpp index 71a8a6f11f..78f566cdbb 100644 --- a/src/townname.cpp +++ b/src/townname.cpp @@ -49,9 +49,8 @@ TownNameParams::TownNameParams(const Town *t) : char *GetTownName(char *buff, const TownNameParams *par, uint32 townnameparts, const char *last) { if (par->grfid == 0) { - int64 args_array[1] = { townnameparts }; - StringParameters tmp_params(args_array); - return GetStringWithArgs(buff, par->type, &tmp_params, last); + auto tmp_params = MakeParameters(townnameparts); + return GetStringWithArgs(buff, par->type, tmp_params, last); } return GRFTownNameGenerate(buff, par->grfid, par->type, townnameparts, last); diff --git a/src/tracerestrict_gui.cpp b/src/tracerestrict_gui.cpp index 891fc40485..696fa9d8f9 100644 --- a/src/tracerestrict_gui.cpp +++ b/src/tracerestrict_gui.cpp @@ -1206,9 +1206,8 @@ static void DrawInstructionString(const TraceRestrictProgram *prog, TraceRestric } else { auto insert_warning = [&](uint dparam_index, StringID warning) { char buf[256]; - int64 args_array[] = { (int64)GetDParam(dparam_index) }; - StringParameters tmp_params(args_array); - char *end = GetStringWithArgs(buf, warning, &tmp_params, lastof(buf)); + auto tmp_params = MakeParameters(GetDParam(dparam_index)); + char *end = GetStringWithArgs(buf, warning, tmp_params, lastof(buf)); _temp_special_strings[0].assign(buf, end); SetDParam(dparam_index, SPECSTR_TEMP_START); }; diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index ef53db6289..ca4e9f5e0b 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -2619,7 +2619,7 @@ static void GetTileDesc_TunnelBridge(TileIndex tile, TileDesc *td) uint8 style = GetTunnelBridgeSignalStyle(tile); if (style > 0) { /* Add suffix about signal style */ - SetDParamX(td->dparam, 0, td->str); + td->dparam[0] = td->str; td->dparam[1] = style == 0 ? STR_BUILD_SIGNAL_DEFAULT_STYLE : _new_signal_styles[style - 1].name; td->str = STR_LAI_RAIL_DESCRIPTION_TRACK_SIGNAL_STYLE; } @@ -2627,8 +2627,7 @@ static void GetTileDesc_TunnelBridge(TileIndex tile, TileDesc *td) td->dparam[3] = td->dparam[2]; td->dparam[2] = td->dparam[1]; td->dparam[1] = td->dparam[0]; - SetDParamX(td->dparam, 0, td->str); - SetDParamX(td->dparam, 0, td->str); + td->dparam[0] = td->str; td->str = STR_LAI_RAIL_DESCRIPTION_RESTRICTED_SIGNAL; } } diff --git a/src/window.cpp b/src/window.cpp index bf85fe90b6..c09c7db6b7 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1372,15 +1372,20 @@ static uint GetWindowZPriority(WindowClass wc) uint z_priority = 0; switch (wc) { - case WC_ENDSCREEN: + case WC_TOOLTIPS: ++z_priority; FALLTHROUGH; - case WC_HIGHSCORE: + case WC_ERRMSG: + case WC_CONFIRM_POPUP_QUERY: ++z_priority; FALLTHROUGH; - case WC_TOOLTIPS: + case WC_ENDSCREEN: + ++z_priority; + FALLTHROUGH; + + case WC_HIGHSCORE: ++z_priority; FALLTHROUGH; @@ -1402,8 +1407,6 @@ static uint GetWindowZPriority(WindowClass wc) ++z_priority; FALLTHROUGH; - case WC_ERRMSG: - case WC_CONFIRM_POPUP_QUERY: case WC_NETWORK_ASK_RELAY: case WC_MODAL_PROGRESS: case WC_NETWORK_STATUS_WINDOW: