pax_global_header00006660000000000000000000000064151766645420014532gustar00rootroot0000000000000052 comment=9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/000077500000000000000000000000001517666454200214475ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/.envrc000066400000000000000000000000121517666454200225560ustar00rootroot00000000000000use_flake railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/.gitignore000066400000000000000000000002121517666454200234320ustar00rootroot00000000000000/target resources.gresource .cargo LC_MESSAGES src/config.rs .direnv result .nixos-test-history *.syscap /subprojects/blueprint-compiler railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/.gitlab-ci.yml000066400000000000000000000114471517666454200241120ustar00rootroot00000000000000stages: - lint - build - deploy - release variables: UPLOAD_URL_BASE: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${CI_PROJECT_NAME}/${CI_COMMIT_TAG}" BUILD: "build" BUILD_RELEASE: "build-release" MESON_DIST: "${BUILD_RELEASE}/meson-dist" PROJ_NAME_VERSION: "diebahn-${CI_COMMIT_TAG}" RUSTFLAGS: "-Dwarnings" # flatpak, based on https://gitlab.gnome.org/GNOME/citemplates/raw/master/flatpak/flatpak_ci_initiative.yml flatpak: image: 'quay.io/gnome_infrastructure/gnome-runtime-images:gnome-master' stage: build interruptible: true variables: LANG: "C.UTF-8" RUN_TESTS: "1" MANIFEST_PATH: 'build-aux/de.schmidhuberj.DieBahn.Devel.json' RUNTIME_REPO: 'https://nightly.gnome.org/gnome-nightly.flatpakrepo' FLATPAK_MODULE: 'diebahn' BUNDLE: "de.schmidhuberj.DieBahn.Devel.flatpak" APP_ID: 'de.schmidhuberj.DieBahn.Devel' script: - flatpak --version # Report the installed versions of the runtime - flatpak info org.gnome.Platform - flatpak info org.gnome.Sdk # Print the date, since appstream depends on local timezone - date && date -u - >- xvfb-run -a -s "-screen 0 1024x768x24" -- dbus-run-session flatpak-builder --keep-build-dirs --user --disable-rofiles-fuse flatpak_app --repo=repo ${BRANCH:+--default-branch=$BRANCH} ${MANIFEST_PATH} # Generate a Flatpak bundle - flatpak build-bundle repo ${BUNDLE} --runtime-repo=${RUNTIME_REPO} ${APP_ID} ${BRANCH} - tar cf repo.tar repo/ artifacts: name: 'Flatpak artifacts' when: 'always' paths: - $BUNDLE - 'repo.tar' - '.flatpak-builder/build/${FLATPAK_MODULE}/_flatpak_build/meson-logs/meson-log.txt' - '.flatpak-builder/build/${FLATPAK_MODULE}/_flatpak_build/meson-logs/testlog.txt' reports: junit: '.flatpak-builder/build/${FLATPAK_MODULE}/_flatpak_build/meson-logs/testlog.junit.xml' expire_in: 14 days # end flatpak i18n: stage: lint script: - ./build-aux/test/i18n-strings-check.sh test:cargo-deny: stage: lint image: archlinux:base-devel script: - pacman -Syu rustup cargo-deny --noconfirm - rustup default stable - cargo deny check allow_failure: true test:cargo-fmt: stage: lint image: archlinux:base-devel script: - pacman -Syu rustup meson gtk4 git cmake libadwaita libgirepository python-gobject blueprint-compiler --noconfirm - rustup default stable - rustup component add rustfmt - meson setup build - meson compile -C build resources_gresource - cargo fmt -- --check allow_failure: true test:blueprint-fmt: stage: lint image: archlinux:base-devel script: - pacman -Syu blueprint-compiler --noconfirm - blueprint-compiler format data/resources/ui allow_failure: true test:cargo-clippy: stage: lint image: archlinux:base-devel script: - pacman -Syu rustup meson gtk4 git cmake libadwaita libgirepository python-gobject blueprint-compiler --noconfirm - rustup default stable - rustup component add clippy - meson setup build - meson compile -C build resources_gresource - cargo clippy --verbose allow_failure: true build_release: stage: build image: archlinux:base-devel rules: - if: $CI_COMMIT_TAG script: - pacman -Syu rustup meson gtk4 git cmake libadwaita libgirepository python-gobject blueprint-compiler --noconfirm - rustup default stable - meson setup $BUILD_RELEASE # Don't test, as Flatpak already builds it. - meson dist --no-tests -C $BUILD_RELEASE artifacts: paths: - ${MESON_DIST}/${PROJ_NAME_VERSION}.tar.xz - ${MESON_DIST}/${PROJ_NAME_VERSION}.tar.xz.sha256sum expire_in: 1 week upload: stage: deploy image: curlimages/curl:latest rules: - if: $CI_COMMIT_TAG script: - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${MESON_DIST}/${PROJ_NAME_VERSION}.tar.xz "${UPLOAD_URL_BASE}/${PROJ_NAME_VERSION}.tar.xz"' - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file ${MESON_DIST}/${PROJ_NAME_VERSION}.tar.xz.sha256sum "${UPLOAD_URL_BASE}/${PROJ_NAME_VERSION}.tar.xz.sha256sum"' release: stage: release image: registry.gitlab.com/gitlab-org/release-cli:latest rules: - if: $CI_COMMIT_TAG dependencies: - upload script: - echo "Creating GitLab Release for ${CI_COMMIT_TAG}" - sh ./build-aux/extract-changelog-for-tag.sh ./CHANGELOG.md ${CI_COMMIT_TAG} > release_notes.md release: name: "Release ${CI_COMMIT_TAG}" description: "$(cat release_notes.md)" tag_name: "${CI_COMMIT_TAG}" assets: links: - name: "${PROJ_NAME_VERSION}.tar.xz" url: "${UPLOAD_URL_BASE}/${PROJ_NAME_VERSION}.tar.xz" link_type: package - name: "${PROJ_NAME_VERSION}.tar.xz.sha256sum" url: "${UPLOAD_URL_BASE}/${PROJ_NAME_VERSION}.tar.xz.sha256sum" link_type: other railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/CHANGELOG.md000066400000000000000000000166211517666454200232660ustar00rootroot00000000000000# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ## [2.10.0] - 2026-05-06 ### Fixed - Fixed errors with the AVV and VBB providers. ## [2.9.4] - 2025-12-26 ### Removed - Removed the DART provider, as it was not working anymore. - Removed the PKP provider, as it was not working anymore. - Removed the VRN provider, as it was not working anymore. ### Fixed - Long walking times and no waiting for the DB provider. - The Transitious provider was not working anymore. - Removed the CMTA provider, as it was not working anymore. - Error with the DB provider if no trains are available earlier or later. ## [2.9.3] - 2025-11-19 ### Fixed - Reloading trips worked in the background, but the interface was only updated after closing and re-opening the same trip. This is no longer needed. Immediately after reloading, the trip details are updated. ## [2.9.2] - 2025-11-02 ### HOTFIX - Fixed finished journeys being watched keeping the application from starting. ### Changed - Don't delete old journeys by default. ## [2.9.1] - 2025-10-26 ### Fixed - Reloading of journeys with the DB provider being broken. ## [2.9.0] - 2025-10-23 ### New Features - Railway now has the ability to watch trips for notifications ahead of them and in-journey, e.g. when platform changes or delays might interrupt travel. ### Fixes - Deutsche Bahn stopped working recently with versions prior to 2.9, but are working from here on. ### Chores - The shortcuts dialog is now adaptive due to switching to GNOME's new libadwaita widgets for them. - This app now builds with gtk-rs 0.10. ## [2.8.2] - 2025-06-19 ### Fixed - SBB provider not displaying line numbers. ## [2.8.1] - 2025-05-10 ### Fixed - Trip details too wide for narrow window width for some journeys. ## [2.8.0] - 2025-05-06 ### Changed - Updated to GNOME 48 widgets, in particular in the search options window. - Add a separate section for Austrian railway providers in the popover. - Make the application D-Bus activatable. ### Fixed - Raise window if application is started again. ## [2.7.3] - 2025-01-30 ### Changed - Transitioned to the new MOTIS 2 instance for Transitous. ### Fixed - DB provider failing when some stops don't have a platform. ## [2.7.2] - 2025-01-19 ### HOTFIX - Fixed DB provider being broken. ## [2.7.1] - 2024-10-07 ### Added - Categories and comment in the desktop file. ### Fixed - Don't panic when a journey is walk-only. - Display name of VBB incorrect. - Geographic information for a few providers being wrong. ### Chores - Update to GNOME 47. - Port to blueprint-compiler. ## [2.7.0] - 2024-07-24 ### Added - Ability to use arrival time instead of departure time. - Region divider in provider popover. - Highlight currently selected region in the provider popover. ### Fixed - Some providers displaying "0 minute walks" in transitions (upstream fix). ## [2.6.0] - 2024-06-12 ### Added - Screen reader support for the station entry. - Notify users about automatic bookmark deletion with a toast. - Transitous provider support. - SBB provider support. - IVB provider support. - KVB provider support. - BART provider support. ### Removed - TPG provider support. ### Changed - Rename stopover to stop. ### Fixed - Display first day header when initial day deviates from request ### Packaging Railway does now not depend upon `hafas-rs` any more. Instead, there are a set of crates `railway-core`, `railway-provider-*`, `railway-api-derive` and `railway-api` replacing it. Those are packaged on . ## [2.5.0] - 2024-04-30 ### Added - PKP profile support. ### Removed - INSA profile support. ### Changed - Port to GNOME 46 widgets. ### Fixed - Remarks possibly being queried in the incorrect language. - Crash on Swedish translation. ## [2.4.0] - 2024-03-03 ### Added - Highlight the selected connection in the connections list. - Made the trip details page keyboard-navigable. - Improved accessibility ### Changed - Improved positioning for arrival and departure labels in the connections list. - Minor UI update regarding journey remarks. ### Fixed - Some strings not being translatable or using incorrect forms of a plural. - Also allow `Ctrl+Q` to close the window. - Performance issues with showing the details of large journeys. - Bug where an incorrect timezone was used. ## [2.3.0] - 2024-02-11 ### Added - Keyboard navigation to station search. - Label for frequency of trains. ### Changed - Strings used in the UI. - Improved remarks for journey legs. - Many minor UI improvements. ### Fixed - For the station search, clear the place when the entry is cleared. ## [2.2.0] - 2023-12-11 ### Added - Translation support using Weblate. - Filter for providers. - Indicate when journey was last refreshed. - Save window height between startups. ### Changed - Improved UI for date-dividers. - Disable search button while search is in progress. - Disable refresh button while refreshing journey is in progress. - Added timeout to all requests. ### Fixed - Don't collapse journey legs stopovers and remarks after refreshing. - Build on i386. ## [2.1.0] - 2023-10-07 ### Added - Keyboard shortcuts - Date dividers between journeys. ### Changed - UI improvements on the preferences. - Don't display walk destination, unless it is the final walk. ### Fixed - Spinners in the time dropdown not being two-digit sometimes. - Duration of over one day being displayed incorrectly. - The date and time cards having a different color than the rest when in dark mode. ### Packaging - `hafas-rs` is now taken from `crates.io` instead of git. ## [2.0.0] - 2023-09-21 ### Changed - Complete UI overhaul [Unreleased]: https://gitlab.com/schmiddi-on-mobile/railway/-/compare/2.10.0...master [2.10.0]: https://gitlab.com/schmiddi-on-mobile/railway/-/compare/2.9.4...2.10.0 [2.9.4]: https://gitlab.com/schmiddi-on-mobile/railway/-/compare/2.9.3...2.9.4 [2.9.3]: https://gitlab.com/schmiddi-on-mobile/railway/-/compare/2.9.2...2.9.3 [2.9.2]: https://gitlab.com/schmiddi-on-mobile/railway/-/compare/2.9.1...2.9.2 [2.9.1]: https://gitlab.com/schmiddi-on-mobile/railway/-/compare/2.9.0...2.9.1 [2.9.0]: https://gitlab.com/schmiddi-on-mobile/railway/-/compare/2.8.2...2.9.0 [2.8.2]: https://gitlab.com/schmiddi-on-mobile/railway/-/compare/2.8.1...2.8.2 [2.8.1]: https://gitlab.com/schmiddi-on-mobile/railway/-/compare/2.8.0...2.8.1 [2.8.0]: https://gitlab.com/schmiddi-on-mobile/railway/-/compare/2.7.3...2.8.0 [2.7.3]: https://gitlab.com/schmiddi-on-mobile/railway/-/compare/2.7.2...2.7.3 [2.7.2]: https://gitlab.com/schmiddi-on-mobile/railway/-/compare/2.7.1...2.7.2 [2.7.1]: https://gitlab.com/schmiddi-on-mobile/railway/-/compare/2.7.0...2.7.1 [2.7.0]: https://gitlab.com/schmiddi-on-mobile/railway/-/compare/2.6.0...2.7.0 [2.6.0]: https://gitlab.com/schmiddi-on-mobile/railway/-/compare/2.5.0...2.6.0 [2.5.0]: https://gitlab.com/schmiddi-on-mobile/railway/-/compare/2.4.0...2.5.0 [2.4.0]: https://gitlab.com/schmiddi-on-mobile/railway/-/compare/2.3.0...2.4.0 [2.3.0]: https://gitlab.com/schmiddi-on-mobile/railway/-/compare/2.2.0...2.3.0 [2.2.0]: https://gitlab.com/schmiddi-on-mobile/railway/-/compare/2.1.0...2.2.0 [2.1.0]: https://gitlab.com/schmiddi-on-mobile/railway/-/compare/2.0.0...2.1.0 [2.0.0]: https://gitlab.com/schmiddi-on-mobile/railway/-/compare/1.5.0...2.0.0 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/CONTRIBUTING.md000066400000000000000000000125741517666454200237110ustar00rootroot00000000000000# Contributing Contributions to Railway are always welcome. There are many different ways you can contribute, this document will show you most of these ways and what you should keep in mind. We are interested in getting to know our contributors and are often around to discuss the state and the future of Railway, be it something minor, or larger visions. Feel free to join our [Matrix channel](https://matrix.to/#/#railwayapp:matrix.org) and talk with us! This is also a good place to ask some questions or report smaller issues. In general, we appreciate any help. That said, before doing any larger work including thorough design reviews, mass filing of issues, or substantial code refactoring, we kindly ask you to reach out to us maintainers. This is to ensure we do not to render your work useless, and you are not increasing workload for us if this could have been avoided with a simple talk over [Matrix](https://matrix.to/#/#railwayapp:matrix.org). Note that the [GNOME Code of Conduct](https://wiki.gnome.org/Foundation/CodeOfConduct) applies to this project, therefore, be nice to each other. ## Translation This is probably the easiest way to contribute to Railway. Just head over to [Weblate](https://hosted.weblate.org/projects/schmiddi-on-mobile/railway/) and start translating. If you are unfamiliar with Weblate, make sure to read their [documentation](https://docs.weblate.org/en/latest/user/translating.html) on how to translate a project. ## Open Issues Issues are a good way to tell me problems you are having with the applications or things that you feel are missing or might be improved. There are a few things to keep in mind with issues. - If you think it could in any way be relevant, add your current version, and how you installed it. - Add the logs if you think they are relevant, this is mostly useful for errors that occurred. - Check for duplicated issues: Try to use the search-feature if you can find similar issues like you are having. If there is already such an issue, consider giving it a thumbs-up or commenting more details on that issue, but don't create a new issue. - Know how to write a good issue: Read e.g. (also applies pretty much got GitLab) ## Write Code If you feel comfortable enough writing code, you can also submit your changes directly via a merge request. Here are a few pointers that might help write the code: ### Compilation #### GNOME Builder You should be able to directly clone, compile and run Railway using [GNOME Builder](https://apps.gnome.org/Builder/). Note that if you installed GNOME Builder as a Flatpak, it cannot automatically install the dependencies Railway requires; you need to manually install them in that case using: ```bash flatpak remote-add --if-not-exists gnome-nightly https://nightly.gnome.org/gnome-nightly.flatpakrepo # Add the GNOME nightly repository, see flatpak install org.gnome.Sdk//master flatpak install org.freedesktop.Sdk.Extension.rust-stable//23.08 ``` #### Linux Compile Railway using the following commands: ```bash meson build -Dprofile=development # Run once before all changes you make. Substitute "development" for "default" for compiling for release. meson compile -C build # Run every time you want to test your changes GSETTINGS_SCHEMA_DIR=./build/data/ RUST_LOG=diebahn=trace ./build/target/debug/diebahn # Run your locally compiled application with some logging ``` This also requires installation of the dependencies from your package manager. Meson will inform you about any missing packages. Note that Railway tries to keep up-to-date with its dependencies, this might mean that the dependencies provided by fixed-release distros may be outdated. In that case, use one of the other ways of compilation mentioned below. #### Flatpak via fenv As an alternative, [fenv](https://gitlab.gnome.org/ZanderBrown/fenv) allows you to set up a flatpak environment from the command line and execute commands in that environment. First, install fenv: ```sh # Clone the project somewhere on your system git clone https://gitlab.gnome.org/ZanderBrown/fenv.git # Move into the folder cd fenv # Install fenv with Cargo cargo install --path . ``` You can now discard the `fenv` directory if you want. After that, move into the directory where you cloned Railway and set up the project: ```sh # Setup the flatpak environment fenv gen build-aux/de.schmidhuberj.DieBahn.Devel.json # Launch a shell inside the build environment fenv shell ``` You can now follow the compilation phase for GNU/Linux ### Some useful documentation The following documentation might help: - [GTK Book](https://gtk-rs.org/gtk4-rs/stable/latest/book/): General GTK-development. - [railway-backend](https://gitlab.com/schmiddi-on-mobile/railway-backend): The backend library for getting information about the journeys. Specifically, take a look at ["Writing a Provider"](https://gitlab.com/schmiddi-on-mobile/railway-backend/-/blob/main/docs/writing-a-provider.md?ref_type=heads) if you plan to work on a provider that is not yet implemented. ### Things to keep in mind - Make sure the code passes some basic checks (`cargo check`). - Make sure the code is properly formatted (`cargo fmt`). - Reach out to me for bigger changes, either in an issue or via Matrix. - Optional but encouraged: Check for new warnings in `cargo clippy`. - Always feel free to ask questions or request some help. railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/Cargo.lock000066400000000000000000002103761517666454200233650ustar00rootroot00000000000000# This file is automatically @generated by Cargo. # It is not intended for manual editing. version = 4 [[package]] name = "aho-corasick" version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] [[package]] name = "android_system_properties" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ "libc", ] [[package]] name = "anstream" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" [[package]] name = "anstyle-parse" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ "windows-sys 0.61.2", ] [[package]] name = "anstyle-wincon" version = "3.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", "windows-sys 0.61.2", ] [[package]] name = "anyhow" version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "async-trait" version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "atomic-waker" version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bitflags" version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" [[package]] name = "block" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" [[package]] name = "block-buffer" version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] [[package]] name = "bumpalo" version = "3.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" [[package]] name = "bytes" version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "cairo-rs" version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b01fe135c0bd16afe262b6dea349bd5ea30e6de50708cec639aae7c5c14cc7e4" dependencies = [ "bitflags", "cairo-sys-rs", "glib", "libc", ] [[package]] name = "cairo-sys-rs" version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06c28280c6b12055b5e39e4554271ae4e6630b27c0da9148c4cf6485fc6d245c" dependencies = [ "glib-sys", "libc", "system-deps", ] [[package]] name = "cc" version = "1.2.61" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d16d90359e986641506914ba71350897565610e87ce0ad9e6f28569db3dd5c6d" dependencies = [ "find-msvc-tools", "shlex", ] [[package]] name = "cfg-expr" version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c6b04e07d8080154ed4ac03546d9a2b303cc2fe1901ba0b35b301516e289368" dependencies = [ "smallvec", "target-lexicon", ] [[package]] name = "cfg-if" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chrono" version = "0.4.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" dependencies = [ "iana-time-zone", "js-sys", "num-traits", "serde", "wasm-bindgen", "windows-link", ] [[package]] name = "chrono-tz" version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6139a8597ed92cf816dfb33f5dd6cf0bb93a6adc938f11039f371bc5bcd26c3" dependencies = [ "chrono", "phf", ] [[package]] name = "colorchoice" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "convert_case" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" dependencies = [ "unicode-segmentation", ] [[package]] name = "core-foundation" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", ] [[package]] name = "core-foundation" version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" dependencies = [ "core-foundation-sys", "libc", ] [[package]] name = "core-foundation-sys" version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "crypto-common" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "typenum", ] [[package]] name = "diebahn" version = "2.10.0" dependencies = [ "chrono", "chrono-tz", "env_logger", "gdk4", "gettext-rs", "gtk4", "libadwaita", "log", "once_cell", "railway-api", "railway-core", "serde", "serde_json", "tokio", ] [[package]] name = "digest" version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", ] [[package]] name = "displaydoc" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "encoding_rs" version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] [[package]] name = "env_filter" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32e90c2accc4b07a8456ea0debdc2e7587bdd890680d71173a15d4ae604f6eef" dependencies = [ "log", "regex", ] [[package]] name = "env_logger" version = "0.11.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0621c04f2196ac3f488dd583365b9c09be011a4ab8b9f37248ffcc8f6198b56a" dependencies = [ "anstream", "anstyle", "env_filter", "jiff", "log", ] [[package]] name = "equivalent" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", "windows-sys 0.61.2", ] [[package]] name = "fastrand" version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" [[package]] name = "field-offset" version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" dependencies = [ "memoffset", "rustc_version", ] [[package]] name = "find-msvc-tools" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" [[package]] name = "fnv" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foldhash" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "foreign-types" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ "foreign-types-shared", ] [[package]] name = "foreign-types-shared" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] [[package]] name = "futures-channel" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", ] [[package]] name = "futures-core" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" [[package]] name = "futures-executor" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" dependencies = [ "futures-core", "futures-task", "futures-util", ] [[package]] name = "futures-io" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-macro" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "futures-sink" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" [[package]] name = "futures-task" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" [[package]] name = "futures-util" version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" dependencies = [ "futures-core", "futures-macro", "futures-task", "pin-project-lite", "slab", ] [[package]] name = "gdk-pixbuf" version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "debb0d39e3cdd84626edfd54d6e4a6ba2da9a0ef2e796e691c4e9f8646fda00c" dependencies = [ "gdk-pixbuf-sys", "gio", "glib", "libc", ] [[package]] name = "gdk-pixbuf-sys" version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd95ad50b9a3d2551e25dd4f6892aff0b772fe5372d84514e9d0583af60a0ce7" dependencies = [ "gio-sys", "glib-sys", "gobject-sys", "libc", "system-deps", ] [[package]] name = "gdk4" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "756564212bbe4a4ce05d88ffbd2582581ac6003832d0d32822d0825cca84bfbf" dependencies = [ "cairo-rs", "gdk-pixbuf", "gdk4-sys", "gio", "glib", "libc", "pango", ] [[package]] name = "gdk4-sys" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6d4e5b3ccf591826a4adcc83f5f57b4e59d1925cb4bf620b0d645f79498b034" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", "gio-sys", "glib-sys", "gobject-sys", "libc", "pango-sys", "pkg-config", "system-deps", ] [[package]] name = "generic-array" version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", ] [[package]] name = "getrandom" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "libc", "wasi", ] [[package]] name = "getrandom" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" dependencies = [ "cfg-if", "libc", "r-efi", "wasip2", "wasip3", ] [[package]] name = "gettext-rs" version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d5857dc1b7f0fee86961de833f434e29494d72af102ce5355738c0664222bdf" dependencies = [ "gettext-sys", "locale_config", ] [[package]] name = "gettext-sys" version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ea859ab0dd7e70ff823032b3e077d03d39c965d68c6c10775add60e999d8ee9" dependencies = [ "cc", "temp-dir", ] [[package]] name = "gio" version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5ff48bf600c68b476e61dc6b7c762f2f4eb91deef66583ba8bb815c30b5811a" dependencies = [ "futures-channel", "futures-core", "futures-io", "futures-util", "gio-sys", "glib", "libc", "pin-project-lite", "smallvec", ] [[package]] name = "gio-sys" version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0071fe88dba8e40086c8ff9bbb62622999f49628344b1d1bf490a48a29d80f22" dependencies = [ "glib-sys", "gobject-sys", "libc", "system-deps", "windows-sys 0.61.2", ] [[package]] name = "glib" version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16de123c2e6c90ce3b573b7330de19be649080ec612033d397d72da265f1bd8b" dependencies = [ "bitflags", "futures-channel", "futures-core", "futures-executor", "futures-task", "futures-util", "gio-sys", "glib-macros", "glib-sys", "gobject-sys", "libc", "memchr", "smallvec", ] [[package]] name = "glib-macros" version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf59b675301228a696fe01c3073974643365080a76cc3ed5bc2cbc466ad87f17" dependencies = [ "heck", "proc-macro-crate", "proc-macro2", "quote", "syn", ] [[package]] name = "glib-sys" version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d95e1a3a19ae464a7286e14af9a90683c64d70c02532d88d87ce95056af3e6c" dependencies = [ "libc", "system-deps", ] [[package]] name = "gobject-sys" version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dca35da0d19a18f4575f3cb99fe1c9e029a2941af5662f326f738a21edaf294" dependencies = [ "glib-sys", "libc", "system-deps", ] [[package]] name = "graphene-rs" version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2730030ac9db663fd8bfe1e7093742c1cafb92db9c315c9417c29032341fe2f9" dependencies = [ "glib", "graphene-sys", "libc", ] [[package]] name = "graphene-sys" version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "915e32091ea9ad241e4b044af62b7351c2d68aeb24f489a0d7f37a0fc484fd93" dependencies = [ "glib-sys", "libc", "pkg-config", "system-deps", ] [[package]] name = "gsk4" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e755de9d8c5896c5beaa028b89e1969d067f1b9bf1511384ede971f5983aa153" dependencies = [ "cairo-rs", "gdk4", "glib", "graphene-rs", "gsk4-sys", "libc", "pango", ] [[package]] name = "gsk4-sys" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ce91472391146f482065f1041876d8f869057b195b95399414caa163d72f4f7" dependencies = [ "cairo-sys-rs", "gdk4-sys", "glib-sys", "gobject-sys", "graphene-sys", "libc", "pango-sys", "system-deps", ] [[package]] name = "gtk4" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acb21d53cfc6f7bfaf43549731c43b67ca47d87348d81c8cfc4dcdd44828e1a4" dependencies = [ "cairo-rs", "field-offset", "futures-channel", "gdk-pixbuf", "gdk4", "gio", "glib", "graphene-rs", "gsk4", "gtk4-macros", "gtk4-sys", "libc", "pango", ] [[package]] name = "gtk4-macros" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ccfb5a14a3d941244815d5f8101fa12d4577b59cc47245778d8d907b0003e42" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", "syn", ] [[package]] name = "gtk4-sys" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "842577fe5a1ee15d166cd3afe804ce0cab6173bc789ca32e21308834f20088dd" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", "gdk4-sys", "gio-sys", "glib-sys", "gobject-sys", "graphene-sys", "gsk4-sys", "libc", "pango-sys", "system-deps", ] [[package]] name = "h2" version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "171fefbc92fe4a4de27e0698d6a5b392d6a0e333506bc49133760b3bcf948733" dependencies = [ "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", "http", "indexmap", "slab", "tokio", "tokio-util", "tracing", ] [[package]] name = "hashbrown" version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "foldhash", ] [[package]] name = "hashbrown" version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" [[package]] name = "heck" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "http" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ "bytes", "itoa", ] [[package]] name = "http-body" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http", ] [[package]] name = "http-body-util" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", "futures-core", "http", "http-body", "pin-project-lite", ] [[package]] name = "httparse" version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "hyper" version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" dependencies = [ "atomic-waker", "bytes", "futures-channel", "futures-core", "h2", "http", "http-body", "httparse", "itoa", "pin-project-lite", "smallvec", "tokio", "want", ] [[package]] name = "hyper-rustls" version = "0.27.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ "http", "hyper", "hyper-util", "rustls", "tokio", "tokio-rustls", "tower-service", ] [[package]] name = "hyper-tls" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", "hyper", "hyper-util", "native-tls", "tokio", "tokio-native-tls", "tower-service", ] [[package]] name = "hyper-util" version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ "base64", "bytes", "futures-channel", "futures-util", "http", "http-body", "hyper", "ipnet", "libc", "percent-encoding", "pin-project-lite", "socket2", "system-configuration", "tokio", "tower-service", "tracing", "windows-registry", ] [[package]] name = "iana-time-zone" version = "0.1.65" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "log", "wasm-bindgen", "windows-core", ] [[package]] name = "iana-time-zone-haiku" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ "cc", ] [[package]] name = "icu_collections" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" dependencies = [ "displaydoc", "potential_utf", "utf8_iter", "yoke", "zerofrom", "zerovec", ] [[package]] name = "icu_locale_core" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" dependencies = [ "displaydoc", "litemap", "tinystr", "writeable", "zerovec", ] [[package]] name = "icu_normalizer" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" dependencies = [ "icu_collections", "icu_normalizer_data", "icu_properties", "icu_provider", "smallvec", "zerovec", ] [[package]] name = "icu_normalizer_data" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" [[package]] name = "icu_properties" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" dependencies = [ "icu_collections", "icu_locale_core", "icu_properties_data", "icu_provider", "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" [[package]] name = "icu_provider" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" dependencies = [ "displaydoc", "icu_locale_core", "writeable", "yoke", "zerofrom", "zerotrie", "zerovec", ] [[package]] name = "id-arena" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" [[package]] name = "idna" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", "utf8_iter", ] [[package]] name = "idna_adapter" version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" dependencies = [ "icu_normalizer", "icu_properties", ] [[package]] name = "indexmap" version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", "hashbrown 0.17.0", "serde", "serde_core", ] [[package]] name = "ipnet" version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" [[package]] name = "is_terminal_polyfill" version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itoa" version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f00b5dbd620d61dfdcb6007c9c1f6054ebd75319f163d886a9055cec1155073d" dependencies = [ "jiff-static", "log", "portable-atomic", "portable-atomic-util", "serde_core", ] [[package]] name = "jiff-static" version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e000de030ff8022ea1da3f466fbb0f3a809f5e51ed31f6dd931c35181ad8e6d7" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "js-sys" version = "0.3.97" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1840c94c045fbcf8ba2812c95db44499f7c64910a912551aaaa541decebcacf" dependencies = [ "cfg-if", "futures-util", "once_cell", "wasm-bindgen", ] [[package]] name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "leb128fmt" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libadwaita" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb09e12bf8f73342b3315c839d0a7668cc0ccebd78490c49fec48bab15d5484b" dependencies = [ "gdk4", "gio", "glib", "gtk4", "libadwaita-sys", "libc", "pango", ] [[package]] name = "libadwaita-sys" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d7f94227ba87eb596fecada2491f04e357d507324142f77bf76d9e6be4a3e31" dependencies = [ "gdk4-sys", "gio-sys", "glib-sys", "gobject-sys", "gtk4-sys", "libc", "pango-sys", "system-deps", ] [[package]] name = "libc" version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "linux-raw-sys" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" [[package]] name = "locale_config" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d2c35b16f4483f6c26f0e4e9550717a2f6575bcd6f12a53ff0c490a94a6934" dependencies = [ "lazy_static", "objc", "objc-foundation", "regex", "winapi", ] [[package]] name = "log" version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "malloc_buf" version = "0.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" dependencies = [ "libc", ] [[package]] name = "md-5" version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ "cfg-if", "digest", ] [[package]] name = "memchr" version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" [[package]] name = "memoffset" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" dependencies = [ "autocfg", ] [[package]] name = "mime" version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "mime_guess" version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" dependencies = [ "mime", "unicase", ] [[package]] name = "mio" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" dependencies = [ "libc", "wasi", "windows-sys 0.61.2", ] [[package]] name = "motis-openapi-sdk" version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dea384db8d960e41a323b114cf13ea1355f4acd51123d3ff69259465c9a1bea" dependencies = [ "reqwest", "serde", "serde_json", "serde_repr", "url", ] [[package]] name = "native-tls" version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2" dependencies = [ "libc", "log", "openssl", "openssl-probe", "openssl-sys", "schannel", "security-framework", "security-framework-sys", "tempfile", ] [[package]] name = "num-traits" version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "objc" version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" dependencies = [ "malloc_buf", ] [[package]] name = "objc-foundation" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" dependencies = [ "block", "objc", "objc_id", ] [[package]] name = "objc_id" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" dependencies = [ "objc", ] [[package]] name = "once_cell" version = "1.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "once_cell_polyfill" version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "openssl" version = "0.10.79" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf0b434746ee2832f4f0baf10137e1cabb18cbe6912c69e2e33263c45250f542" dependencies = [ "bitflags", "cfg-if", "foreign-types", "libc", "openssl-macros", "openssl-sys", ] [[package]] name = "openssl-macros" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "openssl-probe" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" [[package]] name = "openssl-sys" version = "0.9.115" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "158fe5b292746440aa6e7a7e690e55aeb72d41505e2804c23c6973ad0e9c9781" dependencies = [ "cc", "libc", "pkg-config", "vcpkg", ] [[package]] name = "pango" version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52d1d85e2078077a065bb7fc072783d5bcd4e51b379f22d67107d0a16937eb69" dependencies = [ "gio", "glib", "libc", "pango-sys", ] [[package]] name = "pango-sys" version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4f06627d36ed5ff303d2df65211fc2e52ba5b17bf18dd80ff3d9628d6e06cfd" dependencies = [ "glib-sys", "gobject-sys", "libc", "system-deps", ] [[package]] name = "percent-encoding" version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "phf" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "913273894cec178f401a31ec4b656318d95473527be05c0752cc41cdc32be8b7" dependencies = [ "phf_shared", ] [[package]] name = "phf_shared" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06005508882fb681fd97892ecff4b7fd0fee13ef1aa569f8695dae7ab9099981" dependencies = [ "siphasher", ] [[package]] name = "pin-project-lite" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pkg-config" version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" [[package]] name = "portable-atomic" version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] name = "portable-atomic-util" version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" dependencies = [ "portable-atomic", ] [[package]] name = "potential_utf" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" dependencies = [ "zerovec", ] [[package]] name = "prettyplease" version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", "syn", ] [[package]] name = "proc-macro-crate" version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ "toml_edit", ] [[package]] name = "proc-macro2" version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] [[package]] name = "quote" version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] [[package]] name = "r-efi" version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "railway-api" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d82170f13e4c5f79dc2d6dc1e81ef54e0d3a7995373ca1f62401275079eecf93" dependencies = [ "async-trait", "chrono-tz", "railway-api-derive", "railway-core", "railway-provider-db-movas", "railway-provider-hafas", "railway-provider-motis", "railway-provider-search-ch", "url", ] [[package]] name = "railway-api-derive" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "598360a59a86ba639f004154212ec3bf1f93d7282ccaac28f7a5f8a39f0b4d7c" dependencies = [ "convert_case", "proc-macro2", "quote", "syn", ] [[package]] name = "railway-core" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93677f9367e5a53020ecaf8822230201cc9cdf4f4772def98a39c663e4fd08c8" dependencies = [ "async-trait", "chrono", "chrono-tz", "log", "reqwest", "serde", "url", ] [[package]] name = "railway-provider-db-movas" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "959b1b819e6030d4ba43fdb1c53ed876f45ce60c429144c80c1a1b204bd7f696" dependencies = [ "async-trait", "chrono", "chrono-tz", "railway-core", "serde", "serde_json", "url", "uuid", ] [[package]] name = "railway-provider-hafas" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ca22b8dc328bba307b2823e618e0554daeaf02ec43ca8d74c8d1223905b3eb0" dependencies = [ "async-trait", "chrono", "chrono-tz", "hex", "log", "md-5", "railway-core", "serde", "serde_json", "thiserror", "url", ] [[package]] name = "railway-provider-motis" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0b021a2f1119dd8fb3198656d47185cdb7ca6234ab0b2b59f989a6692f7a967" dependencies = [ "async-trait", "chrono", "chrono-tz", "motis-openapi-sdk", "railway-core", "serde", "serde_json", "url", ] [[package]] name = "railway-provider-search-ch" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40b8fd056ed07d79e12bb96a32016d5b9e59f1d85dd81a44c6fbab01a6ea2554" dependencies = [ "async-trait", "chrono", "chrono-tz", "railway-core", "serde", "serde_json", "url", ] [[package]] name = "regex" version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" dependencies = [ "aho-corasick", "memchr", "regex-automata", "regex-syntax", ] [[package]] name = "regex-automata" version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" dependencies = [ "aho-corasick", "memchr", "regex-syntax", ] [[package]] name = "regex-syntax" version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "reqwest" version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ "base64", "bytes", "encoding_rs", "futures-core", "futures-util", "h2", "http", "http-body", "http-body-util", "hyper", "hyper-rustls", "hyper-tls", "hyper-util", "js-sys", "log", "mime", "mime_guess", "native-tls", "percent-encoding", "pin-project-lite", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", "tokio", "tokio-native-tls", "tower", "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", ] [[package]] name = "ring" version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", "getrandom 0.2.17", "libc", "untrusted", "windows-sys 0.52.0", ] [[package]] name = "rustc_version" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys", "windows-sys 0.61.2", ] [[package]] name = "rustls" version = "0.23.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" dependencies = [ "once_cell", "rustls-pki-types", "rustls-webpki", "subtle", "zeroize", ] [[package]] name = "rustls-pki-types" version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" dependencies = [ "zeroize", ] [[package]] name = "rustls-webpki" version = "0.103.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" dependencies = [ "ring", "rustls-pki-types", "untrusted", ] [[package]] name = "rustversion" version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "schannel" version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" dependencies = [ "windows-sys 0.61.2", ] [[package]] name = "security-framework" version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ "bitflags", "core-foundation 0.10.1", "core-foundation-sys", "libc", "security-framework-sys", ] [[package]] name = "security-framework-sys" version = "2.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" dependencies = [ "core-foundation-sys", "libc", ] [[package]] name = "semver" version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "serde" version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", "serde_derive", ] [[package]] name = "serde_core" version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "serde_json" version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", "serde", "serde_core", "zmij", ] [[package]] name = "serde_repr" version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "serde_spanned" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" dependencies = [ "serde_core", ] [[package]] name = "serde_urlencoded" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", "itoa", "ryu", "serde", ] [[package]] name = "shlex" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "siphasher" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" [[package]] name = "slab" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", "windows-sys 0.61.2", ] [[package]] name = "stable_deref_trait" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "subtle" version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] [[package]] name = "sync_wrapper" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ "futures-core", ] [[package]] name = "synstructure" version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "system-configuration" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ "bitflags", "core-foundation 0.9.4", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", ] [[package]] name = "system-deps" version = "7.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "396a35feb67335377e0251fcbc1092fc85c484bd4e3a7a54319399da127796e7" dependencies = [ "cfg-expr", "heck", "pkg-config", "toml", "version-compare", ] [[package]] name = "target-lexicon" version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c" [[package]] name = "temp-dir" version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83176759e9416cf81ee66cb6508dbfe9c96f20b8b56265a39917551c23c70964" [[package]] name = "tempfile" version = "3.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", "getrandom 0.4.2", "once_cell", "rustix", "windows-sys 0.61.2", ] [[package]] name = "thiserror" version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "tinystr" version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" dependencies = [ "displaydoc", "zerovec", ] [[package]] name = "tokio" version = "1.52.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "110a78583f19d5cdb2c5ccf321d1290344e71313c6c37d43520d386027d18386" dependencies = [ "bytes", "libc", "mio", "pin-project-lite", "socket2", "tokio-macros", "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "tokio-native-tls" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ "native-tls", "tokio", ] [[package]] name = "tokio-rustls" version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ "rustls", "tokio", ] [[package]] name = "tokio-util" version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", ] [[package]] name = "toml" version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" dependencies = [ "indexmap", "serde_core", "serde_spanned", "toml_datetime", "toml_parser", "toml_writer", "winnow", ] [[package]] name = "toml_datetime" version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" dependencies = [ "serde_core", ] [[package]] name = "toml_edit" version = "0.25.11+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" dependencies = [ "indexmap", "toml_datetime", "toml_parser", "winnow", ] [[package]] name = "toml_parser" version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ "winnow", ] [[package]] name = "toml_writer" version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" [[package]] name = "tower" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", "pin-project-lite", "sync_wrapper", "tokio", "tower-layer", "tower-service", ] [[package]] name = "tower-http" version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a28f0d049ccfaa566e14e9663d304d8577427b368cb4710a20528690287a738b" dependencies = [ "bitflags", "bytes", "futures-util", "http", "http-body", "pin-project-lite", "tower", "tower-layer", "tower-service", "url", ] [[package]] name = "tower-layer" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "pin-project-lite", "tracing-core", ] [[package]] name = "tracing-core" version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", ] [[package]] name = "try-lock" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" [[package]] name = "unicase" version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" [[package]] name = "unicode-ident" version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "unicode-segmentation" version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" [[package]] name = "unicode-xid" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "untrusted" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", "percent-encoding", "serde", ] [[package]] name = "utf8_iter" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "utf8parse" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" version = "1.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" dependencies = [ "getrandom 0.4.2", "js-sys", "wasm-bindgen", ] [[package]] name = "vcpkg" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version-compare" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "want" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ "try-lock", ] [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" version = "1.0.3+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" dependencies = [ "wit-bindgen 0.57.1", ] [[package]] name = "wasip3" version = "0.4.0+wasi-0.3.0-rc-2026-01-06" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" dependencies = [ "wit-bindgen 0.51.0", ] [[package]] name = "wasm-bindgen" version = "0.2.120" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df52b6d9b87e0c74c9edfa1eb2d9bf85e5d63515474513aa50fa181b3c4f5db1" dependencies = [ "cfg-if", "once_cell", "rustversion", "wasm-bindgen-macro", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" version = "0.4.70" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af934872acec734c2d80e6617bbb5ff4f12b052dd8e6332b0817bce889516084" dependencies = [ "js-sys", "wasm-bindgen", ] [[package]] name = "wasm-bindgen-macro" version = "0.2.120" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b1041f495fb322e64aca85f5756b2172e35cd459376e67f2a6c9dffcedb103" dependencies = [ "quote", "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" version = "0.2.120" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9dcd0ff20416988a18ac686d4d4d0f6aae9ebf08a389ff5d29012b05af2a1b41" dependencies = [ "bumpalo", "proc-macro2", "quote", "syn", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" version = "0.2.120" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49757b3c82ebf16c57d69365a142940b384176c24df52a087fb748e2085359ea" dependencies = [ "unicode-ident", ] [[package]] name = "wasm-encoder" version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" dependencies = [ "leb128fmt", "wasmparser", ] [[package]] name = "wasm-metadata" version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" dependencies = [ "anyhow", "indexmap", "wasm-encoder", "wasmparser", ] [[package]] name = "wasmparser" version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ "bitflags", "hashbrown 0.15.5", "indexmap", "semver", ] [[package]] name = "web-sys" version = "0.3.97" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2eadbac71025cd7b0834f20d1fe8472e8495821b4e9801eb0a60bd1f19827602" dependencies = [ "js-sys", "wasm-bindgen", ] [[package]] name = "winapi" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ "winapi-i686-pc-windows-gnu", "winapi-x86_64-pc-windows-gnu", ] [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement", "windows-interface", "windows-link", "windows-result", "windows-strings", ] [[package]] name = "windows-implement" version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "windows-interface" version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-registry" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" dependencies = [ "windows-link", "windows-result", "windows-strings", ] [[package]] name = "windows-result" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ "windows-link", ] [[package]] name = "windows-strings" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ "windows-link", ] [[package]] name = "windows-sys" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ "windows-targets", ] [[package]] name = "windows-sys" version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ "windows-link", ] [[package]] name = "windows-targets" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ "windows_aarch64_gnullvm", "windows_aarch64_msvc", "windows_i686_gnu", "windows_i686_gnullvm", "windows_i686_msvc", "windows_x86_64_gnu", "windows_x86_64_gnullvm", "windows_x86_64_msvc", ] [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0" dependencies = [ "memchr", ] [[package]] name = "wit-bindgen" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" dependencies = [ "wit-bindgen-rust-macro", ] [[package]] name = "wit-bindgen" version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" [[package]] name = "wit-bindgen-core" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" dependencies = [ "anyhow", "heck", "wit-parser", ] [[package]] name = "wit-bindgen-rust" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" dependencies = [ "anyhow", "heck", "indexmap", "prettyplease", "syn", "wasm-metadata", "wit-bindgen-core", "wit-component", ] [[package]] name = "wit-bindgen-rust-macro" version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" dependencies = [ "anyhow", "prettyplease", "proc-macro2", "quote", "syn", "wit-bindgen-core", "wit-bindgen-rust", ] [[package]] name = "wit-component" version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", "bitflags", "indexmap", "log", "serde", "serde_derive", "serde_json", "wasm-encoder", "wasm-metadata", "wasmparser", "wit-parser", ] [[package]] name = "wit-parser" version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" dependencies = [ "anyhow", "id-arena", "indexmap", "log", "semver", "serde", "serde_derive", "serde_json", "unicode-xid", "wasmparser", ] [[package]] name = "writeable" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" [[package]] name = "yoke" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" dependencies = [ "stable_deref_trait", "yoke-derive", "zerofrom", ] [[package]] name = "yoke-derive" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", "syn", "synstructure", ] [[package]] name = "zerofrom" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", "syn", "synstructure", ] [[package]] name = "zeroize" version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" [[package]] name = "zerotrie" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" dependencies = [ "displaydoc", "yoke", "zerofrom", ] [[package]] name = "zerovec" version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" dependencies = [ "yoke", "zerofrom", "zerovec-derive", ] [[package]] name = "zerovec-derive" version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "zmij" version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/Cargo.toml000066400000000000000000000023631517666454200234030ustar00rootroot00000000000000[package] name = "diebahn" description = "Find all your travel information" # keep in sync with metainfo authors = ["Julian Schmidhuber ", "Markus Göllnitz "] homepage = "https://mobile.schmidhuberj.de/railway" repository = "https://gitlab.com/schmiddi-on-mobile/railway" version = "2.10.0" license = "GPL-3.0-or-later" edition = "2024" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] gtk = { version = "0.10", package = "gtk4", features = ["v4_14"] } gdk = { version = "0.10", package = "gdk4" } libadwaita = { version = "0.8", features = ["v1_7"] } gettext-rs = { version = "0.7.7", features = ["gettext-system"] } once_cell = "1.21.4" tokio = { version = "1.52.2", features = ["rt", "macros", "rt-multi-thread", "time"] } chrono = "0.4.44" chrono-tz = "0.10" log = "0.4.29" env_logger = "0.11.10" rcore = { package = "railway-core", version = "0.3.0", features = ["reqwest-requester", "rt-multi-thread", "serde"] } rapi = { package = "railway-api", version = "0.3.0", features = ["rt-multi-thread"] } serde = { version = "1.0.228", features = ["derive"] } serde_json = "1.0.149" [profile.release] lto = true codegen-units = 1 panic = "abort" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/LICENSE000066400000000000000000001045151517666454200224620ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program 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, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/NOTICE000066400000000000000000000012411517666454200223510ustar00rootroot00000000000000Copyright: 2021 Julian Schmidhuber This program 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, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/README.md000066400000000000000000000043231517666454200227300ustar00rootroot00000000000000# Railway [![Matrix](https://img.shields.io/badge/Matrix-Join-brightgreen)](https://matrix.to/#/%23railwayapp:matrix.org) [![Translation status](https://hosted.weblate.org/widgets/schmiddi-on-mobile/-/railway/svg-badge.svg)](https://hosted.weblate.org/engage/schmiddi-on-mobile/) Railway lets you look up travel information for many different railways, all without needing to navigate through different websites. ## Screenshots ![](/data/screenshots/overview.png) ## Installation
Flatpak Download on Flathub
Arch Linux [railway](https://archlinux.org/packages/extra/x86_64/railway)
Debian (testing) [railway-gtk](https://packages.debian.org/testing/railway-gtk)
Debian (unstable) [railway-gtk](https://packages.debian.org/unstable/railway-gtk)
## Features - Search for journeys - View the details of a journey including departure, arrivals, delays, platforms - Adaptive for small screens - Bookmark a search or a journey - Show more information like prices - Many different search profiles, e.g - DB - ÖBB - BART - ... (many more). For a full list of supported profiles, see [hafas-rs](https://gitlab.com/schmiddi-on-mobile/hafas-rs#profiles) which is used to query the application data. ## Translation Railway can easily be translated for other languages, as it uses gettext. Please consider contributing translations using [Weblate](https://hosted.weblate.org/engage/schmiddi-on-mobile/), as an alternative you can also open merge requests and I will notify you if updates are necessary. Thanks to Weblate for free hosting and all the translators for their great work keeping the translations up-to-date. Translation status ## Code of Conduct This project follows [GNOME's Code of Conduct](https://conduct.gnome.org/). railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/build-aux/000077500000000000000000000000001517666454200233415ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/build-aux/create-release.sh000066400000000000000000000134541517666454200265650ustar00rootroot00000000000000#!/bin/sh slug="diebahn" url_slug="railway" app_id="de.schmidhuberj.DieBahn" gitlab_project_id="34570753" binary="./build/target/debug/$slug" date=$(date +%Y-%m-%d) if [ "$#" -ne 1 ]; then echo "Usage: $0 " exit 1 fi echo "> Checking git is not dirty" if [[ -n "$(git status --porcelain)" ]]; then echo "! Git is dirty. Please commit the changes before releasing." exit 1 fi echo "> Updating Cargo.toml." sed -i "s/^version = \".*\"$/version = \"$1\"/" Cargo.toml echo "> Updating meson.build." sed -i "s/^[[:blank:]]*version: '.*',$/ version: '$1',/" meson.build echo "> Updating CHANGELOG.md." # The update is not idempotent, only do it if the release does not yet exist. if ! grep -q "## \[$1\]" CHANGELOG.md; then sed -i "s/## \[Unreleased\]/## \[Unreleased\]\n\n## \[$1\] - $date/" CHANGELOG.md sed -r -i "s|\[Unreleased\]: https://gitlab.com/schmiddi-on-mobile/$url_slug/-/compare/(.*)...master|\[Unreleased\]: https://gitlab.com/schmiddi-on-mobile/$url_slug/-/compare/$1...master\n[$1]: https://gitlab.com/schmiddi-on-mobile/$url_slug/-/compare/\1...$1|" CHANGELOG.md fi echo "> Updating metainfo." changelog=$(bash ./build-aux/extract-changelog-for-tag.sh CHANGELOG.md $1 | md2html | sed "s/h3/p/g") # Hack to remove newline characters; sed does not seem to like them. changelog_newline=$(echo $changelog) # The update is not idempotent, only do it if the release does not yet exist. if ! grep -q "|\n \n \n $changelog_newline\n \n |" "data/$app_id.metainfo.xml.in.in" fi echo "> Running the application" if command -v run 2>&1 > /dev/null; then run & else echo "! You are not running the devshell of the flake. Please compile and start it manually (using the $binary binary)." fi # Wait until the application runs. # See https://askubuntu.com/questions/1192628/how-to-create-shell-script-that-wait-till-a-program-finished-and-after-finished/1192769#1192769 # TODO: What about when testing the Flatpak? appCount=$(ps ax | grep $binary | grep -v grep | wc -l) while [ "$appCount" -eq "0" ] do sleep 1 appCount=$(ps ax | grep $binary | grep -v grep | wc -l) done echo "> The application seems to be running now. Please manually validate the release notes are correct in the about page (the displayed version will contain a git comit hash, that is expected). Press enter once confirmed." read -n1 ans echo "> Stop running the application now." # Wait until the application stops. # See https://askubuntu.com/questions/1192628/how-to-create-shell-script-that-wait-till-a-program-finished-and-after-finished/1192769#1192769 appCount=$(ps ax | grep $binary | grep -v grep | wc -l) while [ "$appCount" -gt "0" ] do sleep 1 appCount=$(ps ax | grep $binary | grep -v grep | wc -l) done echo "> Application seems to be stopped now." echo "> Validating appstream." appstreamcli validate "build/data/$app_id.Devel.metainfo.xml" if [ $? -ne 0 ]; then echo "! Appstream validation failed. Please fix it and redo the release." exit 1 fi echo "> Doing the commit." git add . git commit echo "> Tagging the latest commit." git tag $1 echo "> Displaying what was changed." git show HEAD echo "> Press 'Enter' when you are ready to push the repository. This can not be undone!" read -n1 ans git push && git push --tags echo "> Waiting for CI to finish. This will take approximately 30 minutes. You will be notified once CI is finished." until curl -I --fail "https://gitlab.com/api/v4/projects/${gitlab_project_id}/packages/generic/$url_slug/$1/$slug-$1.tar.xz" &> /dev/null; do # Try again in 2 minutes sleep 120 done notify-send "CI is finished" "Please continue with the instructions provided for releasing the new version." echo "> Please create the PR to update the Flatpak." # TODO: This is wrong if there is already a PR open. pr_number=$(curl "https://api.github.com/repos/flathub/$app_id/pulls" 2> /dev/null | jq -r '.[0].number') while [ "$pr_number" = "null" ]; do # Try again in 2 minutes sleep 120 pr_number=$(curl "https://api.github.com/repos/flathub/$app_id/pulls" 2> /dev/null | jq -r '.[0].number') done echo "> Detected open Flatpak PR to monitor: $pr_number. Depending on the current Flathub buildbot usage, the build can take a long time to complete. You will be notified once the build succeeds." comments=$(curl "https://api.github.com/repos/flathub/$app_id/issues/$pr_number/comments" 2> /dev/null) while ! echo "$comments" | grep "build.*succeeded" &> /dev/null; do if echo "$comments" | grep "build.*failed" &> /dev/null; then notify-send "Flathub build failed" "Please resolve manually." echo "! Flathub build failed. Please resolve manually." exit 1 fi # Try again in 2 minutes sleep 120 comments=$(curl "https://api.github.com/repos/flathub/$app_id/issues/$pr_number/comments" 2> /dev/null) done notify-send "Flathub build successful" "Please merge the PR." echo "> Flathub build successful. Please merge the PR." status=$(curl "https://api.github.com/repos/flathub/$app_id/pulls/$pr_number" 2> /dev/null | jq -r '.state') while [ "$status" = "open" ]; do # Try again in 2 minutes sleep 120 status=$(curl "https://api.github.com/repos/flathub/$app_id/pulls/$pr_number" 2> /dev/null | jq -r '.state') done notify-send "Flathub PR merged" "Please continue with the instructions provided for releasing the new version." echo "> You are all set now. Please still do the following things afterwards:" echo ">> Write a release message to the Matrix channel." echo ">> If it was a bigger repease, consider doing a Mastodon announcement." railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/build-aux/de.schmidhuberj.DieBahn.Devel.json000066400000000000000000000030611517666454200316210ustar00rootroot00000000000000{ "app-id": "de.schmidhuberj.DieBahn.Devel", "runtime": "org.gnome.Platform", "runtime-version": "master", "sdk": "org.gnome.Sdk", "sdk-extensions": [ "org.freedesktop.Sdk.Extension.rust-stable" ], "command": "diebahn", "finish-args": [ "--share=ipc", "--socket=fallback-x11", "--socket=wayland", "--socket=pulseaudio", "--device=dri", "--share=network" ], "build-options": { "append-path": "/usr/lib/sdk/rust-stable/bin", "env": { "CARGO_HOME": "/run/build/diebahn/cargo", "RUST_BACKTRACE": "1" }, "build-args": [ "--share=network" ], "test-args": [ "--share=network" ] }, "modules": [ { "name": "blueprint-compiler", "buildsystem": "meson", "cleanup": [ "*" ], "sources": [ { "type": "git", "url": "https://gitlab.gnome.org/jwestman/blueprint-compiler", "branch" : "main" } ] }, { "name": "diebahn", "buildsystem": "meson", "run-tests" : true, "config-opts": [ "-Dprofile=development" ], "sources" : [ { "type" : "dir", "path" : "..", "exclude": [ ".flatpak-builder" ] } ] } ] } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/build-aux/de.schmidhuberj.DieBahn.json000066400000000000000000000027331517666454200305700ustar00rootroot00000000000000{ "app-id": "de.schmidhuberj.DieBahn", "runtime": "org.gnome.Platform", "runtime-version": "master", "sdk": "org.gnome.Sdk", "sdk-extensions": [ "org.freedesktop.Sdk.Extension.rust-stable" ], "command": "diebahn", "finish-args": [ "--share=ipc", "--socket=fallback-x11", "--socket=wayland", "--socket=pulseaudio", "--device=dri", "--share=network" ], "build-options": { "append-path": "/usr/lib/sdk/rust-stable/bin", "env": { "CARGO_HOME": "/run/build/diebahn/cargo", "RUST_BACKTRACE": "1" }, "build-args": [ "--share=network" ] }, "modules": [ { "name": "blueprint-compiler", "buildsystem": "meson", "cleanup": [ "*" ], "sources": [ { "type": "git", "url": "https://gitlab.gnome.org/jwestman/blueprint-compiler", "branch" : "main" } ] }, { "name": "diebahn", "buildsystem": "meson", "config-opts": [ "-Dprofile=default" ], "sources" : [ { "type" : "dir", "path" : "..", "exclude": [ ".flatpak-builder" ] } ] } ] } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/build-aux/dist-vendor.sh000077500000000000000000000004061517666454200261360ustar00rootroot00000000000000#!/bin/bash export DIST="$1" export SOURCE_ROOT="$2" cd "$SOURCE_ROOT" mkdir "$DIST"/.cargo cargo vendor | sed 's/^directory = ".*"/directory = "vendor"/g' > $DIST/.cargo/config # Move vendor into dist tarball directory mv vendor "$DIST" echo "Finished Vendor" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/build-aux/extract-changelog-for-tag.sh000066400000000000000000000006011517666454200306260ustar00rootroot00000000000000#!/bin/sh if [ "$#" -ne 2 ]; then echo "Usage: $0 " exit 1 fi CHANGELOG_FILE=$1 CURRENT_TAG=$2 # Extract content between the tag and the next occurance of "## [". awk "/^## \[${CURRENT_TAG}\] - / {flag=1; next} /^## \[/ && (flag==1) {flag=0; exit} flag" "${CHANGELOG_FILE}" | # Remove leading and trailing empty lines sed -e '1{/^$/d;}' -e '${/^$/d;}' railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/build-aux/test/000077500000000000000000000000001517666454200243205ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/build-aux/test/i18n-strings-check.sh000077500000000000000000000035371517666454200302100ustar00rootroot00000000000000#!/bin/sh srcdirs="src" uidirs="data/resources/ui" # find source files that contain gettext keywords rust_files="$(grep -lR --include='*.rs' 'gettext\b' $srcdirs)" # find ui blp_files="$(grep -lRi --include='*.blp' '_("' $uidirs)" files="$rust_files $blp_files" exitval=0 # Test 1: find all files that are missing from POTFILES missing="$(for f in $files; do ! grep -q "^$f$" po/POTFILES && echo "$f"; done)" if [ ${#missing} -ne 0 ]; then echo >&2 "The following files are missing from po/POTFILES:" for f in ${missing}; do echo " $f" >&2 done echo >&2 exitval=1 fi # Test 2: find potentially translatable properties without _("…") that are not marked as // not translated translatable_properties="$(grep -Roh --include='*.blp' '[a-zA-Z][a-zA-Z0-9_-]*\s*:\s*_(' $uidirs | sed 's/^\([a-zA-Z][a-zA-Z0-9_-]*\).*/\1/' | sort | uniq)" for p in ${translatable_properties}; do missed_translatable="$(grep -lRP --include='*.blp' "$p\s*:\s*(\".*\"|'.*')\s*;(?! // not translated)" $uidirs)" if [ ${#missed_translatable} -ne 0 ]; then exitval=1 echo >&2 "The following files use the property $p without \`_("…")\` or a \`// not translated\` comment:" for f in ${missed_translatable}; do echo " $f" >&2 done echo >&2 fi done # Test 3: find all blueprint files which use a gettext qualifier that will not be picked up by gettext by default. # The gettext qualifier _('.*') is not picked up by gettext, one should use _("") instead (double quotes instead of single quotes). blp_files_with_wrong_gettext="$(grep -lRi --include='*.blp' "_('.*')" $uidirs)" if [ ${#blp_files_with_wrong_gettext} -ne 0 ]; then echo >&2 "The following blueprint files use the wrong gettext quantifier (\`_('…')\` instead of \`_("…")\`):" for f in ${blp_files_with_wrong_gettext}; do echo " $f" >&2 done echo >&2 exitval=1 fi exit $exitval railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/000077500000000000000000000000001517666454200223605ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/de.schmidhuberj.DieBahn.desktop.in.in000066400000000000000000000005301517666454200313120ustar00rootroot00000000000000[Desktop Entry] Type=Application Icon=@app-id@ Name=Railway Comment=Find all your travel information StartupWMClass=Railway Exec=@bindir@/diebahn DBusActivatable=true X-Purism-FormFactor=Workstation;Mobile; Categories=GTK;GNOME;Utility;Maps; # Translators: The keywords from the desktop file. Keywords=train;railway;journey;planner;timetables; railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/de.schmidhuberj.DieBahn.gschema.xml000066400000000000000000000076451517666454200310530ustar00rootroot00000000000000 1000 Window width 600 Window height false Window maximized state 'None' Type of loyality card owned false Search for first-class false Search for bike-accessible journeys only 0 Minimum transfer time false Search for direct connections only false Remove past trips from bookmarks 2 Hours past arrival after which to remove them false Whether it was already suggested to delete old bookmarks true Include InterCityExpress (ICE)? true Include Regio (RB)? true Include S-Bahn (S)? true Include Bus (B)? true Include Ferry (F)? true Include U-Bahn (U)? true Include Tram (T)? true Include Cablecar? true Include Group Taxi (Taxi)? "" Last search from "" Last search from "DB" The default search provider de.schmidhuberj.DieBahn.metainfo.xml.in.in000066400000000000000000000364061517666454200321760ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data @app-id@ GPL-3.0-or-later FSFAP Railway Find all your travel information @app-id@.desktop Julian Schmidhuber Julian Schmidhuber @gettext-package@ flatpak@schmiddi.anonaddy.com Maps Utility GNOME GTK https://mobile.schmidhuberj.de/railway https://gitlab.com/schmiddi-on-mobile/railway/-/work_items https://hosted.weblate.org/engage/schmiddi-on-mobile/ https://matrix.to/#/#railwayapp:matrix.org https://gitlab.com/schmiddi-on-mobile/railway

Railway lets you look up travel information across networks and borders without having to navigate through different websites. Due to the adaptive design, it is suitable to plan your trip in advance or mobile on the go:

  • View your tripsʼ details including platforms and delays
  • Bookmark current and future trips as well as frequent search
  • Make use of advance search options like filtering by mode of transport

And all that for networks from all around the world, but mostly from Europe.

Fixed

  • Fixed errors with the AVV and VBB providers.

Removed

  • Removed the DART provider, as it was not working anymore.
  • Removed the PKP provider, as it was not working anymore.
  • Removed the VRN provider, as it was not working anymore.

Fixed

  • Long walking times and no waiting for the DB provider.
  • The Transitious provider was not working anymore.
  • Removed the CMTA provider, as it was not working anymore.
  • Error with the DB provider if no trains are available earlier or later.

Fixed

  • Reloading trips worked in the background, but the interface was only updated after closing and re-opening the same trip. This is no longer needed. Immediately after reloading, the trip details are updated.

HOTFIX

  • Fixed finished journeys being watched keeping the application from starting.

Changed

  • Don't delete old journeys by default.

Fixed

  • Reloading of journeys with the DB provider being broken.

New Features

  • Railway now has the ability to watch trips for notifications ahead of them and in-journey, e.g. when platform changes or delays might interrupt travel.

Fixes

  • Deutsche Bahn stopped working recently with versions prior to 2.9, but are working from here on.

Chores

  • The shortcuts dialog is now adaptive due to switching to GNOME's new libadwaita widgets for them.
  • This app now builds with gtk-rs 0.10.

Fixed

  • SBB provider not displaying line numbers.

Fixed

  • Trip details too wide for narrow window width for some journeys.

Changed

  • Updated to GNOME 48 widgets, in particular in the search options window.
  • Add a separate section for Austrian railway providers in the popover.
  • Make the application D-Bus activatable.

Fixed

  • Raise window if application is started again.

Changed

  • Transitioned to the new MOTIS 2 instance for Transitous.

Fixed

  • DB provider failing when some stops don't have a platform.

HOTFIX

  • Fixed DB provider being broken.

Added

  • Categories and comment in the desktop file.

Fixed

  • Don't panic when a journey is walk-only.
  • Display name of VBB incorrect.
  • Geographic information for a few providers being wrong.

Chores

  • Update to GNOME 47.
  • Port to blueprint-compiler.

Added

  • Ability to use arrival time instead of departure time.
  • Region divider in provider popover.
  • Highlight currently selected region in the provider popover.

Fixed

  • Some providers displaying 0 minute walks in transitions (upstream fix).

Added

  • Screen reader support for the station entry.
  • Notify users about automatic bookmark deletion with a toast.
  • Transitous provider support.
  • SBB provider support.
  • IVB provider support.
  • KVB provider support.
  • BART provider support.

Removed

  • TPG provider support.

Changed

  • Rename stopover to stop.

Fixed

  • Display first day header when initial day deviates from request

Added

  • PKP profile support.

Removed

  • INSA profile support.

Changed

  • Port to GNOME 46 widgets.

Fixed

  • Remarks possibly being queried in the incorrect language.
  • Crash on Swedish translation.

Added

  • Highlight the selected connection in the connections list.
  • Made the trip details page keyboard-navigable.
  • Improved accessibility

Changed

  • Improved positioning for arrival and departure labels in the connections list.
  • Minor UI update regarding journey remarks.

Fixed

  • Some strings not being translatable or using incorrect forms of a plural.
  • Also allow Ctrl+Q to close the window.
  • Performance issues with showing the details of large journeys.
  • Bug where an incorrect timezone was used.

Added

  • Keyboard navigation to station search.
  • Label for frequency of trains.

Changed

  • Strings used in the UI.
  • Improved remarks for journey legs.
  • Many minor UI improvements.

Fixed

  • For the station search, clear the place when the entry is cleared.

Added

  • Translation support using Weblate.
  • Filter for providers.
  • Indicate when journey was last refreshed.
  • Save window height between startups.

Changed

  • Improved UI for date-dividers.
  • Disable search button while search is in progress.
  • Disable refresh button while refreshing journey is in progress.
  • Added timeout to all requests.

Fixed

  • Don't collapse journey legs stopovers and remarks after refreshing.
  • Build on i386.

Added

  • Keyboard shortcuts
  • Date dividers between journeys.

Changed

  • UI improvements on the preferences.
  • Don't display walk destination, unless it is the final walk.

Fixed

  • Spinners in the time dropdown not being two-digit sometimes.
  • Duration of over one day being displayed incorrectly.
  • The date and time cards having a different color than the rest when in dark mode.

Complete UI overhaul.

New icon.

Made about- and preferences-windows transient.

New icon

UI improvements

Fix problems with DB and other providers.

Bug fixing for the new providers.

Added support for different providers.

Option to autodelete old journeys, small bug fix

Many more settings

Show prices, save searches between application starts, fix bugs

Fix application freeze, dutch translation

Fixed some api bugs

Bookmark searches, more information on connections

Bookmark journeys

Initial Release.

Application Overview https://gitlab.com/schmiddi-on-mobile/railway/-/raw/master/data/screenshots/overview.png diebahn keyboard pointing touch always 300 360 #ff7a73 #a13935
railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/de.schmidhuberj.DieBahn.service.in000066400000000000000000000001131517666454200306710ustar00rootroot00000000000000[D-BUS Service] Name=@app-id@ Exec=@bindir@/diebahn --gapplication-service railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/000077500000000000000000000000001517666454200234735ustar00rootroot00000000000000de.schmidhuberj.DieBahn-symbolic.svg000066400000000000000000000016451517666454200323110ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/de.schmidhuberj.DieBahn.Devel.svg000066400000000000000000000217701517666454200316100ustar00rootroot00000000000000 de.schmidhuberj.DieBahn.Source.svg000066400000000000000000000570261517666454200317350ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons Adwaita Icon Template image/svg+xml GNOME Design Team Adwaita Icon Template Hicolor Symbolic railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/de.schmidhuberj.DieBahn.svg000066400000000000000000000106031517666454200305430ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/general/000077500000000000000000000000001517666454200251105ustar00rootroot00000000000000bell-outline-none-symbolic.svg000066400000000000000000000022341517666454200327220ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/general railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/general/bell-outline-symbolic.svg000066400000000000000000000015711517666454200320470ustar00rootroot00000000000000 bookmark-toggled-symbolic.svg000066400000000000000000000176661517666454200326410ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/general bookmark-untoggled-symbolic.svg000066400000000000000000000012461517666454200331670ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/general railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/indicators/000077500000000000000000000000001517666454200256325ustar00rootroot00000000000000delay-extreme-small-symbolic.svg000066400000000000000000000033461517666454200337740ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/indicators delay-long-small-symbolic.svg000066400000000000000000000025331517666454200332570ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/indicators delay-small-symbolic.svg000066400000000000000000000021651517666454200323230ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/indicators train-load-extreme-symbolic.svg000066400000000000000000000052211517666454200336140ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/indicators train-load-high-symbolic.svg000066400000000000000000000044471517666454200330730ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/indicators train-load-veryhigh-symbolic.svg000066400000000000000000000044471517666454200340010ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/indicators railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/meson.build000066400000000000000000000004241517666454200256350ustar00rootroot00000000000000install_data( '@0@.svg'.format(application_id), install_dir: iconsdir / 'hicolor' / 'scalable' / 'apps' ) install_data( '@0@-symbolic.svg'.format(base_id), install_dir: iconsdir / 'hicolor' / 'symbolic' / 'apps', rename: '@0@-symbolic.svg'.format(application_id) ) railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/000077500000000000000000000000001517666454200255105ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/avv.svg000066400000000000000000000120411517666454200270230ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/bart.svg000066400000000000000000000206151517666454200271650ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/bls.svg000066400000000000000000000057131517666454200270170ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/cfl.svg000066400000000000000000000062471517666454200270060ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/cmta.svg000066400000000000000000000205251517666454200271610ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/dart.svg000066400000000000000000000113371517666454200271700ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/db-busradar-nrw.svg000066400000000000000000000122531517666454200312260ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/db.svg000066400000000000000000000053041517666454200266200ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/hvv.svg000066400000000000000000000043421517666454200270370ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/irish-rail.svg000066400000000000000000000105421517666454200302760ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/ivb.svg000066400000000000000000000107711517666454200270170ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/kvb.svg000066400000000000000000000046601517666454200270210ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/mobil-nrw.svg000066400000000000000000000076521517666454200301510ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/mobiliteit-lu.svg000066400000000000000000000170111517666454200310100ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/nahsh.svg000066400000000000000000000420361517666454200273370ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/nvv.svg000066400000000000000000000063461517666454200270530ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/oebb.svg000066400000000000000000000075301517666454200271450ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/ooevv.svg000066400000000000000000000102601517666454200273660ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/pkp.svg000066400000000000000000000103601517666454200270230ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/rejseplanen.svg000066400000000000000000000100571517666454200305420ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/resrobot.svg000066400000000000000000000073461517666454200301020ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/rmv.svg000066400000000000000000000130341517666454200270360ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/rsag.svg000066400000000000000000000121231517666454200271640ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/saarvv.svg000066400000000000000000000076601517666454200275440ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/salzburg.svg000066400000000000000000001405301517666454200300650ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/sbahn-muenchen.svg000066400000000000000000000067261517666454200311370ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/search-ch.svg000066400000000000000000000024431517666454200300710ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/svv.svg000066400000000000000000000336351517666454200270610ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/transitous.svg000066400000000000000000000062411517666454200304470ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/vbb.svg000066400000000000000000000100351517666454200270010ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/vbn.svg000066400000000000000000000115701517666454200270220ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/verbundlinie.svg000066400000000000000000000156031517666454200307240ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/vgi.svg000066400000000000000000000146461517666454200270310ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/vgs.svg000066400000000000000000000123161517666454200270330ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/vkg.svg000066400000000000000000000167371517666454200270360ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/vmt.svg000066400000000000000000000103771517666454200270470ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/vor.svg000066400000000000000000000053171517666454200270450ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/vos.svg000066400000000000000000000222551517666454200270460ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/vrn.svg000066400000000000000000000153031517666454200270400ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/vsn.svg000066400000000000000000000170541517666454200270460ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/vvt.svg000066400000000000000000000062231517666454200270530ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/vvv.svg000066400000000000000000000053471517666454200270630ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/providers/zvv.svg000066400000000000000000000071651517666454200270670ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/remarks/000077500000000000000000000000001517666454200251375ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/remarks/cycling-symbolic.svg000066400000000000000000000033511517666454200311310ustar00rootroot00000000000000 network-wireless-signal-excellent-symbolic.svg000066400000000000000000000031211517666454200361750ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/remarks railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/remarks/power-symbolic.svg000066400000000000000000000031641517666454200306370ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/remarks/thermometer-symbolic.svg000066400000000000000000000015501517666454200320330ustar00rootroot00000000000000 ticket-second-class-symbolic.svg000066400000000000000000000031221517666454200332550ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/remarks railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/remarks/ticket-symbolic.svg000066400000000000000000000012521517666454200307620ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/remarks/wheelchair-symbolic.svg000066400000000000000000000023621517666454200316150ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/search/000077500000000000000000000000001517666454200247405ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/search/down-small-symbolic.svg000066400000000000000000000046661517666454200313710ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/search/route-reverse-symbolic.svg000066400000000000000000000056341517666454200321170ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/symbolic/000077500000000000000000000000001517666454200253145ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/symbolic/train-symbolic.svg000066400000000000000000000034721517666454200307770ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/timeline/000077500000000000000000000000001517666454200253015ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/timeline/change-symbolic.svg000066400000000000000000000032671517666454200310760ustar00rootroot00000000000000 circle-filled-symbolic.svg000066400000000000000000000003661517666454200322650ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/timeline circle-outline-thick-symbolic.svg000066400000000000000000000005251517666454200336020ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/timeline railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/icons/timeline/walking-symbolic.svg000066400000000000000000000030241517666454200312740ustar00rootroot00000000000000 railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/meson.build000066400000000000000000000034721517666454200245300ustar00rootroot00000000000000subdir('icons') # Desktop file desktop_conf = configuration_data() desktop_conf.set('app-id', application_id) desktop_conf.set('bindir', bindir) desktop_file = i18n.merge_file( input: configure_file( input: '@0@.desktop.in.in'.format(base_id), output: '@BASENAME@', configuration: desktop_conf ), output: '@0@.desktop'.format(application_id), type: 'desktop', po_dir: podir, install: true, install_dir: join_paths(datadir, 'applications') ) if desktop_file_validate.found() test('Validate desktop file', desktop_file_validate, args: [desktop_file] ) endif # Metainfo appdata_conf = configuration_data() appdata_conf.set('base-id', base_id) appdata_conf.set('app-id', application_id) appdata_conf.set('gettext-package', gettext_package) appdata = i18n.merge_file( input: configure_file( input: '@0@.metainfo.xml.in.in'.format(base_id), output: '@0@.metainfo.xml.in'.format(application_id), configuration: appdata_conf, ), output: '@0@.metainfo.xml'.format(application_id), po_dir: podir, install: true, install_dir: datadir / 'metainfo' ) if appstream_cli.found() test('Validate metainfo file', appstream_cli, args: ['validate', '--no-net', '--explain', appdata] ) endif # Schemas install_data( '@0@.gschema.xml'.format(base_id), install_dir: datadir / 'glib-2.0' / 'schemas' ) # Compile schemas settings_schemas = [ '@0@.gschema.xml'.format(base_id) ] gnome.compile_schemas(depend_files: files(settings_schemas)) # D-Bus service file service_conf = configuration_data() service_conf.set('app-id', application_id) service_conf.set('bindir', bindir) configure_file( input: '@0@.service.in'.format(base_id), output: '@0@.service'.format(application_id), configuration: service_conf, install: true, install_dir: datadir / 'dbus-1' / 'services' ) subdir('resources') railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/000077500000000000000000000000001517666454200243725ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/meson.build000066400000000000000000000024601517666454200265360ustar00rootroot00000000000000blueprints = custom_target('blueprints', input: files( 'ui/journey_store_item.blp', 'ui/search_store_item.blp', 'ui/place_list_item.blp', 'ui/frequency_label.blp', 'ui/alt_label.blp', 'ui/indicator_icons.blp', 'ui/journeys_page.blp', 'ui/provider_list_item.blp', 'ui/refresh_button.blp', 'ui/remark_item.blp', 'ui/search_options_button.blp', 'ui/search_page.blp', 'ui/time_divider.blp', 'ui/transition.blp', 'ui/journey_list_item.blp', 'ui/shortcuts_dialog.blp', 'ui/preferences_dialog.blp', 'ui/provider_popover.blp', 'ui/window.blp', 'ui/journey_detail_page.blp', 'ui/intermediate_location_item.blp', 'ui/leg_item.blp', 'ui/search_options_dialog.blp', 'ui/station_entry.blp', 'ui/date_time_picker.blp', ), output: '.', command: [find_program('blueprint-compiler'), 'batch-compile', '@OUTPUT@', '@CURRENT_SOURCE_DIR@', '@INPUT@'], ) # Resources resources_conf = configuration_data() resources_conf.set('app-id', application_id) resources = gnome.compile_resources( 'resources', configure_file( input: 'resources.gresource.xml.in', output: '@BASENAME@', configuration: resources_conf, ), gresource_bundle: true, install: true, install_dir: pkgdatadir, dependencies: [ appdata, blueprints ], ) railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/resources.gresource.xml.in000066400000000000000000000163561517666454200315430ustar00rootroot00000000000000 ui/window.ui ui/preferences_dialog.ui ui/search_page.ui ui/search_store_item.ui ui/journeys_page.ui ui/journey_list_item.ui ui/journey_store_item.ui ui/journey_detail_page.ui ui/leg_item.ui ui/remark_item.ui ui/intermediate_location_item.ui ui/transition.ui ui/provider_popover.ui ui/provider_list_item.ui ui/search_options_dialog.ui ui/search_options_button.ui ui/indicator_icons.ui ui/frequency_label.ui ui/alt_label.ui ui/date_time_picker.ui ui/station_entry.ui ui/place_list_item.ui ui/time_divider.ui ui/refresh_button.ui style.css style-hc.css @app-id@.metainfo.xml ui/shortcuts_dialog.ui ../icons/timeline/circle-outline-thick-symbolic.svg ../icons/timeline/circle-filled-symbolic.svg ../icons/timeline/change-symbolic.svg ../icons/timeline/walking-symbolic.svg ../icons/symbolic/train-symbolic.svg ../icons/search/route-reverse-symbolic.svg ../icons/search/down-small-symbolic.svg ../icons/general/bookmark-toggled-symbolic.svg ../icons/general/bookmark-untoggled-symbolic.svg ../icons/general/bell-outline-symbolic.svg ../icons/general/bell-outline-none-symbolic.svg ../icons/indicators/delay-small-symbolic.svg ../icons/indicators/delay-long-small-symbolic.svg ../icons/indicators/delay-extreme-small-symbolic.svg ../icons/indicators/train-load-high-symbolic.svg ../icons/indicators/train-load-veryhigh-symbolic.svg ../icons/indicators/train-load-extreme-symbolic.svg ../icons/remarks/cycling-symbolic.svg ../icons/remarks/network-wireless-signal-excellent-symbolic.svg ../icons/remarks/power-symbolic.svg ../icons/remarks/wheelchair-symbolic.svg ../icons/remarks/thermometer-symbolic.svg ../icons/remarks/ticket-symbolic.svg ../icons/remarks/ticket-second-class-symbolic.svg ../icons/providers/avv.svg ../icons/providers/bart.svg ../icons/providers/bls.svg ../icons/providers/cfl.svg ../icons/providers/db.svg ../icons/providers/vgi.svg ../icons/providers/irish-rail.svg ../icons/providers/ivb.svg ../icons/providers/kvb.svg ../icons/providers/mobiliteit-lu.svg ../icons/providers/mobil-nrw.svg ../icons/providers/nahsh.svg ../icons/providers/nvv.svg ../icons/providers/oebb.svg ../icons/providers/ooevv.svg ../icons/providers/rejseplanen.svg ../icons/providers/resrobot.svg ../icons/providers/rmv.svg ../icons/providers/rsag.svg ../icons/providers/saarvv.svg ../icons/providers/salzburg.svg ../icons/providers/sbahn-muenchen.svg ../icons/providers/transitous.svg ../icons/providers/verbundlinie.svg ../icons/providers/svv.svg ../icons/providers/vbb.svg ../icons/providers/vbn.svg ../icons/providers/vgs.svg ../icons/providers/vkg.svg ../icons/providers/vmt.svg ../icons/providers/vor.svg ../icons/providers/vos.svg ../icons/providers/vsn.svg ../icons/providers/vvt.svg ../icons/providers/vvv.svg ../icons/providers/search-ch.svg railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/style-hc.css000066400000000000000000000011131517666454200266300ustar00rootroot00000000000000/* Don't have a pressed-in look for bookmark icons as they already have a "filled" icon */ .bookmark-button:checked { box-shadow: none; } .bookmark-button:checked:hover { box-shadow: inset 0 0 0 1px var(--borders); } /* Mostly copied from Elastic https://gitlab.gnome.org/World/elastic/-/blob/476c2a1dc7aac30fa25ec105a9e9fa5b3d069d52/src/style-hc.css#L5 */ .toggle-group { box-shadow: inset 0 0 0 1px var(--borders); } .toggle-group .toggle:checked { box-shadow: inset 0 0 0 1px var(--borders), 0 1px 3px 1px #00000011, 0 2px 6px 2px #00000008; } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/style.css000066400000000000000000000062401517666454200262460ustar00rootroot00000000000000.journeys-page .main-label-on-time { font-size: large; } .main-label-late { text-decoration: line-through; font-size: small; opacity: 0.5; } .alt-label-on-time { font-size: small; } .journeys-page .alt-label-late { font-size: large; } .journeys-page .main-label-on-time { font-weight: bold; } .journeys-page .alt-label-late { font-weight: bold; } .intermediate-location-item .main-label-on-time { font-size: small; } .intermediate-location-item .main-label-late { font-size: small; } .intermediate-location-item .alt-label-on-time { font-size: small; } .intermediate-location-item .alt-label-late { font-size: small; } TransferItem:focus image, IntermediateLocationItem:focus image, AnnouncementItem:focus image { color: var(--accent-color); } AnnouncementItem:focus { opacity: 1; } .overlay-spinner { border-radius: 50%; padding: 6px; } .journeys-page header { padding: 0; } /* Fixes buttons inside cards having a bigger border radius compared to the card, which leads to the highlight spanning outside of the box. */ .button-card > button { border-radius: 12px; padding: 0px; } /* Fixes padding of toggle-button inside menu button at the provider popover being too big and resizing the header bar */ .window-menu-button-provider > button { padding: 0px 5px 0px 3px; } .list-button { border-radius: 12px; } .small-pill { padding: 3px 12px; border-radius: 9999px; } .route-segment-station-start-end { font-weight: bold; } /* Don't have a pressed-in look for bookmark icons as they already have a "filled" icon */ .bookmark-button:checked { background-color: transparent; } .bookmark-button:checked:hover { background-color: color-mix(in srgb, currentColor 7%, transparent); } /* Highlighting selected item in popovers */ /* Similar to https://gitlab.gnome.org/GNOME/epiphany/-/blob/b6203597637b4b7725372750983f6e38ca92c2ac/src/resources/style.css#L137-155 */ popover listview.navigation-sidebar > header { padding: 0px 6px; } popover listview.navigation-sidebar > :not(:last-child) { margin-bottom: 2px; } popover listview.navigation-sidebar > row:hover { background-color: color-mix(in srgb, currentColor 4%, transparent); } popover listview.navigation-sidebar > row:active { background-color: color-mix(in srgb, currentColor 8%, transparent); } popover listview.navigation-sidebar > row:selected { background-color: color-mix(in srgb, currentColor 10%, transparent); } popover listview.navigation-sidebar > row:selected:hover { background-color: color-mix(in srgb, currentColor 13%, transparent); } popover listview.navigation-sidebar > row:selected:active { background-color: color-mix(in srgb, currentColor 19%, transparent); } .provider-region { padding: 12px 12px 6px; } .modes-of-transport button { border-radius: 99px; padding-left: 12px; padding-right: 12px; } .modes-of-transport button:checked { background-color: var(--accent-bg-color); color: var(--accent-fg-color); box-shadow: none; outline-offset: 5px; } .modes-of-transport button:checked:focus:focus-visible { outline-offset: 1px; } .modes-of-transport button:checked:hover { background-image: image(color-mix(in srgb, currentColor 10%, transparent)); } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/000077500000000000000000000000001517666454200250075ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/alt_label.blp000066400000000000000000000007541517666454200274330ustar00rootroot00000000000000using Gtk 4.0; template $DBAltLabel: Box { orientation: vertical; hexpand: false; vexpand: false; Label label_alt { styles [ "numeric", ] hexpand: false; halign: center; vexpand: true; valign: center; visible: bind template.is-different; label: bind template.alt; } Label label_main { styles [ "numeric", ] hexpand: false; halign: center; vexpand: true; valign: center; label: bind template.main; } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/date_time_picker.blp000066400000000000000000000063131517666454200310010ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $DBDateTimePicker: Box { orientation: vertical; spacing: 12; Adw.ToggleGroup toggle_group_time_type { Adw.Toggle { name: "departure"; label: _("Departure"); } Adw.Toggle { name: "arrival"; label: _("Arrival"); } } Box { orientation: horizontal; spacing: 12; homogeneous: true; ListBox { selection-mode: none; styles [ "boxed-list", ] Adw.ActionRow btn_input_date { accessibility { label: _("Input date"); has-popup: true; } styles [ "property", ] title: _("Date"); activatable: true; [suffix] Box { valign: center; visible: bind btn_input_date.sensitive; Image { icon-name: 'down-small-symbolic'; valign: center; halign: center; } Popover popover_date { notify::visible => $handle_date_popover_open() swapped; Calendar pick_cal { styles [ "background", ] } } } } } ListBox { selection-mode: none; styles [ "boxed-list", ] Adw.ActionRow btn_input_time { accessibility { label: _("Input time"); has-popup: true; } styles [ "property", ] activatable: true; title: _("Time"); [suffix] Box { valign: center; visible: bind btn_input_time.sensitive; Image { icon-name: 'down-small-symbolic'; valign: center; halign: center; } Popover popover_time { notify::visible => $handle_time_popover_open() swapped; Box { orientation: vertical; spacing: 6; Box { halign: center; SpinButton pick_hour { styles [ "vertical", ] orientation: vertical; valign: center; numeric: true; wrap: true; adjustment: adj_hour; output => $handle_spinner_output_two_digit() swapped; } Label { label: ' ∶ '; // not translated } SpinButton pick_minute { styles [ "vertical", ] orientation: vertical; valign: center; numeric: true; wrap: true; adjustment: adj_minute; output => $handle_spinner_output_two_digit() swapped; } } ToggleButton { label: _("Now"); active: bind template.now; toggled => $handle_toggle_now() swapped; } } } } } } } } Adjustment adj_hour { lower: 0; upper: 23; step-increment: 1; } Adjustment adj_minute { lower: 0; upper: 59; step-increment: 5; } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/frequency_label.blp000066400000000000000000000002771517666454200306540ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $DBFrequencyLabel: Adw.Bin { Label { styles [ "dim-label", ] ellipsize: start; xalign: 0; label: bind template.label; } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/indicator_icons.blp000066400000000000000000000010371517666454200306560ustar00rootroot00000000000000using Gtk 4.0; template $DBIndicatorIcons: Box { accessibility { described-by: [ img_load_factor, img_late_factor, img_change_platform, img_unreachable, img_cancelled, ]; } accessible-role: group; orientation: horizontal; spacing: 2; Image img_load_factor { visible: false; } Image img_late_factor { visible: false; } Image img_change_platform { visible: false; } Image img_unreachable { visible: false; } Image img_cancelled { visible: false; } } intermediate_location_item.blp000066400000000000000000000031301517666454200330040ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/uiusing Gtk 4.0; template $DBIntermediateLocationItem: Box { styles [ "intermediate-location-item", ] accessible-role: list_item; focusable: true; orientation: horizontal; hexpand: true; Box { orientation: vertical; $DBAltLabel alt_label_arrival { valign: center; vexpand: true; margin-top: 6; margin-bottom: 6; main: bind template.intermediate-location as <$DBIntermediateLocation>.planned-arrival; alt: bind template.intermediate-location as <$DBIntermediateLocation>.arrival; } } Box { orientation: vertical; Separator { orientation: vertical; vexpand: true; halign: center; margin-start: 18; margin-end: 18; } Image { visible: bind template.intermediate-location as <$DBIntermediateLocation>.is-stop; icon-name: 'circle-filled-symbolic'; pixel-size: 9; hexpand: false; } Separator { orientation: vertical; vexpand: true; halign: center; margin-start: 18; margin-end: 18; } } Box { orientation: horizontal; margin-top: 6; margin-bottom: 6; spacing: 6; Label { ellipsize: end; label: bind template.intermediate-location as <$DBIntermediateLocation>.place as <$DBPlace>.name; } $DBAltLabel { valign: center; halign: end; hexpand: true; vexpand: true; main: bind template.intermediate-location as <$DBIntermediateLocation>.planned-departure-platform; alt: bind template.intermediate-location as <$DBIntermediateLocation>.departure-platform; } } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/journey_detail_page.blp000066400000000000000000000041311517666454200315160ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $DBJourneyDetailPage: Box { styles [ "journey-detail-page", ] orientation: vertical; vexpand: true; valign: fill; hexpand: true; halign: fill; Adw.Banner { revealed: bind template.show-live-box; title: bind $live_banner_title(template.journey as <$DBJourney>.current-event) as ; } ScrolledWindow { hscrollbar-policy: never; overflow: visible; visible: bind $is_some(template.journey) as ; Viewport { Adw.Clamp { child: Box { orientation: vertical; spacing: 18; vexpand: true; valign: fill; hexpand: true; halign: fill; margin-top: 12; margin-bottom: 12; margin-start: 12; margin-end: 12; Label { styles [ "title-1", ] wrap: true; wrap-mode: word_char; xalign: 0; label: bind $format_source_destination( template.journey as <$DBJourney>.first-leg as <$DBLeg>.origin as <$DBPlace>.name, template.journey as <$DBJourney>.last-leg as <$DBLeg>.destination as <$DBPlace>.name ) as ; } Box { orientation: horizontal; Label { xalign: 0; hexpand: true; tooltip-text: _("Total Travel Time"); label: bind template.journey as <$DBJourney>.total-time; } Label label_last_refreshed { label: bind $format_last_refreshed(template.journey as <$DBJourney>.last-refreshed) as ; xalign: 0; } } Box box_legs { accessible-role: list; accessibility { label: _("Trip Segments"); } orientation: vertical; spacing: 12; } }; } } } Adw.StatusPage { visible: bind $is_none(template.journey) as ; vexpand: true; title: _("Choose a Trip"); icon-name: 'train-symbolic'; } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/journey_list_item.blp000066400000000000000000000061241517666454200312550ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $DBJourneyListItem: Box { orientation: vertical; spacing: 6; margin-top: 12; margin-bottom: 12; margin-start: 12; margin-end: 12; Box { orientation: horizontal; Box { orientation: vertical; hexpand: true; Box from_time_box { orientation: horizontal; $DBAltLabel from_time { orientation: horizontal; spacing: 6; halign: start; valign: start; main: bind template.journey as <$DBJourney>.first-leg as <$DBLeg>.planned-departure; alt: bind template.journey as <$DBJourney>.first-leg as <$DBLeg>.departure; } Box { valign: start; height-request: 22; // Height of the top label in the alt-label; ensures this box is centered. Separator { hexpand: true; valign: center; margin-start: 12; margin-end: 6; } Label { styles [ "caption", ] label: bind template.journey as <$DBJourney>.total-time; } Separator { hexpand: true; valign: center; margin-start: 6; margin-end: 12; } } } Label { styles [ "caption", ] halign: start; hexpand: true; margin-end: 12; ellipsize: end; label: bind template.journey as <$DBJourney>.first-leg as <$DBLeg>.origin as <$DBPlace>.name; } } Box destination_box { orientation: vertical; halign: end; hexpand: false; Adw.Bin to_time_box { valign: start; $DBAltLabel to_time { orientation: horizontal; spacing: 6; halign: start; valign: start; main: bind template.journey as <$DBJourney>.last-leg as <$DBLeg>.planned-arrival; alt: bind template.journey as <$DBJourney>.last-leg as <$DBLeg>.arrival; } } Label { styles [ "caption", ] halign: start; ellipsize: end; label: bind template.journey as <$DBJourney>.last-leg as <$DBLeg>.destination as <$DBPlace>.name; } } } Box { orientation: horizontal; spacing: 6; $DBIndicatorIcons indicators { load-factor: bind template.journey as <$DBJourney>.load-factor; late-factor: bind template.journey as <$DBJourney>.late-factor; change-platform: bind template.journey as <$DBJourney>.change-platform; is-unreachable: bind template.journey as <$DBJourney>.is-unreachable; is-cancelled: bind template.journey as <$DBJourney>.is-cancelled; } Label { styles [ "dim-label", "caption", ] ellipsize: end; halign: start; hexpand: true; label: bind template.journey as <$DBJourney>.types; } Label { halign: end; label: bind template.journey as <$DBJourney>.price as <$DBPrice>.formatted; } } } SizeGroup { mode: vertical; widgets [ from_time_box, to_time_box, ] } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/journey_store_item.blp000066400000000000000000000021771517666454200314420ustar00rootroot00000000000000using Gtk 4.0; template $DBJourneyStoreItem: Box { orientation: horizontal; hexpand: true; halign: fill; Box { orientation: vertical; margin-start: 12; margin-end: 12; margin-top: 12; margin-bottom: 12; Box { spacing: 8; Label { styles [ "numeric", "heading", ] label: bind template.journey as <$DBJourney>.first-leg as <$DBLeg>.planned-departure; } Label { ellipsize: end; label: bind template.journey as <$DBJourney>.first-leg as <$DBLeg>.origin as <$DBPlace>.name; } } Box { spacing: 8; Label { styles [ "numeric", "heading", ] label: bind template.journey as <$DBJourney>.last-leg as <$DBLeg>.planned-arrival; } Label { ellipsize: end; label: bind template.journey as <$DBJourney>.last-leg as <$DBLeg>.destination as <$DBPlace>.name; } } } Image { icon-name: 'train-symbolic'; hexpand: true; halign: end; margin-top: 12; margin-bottom: 12; margin-start: 12; margin-end: 12; } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/journeys_page.blp000066400000000000000000000037141517666454200303650ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $DBJourneysPage: Box { styles [ "journeys-page", ] orientation: vertical; vexpand: true; valign: fill; hexpand: true; halign: fill; Overlay { vexpand: true; hexpand: true; visible: bind $is_some(template.journeys-result) as ; [overlay] Revealer { halign: center; valign: start; transition-type: slide_down; reveal-child: bind template.loading-earlier; child: Adw.Bin { styles [ "overlay-spinner", "osd", ] margin-top: 12; child: Adw.Spinner {}; }; } child: Adw.BreakpointBin { width-request: 300; height-request: 300; // Note: Same height request as window Adw.Breakpoint { condition ("max-width: 372sp") setters { template.compact: true; } } child: ScrolledWindow scrolled_window { hscrollbar-policy: never; vexpand: true; edge-overshot => $handle_edge_reached() swapped; child: Adw.ClampScrollable { // follows width of search pane, adjusted for margins tightening-threshold: 400; maximum-size: 540; child: ListView list_journeys { styles [ "navigation-sidebar", ] tab-behavior: item; valign: start; model: bind template.journeys-result; }; }; }; }; [overlay] Revealer { halign: center; valign: end; transition-type: slide_up; reveal-child: bind template.loading-later; child: Adw.Bin { styles [ "overlay-spinner", "osd", ] margin-bottom: 12; child: Adw.Spinner {}; }; } } Adw.StatusPage { vexpand: true; title: _("Search for Trips"); icon-name: 'system-search-symbolic'; visible: bind $is_none(template.journeys-result) as ; } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/leg_item.blp000066400000000000000000000161671517666454200273060ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $DBLegItem: Box { styles [ "card", ] accessible-role: list_item; accessibility { labelled-by: segment_label; details: [ indicators, box_remarks, ]; } focusable: true; Box { orientation: vertical; hexpand: true; vexpand: false; margin-top: 12; margin-bottom: 12; margin-start: 12; margin-end: 12; // TODO: make stopover-like and keyboard navigable for a11y Box { orientation: horizontal; $DBAltLabel start_departure_label { valign: center; halign: start; main: bind template.leg as <$DBLeg>.planned-departure; alt: bind template.leg as <$DBLeg>.departure; } Box { orientation: vertical; Separator { orientation: vertical; vexpand: true; halign: center; margin-start: 18; margin-end: 18; } Image { icon-name: 'circle-outline-thick-symbolic'; pixel-size: 13; hexpand: false; } Separator { orientation: vertical; vexpand: true; halign: center; margin-start: 18; margin-end: 18; } } Label { styles [ "route-segment-station-start-end", ] halign: start; ellipsize: end; label: bind template.leg as <$DBLeg>.origin as <$DBPlace>.name; } $DBAltLabel { valign: center; halign: end; hexpand: true; main: bind template.leg as <$DBLeg>.planned-departure-platform; alt: bind template.leg as <$DBLeg>.departure-platform; } } Box { orientation: horizontal; Adw.Bin spacing_1 {} Separator { orientation: vertical; margin-start: 18; margin-end: 18; } Box { orientation: vertical; margin-top: 6; margin-bottom: 6; spacing: 6; Adw.WrapBox { orientation: horizontal; margin-bottom: 6; child-spacing: 12; line-spacing: 6; Label segment_label { wrap: true; wrap-mode: word_char; hexpand: false; xalign: 0; label: bind $format_train_direction( template.leg as <$DBLeg>.name, template.leg as <$DBLeg>.direction ) as ; } $DBFrequencyLabel { frequency: bind template.leg as <$DBLeg>.frequency; } } Box { orientation: horizontal; halign: fill; spacing: 6; ToggleButton stopover_button { accessibility { label: _("Show Stops"); } tooltip-text: _("Show Intermediate Stops"); hexpand: true; halign: start; styles [ "small-pill", ] child: Box { margin-start: 6; spacing: 6; Label label_num_stopovers { halign: start; // Ellipsize but not the first four characters assuming that // those could contain the amount of stops. width-chars: 4; ellipsize: end; } Image { icon-name: 'go-next-symbolic'; visible: bind stopover_button.active inverted; } Image { icon-name: 'go-down-symbolic'; visible: bind stopover_button.active; } }; } Box { halign: end; hexpand: true; spacing: 6; $DBIndicatorIcons indicators { hexpand: true; halign: end; load-factor: bind template.leg as <$DBLeg>.load-factor; late-factor: bind template.leg as <$DBLeg>.late-factor; change-platform: bind template.leg as <$DBLeg>.change-platform; is-unreachable: bind template.leg as <$DBLeg>.is-unreachable; is-cancelled: bind template.leg as <$DBLeg>.is-cancelled; } ToggleButton remarks_button { accessibility { label: _("Show Announcements"); controls: box_remarks; } styles [ "circular", ] tooltip-text: _("Show Announcements"); valign: center; halign: end; icon-name: 'dialog-information-symbolic'; } } } Revealer { vexpand: false; child: Box box_remarks { accessible-role: list; accessibility { label: _("Announcements"); } spacing: 12; margin-start: 0; margin-end: 18; margin-top: 12; margin-bottom: 12; orientation: vertical; }; reveal-child: bind remarks_button.active; transition-type: slide_up; } } } Revealer reveal_stopovers { vexpand: false; child: Box { orientation: vertical; Box box_intermediate_locations { accessible-role: list; accessibility { label: _("Stops"); } orientation: vertical; } Box { orientation: horizontal; height-request: 12; Adw.Bin spacing_2 {} Separator { orientation: vertical; margin-start: 18; margin-end: 18; } } }; reveal-child: bind stopover_button.active; transition-type: slide_up; } // TODO: make stopover-like and keyboard navigable for a11y Box { orientation: horizontal; $DBAltLabel destination_arrival_label { valign: center; halign: start; main: bind template.leg as <$DBLeg>.planned-arrival; alt: bind template.leg as <$DBLeg>.arrival; } Box { orientation: vertical; Separator { orientation: vertical; vexpand: true; halign: center; margin-start: 18; margin-end: 18; } Image { icon-name: 'circle-outline-thick-symbolic'; pixel-size: 13; hexpand: false; } Separator { orientation: vertical; vexpand: true; halign: center; margin-start: 18; margin-end: 18; } } Label { styles [ "route-segment-station-start-end", ] halign: start; ellipsize: end; label: bind template.leg as <$DBLeg>.destination as <$DBPlace>.name; } $DBAltLabel { valign: center; halign: end; hexpand: true; main: bind template.leg as <$DBLeg>.planned-arrival-platform; alt: bind template.leg as <$DBLeg>.arrival-platform; } } } } SizeGroup size_group { mode: horizontal; widgets [ start_departure_label, destination_arrival_label, spacing_1, spacing_2, ] } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/place_list_item.blp000066400000000000000000000005601517666454200306440ustar00rootroot00000000000000using Gtk 4.0; template $DBPlaceListItem: Box { orientation: horizontal; halign: fill; hexpand: true; spacing: 9; GestureClick { button: 1; exclusive: true; pressed => $handle_pressed() swapped; } Label { halign: start; hexpand: true; justify: left; ellipsize: end; label: bind template.place as <$DBPlace>.name; } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/preferences_dialog.blp000066400000000000000000000013701517666454200313270ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $DBPreferencesDialog: Adw.PreferencesDialog { search-enabled: false; Adw.PreferencesPage { title: _("General"); icon-name: 'preferences-system-symbolic'; Adw.PreferencesGroup { Adw.SwitchRow switch_delete_old { title: _("Automatically Remove Old Bookmarks"); subtitle: _("Past trips are kept only for a period of time"); } Adw.SpinRow spin_deletion_time { output => $handle_deletion_time_output() swapped; title: _("Preservation Time For Trips"); subtitle: _("For how long to retain trips after arrival"); adjustment: adj_deletion_time; } } } } Adjustment adj_deletion_time { lower: 0; upper: 48; step-increment: 1; } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/provider_list_item.blp000066400000000000000000000015521517666454200314140ustar00rootroot00000000000000using Gtk 4.0; template $DBProviderListItem: Box { accessibility { labelled-by: label_short_name; described-by: label_name; } orientation: horizontal; halign: start; spacing: 6; Image { styles [ "icon-dropshadow", "provider-icon", ] halign: start; valign: center; icon-size: large; icon-name: bind template.provider as <$DBProvider>.icon-name; } Box { orientation: vertical; Label label_short_name { styles [ "heading", ] halign: start; hexpand: true; justify: left; label: bind template.provider as <$DBProvider>.short-name; } Label label_name { styles [ "caption", ] halign: start; hexpand: true; justify: left; ellipsize: end; label: bind template.provider as <$DBProvider>.name; } } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/provider_popover.blp000066400000000000000000000012321517666454200311100ustar00rootroot00000000000000using Gtk 4.0; template $DBProviderPopover: Popover { styles [ "menu", ] width-request: 300; Box { orientation: vertical; SearchEntry entry_search { margin-start: 6; margin-end: 6; margin-top: 6; margin-bottom: 6; placeholder-text: _("Search Networks…"); input-purpose: free_form; input-hints: no_spellcheck | no_emoji; } ScrolledWindow scrolled_window { hscrollbar-policy: never; propagate-natural-height: true; vexpand: true; max-content-height: 500; ListView list_providers { styles [ "navigation-sidebar", ] } } } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/refresh_button.blp000066400000000000000000000010711517666454200305360ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $DBRefreshButton: Adw.Bin { Stack stack { transition-type: crossfade; StackPage page_button { name: 'button'; child: Button { styles [ "flat", ] clicked => $handle_refresh_clicked() swapped; Image { icon-name: 'view-refresh-symbolic'; tooltip-text: _("Refresh Trip"); } }; } StackPage page_spinner { name: 'spinner'; child: Adw.Spinner { halign: center; valign: center; }; } } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/remark_item.blp000066400000000000000000000007551517666454200300140ustar00rootroot00000000000000using Gtk 4.0; template $DBRemarkItem: Box { styles [ "dim-label", ] accessible-role: list_item; accessibility { labelled-by: announcement_label; } orientation: horizontal; focusable: true; hexpand: true; spacing: 6; Image { valign: start; margin-top: 1; icon-name: bind template.remark as <$DBRemark>.icon-name; } Label announcement_label { wrap: true; wrap-mode: word_char; label: bind template.remark as <$DBRemark>.text; } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/search_options_button.blp000066400000000000000000000017741517666454200321320ustar00rootroot00000000000000using Gtk 4.0; template $DBSearchOptionsButton: Button { accessibility { label: _("More search options"); labelled-by: label_more_options; described-by: label_extra_options; } styles [ "card", "button-card", ] clicked => $handle_clicked() swapped; tooltip-text: _("Refine Advanced Search Options"); Box { Box { orientation: vertical; spacing: 3; hexpand: true; Label label_more_options { styles [ "body", "heading", ] label: _("More Options"); halign: start; margin-top: 9; margin-start: 12; } Label label_extra_options { styles [ "caption", "dim-label", ] halign: start; margin-bottom: 9; margin-start: 12; lines: 2; ellipsize: end; wrap: true; label: bind template.extra-label; } } Image { icon-name: 'go-next-symbolic'; margin-end: 12; } } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/search_options_dialog.blp000066400000000000000000000047211517666454200320510ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $DBSearchOptionsDialog: Adw.PreferencesDialog { search-enabled: false; Adw.PreferencesPage { Adw.PreferencesGroup { Adw.ComboRow dropdown_bahncard { title: _("Discount Card"); } Adw.ActionRow { title: _("Class"); Adw.ToggleGroup toggle_group_class { notify::active => $handle_first_class() swapped; valign: center; Adw.Toggle { name: "first"; label: _("First Class"); } Adw.Toggle { name: "second"; label: _("Second Class"); } } } Adw.SwitchRow switch_bike_accessible { title: _("Bike Accessible"); } Adw.SpinRow spin_transfer_time { output => $handle_transfer_time_output() swapped; title: _("Minimum Transfer Time"); adjustment: adj_transfer_time; } Adw.SwitchRow switch_direct_only { title: _("Direct Connections Only"); } } Adw.PreferencesGroup { title: _("Modes of Transport"); Adw.WrapBox { line-spacing: 6; child-spacing: 6; justify: fill; styles [ "modes-of-transport", ] Gtk.ToggleButton toggle_national_express { label: _("Mainline Train"); // TODO: check term, alternatives: Higher-speed Train, Long-distance Train can-shrink: true; } Gtk.ToggleButton toggle_regional { label: _("Regional Train"); // TODO: check term can-shrink: true; } Gtk.ToggleButton toggle_suburban { label: _("S-Bahn Train"); // TODO: more generic term, incl. Overground and S-Bahn? can-shrink: true; } Gtk.ToggleButton toggle_bus { label: _("Bus"); can-shrink: true; } Gtk.ToggleButton toggle_ferry { label: _("Ferry"); can-shrink: true; } Gtk.ToggleButton toggle_subway { label: _("Subway"); can-shrink: true; } Gtk.ToggleButton toggle_tram { label: _("Tram"); can-shrink: true; } Gtk.ToggleButton toggle_cablecar { label: _("Cablecar"); can-shrink: true; } Gtk.ToggleButton toggle_taxi { label: _("Taxi"); can-shrink: true; } } } } } Adjustment adj_transfer_time { lower: 0; upper: 60; step-increment: 5; } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/search_page.blp000066400000000000000000000051261517666454200277530ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $DBSearchPage: Box { orientation: horizontal; hexpand: true; ScrolledWindow { hscrollbar-policy: never; child: Adw.Clamp { tightening-threshold: 376; // 376 = 400 - 2 * 12 = maximum with as sidebar - margin. maximum-size: 516; child: Box { orientation: vertical; hexpand: true; vexpand: true; spacing: 12; margin-top: 12; margin-bottom: 12; margin-start: 12; margin-end: 12; ListBox { styles [ "boxed-list", ] $DBStationEntry in_from { title: _("From"); client: bind template.client; show-swap-button: false; } $DBStationEntry in_to { hexpand: true; title: _("To"); client: bind template.client; show-swap-button: true; swap => $handle_swap() swapped; } } $DBDateTimePicker pick_date_time {} $DBSearchOptionsButton {} Button btn_search { accessibility { label: _("Search"); } styles [ "suggested-action", "list-button", ] clicked => $handle_search() swapped; margin-top: 12; margin-bottom: 12; height-request: 48; sensitive: bind $and(in_from.set, in_to.set, $not(template.searching) as ) as ; Stack stack_search_btn { transition-type: crossfade; StackPage { name: 'label'; child: Label { label: _("Search"); }; } StackPage { name: 'spinner'; child: Adw.Spinner { halign: center; valign: center; }; } } } ListBox box_journeys { accessibility { label: _("Bookmarked Trips"); } styles [ "boxed-list", ] visible: false; activate-on-single-click: true; selection-mode: none; row-activated => $handle_journeys_row_activated() swapped; } ListBox box_searches { accessibility { label: _("Bookmarked Searches"); } styles [ "boxed-list", ] visible: false; activate-on-single-click: true; selection-mode: none; row-activated => $handle_searches_row_activated() swapped; } }; }; } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/search_store_item.blp000066400000000000000000000012221517666454200312020ustar00rootroot00000000000000using Gtk 4.0; template $DBSearchStoreItem: Box { orientation: horizontal; hexpand: true; halign: fill; Box { orientation: vertical; margin-start: 12; margin-end: 12; margin-top: 12; margin-bottom: 12; Box { spacing: 8; Label { ellipsize: end; label: bind template.origin; } } Box { spacing: 8; Label { ellipsize: end; label: bind template.destination; } } } Image { icon-name: 'system-search-symbolic'; hexpand: true; halign: end; margin-top: 12; margin-bottom: 12; margin-start: 12; margin-end: 12; } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/shortcuts_dialog.blp000066400000000000000000000015251517666454200310660ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; Adw.ShortcutsDialog shortcuts_dialog { Adw.ShortcutsSection { title: _("Application"); Adw.ShortcutsItem { accelerator: 's'; title: _("Bookmark Search"); } Adw.ShortcutsItem { accelerator: 'd'; title: _("Bookmark Trip"); } Adw.ShortcutsItem { accelerator: 'r'; title: _("Reload Trip"); } } Adw.ShortcutsSection { title: _("General"); Adw.ShortcutsItem { action-name: 'window.close'; title: _("Quit"); } Adw.ShortcutsItem { action-name: 'app.shortcuts'; title: _("Show Shortcuts"); } Adw.ShortcutsItem { action-name: 'win.settings'; title: _("Show Preferences"); } Adw.ShortcutsItem { accelerator: 'F10'; title: _("Open Menu"); } } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/station_entry.blp000066400000000000000000000017641517666454200304200ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $DBStationEntry: Adw.EntryRow { input-purpose: free_form; input-hints: spellcheck | word_completion | no_emoji; Button { styles [ "flat", ] tooltip-text: _("Swap Start and Destination"); valign: center; icon-name: 'route-reverse-symbolic'; visible: bind template.show-swap-button; clicked => $handle_swapped_clicked() swapped; } EventControllerKey { key-pressed => $handle_key_pressed() swapped; } entry-activated => $handle_activated() swapped; } Popover popover { styles [ "menu", ] width-request: 250; has-arrow: false; autohide: false; can-focus: false; hexpand: true; ScrolledWindow scrolled_window { hscrollbar-policy: never; propagate-natural-height: true; vexpand: true; hexpand: true; max-content-height: 300; ListView list_completions { styles [ "navigation-sidebar", ] activate => $handle_completion_activate() swapped; } } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/time_divider.blp000066400000000000000000000003451517666454200301540ustar00rootroot00000000000000using Gtk 4.0; template $DBTimeDivider: Box { margin-start: 6; margin-end: 6; margin-top: 6; margin-bottom: 6; Label label_date { styles [ "dim-label", ] margin-start: 18; margin-end: 18; } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/transition.blp000066400000000000000000000012301517666454200276740ustar00rootroot00000000000000using Gtk 4.0; template $DBTransition: Box { accessible-role: list_item; orientation: vertical; focusable: true; spacing: 6; Box { orientation: horizontal; Image { icon-name: bind template.icon; margin-start: 63; margin-end: 12; } Label transfer_label { wrap: true; wrap-mode: word_char; label: bind template.label; } } Box destination_box { orientation: horizontal; visible: false; Image { icon-name: 'circle-outline-thick-symbolic'; pixel-size: 13; margin-start: 64; margin-end: 12; } Label destination_label { wrap: true; } } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/resources/ui/window.blp000066400000000000000000000144201517666454200270160ustar00rootroot00000000000000using Gtk 4.0; using Adw 1; template $DBWindow: Adw.ApplicationWindow { can-focus: true; title: _("Railway"); width-request: 360; height-request: 300; Adw.Breakpoint { condition ("max-width: 960sp") setters { result_view.collapsed: true; } } Adw.Breakpoint { condition ("max-width: 720sp") setters { search_view.collapsed: true; result_view.collapsed: true; } } Adw.Breakpoint { condition ("max-width: 420sp") setters { search_view.collapsed: true; result_view.collapsed: true; header_bar_details.show-title: false; } } Adw.ToastOverlay toast_overlay { Adw.NavigationSplitView search_view { min-sidebar-width: 300; max-sidebar-width: 400; sidebar-width-fraction: 0.25; sidebar: Adw.NavigationPage { title: _("Search"); Adw.ToolbarView { [top] Adw.HeaderBar { title-widget: Adw.WindowTitle { title: _("Railway"); }; MenuButton { accessibility { label: _("Select Network"); } styles [ "window-menu-button-provider", ] tooltip-text: _("Select Network"); always-show-arrow: true; popover: $DBProviderPopover provider_popover { client: bind template.client; }; Image { styles [ "icon-dropshadow", ] pixel-size: 28; height-request: 0; // Required as otherwise the header bar would be 1px too large icon-name: bind provider_popover.current_selection as <$DBProvider>.icon-name; } } [end] MenuButton { primary: true; icon-name: 'open-menu-symbolic'; menu-model: menubar; tooltip-text: _("Main Menu"); } } content: $DBSearchPage search_page { client: bind template.client; details => $handle_details() swapped; search => $handle_search_page() swapped; }; } }; content: Adw.NavigationPage { Adw.NavigationSplitView result_view { min-sidebar-width: 300; max-sidebar-width: 450; sidebar-width-fraction: 0.4; sidebar: Adw.NavigationPage { title: _("Connections"); Adw.ToolbarView { [top] Adw.HeaderBar { ToggleButton btn_bookmark_search { styles [ "bookmark-button", ] clicked => $handle_searches_store() swapped; notify::active => $handle_bookmark_button_icon() swapped; icon-name: 'bookmark-untoggled-symbolic'; tooltip-text: _("Bookmark This Search"); active: bind $has_search_stored( journeys_page.journeys-result as <$DBJourneysResult>.source, journeys_page.journeys-result as <$DBJourneysResult>.destination ) as ; visible: bind $is_some(journeys_page.journeys-result) as ; } } content: $DBJourneysPage journeys_page { client: bind template.client; select => $handle_journeys_page() swapped; }; } }; content: Adw.NavigationPage { title: _("Trip Details"); Adw.ToolbarView { width-request: 200; [top] Adw.HeaderBar header_bar_details { $DBRefreshButton btn_reload_detail { clicked => $handle_journey_reload() swapped; tooltip-text: _("Refresh This Trip"); refreshing: bind journey_detail_page.journey as <$DBJourney>.refresh-in-progress; visible: bind $is_some(journey_detail_page.journey) as ; } ToggleButton btn_bookmark_journey { styles [ "bookmark-button", ] clicked => $handle_journey_store() swapped; icon-name: 'bookmark-untoggled-symbolic'; notify::active => $handle_bookmark_button_icon() swapped; tooltip-text: _("Bookmark This Trip"); active: bind $has_journey_stored(journey_detail_page.journey) as ; visible: bind $is_some(journey_detail_page.journey) as ; } ToggleButton btn_watch_journey { styles [ "bookmark-button", ] clicked => $handle_watch_journey_store() swapped; icon-name: 'bell-outline-none-symbolic'; notify::active => $handle_watch_button_icon() swapped; tooltip-text: _("Watch this Trip"); active: bind $and( btn_watch_journey.visible, $has_journey_watched(journey_detail_page.journey) as ) as ; visible: bind $and( $is_some(journey_detail_page.journey) as , btn_bookmark_journey.active ) as ; } } content: $DBJourneyDetailPage journey_detail_page { client: bind template.client; timer: bind template.timer; show-live-box: bind btn_watch_journey.active; }; } }; } }; } } } $DBJourneysStore store_journeys { timer: bind template.timer; add => $handle_journey_store_add() swapped; remove => $handle_journey_store_remove() swapped; } $DBSearchesStore store_searches { add => $handle_searches_store_add() swapped; remove => $handle_searches_store_remove() swapped; } menu menubar { section { item { label: _("Preferences"); action: 'win.settings'; } item { label: _("Keyboard Shortcuts"); action: 'app.shortcuts'; } item { label: _("_About Railway"); action: 'win.about'; } } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/screenshots/000077500000000000000000000000001517666454200247205ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/data/screenshots/overview.png000066400000000000000000004205471517666454200273100ustar00rootroot00000000000000PNG  IHDRj8&sBIT|dtEXtSoftwaregnome-screenshot>-tEXtCreation TimeThu 23 Oct 2025 08:50:53 AM UTC@; IDATxwxSo{R:-^ 7e*"CQLA\(K*KB[Zҙ#$m\INN4Iss?B!B!B!B!B!B!B!B!"/@z^B!B̒@Q(祹oB!B!DI+t0_"B!B!B! 8A~~-!B!"A 8-,h$ !B!QTР-+րCq[^nI@!B!x B Ҷl]fmB!B_ˊ\qP~n˄B!Bǝ-綬HǁBAe;B!B!ģ$ @BA+r<en[[&B!B<.H붵`Cn aے`mY~֖ !B![0X *7Pq[!KZ.B!Bfz+mHQ畉`)s۾B!BO&C~m ׵*Pd1XZ0(Q|kB!B!eyMSi(grlv z^,K췍- )B!B<*piv n[۶ rnk!2<9-/LB!B_y0.ւ ٷmU:a-Ȑ %"`y6aB!B! tַe[هYd  2dLP5Ƞ2ٟk)ȠD!B!xd d@02:1>̄޾"l 45\xZT#kA 8/UWkJJG^/!DIwC!t=|}}JB!J^Th222n$&&9sѶm[pHm 0͍cRd C4ロY ;8sj}c`!33BOݙ(dą:FCrJB'F_IwC!D)T*FFFx啗ۻwH\H0 yurא [ = v<zc{/^|HAa 4!ȍR{ϟz̀*C+[ FBՃT/ #\PVt0䶾% B!qgzתU{zttt-1d6d[-#_g&a\V :+!{G)6VA | 8!B!xyxx1܇B0Z; xOܲwlւ !YMB!B!ɹGtt # Mlf0mi114dBYRR Bn=Z0B!B!xxxxrĉn<6 Kyp$;}g354 xc ؚɐ[!C^B!B!uuݦM/i~9Wk+6e^Lk21DK;߫TvIOOGכ7`P(P*jjuDz߶t_!N!2Bsμ@ d:(t6 TuK7ipPddd-l=Ƞh48텋 *Pt$%%#>>///J)%B!B{ zr*?iV2˰ .l+{AMŊATXwwBT*TX &2dB!B!L޻@3,TOFC1AڌDGGSJe\\\ѥquur'z:~~tCK B!8t:RSSIOOGa,7T*QTjD|:5{^јѐ=L[ 4dhPj3d:hZ<H~yX]g޼ohذA >|ѣ3W*Q *=6+밷W ; = ` |= H_/fȚ#롰 6 Z1UH߲%<?u,\v@ˁ xxTZm۷xӦM'33v\__^~%J%e/ Qt齹U ĉILL䭷F #DFFr!*Ul' ĉ9*5 Gԯ_{'77oDG@@Bpp0>?GYGΟ?ϐ!sH?L: Fs!&w"""([֛-[pAN:o kLJ:u'ˀ\c@aes-[{^fΜNppSxͷ9q$@~9_G\?,j܏ \[2!r]3` ''\VFw)3gv0;z}q<;HK#~h}c$Pt&NGPPz>XzMR~'EVxySo*O>YF̙9|}4Yd<==y1% tL8?Ŝ9d VX+ҥKg&M‘#3~bc~LbԮ]tf1>uF|ϳlr|еkv5d?_`ɒVRׇI?ʔW gݺ|4VZk( yBBQN&O`dN Nf۶MVga$ (P,U,ZJ%&M09sȌ'fj>>7qX)3LkYS{{uv7wЧ tĉLTqqqnݎ.]… :kopS[,]Dǎ! 8kס7+nlޟΝ7bl߾#GCشiC NA_ yݱt,:taذM?ŋ)[֛?4annn̘1@Ν;W̽|4۷ѣɒ[Iw- nɮ]yA Y8qҶmG {/ټ=WWW]հw~c;viӁǗ_~c/pIf̘E͛⋯ЪU;uɌh49^_BB:[se˶}#FkvJ%? o`ܾ}-+7namѾ}{-?N||]t˫ 6lܟKdɒddӳgٸqSW<^t:ǧOL&p56{&K0)PG3VFi˖P(K46Ҹ|2c~ȧ~IFرJ bcc~Hru+XC A͛KjU 0ó>}PTbŊT\k׮ѧϋTZZjѡC c2eW\K[mZ8ɉƍfÆ\mܹm*l)!,,nd@^βe˹u떩%{C8p+Ww^jԨNF M'„NZF~4^gj g< ȼ{Đ$hd^<==5k) 'Ȓ ,[t1 4, _} 7oߟMТE3fnn¿ٳ8{5jԠQ_Çpmʔ2Ue!!!Q/zz֭[R2DSqQeݽ{q&llFk'Q7IU(|9[|Sj5 eǎ?~sγfZ֬YĉܹcquYww7bc5j 4`qxT2Dl;0O Y yz=@͚ճ'Kӌf͚(W-Z4MV̙}ҥ*knΝ;_ÁX~?"JjF'vTp>pgb$rSz͛MUk[\G퍪V-aaPt5///̙EJ 5e2Gj+W 9sf3bp֭k0@g:up5j@c&&Mk65k+O#aPZ\,'sqq5^3gqqq̞= .1믿j޽0'-]d25]x≊4hP5_s^NNN9r6 7ѧO?n .---m늈dݺ ddd0udVo;x1ؿkřjl߾0ߌŪTds3 m6 ~C6l؀ pYnݺ̱ wǎ̛57:)-^ݵk7w{1\~H^x|3qTSaO=y3 ht:2EwfpwGݻ7E>aadۇiw@U0Zٟ0qdMH ԹsG/_Nx-VXūۋ[⋯\suuщd&Mĉ 003g 541׮]SNM6mޞ۳~(Nn\p7nkoDjj 8993yPuժ gȐaر :H+WuW_}synݺEh׮M *?~L=5kʗ/B ..+c[E222Xh1=z 1dWHH~gZj :waYfVx،llU5o>eMՀ;ҥ?rYN7|lV޽^ussɉdƎ?GŦMٱc͛7ի_{OvjW^rL?1ٟ0a”,Cwrk)@C~YeԷvp^E2dFG]KڵGs^^^̝M, J%gƌY޽{GS⋯9w4mڔ5)EjUØSNViԨ [٥Kg֯@HHg)WbSC?~7/_Idf~Hoh|-=} IDAT{uww76mk 3;;;3w̛'OQJ%y&OO?̎ؽ{/^^ 4bN>Cxiժ`(4bp~7Μ9˕+W ʲz]AA,\8ssqt:+V_>о}[-Ʌ 5]>lB||<&M!<<5kDv9%?fqqԭ$cǾܺu RIٲz[B 닫C`ONx睷MCs-Μ9˟&--O?̙9s,5>nqu0^}X`!_ʕ+|{/_ 6aF<<ڵ o rpp0e"Zmۦ˼7k.mla|MmٵԀWt 淣_p8-pYMЛGo AAصk~ELŋU6Eq?Bԫq?0qĿP(L_淍 0Rɲe?SUFCl_ C./J-[6{n٩ٸq$#AD{׮g+n+h4BgFkok85ka=zK$6VCٲ,\8"zi޼ ZW(J֭[!rݽ{ Ν[5cF▐@jjjύҁ4 Ew7d]ώlIrf6<8W;+Ox~ƾ}Y[Z'3!] ѝ?xd ?~i\Ν$PJCfBaSN ?5jHBB{e5鋄w ?~2/^dO-WV-MZA#__tB>e>miٽ{+VVZ)=׏۷ot_Q=B&Eh(K͒x͚5 zV͍=ӽ{7?Q* !X;v͎;xJb.9b{*nn.e˖(<$ B!BL 0<J%*QBP@Enmv_B!B!b 4X2a)dm- B!B+b32B!B!(b4X`)(6 L!B!+NF`cdB!B! T̾(`DAUDžB!Ba`)w/B!BQ !Cnv{B!B!(Z"`dmDQ-B|JIwA!#FRvJUB!BG; B!BLJB!BQd$ B!B"#!B!BR[ R!J4HOOGחtw(RZ{{BQhmB:LFFZ1IMM%55Z3vvO4!1 $s^4}Btpss!G.`~A!x|LP(zq222$ ( xxxHfBG#x@aD0-!2g-ۇpj}!0jqww/n!V 3222tt: ^yAB<~ 1Ƞ@RR{ƢBQ\IKK!B!9:`ŐAZZjn8::VY<)xz3HII!11V}CQҊ=!B:tPmZZnk[/Jq888ҢEs*ThR2ÇIJ VKYx!/v$$$ik4ߒ@ͨQF)eРTX1c{%)):u0w̘1 A;(xFC+u:ii/_{%xxsvi L#lB/11GGGS&|lbc5 >´;2efzGBBezӺukzR4תUjժmΝ`EZ ۥKXl9W\^MxT ,X{8p 9xlZXf-{޽8ܹ#:uDTdl߾nݺ~S0}G3f,.?m?a8nƙ3p祗^eyVaa7eܸOTdATT)˾JMM_hӦ5Ç3]4h+̽{ؽ{ ;bIII?~_p3j܉1hҤ1?kHOOcԬYŋKxyy2d`z^߸8~u9ǏGM!((={ЬY,}kԨ!X4x_f1a_ݻw#==?BAׯOH}ݻohi_kӦ55kִ-[r1HJJb 9$nܸIf///0~D^~y S~LTTTZΜ9ˆ #!!EcƌYtz݉/"55j?mݿ)))L<={HZ5~=/1v: "f=?ڵk&v:V\>G9>uɲ,00`gh׮?˯ V;{&NXw-?3f.88sYN 6Q|9ؿ7n:VOṮ T*J%}Yfhb|}}2d)V 233QWIwE 6V BGs`˖m\zWrj*UĈ `7M݆Ӕ5 nJͱgϞ̟ǏKLHNNaOXiWhe18;;Sv-zmbbr%ڵkKLLFC٭\+Wot;<BP2e$\]]wgutyn̜9t.GMjj ÇI*Xaxԟ.$''3f{DDDpA }Mu9uڕ>}ʕ?l~ZƦM|Jj}P(YF 4Mdff.:]NN2𜜜颳|( >!Jo>݋s)8י9s6_}y)*T 44 #&&kBHK:`@@,A[xxxaF""" @FFF_gǎW)|m/R3Z%KruڵkCݳcvBB0t`tOYڵk3k֌,t:l!22g4hK/ŽP( uRn]w_Ν;we1HZjԮ]*UiSΔ8poM6vn"" 6ԠR'6 hٲJX `S0e5B^ql:`wEmO>YtN:ر^\A%-HT32S稨潜_aa7HNNׇ2e /em$$$r|bTY?˳P8qD\]]9x `2~sg>..Ç҅_PCYÇPn]ƍ{;;;N /Rh0FQ ,ʑ:ԪU )QB_Q}< 7hӦ5<y݋cL?޽˚5kZ*6n_kvm۶ϑܹh4֛RCBйs=<`}^{777"# 3ϴhќGNiX<Ça4hP$92zHj׮ͳvgOCKDD$1^zPx{{ӿ˦ƳǏg׮?8vx3m *UZ9.),>~zَ_|PPQqi~G>p,K,ٙݴ4_cE ܹ_3e$vwx;;vUrt:J di\]]-0uny^#M4^g !zܸhѢ//ooobbbwW7o:UV%##ʗ/O߾3zz>@"""8wL 6dQ:n&11bڴ8::GSiݺZΟ@ ANѲeK7oNxx8ݛ>}r_mecrmۆ>R5TOQdffC@@y^~xJ_ KU/S-3V]/{@ xt6ѸLףH')IKZ5 ,XD޽rmzǏɉk׮3lسgW< IDAT\ERR^]P(طo?hsߟC$11f͂M !J/⌝4XӨh(Wrwi%t }x5c.\dxtԁd Fbb"۷cԨwP(|aUeQ$%%3~4iҘt{/}HOqM ,{bb"C #99L0HGqذa#gϞc8þ=} ~; 1f4-!CӮ]\eƢjiԨ)o5k+W c׮]L}||}CPlojxHJJR'pww/ ! ՠ#+uh ƪNNN||W޽3gFhheztpuu s_|: 3&#Vj]f( ^,=Pի￯ڵks.oz0,ѣoi,͛~~ `aY~P7s /a„L1L>-[ҷoǎ?_|FBBFIƥ:d IJeX]CL-ߍn Z*Tg/9 aç~ƁDs :X:B! 3kc2V.SCZq%^y%qttE9g A>>>RpwwÝx 4*逃VdV5zj>|;ws bŊYڰ2y޽X"\t7n2i8x6m 2(+[lkx"mڴa1a̙X\WҦMk/^;͛HV(4jԀ_1cFȊ,S(liիW9fJS\هtooo֭͛V EmEر\p~8~8q릡A%&> X;Uo޽{l޼,B!3]Cy0t:g1ld/R ! c3!޽h42d\wXSod {YuΟj{nUֽֽu2H%& (y<{'2s޳c''O_L̞/{vO&OOȞݓ 2'NLhh(6l2gF3j_Isn^ ̮]=z f4V>h4;Zff׫W&NB˖mul߾äJ2qJJ0aR_j)ahWWW%7CbիW3EwDD8ŕHƌիW9t0mڴ6I4)Ν;йsT<@`aaWpv6,]8!H Tz|}?čT03~ڸq3Z1cF+ ѯ|D˖m(>ӧ>t؞@ƍ(lmm9y49sfCuΝmCf͚qf|||P-⋚GĨ=hՑzŐښV3bUz=>@BDi2Аϟ#GQn8qo-]B|ҥK'=ʕ+F֖(T/_T'UdʔBXXaaۏpL矫\dXoNi#**R6oT*ߧ!˫}Qj-kĔ) R3#0nD*W5̶*Ŏhk<_7bjtړg|RYZjZ <Ǝ@ŊݻKWK="lن аacV}_C&q&snƍ{W>\~=6֭[OVm7oa-Ҿ{cFwmаaС :"}0g7!EB!>ui>qɑ#;EQʾ;...,]qe؃IJe_$ϟnjXj9!!!?)^υ xf_3t:|[ݻ \SB7cƯlٲK%޹ 2pttL&]hh(k֬c„t[|yfży^ߎlݺ58!B$_:A> 83yeDæM[Ț5+G@6ZƎC˖mu6 W3Y玍eԨб㷌9^J2{L@ҥ+ݗ-[Vm^?h8q_ݜ/PLiȐWW 2񱳴ʊSF5V\;u4˖VDэD]iҤ۶`!Fm3coԨQ'Nr~]8uNNN 8\ru̙ Rٝ>ɴi5irDC XfZч/pM]N͚_RzmWMN]xҎ{dgbbbN''G=I+Al8sdU dݔ)So̜9>}zb2:uR?""J+(VXm_pUzJ*T(…oR?ay})U$իW5s8F+㘛T&4Wy3gNz#GQԵs玴jՆT*͚}bJL)V(5kdϞ Yƨ,F+N&Mps@2} :vl~'&&-[x"T*J(A%tӧOUT#I;<{YУGϩ鰲k.̟3?r+WDmۚrmdb3ɩSgXt!vvvʕZjoBKs$k㸻gV3q52e*|[njx Zm@7{odIXX;wbĈQ̙~~)uu:ptt@RnJҒ]u5/eT֩wFqA,Y 9ݻ/DDD3g sǸe&** XmqO%ѵkD-[={bF Kwe[V_h FV'sf7 4!J`n߾:^x{1x@ƍ=gZjALL /ŋ_:Ѷs.d̘񽿖0lH:u@XX:B RD!Dʱyflڴ縸PädO*;;7wy3\\>H0鱱Iɑ#;666)֬Y;cƌ`ٲDFF$ݲeRlYBCC={.˖=[ #͛7S\\\ylz?t+?/>>/_!s&s4s)dB!B!RB!Bb$ B!B#!B!B 4!B!"HA!B!)F B!B!H1hB!B!D@B!B!RB!Bb$ B!BcBrٹsgΜLJ r].]D:I>}jwQ!Bqe! ٳ3g}TرXʖ-C,YΉ'9saFNfMlb)"HVXŕ+W`mۚͺu8x^#';vHJs?z c%\x ZMreҥ [Jܹ5UVcoRpb.]FcIjvFuBGhpqqI.!҈/|S o4g<={.˖- 880"7nhǏ/LEQ|97nD|@ʕhР>΀s|FcE)U$FcFJ ?ҦMk\t`ȟ?? {)naNf(7uuN>cTfkVZgƚSxqV^CddI|EͷOZȖ̓ݻaeeő#GXvcƌ ?.\ceb߾3s"sf7|V*M~mԾ=1111 DLL,+Vb„L8l?~#R2mV˂ W!2bhҧOȑ fѢӿmB!>)eA!DiZfϞNCoMn ѣz {\\\prrJ9ٽO)LŊwR5nШ] w{gΜ\re"(('Oвe ,-O'իWUU*w ᑍP>  Uz^zŮ]Һu+;=Kqw?+ߛbEDDp)Qzy;v͛ի"gΜf?3&Mի>>qwlrѣGɓ'UʂCXx)=ztCVsa:uvv-#GeI}$Bu;BӧdȐ޽{*RlD߽OBCC)_QaР 4T.\؋ݻЯWx% (@qttՕ5M)7'66ǧ9{,UV%w\ۓ%KjժÇtJS!::XsT*Q{q6{{{̓8;FYXX`ii !!!;w-|oF"ذaZ%']:[WWϕ7o^fU 2$E۶mBɈ!HeJd%& 6HO0^qMz=z^IʚNɓiѢyS4oTViҤqۈLJKr)TPZ-zlٲOMy>\|/XRN2eʘ3eHTT$gΜ@8::&so~mcNmR^]Dž}R ᄆr)VZM`++Jn]qsq8v&sf7eEbt:g IDAT3˗3ϓN!i"İr:JFmKKK6oZE\9)RH;w7/O<ɺ!DEEckkƺv6믛=kDGGpҕ7"##I.km5jh+vu2efO̓'7ʕCШQC^ʞ={`o|- Xx!MIh᣸r C+A(*WDƌhР>JƜ9^+ǎgϞӨDGڀ>|$:RJҹsGe_xx8٘cccMxxx رxJ`Ĉaɚ&Dr0~DN>Kl>|[""-@BUְee{f k7(VXm%tԨ,X)S&bggǎ[GJFcEXX1!j4JPpɉ'O䦵un4+QP:993*7oQ,T*'6 /jQxQʗ/ͧQq_7..xyyٳUX~nf͚ɬY3i?nn(\؋VZҨQ6nL>1*1cǎn:&RbccCΜ9RcƌG\hȿY c2g6M0thq˗N˖m'?gϞ&9t?3gsMBCC?;Ohhʵaaa<~?K>1bCgm?h,XD@@=%!HEZ֤,00Ф'qʕ3$ܶmQرc+;vlUܭ[7qddܸqK.?JcO<KVS%JtT*eʔȑ#ܿ={ɑ#ѴO,٤-%KPB|FdGGK._B z>Gvv̙2eJsҧO2B${u/Pf{6 r3\~K:-`͚uFejJEXaDM9wM?\%00%ԩSo҂C3g=%S'Wuپ}'Oa- &GܸqgΜ>{ I>=s\r++KgAժm۶h\xyL΂y`iiKy*{{; (@^J(VXet\& qqIxu7yQVVkזYPLΝ;Gpp(66rΕ&o6Swu~dĈԫV}z$Jŗ_~sπv|?N=Zè;^ނ 4.?;v4e˶hCx&oq?eK BTT1s,Μ9˙3gMѿ_K !eɒ!C%?c 斉aÆ$v/]Dȕ+'qSI2eʔ#%ZSVJeJ,a4?!QQQ۷?ǏjqttP|ԪUdX}9rQѣ9x0ǏS@$'K,Iu6e_re9s:W^cɒC֬Yiذ͛7C,_G@^iS˗Э[O߾} #Ϛ5kߩ?_|Q~y:NopR2l`n޼ŝ;w7na4ƍl۶/Ott4NN˗ZjQn׉ eѢ%'~mۆ^uqqfn|lOۛ`ҥ-3JYxlG!ܹر7n닕Idf:&9U .fZ_AHH(sk()2$ ( ğU]vs?^'[l)S ! 3.Vt%ooo~qIF|;c'ش&(#G1f7;w~~0r=f̘g6헏e~gEʶ?ߗ͛J5(l:u:{ 6T*ʖ-chx%zfΜLc~~ߧX~#ӦM&cƌ$f֬[><} Æ4IVBp]޽˦Mӧ'ZLv(,0$UI&,,q&pap Ν;].}LZ|/4*qI@åK9|}7$g;B999Ѻh!'Fúu~Rh޽Q]VKn=O}o\ 777:th>=~]ܾsS—_ގG)+#`Ctt4'NmTRȘ1#&=G4lXkkkvSރ<{r:2h 7q=&A֭GJвtr@˗Lv!""N:0tpl׮4i҈…޸Ɔ M ҥ\2sE}/RJȑl{ W&L;::Uogҗ&8s$ȠVׯ2ӓoZY4N```ݍVquu:3zOFΟ@?i~[=zիwj#.g\'ё6qZ0@óg>P|9T*ٲe˫ׯߐ@B!>Kjyf+ۑ?kL4hk֬ޞgϞon Ogh hޒsz-Q$œgѫW2gόW{(_Q޽d4O?}Nԫא*Uj`bT*ԯCJsj4 >IuśQ[xoϞ3TV-*^tӼy :Y~ĻI#j׮eR>}z5Ku}tޛ kDwҍ%K64 VVVo L!ކ{4t::t044ϟ]DnTX'N*ƎϥK)P ~~ر/^*2ѢEdܜիΝ;3V,[;=3W^3QΙ3'9rIuYls|]T鏝'8} 9sLGll,oV׬YKLL J ""7WT,R2*U0LHӦM1㿕/i۶ʕ!((d䌕M4Jv *[&wܡi(Poʒ"mJ!ćO} V{ڵ#[*.eښ7+ÇZ^͛oSB9DC moܱlݺ-[困%[lx{׏M6SzUJ.6? @ҥʶ?{еk=0Xn=֭7[n:)<8{$hќcNp,<<Ç߽woRӛ#FsYN֬Yŧ:!xzȓ'RVPA?ҥ;]L.3KKKeg!xRl5wUbyƍ٨,cƌ̟?OODM.G4Y09:u`<~!)^͚#R&?SNtAu4Y=%vd˖Yf$)wFݺu6lH;k֬mj525aaaA~}hm&/jҹswОuqB|ݻW!f̘J7o 3\t95"4 NNN4 !D6U 6668;;Sp!ԩ{9s`e۷{cKg'*osbz`ϦMy!ھO)P W''G *Hxb'KNt)UFa֬[}퍕%4oޔ/Mn惎"E yos=&C (QzRH?߶?*!bkkĉ9w<;vX料eФIC|o:Sx1֮]͛ ӓomGڵ9r;C|̥~L,:׸ſ p 8&Nܶ^GKLL4a)2WIzJ6d>wdߧ7naggT*%IƴZٌ "**hYRj!9Z-3 aڵ۟GdB$FcU@#߇.CkM}+S ~~~݅7ʐ!CjwABsS B^^Xv&HhB!B$o"!B!B45u`Q>}Vٶ˫ ݻw8ɘ1c9~oNdT֭ma&SLԯ_-+K45h5ݻwADGGvz?ӧFjoZBuKW\L2A)j7k׮| B!B/ʔ)I.evٸq dɒ899ʙ3gɟ?/J0{O?"sf7bbby-%**ۚ39w:|KΜ9xěWC&N>^%+8OON>C}=z{d)!B!ć&Nۓ;w.rER%фEpQαc'pttE=z<%<=;w.G iڴ ۷0[7<<2`@?B 嗵6l0/_jch<,9-[V_{B!=IY[[FB* IDAT JPAY`ԥ=Y`$B!" , :/^.]L*T8p0ImxF> 3fԩ9{l#%ebΝ9`2f B!iQ_HHV%**jժp 5jTgڴ鄄`oooXn߾PzUez芗W!vňc5رBϑ BR!B!Ұ4h8t(G@斉~AnaDʕ`AŊW5G^Fmuh\2-WZU+̉'Yj ׯ`)$vB!Y 4xyT*lmmquuQ O>֭;ܺu]v+tzvmh>||#d zxu֡tRjՖ+W!K,)BB!BL 4dʔ9wA4+fϞi4Ot1c@nj5aaohBQmA3fO=z\) ٳg8qY~C7g<֯`իWz*ׯ__DD'aa̜9S~ QKs._yRVxqz111^qu/Ѻo:B!}-,,jqvNʽB|@e F5w@ 2|E-4i̽{5k.Zm ӧd-.Ȑ?> 菕%fŋl˗|DGG3mtJf@5jHME?'K,ի`ʔ)ŠAqvvVzƍnٳ;GV^V:Wڵ[yNGqfu+V,…M/]ܹȖ-+@\Z3`@YfIB!IPTNhhvv-!'*44H-i1ٺu3gfXXXPh^xɚ5k9#k,:t++ SLRn'NG f/_3gΰ{lڴY^nMI[FΝa_Kן.\ 0aaϟ@rDTTnŊPURYy~e^| @L>u+W7o>dBpvv!,,oC ̙tL: NGreYĽ{(Z( {Lٺqi$\]]Xx^^Lz:uyZ;Ç2dM|C ௿߆3f ӧ7~$88ށƆ ҺuyLAA`M0tB"cj k=}FXX82iȄ9~yGĉcÆM˖-'66GǗDѼr?9gk]* ǝ;XXXHX<`<DAA@ ' A:~-ϞEgn RTyɋ(rrrܤ1l ׿OL^3Q*=0a+pq(Q8:cr}v~OOO,,x}2L RIٲe([ɾԩEŹy7nK:tg7a+ΝXZ*̊;q_~Rҹs'֭@HH  Μ9õk}n s;@R ȟ?M6emRܷ  e{Ls5t:F#4ڠR%s=qqqKKTA>|Zd≌|Nbb"J[[d29 ~Ȅq~֖… sL^;2e KGN4A^ș3g}7|*wA||ӦMv\x];w$T'@Jr*V\&Mt,_4B)T{lٲ8;;,-xxs&0p͐4=?~¯ @(VeR3HJ7no)׮]ގ͛ӻwTGѺu;6o@"j_QQQ4m=9s Xҟ[nHV_ҭ7Y]ڵ5SjLoO#eڴﳻ*oemlڴv؆;Omҥm~۽}?{J'ӧa,ZRiI&M߿ɵ2""?9^91c&7HΖ-[`YzWѳgonݺM\lٲ)^Yqv66ZC xzvv?С}4;wbapN0=zoi/6zXbcXOf;vq&gNad!z=e̙ 2x罿GÞ=xR~e 4m6?~ҩSW(U޽Gǎ]XI2IHHe֔/_y`bBBx4BYd+CVmH˖_*ՁH PŢ5ZtF? nM44  ƍp@n@0.X0绐-dٲ>|VܯXb W 28fΜGBB<еk1d_rsgzu '&&llliܸ!}~eA޷W%!!ӵktfޫWOrŦM[x1qr*WatL$drMML=ˋa|34a"?ڴig.hѢ>TZҥRa֭ҮW\vSP`AfΜƉ'ؼy+ԫWcGcee*H2m رc'II*ׯ#qKHH7r=PBu֖ر͛r[63f_ZZ|uW jӦ@ѠTZq!Eǎ{qUS{ё r]>yeǎ^VKNL̙38, VK߿ 鯳*KsbbboƎM…z>z_ߡ\t{{;:whuǍs,5kV7IS 77WΞ=G5Đ𚕕ժUO2O>=gϞE 2888PF5Μ9V VAJwCoP 0$_RH؜9;;3a8FIXX8ۧ`cc@Ó'OQ(Ν+mll4h%,,N@u6mLӦ3|l`St!KMֿ|˖|eK"""OթS+VN:Κ5kҽ^ȸqck7n"C8nz 8u77W߿o֭*=z#F c ^7ɓg@t:%K_gqѣGq8d,YFLk NNٲee֬XYY;k͚5EڵkK~Yp.xxxPV-]q*T=;w.6m… A" 1cF#ͮӽ{7֯ȵkÇqttvX[[Ӫ՗4jPy抻nnnO…Mz;^HFC˖_мys+B/n]]]ټy=} .a&VXI@L'[6Cթ64+T(Ϯ]?s.^3)X ˖exۋk?˗GXppwbee3ZJ֭'obhkk+MU\.lٲ\$i;_>I'gJNX"dz  />>!xm+++ 4Ff-Z" ȓ'WWJ,zBNsN<͘1޽ դ'QXX!!^cӦj9rx2%Jxzz兗vvvܽ{g(QQQ(Ji[^^^wILLiƌ3~XʥKH9[bEϧ=AժU8u / ȳgTR'IY8诧|Uƌ臗՗OƍR*U*YIccc9yoscz4?ѫAr>DAx>+WDJb柰vZ~ڵXvɺ;XvZ* 6WWjԨ͛7ᇕ3* o!L999 Yo_~e]?q<%rss#29{ // OۦM+vɐP IDATԩi߾j*gΜ̙s&Z1cFtӦz'OCppToرQ:OڸqCQ?&CurwwKhZVFC 0cٲL=11/^˗/>ˌSYdF!&&o-;f>4ĉXv=k֬tO3f$ LwJKhbFF1p`?Lҟd"VdԨt:/s)r9ƍ6cY2?%Qd 駥2cǎfٲ̙3$+gf=oZdF F? bbQKxx@b`"##3=Q} oEDɀ PX4/Ѣ3ihp?h$hUB   dhHJJBRVz>e8P0^'>L%JҬy/'TRbyƎVݕ/^ |5;ի3`ܸ TJ5]z ٸq=ocĈa)znFƍ:72|rJ9''7ۜݻJ~˗7wqr΅w7  |>АL||HfhtjbccjR'''DQHN#))(trr)GldRv3{lf̘Nɒ%Xl9SΐGJLL@.믻P*?~2m;w0jV緔e޺wayXY);v<ׯ>>i׮}m BNCի|883jX֭[p̛7 %m#223g 緔SҨQ #m1ʖ-×_A} 74h4t:,,,(X\;d2ɉ{V񈏏1Z~]z\X1  CiҤ)˗`~h111\ܹSzn-ZJ*дiS5ݲ+WdaAǎÌׯk!j-[SLFʕ\2Z'O 6`P( %_| 6$}/ymCA1@?&h4-ZD7fmmMu6 V+ZJ2!?H…cǎ] :޽ؿTV2 ++ eZnٮ];Ѽysuu0y)=Η/ϞEd->>o펣 I/^￟'O?wBJMzMlܸ3gS_xx*kooڵsBA!c*`͐"/\h4Zi,×Uxd5*X;7ȑ?p!ZG2dxB **۶m',,(V aÌ>^2\rnd0PTT*nݺ͑#G2ӥ7}.>>ٽ{GOu:wFz[. y9>>ΡCGh3 cI y@HJKZn?\!66V*M6hӦ'OG̚57CX26m:H) M9r7o1q:voΌ> AAAr.ѐU^_ogϾjUFȑ?x۶mYz…)Uʔ)ٳ0a2NTV+Wҳg_  #66'OsUo WחWX%ɗ//^^FTRFunݺP(TVx.\͛YtNNNA ױ4d!''GX:JEի;3f6-VL:ѣql۶jժ7oϟ=+V[ LNYZUfΜ&SLO)8r7:}{Ӿ}[ƌcތaDeX"ĉSi:ujO}O׭.Wn=zŋZ gΜZؐ;w.F-~Z >}7nRj,>rA\@ nN D@C7 w|/]͛bL޽{yڵȑ?s'WWW\]]9|(o$$? 99d; 6q79&!<%$>>RիDEEIPf4zuO?sY@CzN:uݻcž~A̖WA^z7L&]{sZA;%}z"bhj1g8;ĉSAzTTݻpTu03#Zm}xorLB61x0״ZOY&7W.[A|WWʖ-c'Xx)6TVҥKqQBC͡ f8`@A/。\:bN 8@Ch4^~}2֭TOx II**U V&طo?͚5AI -ÇeQlܸ9Cu3*JZgcc '279&! &@ߓܹ |WO0y+ifz ˸ZFR!˱\f_`A>t:VZLbb8`j2' }jժx|z)V'/J\|'OSl)]S 4|\|[n93(T II*9sZ&$da؄#%J7y|rX[[8ytZo+իWJ @bEɟ?Zn_SVu8z(*U\9 RΝ(\ aa\z-% ;:NZ4 jqrr Bn_\A> rprrZMBB̰\'3Zgx,7iX/\#N0t:žhPRUs'Uօ AXXXH]dwk[FFFk#&((Deʔg* IIIS' EFF; ߵZ-Zxlmm}WUAށxE.KßߤMTZV"d@_,h44cN"N d|U\]]}<~++% jXYYIU*әfׯ'5!'x ~S@A RСC]ypbΟ?/..ڵ!Ciiyӯ__<==ٻw#Ga2T*CŅYҥKfRr#k֬eȐa[$ a. AFV%!!{{;f ›2bc㰱AӡP(n(YZdN-22ݻwSBy֭Jٻw[ʵo3(쨮 ~XN޼[(坩]&111$&&r!&NOiw˖-C6m9q$}ւ;ԩZ*ʕ̙3=z]dLJ",,+{{; 7|M yXp*Κ5m;r!>w! :DlllDA!FJtV\.7`Y ʢiNֻm[f^ZY?sJșΝ;Oҟ#kڴ ?p<ݳ1sMU&j4/ >٪S6%Kz2|PjԨc1bL2)뷗'^^/_D6mڜ*2yxqT v͛G*|L9nfZӧOt Ғ…Р]m~6y^VMʕ+>*2pǐ!iݺVV?~JŤIt̘1+W2a8D|y)T =bҤ|8;pElF!)s=ƏD^=[6͚5e˖;ݻ5jH(P ?7bu8ӬYfyd!An~\'3Zgx,7iX/\#NgT*bccINVI4 yAHL0 0 wqD%od+u9AVH dIozwIBCҩS4נA}L'OYrϟ'..|ҺnJ*2o Hx K,%(VV4hА~z RTXѣGHJJBr3;h4jbbbȗ/{_Nt4gA0w࠿f yJ@$ Eb-:FcI6`XՒDRRh@Eo( C!e9hpdr,-2AA)D!@ 99̮oq!:\] bW˵kiժY%DRlʗ/U]./ƙ2 GEcQH0 ._m۶I5kNc׮_طx{WE_lzjL8'O1c4ѯ_LKϟ?Gs3=JE|{I IDATuM)J ,@.Ǒ#0z8J(;v=ޞ-6O:puu&mذ ?eTXi?-t򭔘Gn" |޽G@4i|U*7n$$$P,Cv8fh0Hٻ@dM^%?CA!h%$$лwҥ!!!L8X ܊lٲwww~}}ד[7涟?NhCFMz]cGO0adkf;vիrui]RЫWwj׮x1oǔ)Ӱ^:Y}cҥYzomq=zSN`]%Axg~w]ˋR ];coo;ٳ/[nJ5Rfeg `ڻ!:cUDx?^# vMtt4?;;;@?}ei޼=۶כΝ;мyS5j΁ԩ `Ŋ>Y'@F Fjر ڶmc XêUqtt]O8xC_ %1}*TVC8wo8@Cz{[hV=ޥH@pRr6Fޝ(_ĉx9V*smΝ;)V(jՠY/8u {u~rLz],  w 5j(ZjQ\rդ''Gmlyyɓ'XZZ$''Ν;7رZ˱u&F~#صg*T(ϊ8q\.LFͩ[zss.ǧ:/eTZo;S?L\Aw+88 1{xݑֵk !,Zx7n(Yp Γ?~kƍHMhѢ%o|]~!..^9qtt`֬iE;::2cT_<~;v{ammW_CSzoӓU+s  JPE\JRqSgM\<|ɓrL̙'t wi4矷 |Y_A07VVV͛'s'ɓ+5jT{{~ě LAAgSc.]:r9zB`1m)]Sڴi7ᇕťQRnz:w`#M=oо}tAӦMرcљ=1pRd(Q!x{d9sb?+:;;aZ|7uhԨ!ÆV>sNO<Ʊ~} %r*ݻ+ܸq⌟2jժ)3\gAеnݎH\[mvW)K}Pc"gyȩqz |(PT֫T*zrr2‚͛׿03g1\74P,[޽{P(Lܹ)ۊ ryxx,"S#ADD[leE̸ܹq$7nܤA&{jժ,-ZЇǧ[^PHgϞiXۻ$eʔ˓qN^6lXǓ'O8~$ݻfe-[&erlA4s!)Ο\A'!!!&뒓y)"N>͛8|xӠs玄>dժ)АN&UZ  }H/{3tTo77Wd24bzBC"psK;QeFUVB3-|7ݺd= _?S^/e7wzٰa:%G «ΝܹsQlܹÚ5k[29.GN.ʆ)V+3Z=}G,~ |l||*q kSh4/_x E&숋w-_r 6`!8.rg۷DRe7|NLTTO3՛!hZ4t?99 SRERgH!V~oPgWNѢEZ`.2fxM[[[Y-h0nXhT 8m]O$ΟCv? ڱ}N-Z7tP]@˖KSRVZKKK&LL߾qvvٿmk:ujlՕifFݺs'ٳҢE3^ III[.]:ЁzС#>|43fDEE1rXbbb۷W5nDJ%qqqR^5g5gӦ-evFѢE8q$11HCҒ;w.޽Ǹq9sZ68ooo^NGŊR ]bb"aa>-ݰ!_|8qgwbeešC9|(&g947u:jFFt/x]^0 @HP(P(XXX ɤ_V5aȮGc7o,̙sؼ'r9͚5aԨRWWW/_h߾3|Ukwɶ?9O>o3g‚-1r0rgΜPBt>ˎvZۋ+С3M4&O/BCrbbbׯ75jd,!ܺupn: '\fK.3ܹL޼y>|(Rtܑ~cN;]˟??:cŊU4jԀcGeK]!;]d`W?!W.-[ܹ hV?{{ߥ\'3Zgx,7iX/\#NM.ZFRaii=XZZyWS0Zd5ƒFTJ F|cQ?wuDFFJs 4ZhHNN&66|fjϞ=> c$$$*@zj5899r‰'_#ud|7}ʒ BzILL-mBBL&{wbҲ: $*@bѼXF觡Qou 4j$%%aa[ 9W||o`'h!Ȏ@Ç,::g"pssҜ 9n!\BBNN+7[[lmmx,hlllrt:]8e# ||. YĬ FFAՒ N\3}qssEP5:BƢ8̜?   d n|'Zӑh$~prr$))IN(mAAwaM]oǿ $bZ q:W{QGU{kUVn]ѺPdLH#J ex>s͹'7s9!dDZ\.?bNNyT"~?   d,hHFA) k%d..NTh4dqc?AZGAA̗ M ++ŬP(h4 FwM#$AA!diLH`o/ z$$htZďTzGAȂ Iz6ܑj وtGڰ&z[  ~d VEբPdU7,PKq!%iAAA2Wh07@.V\.GKh?BRAAA2GYCqXTgբ`6>>k׮Sfw?W^O|]6{֭+666>a  a[JN:0t zꁻ{Q~7?L\j)dG+V`A :rRzUwwP^]  5j,&M5ڗMK/:`bŒ_իN%VeӦ|y;i@~Fxy3YnxxtZѼxz6eo zyoܸI9Bz.Oڴi{2LS޽Gy"I2dȈ~ޤuJŬY^4lؔύ7QԸY&űqfVXMV-(V̝K.sUZ-%Kã )WZbG.K.d2K >|ҥKC^>Ņr?|bŊѴicd2,'F3 YK2bܹCϞ)]Al3ٴivvv}IFe8::XڵٻWFFn+C`mޠ ZhF=^sKL8{V^عsJ2y]\\l@B2t]@߸733gRf bbby̸e9r?0 774wmfϞIpssӳ,XOپgXGƍMJ}i b8sҥ8w<:={N.?qeԩM߾}غuC=nݦ[(JNqBt:ԀAA/_yCt؞f|.B`=~:xLťXJGhƌIfMEf„ggAAAt^|Y6uC6jT* vS&_wmj [[[Cݺuw찂= ps+3֘S@""q%({A>.N_u2(T`>w<F C\Ύ[N7˗b9_ o^G|eԭ[o&_sW̓Pӿg4m̘1 Je_|щ#GqaW͹ssϟ2lHyٺuk1|(<<ӪU[[0PNJppޛfRW5jClٲm;P~#?gϞ3*C?n͚Hu3^GSNӣGi@6ٰaZ֨ֆo޼m;PNw'}C-\/իXƍ/}7޽{ҭ[C͙1c[?M87wN 0gϞRT̜9u=i֬˗BfԮa4BH,!DGG#Q*zcN=&_J'KѢhjbess>cB&{Ӑq$ 7Jez{ڟS?D87m eʔfԨ+W^ɿYj aԬYJS+pwwOV~piωӳg7ṃG0a ѷO0a|4a[ngQ >'Ndrʗ/GժU Aԭ[ܹ =z<61YG3kÆ Nܹss~ (\0WeϞ}L:w)FҥZ|Qf ֬YATT˖f=  ~M>MJ׮QT,_{2Y[P;| @hٲ9/l:88섙NNNFuUC^t)=>TZ={QP!M"ݸtڃ;wRtdھgZj!(Q8,_gAhXo߉ԯ_w^ܸqݻgسgVVV̚5CjL/X0Fy{6ظq3͛7F(QLѿ_C&=:66;v1nh7o*y 6l'''mT*suLͣe˶;-]4 }7YJW}:u[Qnny/ʗ/.^dBO~T"<}(Br]GC|={' ЩSaݺ9|(k֬)/%Jr4XXXPrE~i+yR\Ybccٷo?*\ "A#T*b\kq}:w(KO2|\pvv:([ )O>)Ɠ'O#G&;CdwOOƌlVH)9nݔlaZmv>5OXX(..hذ]tNם-AH,=~~wݻZ@4hANVwPBVX옧OYt >+2eJs5^zsssJ(:+掅W^3ꔺzJLwyɓ'M4e̜9ݻw`ggg:S#N>WaaaatMw:Ark׮3{orT\cN ..Vq7npνT&nhܹs;w}EK_:tұQQ~q%/^Q`Jz}͚ul߾h߽{w>ǏdʥX[ۘ|mRoa׮OXl%qҾWi*_ҢkΜ:u}ӫWJ*I``? 333AAAܽkJ}_ʲF >cGakkƍ?E0]c= IDAT;/_70J+VciiI˖EвesOq`gg˚5ɛב֭[ /^KSGbN嗽L6/BBBW#((]|MϞݙ8q%JAn߾VVVэ~GBBŋµkY`1'矷c SNgİ|*Z'.{Nꫯz3rXs~z""O#LaYxx43/رsT)^K.ŦMٻvL{bZ - ԩSgX`q"qޘlbwdܸoؼy+5k`Æ5Ɇoܸ{mk׮OU&^^6l*kWJf*JV^S^&LɛבuV2[<=0g=kk+V\ճg7ѣߢqvvfÆz3tHXjy 7nȴiS8pOzvI&w\=yV&L+ qvvf5DFF2pP&NDb,[8vϘ?ߋcNлw_-Ν;2ft7!CҫW/_I^_={fL뵱a;vC]0~7)R+JyڷoGll,={ZuHˋӏ Ѿ1cbjrL}D ~6כM (ǐPt:t:51-+gg:5P\Y,Y󡡡9۷pҹJI[`mm33dsD,!~ 14¤aBhh(:}_UmowڅC8q<+ڷJOfM2egϞoХKg ի8p(%eK}b7}~E\\Z%!A-i0hPn޼3{{g0gl *+g֬1kׁ>jy}b ܼy]ҸqCKRq?4m8W,xq&M:EΦRh֬%Zv2vh؞={Yt9TVgo*sI.]ʤIwMfSNsAQXX7JV-g'?I1٢ Bv EwJEm P* yimD? ďIOL&l2ܼyAm eРaܺu;;VIYݿL5)իפdžT\1W(YvS~Cʕ:u2SN:Ν =6̗q& '-_.lTXO?-#[Ç~&=~$ڵ]>S|Rlذ&Ceرݻ^}0 d9NQc9w<6BO3g.

SvڍNʕ+R>Z͵kץc@зo?bbbԯ__~Õ+W`Ir{{{x%Q_ll)R$gfgwwwX"a 3\\\jkcWWW\.5?ի(IׯVVkIOՃ~oFA>Bj*رEѥK'5kcfDV}fs̗'=bb}DD<oh9;;P(QGjZ *3V!""M}vE3gxAn޼ @2aY.\dߩQ*U; @&Mr쒋c yGG~Wiĉ}>YXXr.,, W~VͭЇf͙#A`ccB]RQԀ Hxi^oD.O×ďIO3oGSNӣGi@6ٰa4 !!KWЬY+kȜ9s%z9SNiӖԫאGI޽OϦɒ 2oߠNJ,AMٴiؼy+mvNtޛOJwЅUtJ)Wѣǥ}k֬cǮN,fIBI%!Q(79sfI.KKK.]LyP̜ڵ?c͚R'@bXt1+Vd2ԩͲeKE'^ڲjr:wQQbnV\Lc*AAZjDZ?qaiG3o#;v ,ر|݋rQnݎ˹Faذp<,,,Xj ޽hѢ?9MӦe~qAw!m5j8gzsذa!VaϞ}L8?<&Me9xzzQo <ǞBΝã}Bѭ[WuK_GS iܸ!Ƒ/256665#BBBN).YTI/_:^[Ԥ7mmm>|(Æ !"":w6qx&NLi\ ) Br]Gƍi޼)}@ődĽ~;IiҤṱ[y3336oހ[ 2pСCqvvjeCˆC3g.vqll,;vbܸ4o_Dq?dÆM;cN""" ߗ{u#""u6F Qppk;J/L&!. BNܾ}'zUT"!!j5*U4:zjFd2;< Rh۶5Ν'<<MslQZ +WٳF=z8VbrJܹsVKʕ…K<{tڙ=z̅ Ik   9hQkaaatޛ_EЭ[f5kđ#Ǹ{C``k   .]2ڵ?c|/֮uɛבΝ;5nj- ::VZзضmO5Kvʕ+˰aC0[s,XO?-ϕ+Wiܸ|B&233&ӻw_C ڊWw̞=FK;4k֊ 6Ҽr'~˼y hӦz{S߿Oh֬^^sȑclNС#سg;Cȝ 9{G]v=_|с-Z3o4 `"ᣌĉѣ7[eڴDx~Rio0UƂ8z .f̘]N ˨[D.:3 su:7OZ 9d0%::[9YhȞ,]%4`#$-]o~i'O?0a8߃=3gΖw8+ժU{k/^qF8X$r,\8;#6nf͚^ %G{/Bgff&%,nr ~gc/^̙XG2˜3f͚o=]HW=R*cܸ14mڄcGhLyc]?EBpJ;p_iBŽN\9"[Mdˉ%::kkc(s)"~?YO7˦(Q1cFp15kNʕ:t0ZիW>wŋZ4oܨظqѾyO  3y4ٳ3޽"""Xf7zr>LF|pqq6d00|{ǏOSOBʪUk޽77BqM6n)K'_BHK ŪUk}sVXy{9wvNhZr9:+++?$!!AܙHxLppVVV2i{ZNe4~_ɷn. IDAT̜E0{ pwwo'x^PXQFϔ)S133GnΝ:u`ܸ <G={=חYЦM{J*Iz"EТE3FM\\UTfq&|E&͍mܸ%JX_eʔiiw{G%8<[Y8AA/2e[tQdžo`Ojhݺ%#} J9Õp+ h\r҂93g3G?mʔo;wFP~=)j9Ǐdɦ;)6mۘ6m yZVMhJŤISyЏB W}\":WifcyfzS 1$$mw ~j44 ZFK\\JW"_.C``* hCR%~ @΂ ",, W'h4jps+<~EdJYG}#8hX, /[;"""9sɓ{BB^h(Q&A&1"޽G=_n3;IuiZ-yYhժ-/^?>7֮wؤձc'4i*ZOOwe`iiɿ9{֛1`ש)...I ʕkps+Ē% 7z>,,#sBvmTM;J6eXT5^oכ6ѦKШOD$bDC\ :N8 `eeJѣXXX耵 "W|Z-j¥++Kd2@L<>D||23~A!}_jmyen޼!!o}Y"##qu`aaApp3fܿ%Kd^2ܹ HHH`!&Njd(J&N “p$:r/_2{Z#һwO+T%K{Up=\\qttLL;qo镬ё>}z5cNAVQG٢77Z-yP(h4^Fբi 27Y8}#O d2j kkCCuoo$g Bf ϳk9{صի/}ѱF幸83mdT*y:2iTCزey^S<{ *U@ǎW6m&Ϟ=端˝;ppMԪU?HXXVVVTTN:`m GA2Kx~mV!NկNDD$-Z4'_|_R;ӧ| *WLre([jժ>|DzMj8u4[@.SLi^x3wS~k]^ŋq-֯߈5˗?rA_=̙s3rĈ,\_ĸq1~-ٳggi9 YN<{_~%M?u @ׯ+M3|,R0Z'ykGVI%DHWsHOl44ItF C}2q#B4ğܨqhaFď  dX=y'?oATTt)]|޽±c9v8vvv՝ʕ+ѩS{r4hZ~3 zw$((/ҠA}<+V_zZ||pߔ/_O_~ZQPTokkر#Ά u6zJz5?Ǐ.>$|xjUr!d2ZdР( lن\.TT^-ũOPLTW\Yz\zn>~i9.] BHHU}}P|4[nfx00`jR r%n&l&}s}>D Bvjٶgt:-;v"M իWzhߝ;wSh(R0w[R@JN C<޼y'AFI%n?q;v˗}4h&R\vy5iiu uGߝN{煜'$9D>"~A!#Īxm;qR8CCb~~~&7n BAhhRLLNll,uoƧ;jnY/w4$m0&ޗK5㇨';ď  bQ~ZuV xciiҥLEfܺuW1j8l C(eϗϙ;wxvZuvի &44g53fӽ޸'wgqE*Vgϟ' ˖HӲouԁ;w?ټy+}2yܦM9u vvteҒӧҬҤIKMC֜.ǽ S FSLjbg1!  dG :p/g?27n4Ń~cooGh۶ n9/^C?j5Q*pQ޽eԩMǎ_8бc]ƭ[wɟ?m۶L2 gg'N>gjѡo`gggxJTAL)ONNNL2o²e+v:ݻ)%~q&;vrNL޼oR(ǧrqM*| "ݯɎr\Gd׆`j  dT:':-OCR L6%KP䰷7#ƍJj&`5C^Vܜ֭[ѺuTt< ϫ\< zLոqC~a63gԩ3Ғ0}T<==R-Ot%KfuY&u4$nC|»HrHb} Bv`MBv nTt w4)[묭Gm+@ ujȓ*U*{4t:݋R~]t鄃CFrJ%**]uM8vPP*"GÇfhP$njd {Z2A!+5X[RYKq#X~hX@FL ؟sYhH<}m 'S;wn;`HHH@ѼNҡCՒAt8BcAfff,XO5a8jժ={hԩS…ݲXn=ũPS46>>u6p1b(W,#F DR*͛ra"(^J:&,YJs4ij֮]ѣGWSZeF,ǡjIW^έH|[$gmz3*d3h%04RQ :}pxI3<'i^o7%CBB3xCBB* ,,,P(sANբV'GTTjuJRpu6Qѱcgc9saϞl6t)[;H C&00pszܾ;3/ɓ',[}ITT̙#EyNF^V%66\|>H>VnE'o33~Zwʹ(!f m×eVY^GR}cUT0muttDP ˱zwbR-tŐd1&iO;I$GC?Dd]N&ɰQbc:JE||<666ȏwCzSTlݺePf 4-'OdǎjRbhР4m4nOO"**?rPv-M/hK…ٰaZ")T[K~}>>9s4WU1OHH`==ڵkPTIZn?Is?RҥKq1_wHS䂃cGGG LNɝ;oa׮L60~8ڶ=4m@ݙvUX$c(F}2MQ 2' kr stt|^Q ^Zod!UvxZFK7pCA 2H*wrr*UzǏDTP<==hذVE ˰WhOH_F&{/ӾM[@?AɒmjԨ!DEEꊛ+ᷤ}&&&rhp1:vlbp'''~޼ߩZu/,/ٱ{v)`fo ]i\Hq @pwwĉ8q77W)/+W"$xυ_>uKz 7p5[cMn/'[$|,lmm`';;,,Sh00$$$$KLAlrTb4寜"3g)۶m};6mZ[d2ڵw]v܅Nj**U-q6YYYQnmuB~: 䇅$G7eǎL0 G$֭+-[L"E [l>}FٲeSwLL 7n"*JE:u޺ݻ^jr?ܽ{OF%_K5ۿ-Xj}?|Ν#:u iq/_RJR` !11BCC)TK\jԨNbb"ӧd=I."6SNۧW!0pOFaܸxyL:j;_l/j:v狨5|Uv?N#OQpHG :#G4:SY~'>œw0AVL&#[6 n l܉CբT*3ua⥬]NzfZzAbb_誝VVV(QRǗiԨnn/lCި=/kSM1 Too/n/_^݋~z/ۭ8t0ӧ] mڴoIuJŐ!SdIt6:?p9FÈ,zǤ:E/x U| vc\3DNng ȭd2%Fb!*Ƚ~1̪3W/r242)R)/ 4$Rף$B!<=q^4Yf 6޽;Eٮ]իEٵkohȝ;7W^rR``ԩSOO*WZ%Jq{re&;;;t:=x ƍd2rΕ5Sp! J*~V>իפ"EnҐ oߟ͛x{{$ڔ|ˈh#ѐ268SRHWrggg4 opP*f),_% f zB /cooB@!ɤ^ ͓'Q)ʢRNSִT"6mښ J3<( )tkHd2ʔ)Vm1X7aѦ\]]-ȑ# c#䦻wfgHtp Vȑ?1cZ W3g#F !ˤi\J3g>qqR̙DEP*T`8} ʙrFrh}|$|BI9yv/5"adZ)e+fK!oW5ky2R)h4hZt:t?  R)O&':w7+ QQ*?'DnnnlقGrYJyN˧6X&V*Kz/mʖ--[رc>}\F޼R P(ʕP5j^"|xWU(8|~h_s5Ҷ...僟_"##1tWW7Μ9ڵ4"-unݺȑ?н{7j֬NF Yv=ÇKoeYԫW_~z ''G,YN@" |dd2K8yU2$?͋b|Q 㨣M1g.3IOK ObMd2>* /;lFݷKYl |ln߾ 9}4 Gn)RwWRݮNڌF>i^!AAA2MAAAA_& 4ATƍ0*TJo}wX|%UԤIL2wwBBZ}…ӡՈ  dx!=3d2۶m|``AXƍ1et=JN]xo?hܸZTRVM/M,E AA+ ~ժ\x;wQJt?fZ[O IDAT/dB3UЦM+V\RdLƀR% Z,Y8  fxW,X=JLL, 9a͡C?7o-;-[6o;K3_4k֊VZrgϱrR *(m~9ӶmkΘu_n2ŴIٝѣ3;g|}sjt:=|`_mT@߿͚c|E[n2}LΝBaM8;x{{qf5ԭ[ÇJGFgʔi8q 53dHAAAAH*ÇN'^OF رc'z^*߶m;ժU΢c! <:ujb >}E5kѸq#֯_M<ga4n܈իӿ_,X̼y RmF!,&*Ku}Ŋtސ<Ľ{[3 ` (h=ztE&{| ݻёgҤݤ_@sVZٿVZ-+V,aٲEDDf٩AAAAR@ƍ~?ٳg>|͛dr6O׮R@~իa<{L״iZh_lllXxI_症ڵkҧOO6mڂ`HqOjͽ>}qLBCɞݓy| Nlٲᑍlٲaoob6mޞq~h"/_i&qUT/o^?zFg5;wPRE/_^͛ȑ^o    |ڲTӓ*U*KC vރc \Jٲe,ʖ-wEӧϰjjժ/-&MٳbbbR`035\\^ G(XE9-E^ʕ*Ubٲe77/_oRnjun]9чypfK   B`ּy3FMLL wIzsT*ӧ'uN)T^-'NammM2N^je/DwVVViO_Rv-ӧϰbjڷ~zy   §#K>QN8M6N^"9{EٳS'Wx1"#%- DGG4Ѳeslʭ[qqq̟ڵkZ$X~:["x ^,(Z.g1#**.\ۚzΟG6-&B``֮]!-vIN]  dښƍ?cY+V|Zo;kW0K.'4`ɴm*tҙ͛`ٲ ĦM[^͗_~Aɒ%ҥ;˖eV:uFa)ȑ?peN<(V4#*U4w16mZcr*Oaa*TU4O4i*aa79v2#oJrez/  dɡ-Z4cժ54ku*3yx,X…KpwwХ7w@@eLY`14mڄ^tLƬYXb۶m'2>.ԬYݻnQLҔ+WjuժUAzݟ 1z=<ӧϤG>(T^y^ёyf3cot 45[ B͜9޽zy.xxxdtAAAxKO^f,O"X?_p{8hFш^Gh>^cZfҤA T*l˓˗`\4($JWjATT*9sHQ+VKll,r|f~Tn݊ Oߌn s.( T*4,$?7I'I$KܹQ@~oѫW??~AA-@ 6  B  رŰ Ɯ9ȟ? MAA @   AT -իסW~\.o֬6l !!V>goݻPJMiw/2.]N <|("K@ JOq# ?9$ |O?BN] }FEEtr`ׯHnw{4]LJϚ5+XfӧOFTзwǧqJ%jդxb鲿m۶3fOԨQٳg0vh>>{S鉋 ݺ/'h߾7nfϞ)֯\ի_.Çԩz=G˩Sߣt۷ PTPq~DN!0U6lDvӣG7ʕ+K鸹qt9 &O\t93 " -]/m[J~t5J={0 +sm֯w`0СCg5kB_0mL ʅ i%_׳tr&LJ*/|rܹ᣸|TVXQƏw+++lll7Ù6m]сZjҫWwӴzv O9LYVt؁/h˶mY`~(QcGir9*ʢޞ5kVHǎ_ܬZNO@??www_5kqllٜ.]޽H7o͌SXd9W\ۋ!CdeVpJ,AN,ҥ+عsOD7ݻwVƌطoͩSٳ/Dއ={qB ftSҝ BAAԩ3ԬYCz]TI k ܝ;w)T BSt)Ο/_?cA oɄ iӦk֬O^,Z`,-$0?[nX 6t#6nxZlΊKh޼)'N~iر!CXz9U0lH+!&&S3r029Nh!C}]7ȟ?sfDAxqqqjraQ3gN)_ٽ;Lfz>>3J:o?=K`)qUʔ)kiܸ:} @ygϕ1{bbbpss[.,[/n!5wUJre3)4lll(V(3fLAALdt3Ի~̟qӢE3>WoJӧz<޽g)аu_ݟI| /^N6$wޓ ^^9NNCthZJ%rh^T/r+Vq~Dp V\C׮=Y|3`N9rd'[6wBCoHQ>|IXM""nz˭[ ` 11ϛ |gΜذaMF7A2ԢE2 +8::>m AR3 c9?rңG7b *J..oHu ryc888X :tweRZjb[7H#F n恗rP*TVUЦM;oI߾RƒlŊU,XVZPFu|}s[$M3$=hPBCoвes4iLnoOAPZ-2~ Lӧݻ{"qrrzjϟ3VZC>ҼM||< ,f~o|>___իR$11{slll޺G  Bzkٲ97oӲe[(Y&*/\F g!hZdnJ(ɘ9sT?&&ڵX߿EaJSC1l(jn`U|Et}_>>,]Oyoo/*V"?:z4DʃP(f~RÃŋ0so@ʕ;wk;wdҤ)ܽ{9sfK{F7[leΜQ\Y~aEO2eJS\YDI[oGθqݻ?..δjՂjժQ[֭͘1Xd .d==zcd2GN]oބIdܸ5k6~۝e؟pp]]]quuRS6+yU2$?͋b|Q 㨣/41ϣZ-ZT\\+Wc888rji3gܹsq9Ξ=G-ǏS:kW0 ֭Qv-ra1t?$|+V7 Z͒%/pssCxSp!8Dbb"ɓ'׺ZGp SLăw;w>[aQS=r#G`xNcM8pyYA>UYr A<ӧOiѢ5Epڵ}{[5 t-8ӿ<==Xt9gϞLOjK*Vewaڵ3+V,#&&I9[>s7kwi[-Z4]N>@ҥܹ i&m05]wqk) (WKC _ÇO͚ɗ/:'ܼ'CA :aeeEVV'"? `0< f̟? ihΞ='48D28~`B8\9aO}аaS֭tZlΒ%,^666)>GO8`/}_BVa|=ȑwp܋'͉ڷz/__ NSlܸ5o͑Qɵkԯ_ٳgTgE0 !88%KIe+VT)SJ*ao^^#(^h<:@,'€:u:11e+]&Xn=o<=nRF۶ m/]x{{=E=Lfd\A%ߝʕx~e~],]_\)d= +wSc='NR(̞=g=_mc޼\pIc BV) ZF\\ݻw_>X[[]:Go#"6Ç`ذ,YB*߾}QQѴkx޽HM'OX1$z-+++J* @ժUtر#G;Ν/ Lhd2J%? ,A>R?@T,1|D_ș3gZ*`Cqy{.]Q矨^*ϛr+ z1:wBǎhڴ)SO9RZ/3;pbQrOA˖-x1AAԩ#J"66++pppӲe -p%~iLzRxx8AAy NNL65DzSNyijSx1i9OEAA&C '~ɓdX[QyQ. #4 v 6O8#q<}`1Ddd# BtS]̝;OPiց7BܹsT^;;[SL7ȶڰpbt:-gР \\\Ͽ 9@֭yK4+Aǎ_VZÇ>}&ӧd2؇ /DEEkSqU³g1agg+Mc 鉝;_`J(i522R:ƃ777\\\#us 66wwTeGC=AX /4WhN^o豷C~ [[[\qpGPHAt Z-qqjTh)iooL 0$ϐgVK(d=zpss{+AS) 2ؐ`0`ccB@ 1q d -XYfP(888<*a .e ޞ_9ź=;w.F-x+WfHnEر[7ЬY+:v_}>׮]ʕ?7^.Bd@lxEB9`4"%!k{oWԺ BѶmk\\\,֩j_ĹsGn|(-Z]͕N|rs)RA0 ԩ3I I?H nʕKiذiW\ԩ3'NNNWʕlٲ.]`0СCg5kB_re?~r*U8{vS`raʥ3tw]WbŊ2~8||Xr^$sر([4 _k~ƍILPnmR޽H7o͌SXd9W\ۋ!C$',&ӧܹ (ԨQٙ 61g|[$wNNL F+WiTh OnRjm΂ر-TL2ϏF᧟~a=88Ӽy3z\.e˶ܹs# ̐d2F\>u4UE 4{7,?4)IhHTAAUV ZhFIuɓ([4NNNRY͚9p]|L&|rP2eJa} ԟFGDfϞ}[*ޑ'C K>|K. =z= ӓS'akkܹ2d7UС#ȝ;]|#ՙ7o!C"gΜ̞=aFs6lmmy ݻR̟;jY~_@.]HF 17zN8ɌS6maC 8YQ??رNDLxmۚsf8&LB4eq~q;vkH>}f֨Q*U*[yg;zS:N^OKj |Dr>"gΜe9s携 <0vj;ի1bX_h 7[>u!!S.]' KpTΝ 0X|1W;'yѣG7rg5>}zRTIc.\J2ٴi @6m}֜=JըU;v vᑍʕgu3իWϯ#/^bÆMRAOc^{BT%xbݻdfj-"d L:;;yi,̒%'z9B֑0 d,^Jkkkt:+u+#tnn)9DDf_:]|^+߽{O}Sػw?w۷pu4T'G۸qU=j5`RTIlٲ뛛˗Pz57oJ``={3;vid2oC,''4=uqqf)7m',J,atR$&&r *c Bfve&N„ ppp椛&`ZeuA>}֌X %ʕa* ЌpwwSܹsYhnnniLjP<[(U.V W.:u'f-_7P~}CȺ^vvTX!COros}ҥKk֬J4#Gv)Fm8sfEYT*DI-Zm 66#F3qƌeQg4lX_^^UFZ999z#lRܹ+ԫWjժ w>~Ri\RE<ʗ/ǵkי82(roB.zn<<⡢UܹsA Uc%{})iA>~Ewn6mZ3gyF='=zxw˒%˘9s}>}ժhZNxى{w[,Kw!^:IbE9A*;s,ŋL7fǎ]ܼιs祺mۚ ž}ӵfJR+R0*Ocܿ9sfѾT^=AFѢEp?(""nSp! iݻ={Rl)'/666DFKZ߿^O&|ӳgakkCiC_kyIGhxݠE,b˧@FTFÆ}#oߑ 0jT*>}JYx 6ԩSg d28gҤ)4kւwjshh(wAƌ?Dg06mycYzg9r0u_`-[QL4Eq1cSLs.hq})A^hڴ9cZ+J9>Lƞ={:u:AAC z^zrd2,Yhܹ޽-Hӓoro _@N>hѣG[EXw4j ]z$'ן)VEyŘ4i[=yb0ذa8t03fiӦ=+WrFBY#7oƙ3gٹs7-Z4+&LDp^nc˖ҿtz(- 4{={mڴy|Ld&+IHľԒPK|ZKU{vUکעOB"$vbODLIL23?FFFb !>뾒s7cssK=i:Rj:v@||<ܿ?'\ !xiZ6m͒6w LwM\̛7oY#'''T*h4ug1bK,eΜ7os`ƌij9r4˗_>?`΀[wT*Q={$_>'FIvxiӦPD bcc-uhZ&M’% (^8s? d,WǰaCHJJj*m&?5k.=SO߿>666L6#ǰ|*lll>|%5^T2gLoݐ7n0lؗ$%%c0_.cǎzg_^yyyybY}|J3yDΝ˨XgĈz777.]ĬYsݻ?j 2dzzzPr%NX cŔgM}IB2"Z%K%믛W^goyzt?~,k֬cҤ)`/pwwPɑ+[^T,!MVU*{- 4!D.ȇve͚uS`AڴiͰaGO:ݜzumaaa˅x{{ƏKRqpav+)Z(Ӧ}jzW L: 2nܘ  cgC! R!򂔔Tz= lfF&سgAA{^ )T*qdʯ 6r]bccYh ={xߥP((TnVA4z^Ͽ^bϞ=T7ڵ7oVkptt|~iH[L&밷0RRR串B(hBԳgoT*J(wߍoooFYEɒ%8Ѡ?cƌERѵ/:gذDDܦAK=x}i&ND([ /NM4h0T^ÇeZ6..ƍY[| >>>w0fb;I!?DB^`Br`y )ȫr`uB!B!F B!B!6hB!B!D@B!B!B!Bm$ B!Bl#!B!Bdn@Vǚ8t#I)<+RxTRCIR*3,B!y&kb 5tS9h4hVGEW_B!Da{H*J"S8pȀ64'>քB!xmoO*0%!Fs 6!B!^[z0!dBdͪt3B!ʵcM;$7 Bw(*2HyAXX8K,%88d=UTgTX; ϟgР/h߾zUVcXJ.I~}^3fd8s9s,/$42ntҙVZZs.s%( 7O^h4z[B<-O1h4;QҿdRz묭MPK,S@Z7Ѿ,XT֯߀/ʕ}l߾˗dXѨի'{DQ: M6S\9*Uh޽V\pO%4h]vbJM'N2v8VվӦرcח"Eÿ⧟V@TT7KV˗/\v!C;0?.\`9(JZx08+'O$66~8F%W 4&Ma[)V(cǎʁ=C֭7w mAAP;|3NԩXgp LFx-MLݺu^)!rH 4ǚdv ! +@W_Sj}\]],U*˻Rf GP(8|( x FU~EP߿ >|)LLL,MBB"?ʕҥKVիWhժsK~q>^^E3g&66$. IDAT#t҅.]:Ӷm;~III8poGڵx㍪9r{]IFxVa҅\rKsf%KzӷooKu+ HA]1!U*YU^+Wp) .̥Kҹs'뱱A|hRiMRYe28|07xpV- ||Js!pt4|ݼy[[[ . >|6@Z't>þر5zGKp **77gnӱcV4iªU~:=H:-A5kP+ǎ{m IIIL:GCFo[t:={^߇ݏɐ,݋[VÁ{ G%22pj׮Ԡx>zX5kBʕr9BdKWX`LKYY9bzYnݒ]ЫW_6n%\ - 4!^[?< 7bӦҠUQAA=FUV)R8Kǻw%Ȑ&_|4k0&J(ΥKV .]Lٲet,)S0rؕgOyݶe+>>DGkylBB"`eh1`/(bbb)Q:=X(*&|kʶs_Xl))ԩS/F0a'ҷ]jVc K.LlÇ0qxgggF ?6mѣhذiK+_/./|lڴVVӭGϴ DGGSd' >d}=Or!9>dzq㯖׭Zݍe|j`0p:tx/K s}f͚2w%z %88Ɩz=oՐ… Ӿ}{RR,Z?O?钁 B=I鰷س#)))KmK6l@۶noР>ui.))ɒT*Y?ƍڵ_~Yba02<.ȑcXb+l0 0wwwf̘ ,b? }֗zrE&OjUѣ ^\z'C}-.\ˆC)R端Fm۟ٽt̞eժe 2O?6m_S/|L!re+ٳǭ[Y28Ku}p"##9uGͨQ_Ѩ[0~Ve˗/Oǎ]ػw_$7Y L&8:?(@rrƀBRR2Gkf7KGJezmZ -]&MQx=  dHs|ǨS'<;wsLuQTZ K:ѿªUkh޼)ݻ>>wUeVҥKgvoܹs ӷooKPj \pђ:?v[z&r5yDڵ{`|Q7Qnn- :ٲ%-߱ZQj׮e_E0{4l؀[NZ~/K 4lB>K-cg"h5q>X▾kb=t~A988RU(ڵ <<ˁZ1˖-ñcLjN+^/NNN899QnvEV->VH_ȨQ_YR)-7V/ˬYs0a=q$Z|}F*,,A2x4m᳔_d͚566{Ѣ^/||etMEGҽѸԯ_J_ 1n\}h߿o1Ж/_>LxoLH=՟nERѢEsǃauk̞= pV}NNNiz%!ȥ6l?۷CK$",UVʕ+Z g+`ccCp bbbppRJԨQݪ';vDf503ǠACi]lm<7zqö[3ۏܾɆ ?[I8pURJrYڶ};qUJ*q*rU_ٔy/^D[nܸV#nⵗ+ӧW 3g)Rnnnuy󦖬"OOz!sX B!^L^=k[O?;<:_e<ˢBxBX? l'$!!n)׶mkƎRdΜO+p5ƍdŊ%d&f̝;ŋQb ψ#-e5kBRR+Wܹ?Rb ȠASyӧx2/^Zo^\j|r| -u+߿oGVV}{&VZX|}d6֥L3mQ=Xl,@ ޽}8+Z,z}BZ}}xVǫI/Bj36VTi^JV(QwRiT%qq0_׭]qWlщFVsd3wd biS)SXnYʎRMſ ?tz$](_EބoڸRB!yݔx)FnfHgU~;ꗱchSgvObR&>u ,=h?{T UqR2qBn.*~Ujgg'[?;(10+ P]MDߖS:&lQOa WQ-量wK!B!^h/EȸߵLKi%{T'`?QL2 nFR]MNuKVc`| cӢV4׽;a["tz#S(_F}B!yHAd;o7h$=!I Id&+;R7@'nљ7~ VwVC7\2=nZ}Y.XaQ$B!HAd;'[%_4r`pm*(xe7͇S$=6 ˘M*P9ˠYeí>Ԇx8Ӹ;Ι3iJEO c B!yHAdz]-KgN ;ρ 'e^7h=g&(jFаF(On/cڱwL@%O FB"OY!B!ss^*.JlT Ά-?5B"Y}RTC];NgzNSKC2vN>"S.GMM6L5wB!B2{.:Eui+L[TPwF6{E.}쟹V%F!VH֧}2LL& )))$$$P׫nfr J(B, ZJBPPo~ѨZ ÃŘn1vSwҭ!B!Bd 4!B!"HA!B!F B!B!6hB!B!D@B!B!MN7 3J٧B(+y۷+WСC{ݺEKr*^^T+IIIO^uQ\~ݪ\…e J!reu9 !D^b-BCRRS@ШVNGϞ}W.!08{c_(P>wBreD:hB$A!ΝIHH`4k*GT*=+y`?Hvm1tڝ֭[ҥKg~'ӬYOXyv$ڵ/Bd\9FCUOUN7A! 6`ڴ)˗/ _[KJJ RI͚5.aUf굸Ҷmk pDm};;x6B!^\PU)9 !DW";<:ãT**ܭ[KݺoZ 6jp~i V-'"""CnbɒeuT\)S&g#e˕ ^  5Q,]'U;>￟7ߌ&M>JbE3>nhfΜΝܹ_VBd\h꫖ETWBp _Pnǖ۲%h>cԮ]eȀf!/ +{v!rm$A!^h HNӮ][m&\|uGZ PV=\^@{8 h$5Jy-^-dX?bH|}puWnh|UM|s+5{b͙nc~.0Oگԯ/z-W{-y*)xvki^ABF#T<[`d28p(UVcsh4ZnM̮].;wneҤ h4v܊w j5˗dzZ-ṣqs Ȣڵkup:DPP0ǏY?~<_ߚ(ŵk͛a9ݔ'9s6̟?;ts`߾,[؜nJ;UJh)/S*YPdB7k\֭{8DN]}r m۶fQ(J̙iY ..˺ӿgo7z :(`0pQ"#vZV[>ʕ+@PP0EzpR( 4mژǃhʙ3gٻ/hӦ5RL&WeMh1gOW.nEЦM{Ə+j 6qЮT\+Ċ?mv݋dIoz <4Ǐ1qdP|9DJ ni3gYb~5-Z4im"+vMBBWYV9ݜ"ogaaD# K:ѽEpPȀB( 8(^TIZjtcD#5R !C̳f9nժgE WoMXSHa/?[ZVZFllaѢ%FUl̔)9sY/\UV3d V^AÆ k_i8??_N  i3 <eݍܸq{h|{Qv-*Uȹs3l+_OjzZG޽hmہOiD߿-4i.]dUYݤ={jSNcggG0q [Az\~enN{b=/"%%t0 ;w2"g u}K^fF#?$3fh̙eI_9} `5eTjڴi 3,i\]]2>s4JsnEx{ӸqsFVKÆSv&00 b˖u' e='~|FJnԩӖ@reYh˗/zusM9r=hdO|9slRR8::1v/_t 22UV?9]Ή'3MgٳgS?v۷ٽ{ODR1iˍjJ*2uzZ~'NV-_zWWW||J믛3PjeJ%'Nٹs7?&C666=C8~<#PbWp" .&42;wf޼^;pppk2e*;w+l "8ϫ`(Jqv$@Ws+9} ÇD|xDb <[j <ƅ ;xݶ/\/h`0X !쥼J2" J{EieO87۷%uǧ4ڽ^?UH@66nXynz666n_d)Fyݻ?,\I˓y3c,&N>3gɰ>22ߧw/rҳTPs\Za)&OHǎ7|fӦ%Y:\@ǎѤ9g8wgΜ͖ /3 <7$&&RI:>bŊQfu#ϭt{{'E`1#$$[{e 6BAҧOO֬YKJJSۘdzP!wKO0+ιs8}4޽{,]?!Cׯźzs;;k޽hz=ڵe͚3lBAbŊ7(_&_LreRe?ȁ֭_ </T*u7(Qx׿iӆL2!CfQh-uǏghܹ#;w|j5ƍfܸљnW(|a>K===2=.@Nө>>YzU X~cm+{-};ZnI-gʥO<9eA :(RIA!r3߰GFF=mE%0wd2Q;7n@[yxcw!&Nx{{3jWOrXn=II: |qVN3רY¥KxzaրL3\zkWsQ~ ٶm+W.gV"#eM899ҵkW? u>}9sfr=zR^=V^IH NFoeȄHLL 1Qdž ȑc"+{5uVk 6$&&puINNzO3w}{{{ʕ+CDDY "##z*:i!O B$&&`o1e8h4[[[OrwMR%$$k׮1dPV^\㱱kZ6C}||^,ƍO/ŋ{rJq|i/)¼ys3-۩SGhҤ#22oo OE>-ȧר[(JU{|d ,`ɨHSV-qppÓڵkT*T"F2߮]J%8:?i}yկ_-[gĈF-[a[s]رc.R .7 m۶y)J5T>PVqi} <*-ۡN7BO Bٙ z>ölm3O.Yқyr5J,iI]>pcǎ#!!իf:?.fx7ifN<ڵ)X7ưa#Xr Rz2f:%\@6T*͚5x$+^8/˞=2lmVT( 2JThyVk2mcz9?uҤIcvŋ2`tuuwmv%^o7IY ~ir:]"%J`_?/s.gΜd2?ylNǥK(Y$iPGP w{e~mq&7n$>>ÇKY@fSW!Ȝ"H,!!Ngui*9Hq}KʹFj*TZŪ Sl.^ .f8nLL 7?KP&8tڶmCb3t+WsMJ(~._;Y'0Îk j,33f~~8p-[Ng9#%)ڵ?RE\zSիXqQF>KfifDe1\p899f(%_]6ޏƍ0hР> ;wrʗ/ ?BCCyppd2Bҥpt<$"@B+Wf L&N8AzsSN[ܾI%1a·ĉ?~.]:d}sFDfO׮]Grr =>~y{{U;PU?&MD8E۸q_S;w`˖9s=>ڵlٲqd˹NJ^YA `HLfϞȧ2;;;<==1 j r0^LRRFoIҥ(SƇ'N0gMu6:tho&dBVo_mFB\N BCtDbcFᏈ "œVZ_M\\exyyƂI/`aԩS#>>իgCVv5ڧj?h,Y%Fޟ2o|OR iS~4gQpa<<<,7'gʔ:ӳe|"+{\\< 3._wGo kJf׻U0-M,7[leF6kIBHFB<3^DLL II* wd2ixRRRBRQp!B^uFd4!*hB-\\\xdgR2A"7Rr,B1X@!B!F B!B!6m B<B!yU 4H A%!B!D o<w"A!^ &( ߺB!=L!tMiFcBWBfSIA!B f0b00 Hx (iA* Jd8!BK@C,Tz=j &ӧBכh$%%dth4C^6NkP5ԨQ#@Yk(JnXt1\ǨQcI7l؈5k~hQ/uaÆPjLX'֯@&M}ׯݿQnm_ܹ9sfwVaܹkkSӴ i4瑏/_᧟uf޽Ǯ]Oa qtL:ɓ'o^tt4}ŋ8Bg <Iҥ=z|;7sl4 #}ׄBL!~O8pqq&[wW~˖ͅXBBBh4V3mކ]+)СC8x 6BߏM[ ^vdQpA*U@F,N^drVZm, ?//OÔ)ׯO,&&͛PrET*UTJ*F={^F޼y,s;v[EФI]DDDEf„<{ٳp=0pssSkoohL6lfT\Ad;jժ{غuE2Iɭ7nC*0b=cٽ{`cٳ*Uӧ&9ȑÙ:u:~ږ… ѩS'Ο?m !Y]bG.S[f|ӼY@v]e3/3_m4MgN|M>BNT:hPʉzb'://%t:9,leMXXE ȟ?_F7C!R#_FѠR^{kcc]рyq}q3ƻk>xbh4b4T-)kk+eb!B!ޮLh03d7E!H LHA!Bw(Ӝ'E-B!B[& B!B_&K Wo["-ݻ+eܸ1  6l_MDDeʔOxxxnK.zZ=%Ot*OBvdx,xd#{/_he/lv IDAT~\~=/^D_-[6 _HkBvdX9BdDBRpp0gw}KPPK.OP[>6HԮ]ƍ[pI~x 0g<>5Çe愅n T&:>ݻƍ;8::ѪU ,z=7o̙DEEQ`:thGŒ{;wJtߑ+v֭-cmmͪURƱcǕ.]aSh:-Z/;Ӿ}["##K6mL^=ި7~FNnٲ/޻m? ^̙^[9Ocf͚F͚5ިmB!x3vvvlڴܹs/-SXQNb3VV)R]Or*ӦMX>w7y9B!ޑ,hv:}G+ˎ?ŋDEEѭ[/֞K.g^,KjU\"""ڵ뉖IkQ $$u6п@~m;ulll)]TՙFM:7nrD!-sJqp={+ɑÃ5+^ 7oHhh({OƍxyyһwOB's49siڴ1u+bgg{p"o8r~ڒX/_~(;uB.ݕ B@@& УG7{ŊXT\ɓ'qOߨxj5}z  iʔ)]OB!Djݺw3gNCզ>Nhd|Q]~a|P#GsW "Cd@C``hРo|r4l0e"E JRz1{BF}K`` &MfT\uB!Hׯaժelق{s4ש۷7:}NŊ0jp5k֧n!oG 4<5` BL>Y/_^Dx4jԌ5?]>}&6[^OjUӔ(00ɓQ@~ʕ+,ի/Zi&s a#GŅիӬYm?2o6lXCXXSLΝgy̝;_ 4UAڵgqwwKF!Bd9sP\YKXr.22RؓRnnTn9rJ>mL4^SG.HyܹsWT*۶%޻21eʔFVsm<<<7o3}^F e˖ ;s۶)P ?ϟѥK7hذSNg7W8ͨQcTR wwwht?(ǵWѥKwD7jԷʱj ^B}@ݻ躟ߨI 4ٙN rc8àAC qxxxo~VZU3/N޽ cذ=z72~w׭HDD5jTSz!F2dvE~Xh>*Uڵ\rz)1OX 4xyb\kvbbbN@řŋL|۶ z}/^ܢyꚝ۷Jʩnٳ*Cf͚öm/'N$o޶)o|Y\]MW9qO>ֆ QZ%h| h:>#/]]YvmLJ`)]ߟ-[&/:)'uՔ3#_N8A@@ v.]ʕM+WB ҤI7jx#_|3x`lll8x Wa֬{p닧'{1[\x9 ԧS-70d0ܘ ~ Fٙ6m2!,\ƌv޴ >|Dpp>Lɓ'ǎgit[[[<ġCG;{RnTJfM?~ӧO`ٳ~̈́ +Vs5eYR%ի;uNsEFF2t([r陓##G~,ӧϔ Ô)\pB$gn[,3_`?D} g1 ʉ_ FҡC;F084i҈Nt 6mBܹؼy VVVk`ʑjIJE8zXJo޽Sߛ"`{/[k߾~CѤ[nܸMڵ$((:FTT{V YY'P|˫kXax{n:ϟp<=eʔ櫯Nį{#RgѢȝ;UuRk=z)qI9_tL|R"Eܹsr-ܹQжmnOÒ%y[l|mݎܺu???wΎoݿB3w|J*i1Vd=K,gݺ ɖ`ݺ TTyUVh4>2ZMިG|ٻw111ԪU3aaF%`={v:wFm8{ևSNcccM͕j)3gN (?NҥqqqIɨx3{>}&G={駭}^hh([n#0PGzIzp(+VD r 4P.`l;R_h[Z-)'nS'g}w"ksvvm /JcW 0eD:tIJe+h| K,`)Rbqؿ NNTR/OKw>'~ں7oނ ҥˬ]|ҪU4l̘q͛gg'.^_`۶)_.]Ν4o4MIυ2 ZN:d fY*ЦͧDDDrjN: @*7nrSϱb74i҈!Chh4̛7ǢIƳ`"٫d-]#F %ѿkv*T(Oҥ8q'L=&ɝ;}C6\үF#իWe׵̜9_ӂ7n㛪Z %JgDGPF5F.]8oZ'.\G>x{hVXŁPT4lؐ=ammͦM?V)Z0|AqqqDER4Z\رr%7 .(yoΞ=l!""2z^ʕδkx^ skxRwYi2Y[[[ڵsγknj e˖y\:"֭CTT?0-[6[N%5oa`cc `?"gΜiӆhK`A[:knfϞ/0xPF#ժU*z= 뷷K "cquڷod"G5jɓa4tE;wAj5KDbEz_}o}tٲ%ݝիh7n8~k -)ѥt؁:t茟?{s)R.]+=Ns.YE 4tܑ;# ʴoߖۢ鈎5{'ZoÇ!0PVk` 0we^ëA(~v7qݻUhbL%{_v/;'wy*'up{9IXVrj6o~}ӦۛHeJ*nJ z>17&{H޽/gO vɖD0[6%/N6*o<|c+C=ZjժEZ?$&&&I~~@ }ֆnݾJ9Fٳg\p1coG-[6&L[D ڷđ#мo؅ :u:{FŋbR6I(˫ -U$y\rZ>WLiexEއ^m{ *hݻ-'SFҋA6իҩS7M&˒0u NI(ʊ9p!WHժԩc˒*5ٿ?\o_`͛Shț7/7nܠz2֭۩Wc%GVkC髪WV@t2e?JlسgWT)>]|;;JǏIsu 4Eu֡xbt֓aÆPfM4cQR|$իWgɶqy^bJFR)=sVɓ Sʜ;w@]zKBɒ%8p !!! C,Y"ͽ\Dl.ܿ@`FJ^o葯>~μ{W??nH X vQQQYΝ;&C>+Ȳ=Bzm}i+N8yll)XY^dkע|r҆%ce| ɑҥK[$bС]摿sE66Փ|RfMN8IHH(v-Zb |MhSlm믿1 7ƍ]$[;w͛Q,X7ݻbmmòe+Wƿ2llmhժEL]g3fzP@~. *UpvvV-SƍyF6%4 c/fVJd^zugȐ 6)S&Z1b4aI_С7n6z.]F>a۟rr%F#M6@F퉈`БL:)ڔ7=?g4iζ/DVmdn3 4!޹ĆEWJ zxN˖I'{|Zӣe7\s7/]P|JJ.l^WWW2"}ɓŋbٲ̙cGTx 彶gѢ,Y3fA<0kZ6%CaXhcǎGRQ|eѣ dцaÆЪUK h mڴƆeÆPR%ƍ\q`B1ZS^}KYݽ{t*U2AΝ;~Q\Y^?GDD7n$[l X舋KҹYRNۋ%KӡC'6\}̡C _i^81M6{/'Of„lܸ Ƒ/_^˩Sgp+5Z#Yh1W^֭[ڦי>} f%88r2jpeK>۷7'~_%exo77xnqqqKLL4zJ,/M٘ gOl*iM z XYYhPTJ7Wtd[ݺ7?z]J't&3L*::0ۋ寿חpڷokq˶m;puuDbs֭[%9}/T*<==8s]nѭpB رYlERQd A!x[=kwllk: 01/n/nxx'oBz4!9JE6vEYަM{F#;wn˨sG: ,!2@ [bÆM V_cj5yٳܺ/ժRx1%]Ϟ=WoNɒ%R徨]k"$$@\\Bl߽9z/4b"uv֭}5V-K~+9w ԣm6]~ٳxB IDATzuVT^-j*αcGҴi֭@}RTYoEB!R*e/S~֬Yݢk g` gΜ4hP/ !xY.9'ZС#'(ӣG7%ُ?.f͚uJpzꇕK.{JU)4 cǎFjx{cEbZl∼ŊU/_s!ڷo:-fKb]4nܐʕ+>PbR,{;111T*S !DfϥK#44O&z¯{8u4y1"a4}66Ln]_;B ٲec֬|9AAAiLx=x22ehd) :wƍ-ڳg/F-ӢE3tbŊb4ȟ?Sիױw>)Xz࣏{-[_vfŊU+Wٳg0~$z=3gNY,Xĭ[qtt]ѣk ZnNcilٲ1Ai0[ȟQQʕ+ˠA(9y46= 8yObiTAϟȑ2e[+"yNN(Q )R0_8Xќ9sH*Vںccc(Q<=sr 2!{ 6m[^OjU Ef)h4y7mK.SF5Zn ptƌ1ܹMDɓ3g&9s&NCر3fLח#Gܹ_^1r0ҥ+8e Axx8SNٙ͛ЫW?l٘dcccX[[3olXb/^'2֢EK;wʕMQ 3u$/^&!`vvvʕXɑbgPPxzzZ<رʕ }Pp!C_jRL[nSp!S}![ 4NSCcyռAz>|ptt$ 00իbggG:9vo?ȓ'OSh21X!  %{ٝ5ksU$>66*>_c<=s陓]v$Yh4Rv-5 6')YEg}8w|'ObҤ N$_d0B8_m]y`RLI!gYTZ9sR`bcp%||GJOQJE ٷ6ً uY&g͛˽W*"= Jorl޼+++ڵSNsyj5#J!0P8<=sr-*Wt˟?y<{<Ł)<<-& 6۷O[ҬYS)W_.Jbi\z'Oq1~q1ӧOn:>?{ 6q&eVſjvbjr!B{^^J)Rb:ױN>ggg%B:аv"##Y:e˖XwM̙oGFz F;cǎW]Z G̙֖{#|ə3 'E0((cǎpԨa.*444VzܹK2)U$ݻȑٶmG `ʋo~/_i1^dܹ_p"ժUMEݻ(X`J|yUrȑ'B!rssUC끔/_6m>Y&m镠QvM4 s"|=zآ̵kӧ?;vvv+V͛wK+g^4IBu:;;ꚝݻ^租&;ԫ]N~>|ժU\pf͚ѣGѡCg%P/_Qe899eV̞Eϟüy el2,_"«4 #mexo77xه∍%&&p=%KOz=af阄 ׮A5Fh w:/`BYt:eWFBɕ+"8::aeeFQz'Ϸhļž5ǿOe,ף!3j zA!B+/jF#&[$"=~}`!#n@B!xT*j5QQnBte@Vg HA!"K?LL-BBCCyz5HA!"2祱"&&nBtMLL4VVVy2 4!BdQajkk3IB!I`` 6~^ $ե#1B$sM#oSjEBBdBBBBb2"{4T̙BV,2z+9Gvv3YB!ސ^'$$;;{eJv/A!DzΔ!Ļb:ah#0P'==J`;;;4>>3Zet3Az}!{Nt;]!xT*qqqcZM\\;;;BCCГ=+66T!)`0Dғ!p) N={ n}e~]0CMVc0x9V899akk+Z!0DEEJt)Fg7e@ğ~IMxxz,!{*<\OTTn!xW^ 6? 5_%66.h#.& 6U kkk- {2d d@N O>p,!{go!x 64h4F#JP|%M Bno!:42۱n𙙦_ҠG9rxd` 0 hr!x;?z@CόǶG=~~XYY=&xOZ)B`&p0JHp 1Bw'~ Cl2M1/"FZ-O<%&&Fz6!~~hZj)2X!ޥ3R3K^!x^=ǶhHj8ST]Hhh9%A"p=O>{1\BFFμ!DF߻!W !8ߗs bcU@,Z=C4Ύٳ:I"3DGGG "22Z{T*uG!2WJz9!ۑc86S/FlmMzߋEF?|O̴s5'[E>E/ 2!D%pHBw}f@~%ekk 8d%!#^[0?t?BY%-!H_Y85Sͦ_RsP'G!WOB.~ d%! t?ܺu ?]I?uk֬'&&\mxR6oe˲hNǏqppj*|UW<_[|p8g^~/]̰a#P_ʕ+ܸqAyR}ϻB2 PĿ-7q{u?" fР!<}%K$[~ɒ+vv=鉎f1O%Xo4={F1:~erUN-&N@h cYɿL{/}֎ 3zt:`>~k۶= 4fԨEDD0yT5jF9pPޥK7N8:2ڵy)*=jrF=~aRh42c,"##pqqf1̟۾};/^Y.BdLh0KՓ$C|~ll,j}0cƴdGG(Q8+W.b,wirim۞`r-UfF[P\9&MGեk.tw'8I||αdR&L֭j̙_j&M7o'/$"Bϖ-;[ϟ7x{={dɒosӵk)Bh۶ #,, sCÆ L2Ӱ]vIS}ɪw2/a& z!xszDbd%!]cҟ(ZɖoܸELX-abjK'O7o" -V?vҥ˗)}ʿKr(S4͛7c֬9=|,0 k5$AgƌFiٲ3gL8Ė-Ȗ-ٲeڰknJ(Gٳgٳg̙3/_?ܹ?KF8?+Vdd˖.]-ٹsϟѴi\f5g,bbbppZ,@`mm aNNNTPӧpy {J/Y.Rfܾ}sӸq#Zm2BGë^B$տZE|2=iȑÃm~a׮Ԭica)P'pݻ9s0a$7nF_Ҽ̛vg*Uիܺu0j* F޽ƍo5k ʕ+WV)Á)_"`2]rN>g-tA̟yϛ?|J3,_p!Ξy]pggge?vJgϞ:-[6zqqqI~S}ɪw2v}}fRbŊUl:ѣPzmSR$_z)}_'$$G3 TօP'0""h~Sގy[>= 3?z tj*X ___r z㚇=C͔gPRE 4f͚7_#_H\\={vg͛S'Y<3]PJez}ovwwnݺΝ 0w:tf۶  5;fM'((y̸qcZmllú* Y6 %ܹd{|"4^zNdd$#F .pAz莧gT%=NRĎry6n\+GfJMZƖ$ի;~ڒ{3tp/_V0 K0lLChuN˞666ļ~zС#wZf̘nLH `eFy;SLh4*CwCҥjSN|o0>ʼnh…;ݶ:dԨ/_H֮]>}N^u-[H##GKU[ۏ+V,Q~K0`0ݺu%o޴j5|:xۡB!-/lܸ ___j M6ݻ @ ; !*NܣQq+nqUu=V= ^uԺ[뮫օ8H& y$9sOr{{w!!!8;תUK\]:666|E|uV˝;wNvz̘1+Æ+J*T(py .L*:©THQ2pi@ÆL>3I2%oA[l΂sRquu3xyVqZN [x ÇNmۑ3g6mMɓ'TZSNstЅ?8g;~t/:jՎ7յ{:t@۶ٳɶ=;5jT3 X{zV%)Ӧ`䩬\ƍҲe_[|i]ϣGN9xZ_G۶CLm@Bg> mjՖ'Np_h4jE=޽{knN_lK##U`kn%LС<|@xx8vJy_;v'&Nă a۶X[[3gNS6 ."88˗g4i❡]s}L`… I+S xC\\/_1.RqfvރZ0HV Ixxx*{R%O(_+~¿># .;w.O@@ p¬\Y|xK,7;v|[]HѢELnhؿZQ9k>v/:tQ'>W1stVZW_}Mػw~_CLLLu\!CkJ.Ʉ S>|އfΜn݂Mѯ_֮]ϱc?'nXl1+V,cBӷ} LR^P!?ϓ';;vlmÔ)عs;**=租~b9lذľ: IDATHfL9$ě&!$QQ=)Tȃвe[~7Ν {D 4m;riϟoĈaXYԩ+Ӧ`|q{C7o1hTZ2blmm/*U${v'/_E@ w1u/.ڵQTF%ݹp"}q*W̿>ѣGh4.]LJ'Oȑ(Z*Az[J~a+VfcE<DM%(W,yӷo//^D 9s1x@#uoGz>ooF޽6mZS`A6OR%M~* P..96IMy)rMӦM^}V ۻ y3-Z4ɾwZ̈́ (P yн{W.\]x$GBd~8~Iʏ?'XO bb{9ժUeT\͛Ln gC8;gCo 4{lDFF鿴  F`Ԩno_ڹsmU*Çe&1yTk{_h37n\g9_xw>Zϔ)Sl3w,Tgtv+V>0y/~"yG˗lق_~E]x!Sʕ 27q .K.\HѢDFw V-sF/Z;<֭SzsanܸA׮Sfq-8po]ht#}q֭L]sp'jLGL]ɕ(SiIٳ ~a??;wP@IGbDGǐ'#9j J2gx!1{Q9r8O\\\%8"dDBg5j>>ə3} *ĊKDPVÃiӦeZm3԰a&MHu~Fݺ cșM25i}KJ,IR%ֲz|}2aBƍTɓ͛O> ϟsQ)ϿRhMIMl~iӚ0fxVKrGCgΜeƌ3:ujS7n>V7o2ôoߎKl$֐.*U*x2"""9p"ϟSrT!#BΎIKdٳ i:֬Y"O݇^ruvb_׮]_:uF㹸0s ~87o1٦Itt4?zkN0z- ݻKKps"S.qc)P  eذRFd뷷g!XFRx"1jXfϞW҉$89y" L\a[W HS!DV{f7C!RBY{{V}-ZL"EشiiӁ(-['T& !RYUB8 _-Ek>ǠLOF4!BZfƄ;JB>g3yB^@B!`XXX?~(a.(VXͣBLBWd]!S'BLB!B!;E B!B!0hBLҸq3>3mc NW]}ƍxD6 IS͞=')]. K\l6lۻ) gx7l؄DhhhI?Yȑc <,m03~RB@BdիWOGصk;,Y̙Ӎ>}-4_ddk׮wy?aHߥ9'B@Bd"++KT*4lXם8qΝ:H4h͚5kiذ ϟ73::3gP(;9sѬY v۷y6?tܕ 9s6/_џhܸZkמ:x?w77WͩSg \-[ӨQS̙ZF̛{0x0_~Kn4mڜoBTTcT*Zhҥ˓m߉ҥ5b4M@I̙Rv1z(vBc BY=ϋ-ʈ8v'4hH8?߹s'T*U(R+~@Æ :pbuFeNǎqw @~}1c&MBdzm<=?‚J*QR%4 ꂿ~uP`$(J>|D|1"| JСXЗkW?v'ԩMJիϟw.&&'OsveX4npB"mذB 3|H6n\dzgA:#oh :dN4nب]Fsέ/_>?O_Ka{8::bŊ0ede޼ܻwwwwbc_dL2͛3 OO:tnnɶF;w/ zN|y yٳ }A;B0:N<DAM|t!"FHA!;l|y6oƣGpqqyf5"ɶo.{{;iO>?%kx1eD . ٲ׭[|1wl/_˗/ͪFԨQ̙~LB~.2}NHP?yWW$;::Ѩy,HbL Bvw] DHA!2Q\\>>sӺu+v777իC߾iԨ!}T͛`ccGOYұZ|bƍǏ9rK6Ț v$wDBf$L}hBLԫWJK ,SÃqƲp/RPA?/Z|DJ%]tzmn۶5FɓxyդG/gLCf(^YA ШQ NLL *gQf۩SG?]P!&LHCK`࿔.]Y|wHl̘Q̢e˶)RΝ;s% HpA!.z+SL\faP{0x-WEXAAg" =! !w\?xj5jV4Bg@@TJ%II/ʪ@Ej,ZG?Ɉ!B([ k,-P(,ޙ+fBjh4Z㈉yIll,*JpjYoB!>F˗/KKJ(YIh Jk'228Udŀ鉇B!⽡ 2h4j5TV899JA!899RYZɊ?B!{LT4::{ldr˄B Hlmmj(,7BF4!B G2hZbbb Blll%&&F? 4!BȖ.3%"e`B!3oMV![%"#9::%oI,!Bn4C||>hTCV !B.А-[nB -[6}!+@B!{DeSxT* Jh-'$ B}h4j 'B}a!!BX—άuu!#o{ 0XfvCw[1R vFPz5ϗM" ztRƲa&9BHH(E~TPd}aaa4m5ZYrET*KիG߾QTɶ/0_/^¹sQ*-Q, 䆼<` !H3l@BdyYsg׮̙VZM6ɑ#):s ObmPTR kkkqFu|Ym}/رcg?aaa >OL||<+Wa„I,^( ! 4!{,$${RBy>ԋ8OVZk߾JkƚݻYZ&9xGK.h:u~;NÆiРL6l77WXtyw|U>':u~dOre9{, Ũ{Gի۶}gc<{Rƈ֭QB/^$ %K|:wwwuG7ot՛ٲ.aڡCquurJ9s/Biܸaf7+UjG7o^4M⃕KA!2٘13g=R_Fzj?Lԗ5l؀;wYnn( }/5CVV)g7U_||ԋ'O )J%pΜ9ˌSLȑIf2Kiٲ9rNZ*`@Ŋ#3Ν3(Y$k֬LIO!p޿U`mmͤIe歜8qhʔ}{f1;3ٰa J4Zhؼy+u-ES^xFŋdϞ=RKkv<< KӠA=||i &M!Gg=رR k dD{_An=3i:ر/_N "KkѢ qq#8UĉMnoRȓǝ ѭ1iu VZÕ+Wy2e?>|qtgVyyۛBd*U{wҩm۶y>MFe ڥGaQ:e~---)P ?? +V$w\RptGY0n8:qի'-[0_xx8;w"88:u;qoʹi9uL}=zLZ5{xѣ&Sg^6S&h9s#3@@È;|ygٵkzcǎ-f} sGd.((^ӳbF5?~tR݃Zjfqbbb1b4AA2L<ܹs1fHr 7|quugOA3RY׋/x1cƌഋKLã 111ܺ76mߎzvvvijɓ=zUTbܸ( =F}=ۇ:uj퍥"3hBLk9z(4hЀ=ʊ[P((V*THZ-/_ƚOpϞu;lI|2?>@CLK֬YHv y&s_?~/FJd"=1jK.eǎmF# 6l$.\@fF_ Xtݻw3Y`(** [ۤ羭 fe߾̛7[KBCC7o!'ŋX*6}?[7Rhj֬NF8}sX|q:fϞK:9tpuknZ֭iӦC3Xj +Vсvڐ;w.> c >гr,V7L[Νgk<>kk;7jR|r/_Ξ=ѣhڴYK{?…tI?M|&;v4\| aH;;;bbvcpwM͗/_g}6zklllغu#y/^?8eT舥> $cL_z/va2жmk ЫrǏ`ŊՔ/_3M߿#Ge(Q5`I Bu_cѢFZͺuؿ~J[޽kr̙wbA=g߾XXXЪUK a뻄;wRx1ƌIɒ%6͇~$t<=Ѵ~YM`` VVV)~w1WάYa}!ӄ1d$p->k1+H1!ȑ#INEIW֭[Fe;vt`ggKl%/UVFTIÆ =Q} @lTZĻ˫֭`[uҥKdqwM޽ڵa˖@Uԍ7ӻw/ ū!jE7u Ow}Pț7Owƍyfth.N{|Trtzu eI?!CNPp jZ !H2cTYrk믿0G}L4?UQREXlSLOmvpI<<< gÆMw۬3a$qttʕ 0`ʕ+K…5mM2BdOaԩolܸ(*'44Oƍ/^v:...[ 2hM8 IDATBLyp$erJڵKKK+JeO Vk׿V*&+ L 8{w(Y8qi~8ޞիqH+XZZrM-cJ(W3DGG1eTL1>gcܸ4n܈ʕ+l "##Ȗ-azŋ1X`࿌5Uz?Z#88.Huҥ~͛͛&վq&۷M6YeΜn4l؀ݻ',,d\ӧwf^(aݻ8r +Qx1__Сٳ;%W5[ RɤIS8t0OEfӶmd%֭tԁ0:t³gAtDѢE֭2AdyΔ,Y2e>uܸqKi)2I 9|̙ h['-yHA!cδlق3gp%T*+ *L:s8e͚5(Wl2\JfM9uR@4j4h gذjkk+N8Ell,&}GAJ,CJ= 2Ný{Mn[~] aGjUٷw3 ԯ_W>T䉥%K,O^iwhh(߆N:$a!n4epl۶C/1`@Y=ӻw/nn4oխۿ.WWWzwfQgn#-ee\PDII8mmmYt1~~+={.˗ЪUK *ν{Ȗ͞%KT* oWNGMTT$ωKHpz <8ȑiѢY~rI\9)[c޽˚5]$thZ-hZ||fSje¸t鲾KdAFqqɁOW|Mچa7n܈ƍ%)ϝ;>>so޼QIo4Nxp"}i&cee/!$u.ݱ`׮?sy6l۷ۅoNNN*UGѿBCC9v'J*Zw C9u4緊!CRt)߷)^7o" 0cV_-iu1tDXXO'FVnc)E6m!&&޽{ݻBHG fӦ-4i❦;լY''G|}0qx !7 /_MHA!2&.lB>|@hh>y ˗'O3}L;;?-ܼj韫T*N%<=p\jժ/g|@PTFWӢw >#2cT<1=띮MqrrbĈaL4͛Rg|Qi6ϑ#o e~̕+Wh4x{7ã [[[1b >>2Mٲe  z#7|k"ȑi|pqqOkq=f͚w#RoKTT7obӦ-зoF2iFdzghڴ ٸv:7o~ R!B.\Ȑ!#Zjy]ۋ9Xds'̞݉CѬ:tP0f8m;ضmŋc֍骳V?UtЙ ';=槟~&<ڶm&yWNfjۿM?1:~ g5v;wY?՗3*+onj 2B!B4 C֭[|ygJ(ӧlٲ3gβn*ѝzd[nge4hPL/2+W"**wh۶#󥻞Fڟ7o7zSu?njr=_ĨQ)Wyy|}3i-( ;@6ۿ JҨ,?u~&y\]uNFPhjJS!B|oWb,X@_^~]tڵ6lZnidppp`ܸ1͛'uϟ?U$><<? 2"tCO1cUsnO<'3}Lj[p}W]3g|VeÆM4oޚ5jӵs"L>zQV֯߿ ͚_~UvT)} ')~ǏKT)͚b͚uh4 [lV͋-ۦXWbVV(J,--Y'NKiܸ|֭3g#%tFڴnݞ[߇9R>y#U/L89ՠ[|4ׯgV-Յ޽i~=zEyz"""1cV5+ԩƍk:t0;vdoX~5|5c)~6޽Rѯ_oYd9+VF0x~F oFlٲrVU9?ñcƍkY~5]bjFpЏj}Yz{=?ߴkL +EBZNN0|pP?[4K!BBhh(NNNf3sfΜcTuFSܿ]iʀ})[c ̡Cy˗3NRQ>ŋ1~XJ.Ņ 9w<{$::-[3s4jժ GW]w29bطoy3 o.\HXr5yo֏6m2:t֭)P ?[`Ԩ4lXbŊRyM=?/p{{{6Fs ݹs77W}'Ɔ2e>J^߸qk׮SNC}VПz1>~^^R<7ob‚qM}Q.9'..hTa50*Pϝ$mNMϞ_РAB0ŋk/ٶm@\ŋCv?m[S\Y .rEݧ/MO~%JW.|IyjQtTvssz~>ԋ#G`OՒ͉??$yڵq$ T2HÆqqJˊB!JE… Μ9K@#iISNصk~طZ/] 6K2C 1VEzk{1bİ$ٹw~KKs(|sϴoo~~oPPF*RgIqpp0kDJ?CΝ;g9q$.\d-tܑAZw?~"9r&MSwgFy4p Mxk M%H>?UclmmԩpB=;K,gٔ(Q<'(W,cǎgذ888cN@Cjyt i#q!(0ٳ2lB! R ٸq3ɓNUϞ_$.v֮`T֢E3&No1uWv .]p榧=#Gclڴ{w_}ptt`2?> $W32;>ٳ1l(,۷7ٲeKS{]]]Yf%0U+|-K,#(9 y35 Yh1_}5/c2Z<(-Uܹ3Yr V%GgڵkC_>֖bŊp\)~>>Ә6͇P@~Ǝŕ+Wg̘ErOL> RZU͛ʕkXr ٲѴi #:u`Μ<=H:=~~KXh1=z$$R#G7iѢ7oY&fmQgF }B 34k!9ɮOm\S JJ 삃Ci4|lBd%!!!B-!!!&[j∈HO{?]"<+++J%<11&Q$gЍhLMHxH](RbN#E7AĿzc9r87j5g'B!B!",,t C4 }qaB䖔>Lii{3 ͵}DDRB!BJ7oLpssDߔ þy~{J}|LK9*4gDC`C%ã#{u :!B!-,,?{~z-˕+Aѐj^}JtlHV `u9r8{)|h4iq!\rgv3"U/^ gN$9@Z!..J8!x0ev3"-4&3}v 1!#`vn H-1C⤑ իGGB!B!GDM"ВDt s2`Hwh0Sw0 6(Hz %>B!B!0!BڰpQ'ZT2@ȁb׽62O<r :!B!x5L@BrS[0h-JoGܜ ͙VaTHB!B(ᨆďG-wk:ti <`y)lB!B>J8P1ܜBr2@ڧN:E)mojڅT :5$ P`yJeB!B!ĻT:qAh*hI>֙:n :9Oݣ9,Lkx !B!YYr  ^ d|<`@j<&~B!BwEz =XHkyF7*K.CZ@JA!B!ĻȜ@2|71O)0`n!}S;B!B.Jhl=i *HG!B!sC&<dY7gtCZיs!B!]b{umu`N`A B!B!>DH0'F v;$B!B #Rv=IA!B!H]ZPщ7m%B!B0gd혧@B!B!4xЁ mB!B!`J!B!]ܹmB!B!2[,$>uߧ"B!Ó%B!B!B!B!B!B!B!B!"zirIENDB`railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/deny.toml000066400000000000000000000006171517666454200233070ustar00rootroot00000000000000[licenses] allow = [ "MIT", "Apache-2.0", "Apache-2.0 WITH LLVM-exception", "Unicode-3.0", "GPL-3.0-or-later", "EUPL-1.2", "BSD-3-Clause" ] [[licenses.clarify]] name = "ring" expression = "ISC AND OpenSSL AND MIT" license-files = [ { path = "LICENSE", hash = 0xbd0eed23 }, ] [bans] multiple-versions = "allow" [sources.allow-org] gitlab = [ "schmiddi-on-mobile" ] railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/flake.lock000066400000000000000000000027311517666454200234060ustar00rootroot00000000000000{ "nodes": { "flake-utils": { "inputs": { "systems": "systems" }, "locked": { "lastModified": 1731533236, "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { "owner": "numtide", "repo": "flake-utils", "type": "github" } }, "nixpkgs": { "locked": { "lastModified": 1777954456, "narHash": "sha256-hGdgeU2Nk87RAuZyYjyDjFL6LK7dAZN5RE9+hrDTkDU=", "owner": "NixOS", "repo": "nixpkgs", "rev": "549bd84d6279f9852cae6225e372cc67fb91a4c1", "type": "github" }, "original": { "owner": "NixOS", "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } }, "root": { "inputs": { "flake-utils": "flake-utils", "nixpkgs": "nixpkgs" } }, "systems": { "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "owner": "nix-systems", "repo": "default", "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", "type": "github" }, "original": { "owner": "nix-systems", "repo": "default", "type": "github" } } }, "root": "root", "version": 7 } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/flake.nix000066400000000000000000000154721517666454200232620ustar00rootroot00000000000000{ # keep in sync with metainfo description = "Find all your travel information"; inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; inputs.flake-utils.url = "github:numtide/flake-utils"; outputs = { self, nixpkgs, flake-utils, ... }@inputs: (flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; }; name = "diebahn"; in { packages.default = with pkgs; stdenv.mkDerivation rec { cargoDeps = rustPlatform.importCargoLock { lockFile = ./Cargo.lock; }; src = let fs = lib.fileset; in fs.toSource { root = ./.; fileset = fs.difference ./. (fs.unions [ (fs.maybeMissing ./result) (fs.maybeMissing ./build) ./flake.nix ./flake.lock ]); }; buildInputs = [ pkgs.libadwaita pkgs.gtk4 ]; nativeBuildInputs = [ pkgs.wrapGAppsHook4 pkgs.rustPlatform.cargoSetupHook pkgs.meson pkgs.gettext pkgs.glib pkgs.gtk4 pkgs.libadwaita pkgs.pkg-config pkgs.desktop-file-utils pkgs.appstream pkgs.ninja pkgs.rustc pkgs.cargo pkgs.openssl pkgs.blueprint-compiler ]; inherit name; }; devShells.default = let run = pkgs.writeShellScriptBin "run" '' meson compile -C build && ./build/target/debug/${name} ''; check = pkgs.writeShellScriptBin "check" '' cargo clippy ''; prof = pkgs.writeShellScriptBin "prof" '' RUSTFLAGS="-C force-frame-pointers=yes" meson compile -C build sysprof-cli --force --no-battery --use-trace-fd --speedtrack --gtk $@ diebahn.syscap -- ./build/target/debug/${name} ''; in with pkgs; pkgs.mkShell { src = ./.; buildInputs = []; nativeBuildInputs = [ pkgs.wrapGAppsHook4 pkgs.meson pkgs.gettext pkgs.glib pkgs.gtk4 pkgs.libadwaita pkgs.pkg-config pkgs.desktop-file-utils pkgs.appstream pkgs.ninja pkgs.rustc pkgs.cargo pkgs.openssl pkgs.clippy pkgs.cargo-deny pkgs.sysprof pkgs.blueprint-compiler pkgs.md4c pkgs.libfaketime run check prof ]; shellHook = '' export GSETTINGS_SCHEMA_DIR=${pkgs.gtk4}/share/gsettings-schemas/${pkgs.gtk4.name}/glib-2.0/schemas/:${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}/glib-2.0/schemas/:./build/data/ meson setup -Dprofile=development build ''; }; apps.default = { type = "app"; inherit name; program = "${self.packages.${system}.default}/bin/${name}"; }; # Note: This may only be run interactively as this requires network access. packages.makeScreenshot = let nixos-lib = import (nixpkgs + "/nixos/lib") { }; in nixos-lib.runTest { name = "screenshot"; hostPkgs = pkgs; imports = [ { nodes = { machine = { pkgs, ... }: { boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; services.xserver.enable = true; services.xserver.displayManager.gdm.enable = true; services.xserver.desktopManager.gnome.enable = true; services.displayManager.autoLogin.enable = true; services.displayManager.autoLogin.user = "alice"; users.users.alice = { isNormalUser = true; extraGroups = [ "wheel" ]; uid = 1000; }; system.stateVersion = "22.05"; # virtualisation.graphics = false; environment.systemPackages = [ self.packages.${system}.default ]; systemd.user.services = { "org.gnome.Shell@wayland" = { serviceConfig = { ExecStart = [ "" "${pkgs.gnome-shell}/bin/gnome-shell" ]; }; }; }; }; }; testScript = { nodes, ... }: let lib = pkgs.lib; l = lib.lists; user = nodes.machine.users.users.alice; username = user.name; type = word: "machine.send_chars(\"${word}\")"; key = key: "machine.send_key(\"${key}\")"; sleep = duration: "machine.sleep(${toString duration})"; execution = [ (type "Berlin Hbf") (sleep 2) (key "tab") (type "PARIS") (sleep 2) (l.replicate 6 (key "tab")) (key "ret") (sleep 5) (l.replicate 12 (key "tab")) (key "ret") (l.replicate 2 (key "tab")) (key "ret") (key "tab") (key "ret") (l.replicate 2 (key "tab")) (key "ret") ]; preExecution = [ (sleep 20) (type "Railway") (sleep 1) (key "tab") (key "tab") (sleep 5) (key "ret") ]; postExecution = [ (key "alt-print") # XXX: This for some reason sometimes fails. No idea why. "machine.execute(\"mv /home/${username}/Pictures/Screenshots/* screenshot.png\")" "machine.copy_from_vm(\"screenshot.png\", \".\")" ]; fullExecution = l.flatten [preExecution (sleep 5) execution (sleep 5) postExecution]; code = lib.concatStringsSep "\nmachine.sleep(1)\n" fullExecution; in code; } ]; }; }) ); } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/meson.build000066400000000000000000000036261517666454200236200ustar00rootroot00000000000000project( 'diebahn', 'rust', version: '2.10.0', meson_version: '>= 0.59', license: 'GPL-3.0-or-later', ) i18n = import('i18n') gnome = import('gnome') base_id = 'de.schmidhuberj.DieBahn' application_id = 'de.schmidhuberj.DieBahn' resources_path = '/de/schmidhuberj/DieBahn/' dependency('glib-2.0', version: '>= 2.66') dependency('gio-2.0', version: '>= 2.66') dependency('gtk4', version: '>= 4.14') dependency('libadwaita-1', version: '>= 1.8') glib_compile_resources = find_program('glib-compile-resources', required: true) glib_compile_schemas = find_program('glib-compile-schemas', required: true) desktop_file_validate = find_program('desktop-file-validate', required: false) appstream_cli = find_program('appstreamcli', required: false) cargo = find_program('cargo', required: true) version = meson.project_version() prefix = get_option('prefix') bindir = prefix / get_option('bindir') localedir = prefix / get_option('localedir') datadir = prefix / get_option('datadir') pkgdatadir = datadir / meson.project_name() iconsdir = datadir / 'icons' podir = meson.project_source_root() / 'po' gettext_package = meson.project_name() dbusdir = datadir / 'dbus-1' / 'services' if get_option('profile') == 'development' profile = 'Devel' vcs_tag = run_command('git', 'rev-parse', '--short', 'HEAD', check: true).stdout().strip() if vcs_tag == '' version_suffix = '-devel' else version_suffix = '-@0@'.format(vcs_tag) endif else profile = '' version_suffix = '' endif if profile != '' application_id = '@0@.@1@'.format(base_id, profile) else application_id = base_id endif meson.add_dist_script( 'build-aux/dist-vendor.sh', meson.project_build_root() / 'meson-dist' / meson.project_name() + '-' + version, meson.project_source_root() ) subdir('data') subdir('po') subdir('src') gnome.post_install( gtk_update_icon_cache: true, glib_compile_schemas: true, update_desktop_database: true, ) railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/meson_options.txt000066400000000000000000000003031517666454200251000ustar00rootroot00000000000000option( 'profile', type: 'combo', choices: [ 'default', 'development', ], value: 'default', description: 'The build profile for Railway. One of "default" or "development".' ) railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/000077500000000000000000000000001517666454200220655ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/LINGUAS000066400000000000000000000001661517666454200231150ustar00rootroot00000000000000ar bg da de es fi fr hi hr hu it ja ko nl oc pl pt pt_BR ro ru sv tr uk kab nb_NO et zh_Hans ia bn ta eu cs vi bs te railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/POTFILES000066400000000000000000000040641517666454200232410ustar00rootroot00000000000000data/de.schmidhuberj.DieBahn.desktop.in.in data/de.schmidhuberj.DieBahn.metainfo.xml.in.in data/resources/ui/alt_label.blp data/resources/ui/date_time_picker.blp data/resources/ui/frequency_label.blp data/resources/ui/indicator_icons.blp data/resources/ui/intermediate_location_item.blp data/resources/ui/journey_detail_page.blp data/resources/ui/journey_list_item.blp data/resources/ui/journey_store_item.blp data/resources/ui/journeys_page.blp data/resources/ui/leg_item.blp data/resources/ui/place_list_item.blp data/resources/ui/preferences_dialog.blp data/resources/ui/provider_list_item.blp data/resources/ui/provider_popover.blp data/resources/ui/refresh_button.blp data/resources/ui/remark_item.blp data/resources/ui/search_options_button.blp data/resources/ui/search_options_dialog.blp data/resources/ui/search_page.blp data/resources/ui/search_store_item.blp data/resources/ui/shortcuts_dialog.blp data/resources/ui/station_entry.blp data/resources/ui/time_divider.blp data/resources/ui/transition.blp data/resources/ui/window.blp src/config.rs src/gui/indicator_icons.rs src/gui/remark_item.rs src/gui/search_store_item.rs src/gui/stores/journey_store.rs src/gui/stores/mod.rs src/gui/stores/search_store.rs src/gui/search_page.rs src/gui/alt_label.rs src/gui/journey_detail_page.rs src/gui/transition.rs src/gui/utility.rs src/gui/preferences_dialog.rs src/gui/search_options_button.rs src/gui/search_options_dialog.rs src/gui/provider_list_item.rs src/gui/provider_popover.rs src/gui/error.rs src/gui/date_time_picker.rs src/gui/journey_list_item.rs src/gui/journeys_page.rs src/gui/journey_store_item.rs src/gui/leg_item.rs src/gui/intermediate_location_item.rs src/gui/place_list_item.rs src/gui/station_entry.rs src/gui/mod.rs src/gui/window.rs src/gui/frequency_label.rs src/error.rs src/config.rs.in src/backend/discount_card.rs src/backend/journeys_result.rs src/backend/place.rs src/backend/price.rs src/backend/intermediate_location.rs src/backend/remark.rs src/backend/client.rs src/backend/provider.rs src/backend/journey.rs src/backend/leg.rs src/backend/mod.rs src/main.rs railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/ar.po000066400000000000000000000563471517666454200230460ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2026-04-25 10:09+0000\n" "Last-Translator: Abdullah Albaroty \n" "Language-Team: Arabic \n" "Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" "X-Generator: Weblate 5.17.1-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "السكة الحديدية" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "استكشف كل ما تريد معرفته عن رحلتك" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "قطار;سكة-حديد;رحلة;مخطط;جدول-مواعيد;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "" #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "المغادرة" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "الوصول" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "ادخل التاريخ" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "التاريخ" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "أدخل الوقت" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "الوقت" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "الآن" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "مدة الرحلة كاملة" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "محطات الرحلة" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "اختر رحلة" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "ابحث عن الرحلات" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "اعرض المحطات" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "اعرض المحطات البينية" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "اعرض التصريحات" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "التصريحات" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "المحطات" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "عام" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "احذف العلامات القديمة آليا" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "الرحلات السابقة تُحْفَظُ لمدة من الزمن" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "وقت حجز الرحلات" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "مدة الإبقاء على الرحلات بعد انتهائها" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "البحث في الشبكات …" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "تحديث بيانات الرحلة" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "خيارات أكثر للبحث" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "خيارات بحث متقدمة أدَقُّ" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "المزيد من الخيارات" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "بطاقة التخفيض" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "الدرجة" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "الدرجة الأولى" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "الدرجة الثانية" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "يسمح بالدراجات" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "الحد الأدنى لوقت النقل" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "الوصلات المباشرة فقط" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "" #: data/resources/ui/search_options_dialog.blp:60 #, fuzzy msgid "Mainline Train" msgstr "قطار جهوي" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "قطار جهوي" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "حافلة" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "سيارة أجرة" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "من" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "إلى" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "بحث" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "التطبيق" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "خروج" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "اختر شبكة" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "القائمة الرئيسية" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "تفاصيل السفر" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "الخيارات" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "إختصارات لوحة المفاتيح" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "في الوقت" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "تأخير" #: src/gui/indicator_icons.rs:186 #, fuzzy msgid "Very Delayed" msgstr "تأخير" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "ألغي" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "" #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "" #: src/gui/search_page.rs:127 #, fuzzy msgid "Search ongoing" msgstr "ابحث عن الرحلات" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "" #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "" #: src/gui/transition.rs:229 #, fuzzy msgid "Transfer Time {}" msgstr "الحد الأدنى لوقت النقل" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "تحويل" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "" #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "" #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "" #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "اليوم" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "غدًا" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "البارحة" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "غير معروف" #: src/gui/search_options_button.rs:141 #, fuzzy msgid "1st class" msgstr "الدرجة الأولى" #: src/gui/search_options_button.rs:143 #, fuzzy msgid "2nd class" msgstr "الدرجة الثانية" #: src/gui/search_options_button.rs:186 #, fuzzy msgid "Regional Only" msgstr "قطار جهوي" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "" #: src/gui/search_options_button.rs:201 #, fuzzy msgid "Direct Connection" msgstr "الوصلات المباشرة فقط" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "" #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "" #: src/gui/error.rs:42 msgid "Error" msgstr "خطأ" #: src/gui/error.rs:46 msgid "_Close" msgstr "" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" msgstr[4] "" msgstr[5] "" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "" #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "" #: src/gui/leg_item.rs:153 #, fuzzy msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "المحطات" msgstr[1] "المحطات" msgstr[2] "المحطات" msgstr[3] "المحطات" msgstr[4] "المحطات" msgstr[5] "المحطات" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "" msgstr[1] "" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "" #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "ألمانيا" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "النمسا" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "" #: src/backend/journey.rs:271 msgid "Start at {station} on platform {platform} at {time}" msgstr "" #: src/backend/journey.rs:274 msgid "Start at {station} at {time}" msgstr "" #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "" #: src/backend/journey.rs:309 msgid "{time} transfer time to get to platform {platform}" msgstr "" #: src/backend/journey.rs:315 #, fuzzy msgid "{time} transfer time" msgstr "الحد الأدنى لوقت النقل" #: src/backend/journey.rs:318 msgid "Upcoming departure on platform {platform}" msgstr "" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 msgid "Arriving at {destination} soon" msgstr "" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 msgid "{train} departing on platform {platform} today instead" msgstr "" #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "" #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 msgid "Arriving at {current-destination} in {duration}" msgstr "" #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/bg.po000066400000000000000000000706701517666454200230270ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # twlvnn kraftwerk , 2024. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2024-10-16 17:08+0200\n" "Last-Translator: twlvnn kraftwerk \n" "Language-Team: Bulgarian \n" "Language: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "X-Generator: Gtranslator 46.1\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Железница" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Намерете информация за вашето пътуване" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "влак;железница;пътуване;планиране;разписания;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "„Железница“ ви позволява да търсите информация за пътуване в различни мрежи " "и граници, без да се налага да навигирате из различни уеб сайтове. " "Благодарение на адаптивния дизайн програмата е подходяща за предварително " "планиране на пътуването ви в движение:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "" "Преглеждайте подробностите за вашите пътувания, включително пероните и " "закъсненията" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "" "Създавайте отметки за текущи и бъдещи пътувания, както и за тези, които " "често търсите" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" "Използвайте опциите за допълнително търсене като филтриране по вид транспорт" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "И всичко това за мрежи от цял свят, но най-вече от Европа." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Изглед на програмата" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Заминава" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Пристига" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Въведете дата" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Дата" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Въведете време" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Време" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Сега" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Общо време за пътуване" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Части от пътуването" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Изберете пътуване" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Търсете пътувания" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Показване на спирките" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Показване на междинните спирки" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Показване на обявите" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Обяви" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Спирки" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Общи" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Автоматично премахване на стари отметки" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "Миналите пътувания се съхраняват само за определен период от време" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Време за запазване на пътувания" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "За колко време да се запазят пътуванията след пристигането" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Търсене на мрежи…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Опресняване на пътуването" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Повече опции за търсене" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Уточняване на опциите за търсене" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Повече опции" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Карта за отстъпка" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Класа" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Първа класа" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Втора класа" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Достъп за велосипеди" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Минимално време за прекачване" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Само директни връзки" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Видове транспорт" #: data/resources/ui/search_options_dialog.blp:60 #, fuzzy msgid "Mainline Train" msgstr "Регионален влак" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Регионален влак" #: data/resources/ui/search_options_dialog.blp:70 #, fuzzy msgid "S-Bahn Train" msgstr "Крайградски влакове" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Автобус" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Ферибот" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Метро" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Трамвай" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Лифт" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Такси" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "От" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "До" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Търсене" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Отметнати пътувания" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Отметнати търсения" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Програма" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Търсене на отметки" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Добавяне на пътуването в отметките" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Презареждане на пътуването" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Спиране на програмата" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Показване на клавишните комбинации" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Показване на настройките" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Отваряне на менюто" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Разменяне на началната точка и дестинацията" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Избиране на мрежа" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Основно меню" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Връзки" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Добавяне на търсенето в отметките" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Подробности за пътуването" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Опресняване на това пътуване" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Добавяне на пътуването в отметките" #: data/resources/ui/window.blp:166 #, fuzzy msgid "Watch this Trip" msgstr "Опресняване на това пътуване" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Настройки" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Клавишни комбинации" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "_Относно „Железница“" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Голямо натоварване" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Много голямо натоварване" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Изключително голямо натоварване" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "Навреме" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Малки закъснения" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Закъснение" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Голямо закъснение" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Много голямо закъснение" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Промени в перона" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Връзката не е възможна" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Отменено" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "Отметнато пътуване наскоро завърши." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "Винаги _изтриване" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Началната точка и дестинацията липсват" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Липсва начална точка" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Липсва дестинация" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Търсенето зарежда" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Пристигане в {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Ходене {walk} Чакане {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Време за прекачване {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Ходене {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Прекачване" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} мин" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H ч %_M мин" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] " %_d ден %_H ч %_M мин" msgstr[1] " %_d дена %_H ч %_M мин" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} мин." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} ч." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H ч. %-M мин." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] " %_d ден %_H ч. %_M мин." msgstr[1] " %_d дена %_H ч. %_M мин." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Днес" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Утре" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Вчера" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%d.%m.%Y" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} ч" msgstr[1] "{} ч" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Без" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, 1-ва класа" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, 2-ра класа" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, 1-ва класа" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, 2-ра класа" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A - VORTEILScard (с RAILPLUS)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH - HalbtaxAbo (с RAILPLUS)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH - HalbtaxAbo (без RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL - Voordeelurenabo (с RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL – Voordeelurenabo (без RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-Card" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – General-Abonnement" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Неизвестно" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "1-ва класа" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "2-ра класа" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Само за региона" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Избрани видове транспорт" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Директна връзка" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "" "Доставянето на данните е неуспешно. Свързани ли сте с Интернет мрежата?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Получихте грешка. Споделете вашия проблем с нас." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Повече информация" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "Възникна неизвестен проблем. Споделете вашия проблем с нас." #: src/gui/error.rs:42 msgid "Error" msgstr "Грешка" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Затваряне" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, fuzzy, c-format msgid "%a %b %d" msgstr "%a %d. %b" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} промяна" msgstr[1] "{} промени" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "От {departure} до {arrival} в {travel_time} с {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} в посока на {destination}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Заминаване от {start} от перон {platform} в {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Заминаване от {start} в {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "Пристигане в {destination} на перон {platform} в {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Пристигнете в {destination} в {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} Спирка" msgstr[1] "{} Спирки" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} в {arrival} на перон {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} в {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Предложението {} е избрано" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Няма избрано предложение" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "едно предложение, не е избрано" msgstr[1] "{n} предложения, нито едно не е избрано" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "twlvnn kraftwerk " #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Оригиналният превод е направен с подкрепа от" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "всеки ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "{amount} €" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "{amount} $" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{currency} {amount}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Германия" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "Северна Америка" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Европа" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Австрия" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Шлезвиг-Холщайн" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "В цял свят (бета)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Използване на „Transitous“" #: src/backend/journey.rs:271 #, fuzzy msgid "Start at {station} on platform {platform} at {time}" msgstr "Пристигане в {destination} на перон {platform} в {arrival}." #: src/backend/journey.rs:274 #, fuzzy msgid "Start at {station} at {time}" msgstr "Пристигнете в {destination} в {arrival}." #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "" #: src/backend/journey.rs:309 #, fuzzy msgid "{time} transfer time to get to platform {platform}" msgstr "{stop} в {arrival} на перон {platform}" #: src/backend/journey.rs:315 #, fuzzy msgid "{time} transfer time" msgstr "Минимално време за прекачване" #: src/backend/journey.rs:318 #, fuzzy msgid "Upcoming departure on platform {platform}" msgstr "{stop} в {arrival} на перон {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 #, fuzzy msgid "Arriving at {destination} soon" msgstr "Пристигане в {destination}." #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 #, fuzzy msgid "{train} departing on platform {platform} today instead" msgstr "Пристигане в {destination} на перон {platform} в {arrival}." #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 #, fuzzy msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "Пристигане в {destination} на перон {platform} в {arrival}." #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 #, fuzzy msgid "Arriving at {current-destination} in {duration}" msgstr "Пристигнете в {destination} в {arrival}." #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Ходене" #~ msgid "High Speed Train" #~ msgstr "Високоскоростен влак" #~ msgid "Last refreshed {}" #~ msgstr "Последно опреснено на {}" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/bn.po000066400000000000000000000517721517666454200230400ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: bn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "" #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "" #: data/resources/ui/search_options_dialog.blp:60 msgid "Mainline Train" msgstr "" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "" #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "" #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] "" msgstr[1] "" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "" #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "" #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "" #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "" msgstr[1] "" #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "" msgstr[1] "" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "" #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "" #: src/gui/error.rs:42 msgid "Error" msgstr "" #: src/gui/error.rs:46 msgid "_Close" msgstr "" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "" msgstr[1] "" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "" #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "" #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "" msgstr[1] "" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "" msgstr[1] "" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "" #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "" #: src/backend/journey.rs:271 msgid "Start at {station} on platform {platform} at {time}" msgstr "" #: src/backend/journey.rs:274 msgid "Start at {station} at {time}" msgstr "" #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "" #: src/backend/journey.rs:309 msgid "{time} transfer time to get to platform {platform}" msgstr "" #: src/backend/journey.rs:315 msgid "{time} transfer time" msgstr "" #: src/backend/journey.rs:318 msgid "Upcoming departure on platform {platform}" msgstr "" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 msgid "Arriving at {destination} soon" msgstr "" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 msgid "{train} departing on platform {platform} today instead" msgstr "" #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "" #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 msgid "Arriving at {current-destination} in {duration}" msgstr "" #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/bs.po000066400000000000000000000636401517666454200230420ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2026-01-29 22:01+0000\n" "Last-Translator: pacavarn \n" "Language-Team: Bosnian \n" "Language: bs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Weblate 5.16-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Railway" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Pronađite sve informacije o putovanju" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "voz; željeznica; putovanje; planiranje; red vožnje;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Željeznica vam omogućava da pretražujete informacije o putovanjima preko " "mreža i granica bez potrebe za navigacijom kroz različite web stranice. Zbog " "adaptivnog dizajna, pogodno je za planiranje putovanja unaprijed ili mobilno " "u pokretu:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "Pogledajte detalje svojih putovanja, uključujući perone i kašnjenja" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "Označite trenutna i buduća putovanja, kao i česte pretrage" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" "Koristite opcije naprednog pretraživanja poput filtriranja po načinu " "prijevoza" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "I sve to za mreže iz cijelog svijeta, ali uglavnom iz Evrope." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Pregled aplikacije" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Odlazak" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Dolazak" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Unesi datum" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Datum" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Vrijeme unosa" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Vrijeme" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Sada" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Ukupno vrijeme putovanja" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Segmenti putovanja" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Odaberite putovanje" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Pretraži putovanja" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Prikaži stanice" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Prikaži međustanice" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Prikaži obavještenja" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Obavještenja" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Stanice" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Općenito" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Automatski ukloni stare oznake" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "Prethodna putovanja se čuvaju samo određeni vremenski period" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Vrijeme čuvanja za putovanja" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Koliko dugo čuvati putovanja nakon dolaska" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Pretraži mreže…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Osvježi putovanje" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Više opcija pretrage" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Pročisti opcije naprednog pretraživanja" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Više opcija" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Kartica za popust" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Klasa" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Prva klasa" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Druga klasa" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Pristup za bicikle" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Minimalno vrijeme presjedanja" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Samo direktne veze" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Vrste prijevoza" #: data/resources/ui/search_options_dialog.blp:60 msgid "Mainline Train" msgstr "Glavni voz" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Regionalni voz" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "S-Bahn voz" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Autobus" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Trajekt" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Podzemna željeznica" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Tramvaj" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Žičara" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Taksi" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "Od" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "Do" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Pretraga" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Označena putovanja" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Označene pretrage" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Primjena" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Pretraga oznaka" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Označi putovanje" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Ponovo učitaj putovanje" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Odustani" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Prikaži prečice" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Prikaži postavke" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Otvori meni" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Zamijenite početnu i odredišnu tačku" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Odaberite mrežu" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Glavni meni" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Veze" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Označi ovu pretragu" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Detalji putovanja" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Osvježi ovo putovanje" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Označi ovo putovanje" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "Pogledajte ovo putovanje" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Postavke" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Prečice na tastaturi" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "_O Railway" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Visoko opterećenje" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Vrlo visoko opterećenje" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Izuzetno visoko opterećenje" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "Na vrijeme" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Manja kašnjenja" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Kasni" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Veoma kasni" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Izuzetno kasni" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Promjene platforme" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Povezivanje nije moguće" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Otkazano" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "Nedavno je završeno jedno putovanje koje sam označio/la." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "Uvijek _Izbriši" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Nedostaju početna i odredišna tačka" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Nedostaje početak" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Nedostaje odredište" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Pretraga je u toku" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Dolazak na odredište {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Hodajte {walk} Čekajte {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Vrijeme presjedanja {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Hodajte {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Presjedanje" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} min" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H h %_M min" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] " %_d dan %_H h %_M min" msgstr[1] " %_d dana %_H h %_M min" msgstr[2] " %_d dana %_H h %_M min" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} min." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} hrs." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H hrs. %-M min." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d dan %-H hrs. %-M min." msgstr[1] "%-d dana %-H hrs. %-M min." msgstr[2] "%-d dana %-H hrs. %-M min." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Danas" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Sutra" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Jučer" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%Y-%m-%d" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} h" msgstr[1] "{} h" msgstr[2] "{} h" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Nijedan" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, 1. klasa" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, 2. klasa" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, 1. klasa" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, 2. klasa" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A – VORTEILScard (sa RAILPLUS)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH – HalbtaxAbo (sa RAILPLUS)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH – HalbtaxAbo (bez RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL – Voordeelurenabo (sa RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL – Voordeelurenabo (bez RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-Kartica" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – Općenito-Pretplata" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Nepoznato" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "1. klasa" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "2. klasa" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Samo regionalno" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Odabrani načini prijevoza" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Direktna veza" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "Nije uspjelo preuzimanje podataka. Jeste li povezani na internet?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Primili smo grešku. Molimo vas da podijelite povratne informacije." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Više informacija" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "" "Došlo je do nepoznatog problema. Molimo vas da podijelite povratne " "informacije." #: src/gui/error.rs:42 msgid "Error" msgstr "Greška" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Zatvori" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "%a %b %d" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} promjena" msgstr[1] "{} promjene" msgstr[2] "{} promjena" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "Od {departure} do {arrival} u {travel_time} sa {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} u smjeru {destination}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Polazak {start} sa perona {platform} u {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Polazak {start} u {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "Dolazak u {destination} na peron {platform} u {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Dolazak na odredište {destination} u {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} Stanica" msgstr[1] "{} Stanice" msgstr[2] "{} Stanica" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} na {arrival} na peronu {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} na {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Prijedlog {} odabran" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Nije odabran nijedan prijedlog" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "jedan prijedlog, nije odabran" msgstr[1] "{n} prijedloga, nijedan nije odabran" msgstr[2] "{n} prijedloga, nijedan nije odabran" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "zasluge prevodioca" #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Izvorni prijevod podržan od strane" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "svakih ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "€{amount}" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "${amount}" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{currency} {amount}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Njemačka" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "Sjeverna Amerika" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Evropa" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Austrija" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Schleswig-Holstein" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "Širom svijeta (beta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Korištenje Transitousa" #: src/backend/journey.rs:271 msgid "Start at {station} on platform {platform} at {time}" msgstr "Početak na {station} na peronu {platform} u {time}" #: src/backend/journey.rs:274 msgid "Start at {station} at {time}" msgstr "Početak na {station} u {time}" #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "Putovanje do {destination} uskoro počinje" #: src/backend/journey.rs:309 msgid "{time} transfer time to get to platform {platform}" msgstr "{time} vrijeme presjedanja do perona {platform}" #: src/backend/journey.rs:315 msgid "{time} transfer time" msgstr "{time} vrijeme presjedanja" #: src/backend/journey.rs:318 msgid "Upcoming departure on platform {platform}" msgstr "Predstojeći polazak na peronu {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "Uskoro presjedanje na stanici {station}" #: src/backend/journey.rs:335 msgid "Arriving at {destination} soon" msgstr "Uskoro stižem u {destination}" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "Polazak {train} kasni za {time}" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "Dolazak {train} kasni za {time}" #: src/backend/journey.rs:427 msgid "{train} departing on platform {platform} today instead" msgstr "{train} polazi danas s perona {platform}" #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" "Upozorenje: Više nije moguće doći do povezujućeg {train} od {origin} do " "{destination}." #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "Upozorenje: {train} od {origin} do {destination} je otkazan." #: src/backend/journey.rs:562 msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "Početak na {next-origin} za {duration} na peronu {next-platform}" #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "Početak na {next-origin} za {duration}" #: src/backend/journey.rs:568 msgid "Arriving at {current-destination} in {duration}" msgstr "Dolazak na {current-destination} za {duration}" #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" "Presjedanje na {next-leg-name} na peronu {next-platform}, preostalo vrijeme: " "{duration}" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "Promjena na {next-leg-name}, preostalo: {duration}" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "Cilj putovanja je dostignut" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Hodajte" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/cs.po000066400000000000000000000637121517666454200230430ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2026-03-25 09:09+0000\n" "Last-Translator: Pavel Borecki \n" "Language-Team: Czech \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n" "X-Generator: Weblate 5.17-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Dráha" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Najděte všechny informace o cestování" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "vlak;železnice;cesta;plánování;jízdní řády;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Railway vám umožňuje zjišťovat informace o cestování napříč sítěmi a " "hranicemi bez nutnosti chodit kvůli tomu na několik různých webových " "stránek. Díky adaptivnímu designu je vhodná pro plánování cesty předem, ale " "i na mobilu už na ní:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "Zobrazte si podrobnosti o své cestě, včetně nástupišť a zpoždění" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "Ukládejte si stávající a budoucí cesty a častá hledání" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" "Využívejte pokročilých možností vyhledávání jako je filtrování podle druhu " "dopravy" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "A to vše pro dopravní sítě po celém světě, ale většinou v Evropě." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Přehled aplikace" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Odjezd" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Příjezd" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Zadejte datum" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Datum" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Zadejte čas" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Čas" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Nyní" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Celkový čas cesty" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Úseky cesty" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Zvolte cestu" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Vyhledejte cesty" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Zobrazit zastávky" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Zobrazit mezizastávky" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Zobrazit oznámení" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Oznámení" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Zastavuje v" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Obecné" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Automaticky odebírat staré záložky" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "Minulé cesty jsou uchovávány pouze po určitou dobu" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Doba uchovávání cest" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Jak dlouho po dojetí do cíle uchovávat cesty" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Hledat dopravní sítě…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Znovu načíst cestu" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Další předvolby vyhledávání" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Dále upravit pokročilé možnosti vyhledávání" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Další možnosti" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Slevová karta" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Třída" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "První třída" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Druhá třída" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Přístupné s jízdním kolem" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Čas na přestup alespoň" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Pouze přímá spojení" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Druhy dopravy" #: data/resources/ui/search_options_dialog.blp:60 msgid "Mainline Train" msgstr "Hlavní trať" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Regionální trať" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "Tramvaj" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Autobus" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Trajekt" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Metro" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Tramvaj" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Lanová trať" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Taxi" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "Z" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "Do" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Hledat" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Cesty v záložkách" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Hledání uložená v záložkách" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Aplikace" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Přidat hledání do záložek" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Přidat cestu do záložek" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Znovu načíst cestu" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Ukončit" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Zobrazit zkratky" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Zobrazit předvolby" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Otevřít nabídku" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Prohodit začátek a cíl" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Vybrat síť" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Hlavní nabídka" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Spojení" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Přidat toto hledání do záložek" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Podrobnosti cesty" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Znovu načíst tuto cestu" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Přidat tuto cestu do záložek" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "Sledovat tuto cestu" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Předvolby" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Klávesové zkratky" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "O _aplikaci Dráha" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Vysoké vytížení" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Velmi vysoké vytížení" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Výjimečně vysoké vytížení" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "Včas" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Drobná zpoždění" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Zpožděno" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Velmi zpožděno" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Extrémně zpožděno" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Změny nástupiště" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Spojení není možné" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Zrušeno" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "Cesta v záložkách nedávno skončila." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "Vž_dy smazat" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Chybí začátek a cíl" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Chybí začátek" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Chybí cíl" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Probíhá hledání" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Příjezd do {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Chůze {walk} čekání {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Čas přestupu {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Chůze {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Přestup" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} min" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H h %_M min" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] " %_d den %_H h %_M min" msgstr[1] " %_d dny %_H h %_M min" msgstr[2] " %_d dnů %_H h %_M min" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} min." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} hod." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H hod. %-M min." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d den %-H hod. %-M min." msgstr[1] "%-d dny %-H hod. %-M min." msgstr[2] "%-d dnů %-H hod. %-M min." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Dnes" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Zítra" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Včera" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%Y-%m-%d" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} h" msgstr[1] "{} h" msgstr[2] "{} h" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Žádná" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, 1. třída" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, 2. třída" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, 1. třída" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, 2. třída" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A – VORTEILScard (s RAILPLUS)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH – HalbtaxAbo (s RAILPLUS)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH – HalbtaxAbo (bez RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL – Voordeelurenabo (s RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL – Voordeelurenabo (bez RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-Card" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – General-Abonnement" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Neznámé" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "1. třída" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "2. třída" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Pouze regionální" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Vybrané druhy dopravy" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Přímé spojení" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "Nepodařilo se získat data. Jste připojení k Internetu?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Obdržena chyba. Prosíme zašlete nám zpětnou vazbu." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Další informace" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "Došlo k neznámé chybě. Prosíme zašlete nám zpětnou vazbu." #: src/gui/error.rs:42 msgid "Error" msgstr "Chyba" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Zavřít" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "%a %d %b" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} přestup" msgstr[1] "{} přestupy" msgstr[2] "{} přestupů" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "Z {departure} do {arrival} za {travel_time} s {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} ve směru {destination}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Odjezd {start} z nástupiště {platform} v {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Odjezd {start} v {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "Příjezd {destination} na nástupiště {platform} v {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Příjezd do {destination} v {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} zastávka" msgstr[1] "{} zastávky" msgstr[2] "{} zastávek" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} v {arrival} na nástupišti {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} v {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Vybrán návrh {}" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Nevybrán žádný návrh" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "jeden návrh – nevybrán" msgstr[1] "{n} návrhy – žádný nevybrán" msgstr[2] "{n} návrhů – žádný nevybrán" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "" #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Překlady ze zdrojů dat podporují" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "každých ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "{amount} €" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "{amount} $" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{amount} {currency}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Německo" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "Severní Amerika" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Evropa" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Rakousko" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Šlesvicko-Holštýnsko" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "Celosvětové (beta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Využívá Transitous" #: src/backend/journey.rs:271 msgid "Start at {station} on platform {platform} at {time}" msgstr "Nástup v {station} na nástupišti {platform} v {time}" #: src/backend/journey.rs:274 msgid "Start at {station} at {time}" msgstr "Nástup v {station} v {time}" #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "Cesta do {destination} brzy začíná" #: src/backend/journey.rs:309 msgid "{time} transfer time to get to platform {platform}" msgstr "{time} na přesun na nástupiště {platform}" #: src/backend/journey.rs:315 msgid "{time} transfer time" msgstr "{time} na přesun" #: src/backend/journey.rs:318 msgid "Upcoming departure on platform {platform}" msgstr "Nacházející odjezd na nástupišti {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "Blíží se přestup ve stanici {station}" #: src/backend/journey.rs:335 msgid "Arriving at {destination} soon" msgstr "Zanedlouho dorazíte do {destination}" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "odjezd {train} je zpožděn o {time}" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "příjezd {train} je zpožděn o {time}" #: src/backend/journey.rs:427 msgid "{train} departing on platform {platform} today instead" msgstr "{train} dnes výjimečně odjíždí z nástupiště {platform}" #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" "Varování: už není možné stihnout navazující {train} z {origin} do " "{destination}." #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "Varování: {train} z {origin} do {destination} byl zrušen." #: src/backend/journey.rs:562 msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "Začátek v {next-origin} za {duration} na nástupišti {next-platform}" #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "Začátek v {next-origin} za {duration}" #: src/backend/journey.rs:568 msgid "Arriving at {current-destination} in {duration}" msgstr "Za {duration} dorazíte do {current-destination}" #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" "Přestup na {next-leg-name} na nástupišti {next-platform} – zbývá: {duration}" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "Přestup na {next-leg-name} – zbývá: {duration}" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "Dojeli jste do cíle cesty" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Chůze" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/da.po000066400000000000000000000616751517666454200230300ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2024-07-21 12:09+0000\n" "Last-Translator: Owen Higgins \n" "Language-Team: Danish \n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.7-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Railway" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Find alle dine rejseinformation" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "tog;bane;rejse;rejseplan;køreplaner;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Med Railway kan du søg rejseinformation på tværs af transportnet og grænser " "uden for at navigere forskellige hjemmesider. På grund af det adaptiv " "design, er det velegnet til at planlægge din tur på forhånd eller mobil på " "farten:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "Se detaljer af dine rejser inkl. spor og forsinkelser" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "Gem nuværende og fremtidens rejser samt hyppige søgninger" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" "Gør brug af avanceret søgemuligheder som filtrering ved transportmiddel" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "Og det hele for transportnet verden rundt, men mest fra Europa." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Overblik" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Afgang" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Ankomst" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Indtast tid" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Dato" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Indtast tid" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Tid" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Nu" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Samlede rejsetid" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Rejsedele" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Vælg en rejse" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Søg efter rejser" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Vis stop" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Vis mellemstationer" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Vis meddelelser" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Meddelelser" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Stop" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Almindelig" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Fjern automatisk gamle gemte rejser" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "Tidligere rejse gemmes kun i begrænset tid" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Beholdestid for rejser" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Hvor meget tid at beholde rejser efter ankomst" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Søg transportnet…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Genindlæs rejse" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Mere søgmuligheder" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Tilpas avanceret søgmuligheder" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Mere indstillinger" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Rabatkort" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Klasse" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "1. klasse" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "2. klasse" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Passer til cykler" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Vent ved skift" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Kun direkte forbindelser" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Transportmidler" #: data/resources/ui/search_options_dialog.blp:60 #, fuzzy msgid "Mainline Train" msgstr "Regionaltog" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Regionaltog" #: data/resources/ui/search_options_dialog.blp:70 #, fuzzy msgid "S-Bahn Train" msgstr "S-tog" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Bus" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Færge" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Metro" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Letbane" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Kabelsporvogn" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Taxa" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "Fra" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "Til" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Søg" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Gemte rejser" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Gemte søgninger" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "App" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Søg over gemte rejser" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Gem rejse" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Genindlæs rejse" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Afslut" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Vis genvejer" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Vis præferencer" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Åben menu" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Skift adgang og destination" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Vælg transportnet" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Hovedmenu" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Forbindelser" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Gem denne søgning" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Rejsedetaljer" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Genindlæs denne rejse" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Gem denne rejse" #: data/resources/ui/window.blp:166 #, fuzzy msgid "Watch this Trip" msgstr "Genindlæs denne rejse" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Præferencer" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Tastaturgenveje" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "_Om Railway" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Stor belægning" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Meget stor belægning" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Overordentlig belægning" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "Til tiden" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Mindre forsinkelser" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Forsinket" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Meget forsinket" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Ekstremt forsinket" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Ændrede spor" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Forbindelse ikke muligt" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Aflyst" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "En gemte rejse endte for nylig." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "Altid _slet" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Mangler start og destination" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Mangler start" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Mangler destination" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Søg i gang" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Ankomst på {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Gå {walk} Vent {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Skiftetid {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Gå {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Skift" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} min" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H t %_M min" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] " %_d dag %_H t %_M min" msgstr[1] "%_d dage %_H t %_M min" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} min." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} t." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H t. %-M min." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d dag %-H t. %-M min." msgstr[1] "%-d dage %-H t. %-M min." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "I dag" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "I morgen" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "I går" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%d/%m/%Y" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} t" msgstr[1] "{} t" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Intet" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, 1. klasse" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, 2. klasse" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, 1. klasse" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, 2. klasse" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A – VORTEILScard (med RAILPLUS)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH – HalbtaxAbo (med RAILPLUS)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH – HalbtaxAbo (uden RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL – Voordeelurenabo (med RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL – Voordeelurenabo (uden RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-Card" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – General-Abonnement" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Ukendt" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "1. klasse" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "2. klasse" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Kun regional" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Valgte transportmidler" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Direkte forbindelse" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "Kunne ikke få data. Har du internetforbindelse?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Der opstod en fejl. Venligst del feedback." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Mere information" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "Der opstod en ukendt fejl. Venligst del feedback." #: src/gui/error.rs:42 msgid "Error" msgstr "Fejl" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Luk" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, fuzzy, c-format msgid "%a %b %d" msgstr "%a, %d. %b" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} skift" msgstr[1] "{} skifter" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "Fra {departure} til {arrival} i {travel_time} med {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} mod {destination}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Afgang {start} fra spor {platform} på {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Afgang {start} på {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "Ankomst på {destination} på spor {platform} på {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Ankomst på {destination} på {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} stop" msgstr[1] "{} stop" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} på {arrival} på spor {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} på {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Forslag {} valgte" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Intet forslag valgte" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "Ét forslag, ikke valgte" msgstr[1] "{n} forslag, intet valgte" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "Owen H" #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Kildeoversættelse understøttede af" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "hver ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "€{amount}" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "${amount}" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{currency} {amount}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Tyskland" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "Nordamerika" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Europa" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Østrig" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Slesvig-Holsten" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "Over hele verden (beta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Med brug af Transitous" #: src/backend/journey.rs:271 #, fuzzy msgid "Start at {station} on platform {platform} at {time}" msgstr "Ankomst på {destination} på spor {platform} på {arrival}." #: src/backend/journey.rs:274 #, fuzzy msgid "Start at {station} at {time}" msgstr "Ankomst på {destination} på {arrival}." #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "" #: src/backend/journey.rs:309 #, fuzzy msgid "{time} transfer time to get to platform {platform}" msgstr "{stop} på {arrival} på spor {platform}" #: src/backend/journey.rs:315 #, fuzzy msgid "{time} transfer time" msgstr "Vent ved skift" #: src/backend/journey.rs:318 #, fuzzy msgid "Upcoming departure on platform {platform}" msgstr "{stop} på {arrival} på spor {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 #, fuzzy msgid "Arriving at {destination} soon" msgstr "Ankomst på {destination}." #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 #, fuzzy msgid "{train} departing on platform {platform} today instead" msgstr "Ankomst på {destination} på spor {platform} på {arrival}." #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 #, fuzzy msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "Ankomst på {destination} på spor {platform} på {arrival}." #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 #, fuzzy msgid "Arriving at {current-destination} in {duration}" msgstr "Ankomst på {destination} på {arrival}." #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Gå" #~ msgid "High Speed Train" #~ msgstr "Lyntog" #~ msgid "Last refreshed {}" #~ msgstr "Sidste opdateret {}" #~ msgid "Julian Schmidhuber" #~ msgstr "Julian Schmidhuber" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/de.po000066400000000000000000000727701517666454200230320ustar00rootroot00000000000000# German translations for DieBahn package. # Copyright (C) 2022 Julian Schmidhuber # This file is distributed under the same license as the DieBahn package. # Julian Schmidhuber , 2022. # msgid "" msgstr "" "Project-Id-Version: DieBahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2025-10-24 12:02+0000\n" "Last-Translator: Markus Göllnitz \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.14.1-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Railway" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Alle Reiseinformationen an einem Ort" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "" "train;railway;journey;planner;timetables;Zug;Abfahrten;Reiseplaner;" "Navigation;Anreise;Abreise;Bus;Fahrt;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Railway liefert Reiseinformationen aus vielen Ländern und Verkehrsnetzen, " "und das ganz ohne deren zig Websites zu jonglieren. Railways Design " "ermöglicht es, am Rechner Reisen vorzubereiten, und ist genauso geeignet, um " "unterwegs am Handy etwas herauszusuchen:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "" "Sieh Dir die Details der Verbindungen an, wie Plattform und Verspätungen" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "" "Setze Lesezeichen für zukünftige Reisen und häufig gesuchte Verbindungen" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "Nutze erweiterte Suchoptionen, wie das Filtern nach Verkehrsmittel" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "" "Und all das für Verkehrsnetze aus der gesamten Welt, mit der besten " "Abdeckung in Europa." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Anwendungsübersicht" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Abfahrt" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Ankunft" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Datum eingeben" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Datum" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Zeit eingeben" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Zeit" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Jetzt" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Reisedauer" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Reiseabschnitte" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Verbindung wählen" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Verbindungen suchen" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Zwischenhalte anzeigen" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Zwischenhalte anzeigen" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Ankündigungen anzeigen" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Ankündigungen" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Zwischenhalte" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Allgemein" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Automatisch gespeicherte Verbindungen entfernen" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "" "Zurückliegende Verbindungen werden nur für eine begrenzte Zeit gespeichert" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Speicherdauer für Verbindungen" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Für wie lange eine Verbindung nach der Ankunft behalten werden soll" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Verkehrsnetz heraussuchen …" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Verbindung aktualisieren" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Weitere Suchoptionen" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Erweiterte Sucheinstellungen" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Weitere Optionen" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Ermäßigungskarte" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Klasse" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "1. Klasse" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "2. Klasse" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Fahrradtauglich" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Minimale Umstiegszeit" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Nur Direktverbindungen" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Verkehrsmittel" #: data/resources/ui/search_options_dialog.blp:60 msgid "Mainline Train" msgstr "Fernverkehr" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Regionalverkehr" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "S-Bahn" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Bus" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Schiff" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "U-Bahn" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Straßenbahn" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Seilbahn" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Anruf-Sammeltaxi" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "Von" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "Nach" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Suchen" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Gespeicherte Verbindung" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Gespeicherte Suchen" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Anwendung" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Suche speichern" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Verbindung speichern" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Verbindung aktualisieren" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Beenden" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Tastenkürzel anzeigen" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Einstellungen öffnen" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Hauptmenü öffnen" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Start und Ziel tauschen" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Verkehrsnetz auswählen" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Hauptmenü" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Verbindungen" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Suche speichern" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Details" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Verbindung aktualisieren" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Verbindung speichern" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "Verbindung beobachten" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Einstellungen" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Tastenkürzel" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "Ü_ber Railway" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Hohe Auslastung" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Sehr hohe Auslastung" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Extrem hohe Auslastung" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "Pünktlich" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Geringe Verspätung" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Verspätet" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Sehr verspätet" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Extrem verspätet" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Gleiswechsel" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Übergang nicht mehr möglich" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Fällt aus" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "Eine gespeicherte Verbindung ist vorbei." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "Immer _Löschen" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Start und Ziel fehlen" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Start fehlt" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Ziel fehlt" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Suche läuft" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Erreiche das Ziel {}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "{walk} Fußweg, {wait} Wartezeit" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "{} Umstiegszeit" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "{} Fußweg" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Umstieg" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} min" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H h %_M min" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] " %_d Tag %_H h %_M min" msgstr[1] "%_d Tage %_H h %_M min" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} min" #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} h" #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%_H h %_M min" #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%_d Tag %_H h %_M min" msgstr[1] "%_d Tage %_H h %_M min" #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Heute" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Morgen" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Gestern" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%d.%m.%Y" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} h" msgstr[1] "{} h" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Keine" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, 1. Klasse" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, 2. Klasse" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, 1. Klasse" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, 2. Klasse" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A – VORTEILScard (mit RAILPLUS)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH – HalbtaxAbo (mit RAILPLUS)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH – HalbtaxAbo (ohne RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL – Voordeelurenabo (mit RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL – Voordeelurenabo (ohne RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-Card" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – General-Abonnement" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Unbekannt" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "1. Klasse" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "2. Klasse" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Nur Regionalverkehr" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Einige Verkehrsmittel ausgeschlossen" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Direktverbindung" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "Konnte Daten nicht holen. Sind Sie mit dem Internet verbunden?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Ein Fehler ist aufgetreten. Melden Sie das gerne zurück." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Weitere Informationen" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "Ein unbekanntes Problem ist aufgetreten. Melden Sie das gerne zurück." #: src/gui/error.rs:42 msgid "Error" msgstr "Fehler" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Schliessen" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "%a %d. %b" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} Umstieg" msgstr[1] "{} Umstiege" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "Von {departure} nach {arrival} in {travel_time} mit {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} in Richtung {destination}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Start {start}, Abfahrt von Plattform {platform} um {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Start {start}, Abfahrt um {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "Ziel {destination}, Ankunft an Plattform {platform} um {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Ziel {destination}, Ankunft um {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} Zwischenhalt" msgstr[1] "{} Zwischenhalte" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} an Plattform {platform} um {arrival}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} um {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Vorschlag {} ausgewählt" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Kein Vorschlag ausgewählt" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "ein Vorschlag, nicht ausgewählt" msgstr[1] "{n} Vorschläge, keiner ausgewählt" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "" "Julian Schmidhuber\n" "Markus Göllnitz " #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Ausgangsübersetzung unterstützt durch" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "alle ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "{amount} €" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "{amount} $" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{amount} {currency}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Deutschland" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "Nordamerika" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Europa" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Österreich" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Schleswig-Holstein" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "Weltweit (beta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "basiert auf Transitous" #: src/backend/journey.rs:271 msgid "Start at {station} on platform {platform} at {time}" msgstr "Abfahrt von {station} von Plattform {platform} um {time}" #: src/backend/journey.rs:274 msgid "Start at {station} at {time}" msgstr "Abfahrt von {station} um {time}" #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "Fahrt nach {destination} beginnt demnächst" #: src/backend/journey.rs:309 msgid "{time} transfer time to get to platform {platform}" msgstr "{time} Umstiegszeit, nächste Abfahrt von Plattform {platform}" #: src/backend/journey.rs:315 msgid "{time} transfer time" msgstr "{time} Umstiegszeit" #: src/backend/journey.rs:318 msgid "Upcoming departure on platform {platform}" msgstr "Bevorstehende Abfahrt von Plattform {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "Bevorstehender Umstieg an {station}" #: src/backend/journey.rs:335 msgid "Arriving at {destination} soon" msgstr "{destination} demnächst erreicht" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "{train} Abfahrt verspätet sich um {time}" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "{train} Ankunft verspätet sich um {time}" #: src/backend/journey.rs:427 msgid "{train} departing on platform {platform} today instead" msgstr "{train} abweichende Abfahrt von Plattform {platform}" #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" "Achtung: Anschluss zu {train} von {origin} nach {destination} nicht mehr " "möglich" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "Achtung: {train} von {origin} nach {destination} fällt aus" #: src/backend/journey.rs:562 msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "Abfahrt von {next-origin} in {duration} von Plattform {next-platform}" #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "Abfahrt von {next-origin} in {duration}" #: src/backend/journey.rs:568 msgid "Arriving at {current-destination} in {duration}" msgstr "{current-destination} in {duration} erreicht" #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" "Umstieg zu {next-leg-name} von Plattform {next-platform}, verbleibend: " "{duration}" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "Umstieg zu {next-leg-name}, verbleibend: {duration}" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "Das Fahrtziel wurde erreicht" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Fußweg" #~ msgid "High Speed Train" #~ msgstr "Fernverkehr" #~ msgid "Last refreshed {}" #~ msgstr "Zuletzt aktualisiert {}" #~ msgid "Julian Schmidhuber" #~ msgstr "Julian Schmidhuber" #~ msgid "Show Stopovers in Between" #~ msgstr "Zwischenhalte anzeigen" #~ msgid "ICE" #~ msgstr "ICE" #~ msgid "IC/EC" #~ msgstr "IC/EC" #~ msgid "Interregio/RegionalExpress" #~ msgstr "Interregio- und Schellzug" #~ msgid "Regio" #~ msgstr "Regio- und Nahverkehr" #~ msgid "S-Bahn" #~ msgstr "S-Bahn" #~ msgid "Received an invalid response. Please share feedback." #~ msgstr "" #~ "Eine ungültige Antwort vom Server erhalten. Melden Sie das gerne zurück." #~ msgid "North Rhine-Westphalia" #~ msgstr "Nordrhein-Westfalen" #, fuzzy #~ msgid "Changed" #~ msgstr "{} Umstieg" #, fuzzy #~ msgid "Translation support using Weblate." #~ msgstr "Ausgangsübersetzung unterstützt durch" #, fuzzy #~ msgid "Keyboard shortcuts" #~ msgstr "Tastenkürzel" #, fuzzy #~ msgid "Many more settings" #~ msgstr "Weitere Optionen" #, fuzzy #~ msgid "Bookmark journeys" #~ msgstr "Verbindung speichern" #~ msgid "language-code" #~ msgstr "de" #~ msgid "{}\\u{202F}min" #~ msgstr "{}\\u{202F}min" #~ msgid "%_H\\u{202F}h %_M\\u{202F}min" #~ msgstr "%_H\\u{202F}h %_M\\u{202F}min" #~ msgid "{}\\u{202F}min." #~ msgstr "{}\\u{202F}min" #~ msgid "{}\\u{202F}hrs." #~ msgstr "{}\\u{202F}h" #~ msgid "%-H\\u{202F}hrs. %-M\\u{202F}min." #~ msgstr "%-H\\u{202F}h %-M\\u{202F}min" #~ msgid "{}\\u{202F}h" #~ msgid_plural "{}\\u{202F}h" #~ msgstr[0] "{}\\u{202F}h" #~ msgstr[1] "{}\\u{202F}h" #~ msgid "Remove Past Trips From Bookmarks" #~ msgstr "Entferne gespeicherte zurückliegende Fahrten" #~ msgid "Time After Arrival After Which to Remove Them" #~ msgstr "Zeit, nach welcher sie entfernt werden sollen" #~ msgid "Refresh Journey" #~ msgstr "Verbindung aktualisieren" #~ msgid "Open Remarks" #~ msgstr "Hinweise anzeigen" #~ msgid "Delete Old Journeys" #~ msgstr "Entferne alte Verbindungen" #~ msgid "Time to Keep Journey After Arrival" #~ msgstr "Dauer, für wie lange vergangene Verbindungen erhalten bleiben" #~ msgid "On time" #~ msgstr "Pünktlich" #~ msgid "Unreachable" #~ msgstr "Nicht erreichbar" #~ msgid "Custom selection" #~ msgstr "Benutzerdefinierte Auswahl" #~ msgid "Bike accessible" #~ msgstr "Fahrradtauglich" #~ msgid "The API returned a error. Please report this." #~ msgstr "Die API hat einen Fehler zurückgegeben. Bitte melden Sie dies." #~ msgid "Failed to parse response. Please report this." #~ msgstr "Konnte Antwort nicht interpretieren. Bitte melden Sie dies." #~ msgid "{amount} €" #~ msgstr "{amount} €" #~ msgid "{amount} {currency}" #~ msgstr "{amount} {currency}" #~ msgid "Hours after planned arrival journeys will be kept" #~ msgstr "Stunden, nachdem alte Verbindungen gelöscht werden" #~ msgid "BahnCard" #~ msgstr "BahnCard" #~ msgid "Journeys" #~ msgstr "Verbindungen" #, fuzzy #~ msgid "One transition" #~ msgid_plural "{} transitions" #~ msgstr[0] "Umstiege" #~ msgstr[1] "Umstiege" #~ msgid "{} Minutes" #~ msgstr "{} Minuten" #~ msgid "Earlier" #~ msgstr "Früher" #~ msgid "Later" #~ msgstr "Später" #~ msgid "to" #~ msgstr "nach" #~ msgid "BahnCard 25" #~ msgstr "BahnCard 25" #~ msgid "BahnCard 50" #~ msgstr "BahnCard 50" #~ msgid "BahnCard 100" #~ msgstr "BahnCard 100" #~ msgid "Settings" #~ msgstr "Einstellungen" #~ msgid "" #~ "The prices displayed using a BahnCard might not always match the real " #~ "prices" #~ msgstr "" #~ "Die angezeigten Preise mit der BahnCard stimmen eventuall nicht immer mit " #~ "den realen Preisen überein" #~ msgid "Requires application restart" #~ msgstr "Benötigt einen Neustart der Applikation" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/diebahn.pot000066400000000000000000000520361517666454200242110ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "" #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "" #: data/resources/ui/search_options_dialog.blp:60 msgid "Mainline Train" msgstr "" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "" #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "" #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] "" msgstr[1] "" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "" #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "" #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "" #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "" msgstr[1] "" #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "" msgstr[1] "" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "" #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "" #: src/gui/error.rs:42 msgid "Error" msgstr "" #: src/gui/error.rs:46 msgid "_Close" msgstr "" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "" msgstr[1] "" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "" #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "" #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "" msgstr[1] "" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "" msgstr[1] "" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "" #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "" #: src/backend/journey.rs:271 msgid "Start at {station} on platform {platform} at {time}" msgstr "" #: src/backend/journey.rs:274 msgid "Start at {station} at {time}" msgstr "" #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "" #: src/backend/journey.rs:309 msgid "{time} transfer time to get to platform {platform}" msgstr "" #: src/backend/journey.rs:315 msgid "{time} transfer time" msgstr "" #: src/backend/journey.rs:318 msgid "Upcoming departure on platform {platform}" msgstr "" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 msgid "Arriving at {destination} soon" msgstr "" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 msgid "{train} departing on platform {platform} today instead" msgstr "" #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "" #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 msgid "Arriving at {current-destination} in {duration}" msgstr "" #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/es.po000066400000000000000000000700061517666454200230370ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2026-03-08 08:09+0000\n" "Last-Translator: Meru López \n" "Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.17-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Ferrocarril" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Encuentre toda la información de su viaje" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "" "train;railway;journey;planner;timetables;tren;ferrocarril;viaje;planificador;" "horarios;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Ferrocarril le permite buscar información sobre viajes a través de redes y " "fronteras sin tener que navegar por diferentes páginas web. Gracias al " "diseño adaptativo, es adecuado para planificar el viaje con antelación o con " "el móvil sobre la marcha:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "Vea los detalles de sus viajes, incluidos los andenes y las demoras" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "Destacar viajes actuales y futuros, así como búsquedas frecuentes" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" "Usar las opciones de búsqueda avanzada, como filtrar por medio de transporte" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "Y todo eso para redes de todo el mundo, pero sobre todo de Europa." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Vista general de la aplicación" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Salida" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Llegada" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Introducir fecha" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Fecha" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Introducir hora" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Hora" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Ahora" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Duración total del viaje" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Tramos del viaje" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Elija un viaje" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Buscar viajes" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Mostrar paradas" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Mostrar paradas intermedias" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Mostrar anuncios" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Anuncios" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Paradas" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "General" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Eliminar automáticamente los destacados antiguos" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "Los viajes antiguos se conservan solo por un período de tiempo" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Tiempo de conservación para los viajes" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Durante cuánto tiempo conservar los viajes tras la llegada" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Buscar redes…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Actualizar viaje" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Más opciones de búsqueda" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Refinar las opciones de búsqueda avanzada" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Más opciones" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Tarjeta descuento" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Clase" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Primera clase" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Segunda clase" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Apto para bicicletas" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Tiempo de trasbordo mínimo" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Solo conexiones directas" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Medios de transporte" #: data/resources/ui/search_options_dialog.blp:60 #, fuzzy msgid "Mainline Train" msgstr "Tren regional" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Tren regional" #: data/resources/ui/search_options_dialog.blp:70 #, fuzzy msgid "S-Bahn Train" msgstr "Trenes de cercanías" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Autobús" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Ferry" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Metro" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Tranvía" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Teleférico" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Taxi" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "Origen" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "Destino" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Buscar" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Viajes destacados" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Búsquedas destacadas" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Aplicación" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Buscar en destacados" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Destacar viaje" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Recargar viaje" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Salir" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Mostrar atajos del teclado" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Mostrar preferencias" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Abrir menú" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Intercambiar origen y destino" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Seleccionar red" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Menú principal" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Conexiones" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Destacar esta búsqueda" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Detalles del viaje" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Actualizar este viaje" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Destacar este viaje" #: data/resources/ui/window.blp:166 #, fuzzy msgid "Watch this Trip" msgstr "Actualizar este viaje" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Preferencias" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Atajos del teclado" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "_Acerca de Ferrocarril" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Carga elevada" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Carga muy elevada" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Carga excepcionalmente elevada" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "Puntual" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Demoras menores" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Demorado" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Muy demorado" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Extremadamente demorado" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Cambios de andén" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "No es posible la conexión" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Cancelado" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "Un viaje destacado terminó recientemente." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "_Eliminar siempre" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Falta el origen y el destino" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Falta el origen" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Falta el destino" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Búsqueda en curso" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Llegada a {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Andar {walk} y esperar {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Tiempo de trasbordo {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Andar {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Transbordar" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} min" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H h %_M min" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] " %_d día %_H h %_M min" msgstr[1] "%_d días %_H h %_M min" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} min." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} hrs." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H hrs. %-M min." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d día %-H hrs. %-M min." msgstr[1] "%-d días %-H hrs. %-M min." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Hoy" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Mañana" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Ayer" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%d %m %Y" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} h" msgstr[1] "{} h" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Ninguno" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, 1ª clase" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, 2ª clase" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, 1ª clase" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, 2ª clase" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A - VORTEILScard (con RAILPLUS)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH - HalbtaxAbo (con RAILPLUS)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH - HalbtaxAbo (sin RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL - Voordeelurenabo (con RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL - Voordeelurenabo (sin RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-Card" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – Suscripción general" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Desconocido" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "1ª clase" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "2ª clase" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Solo regionales" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Medios de transporte seleccionados" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Conexión directa" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "No se han podido recuperar los datos. ¿Está conectado a Internet?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Se ha producido un error. Por favor, comparta sus comentarios." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Más información" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "" "Se ha producido un problema desconocido. Por favor, comparta sus comentarios." #: src/gui/error.rs:42 msgid "Error" msgstr "Error" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Cerrar" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "%a %d %b" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} cambio" msgstr[1] "{} cambios" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "De {departure} a {arrival} en {travel_time} con {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} en dirección a {destination}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Salida {start} del andén {platform} a las {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Salida {start} a las {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "Llegada a {destination} en el andén {platform} a las {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Llegada a {destination} a las {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} parada" msgstr[1] "{} paradas" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} en {arrival} en el andén {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} a las {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Sugerencia {} seleccionada" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "No hay sugerencias seleccionadas" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "una sugerencia, sin seleccionar" msgstr[1] "{n} sugerencias, sin seleccionar" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "Óscar Fernández Díaz " #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Traducción del código fuente soportada por" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "cada ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "{amount}€" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "{amount}$" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{amount} {currency}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Alemania" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "Norteamérica" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Europa" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Austria" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Schleswig-Holstein" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "Mundial (beta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Usando Transitous" #: src/backend/journey.rs:271 #, fuzzy msgid "Start at {station} on platform {platform} at {time}" msgstr "Llegada a {destination} en el andén {platform} a las {arrival}." #: src/backend/journey.rs:274 #, fuzzy msgid "Start at {station} at {time}" msgstr "Llegada a {destination} a las {arrival}." #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "El viaje a {destination} empezará pronto" #: src/backend/journey.rs:309 #, fuzzy msgid "{time} transfer time to get to platform {platform}" msgstr "{stop} en {arrival} en el andén {platform}" #: src/backend/journey.rs:315 #, fuzzy msgid "{time} transfer time" msgstr "Tiempo de trasbordo mínimo" #: src/backend/journey.rs:318 #, fuzzy msgid "Upcoming departure on platform {platform}" msgstr "{stop} en {arrival} en el andén {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 #, fuzzy msgid "Arriving at {destination} soon" msgstr "Llegada a {destination}." #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 #, fuzzy msgid "{train} departing on platform {platform} today instead" msgstr "Llegada a {destination} en el andén {platform} a las {arrival}." #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "Aviso: {train} de {origin} a {destination} ha sido cancelado." #: src/backend/journey.rs:562 #, fuzzy msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "Llegada a {destination} en el andén {platform} a las {arrival}." #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "Empezar desde {next-origin} en {duration}" #: src/backend/journey.rs:568 #, fuzzy msgid "Arriving at {current-destination} in {duration}" msgstr "Llegada a {destination} a las {arrival}." #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Caminar" #~ msgid "High Speed Train" #~ msgstr "Tren de alta velocidad" #~ msgid "Last refreshed {}" #~ msgstr "Última actualización {}" #~ msgid "Julian Schmidhuber" #~ msgstr "Julian Schmidhuber" #~ msgid "Show Stopovers in Between" #~ msgstr "Mostrar paradas intermedias" #~ msgid "ICE" #~ msgstr "ICE" #~ msgid "IC/EC" #~ msgstr "IC/EC" #~ msgid "Interregio/RegionalExpress" #~ msgstr "Interregio/RegionalExpress" #~ msgid "Regio" #~ msgstr "Región" #~ msgid "S-Bahn" #~ msgstr "S-Bahn" #~ msgid "Received an invalid response. Please share feedback." #~ msgstr "Recibí una respuesta no válida. Por favor comparta sus comentarios." #~ msgid "North Rhine-Westphalia" #~ msgstr "Norte de Rhine-Westphalia" #, fuzzy #~ msgid "Changed" #~ msgstr "{} cambio" #, fuzzy #~ msgid "Translation support using Weblate." #~ msgstr "Traducción del código fuente soportada por" #, fuzzy #~ msgid "Keyboard shortcuts" #~ msgstr "Atajos del teclado" #, fuzzy #~ msgid "Many more settings" #~ msgstr "Más opciones" #, fuzzy #~ msgid "Bookmark journeys" #~ msgstr "Viaje a destacados" #, fuzzy #~ msgid "language-code" #~ msgstr "Idioma" #, fuzzy #~ msgid " %_d day %_H\\u{202F}h %_M\\u{202F}min" #~ msgid_plural "%_d days %_H\\u{202F}h %_M\\u{202F}min" #~ msgstr[0] "%_d día %_H hora %_M minuto" #~ msgstr[1] "%_d días %_H horas %_M minutos" #, fuzzy #~ msgid "%-d day %-H\\u{202F}hrs. %-M\\u{202F}min." #~ msgid_plural "%-d days %-H\\u{202F}hrs. %-M\\u{202F}min." #~ msgstr[0] "%_d día %_H hora %_M minuto" #~ msgstr[1] "%_d días %_H horas %_M minutos" #~ msgid "Open Remarks" #~ msgstr "Abrir observaciones" #~ msgid "Delete Old Journeys" #~ msgstr "Borrar trayectos antiguos" #~ msgid "Time to Keep Journey After Arrival" #~ msgstr "Tiempo para continuar el trayecto tras la llegada" #~ msgid "On time" #~ msgstr "Puntual" #~ msgid "Unreachable" #~ msgstr "Inaccesible" #~ msgid "Custom selection" #~ msgstr "Selección personalizada" #~ msgid "Bike accessible" #~ msgstr "Accesible en bicicleta" #~ msgid "The API returned a error. Please report this." #~ msgstr "La API ha devuelto un error. Por favor, informe de ello." #~ msgid "Failed to parse response. Please report this." #~ msgstr "No se ha podido analizar la respuesta. Por favor, informe de esto." #~ msgid "{amount} €" #~ msgstr "{amount} €" #~ msgid "{amount} {currency}" #~ msgstr "{amount} {currency}" #, fuzzy #~ msgid "{} min." #~ msgstr "{} min" #, fuzzy #~ msgid "%_H hrs. %_M min." #~ msgstr "%_H hrs %_M min" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/et.po000066400000000000000000000644541517666454200230520ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2025-10-24 12:03+0000\n" "Last-Translator: Priit Jõerüüt \n" "Language-Team: Estonian \n" "Language: et\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.14.1-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Raudtee" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Sulle vajalikud sõiduplaanid" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "" "ühistransport;rong;raudtee;bussiliinid;rongid;rongiplaan;sõiduplaan;" "reisiplaneerija;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Raudtee võimaldab sul otsida rongiplaanide ja muud sõiduplaanide teavet " "piirideüleselt eri liinivõrkudes ilma vajaduseta surfata paljudes " "veebisaitides. Seadmetundliku kujunduse tõttu saad sa oma reise mugavalt " "kavandada nii koduarvutist, kui liikvel olles mõnest väiksemast seadmest:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "" "Vaata oma reisi üksikasjalikku teavet, sealhulgas konkreetseid perroone ja " "hilinemisi" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "" "Lisa järjehoidjaid nii hetkel pooleliolevale, kui tulevastele reisidele, " "samuti ka korduvatele otsingutele" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" "Kasuta otsingu lisavalikuid, nagu tulemuste eristamine transpordivahendi " "alusel" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "Ja kõike seda Euroopa liinivõrkudes, aga mujalgi maailmas." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Rakenduse üldvaade" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Väljumine" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Saabumine" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Sisesta kuupäev" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Kuupäev" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Sisesta kellaaeg" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Kellaaeg" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Praegu" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Reisiaeg kokku" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Reisi segmendid" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Vali reis" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Otsi reise" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Näita peatusi" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Näita vahepeatusi" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Näita teadaandeid" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Teadaanded" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "peatust" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Üldised" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Eemalda vanad järjehoidjad automaatselt" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "Vanu reise hoitakse vaid valitud aja jooksul" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Möödunud reiside salvestamise aeg" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Kui kaua peale saabumist möödunud reise hoitakse alles" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Otsi liinivõrke…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Uuenda reisi andmeid" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Täiendavad otsinguvalikud" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Nende lisavalikutega saad otsingut täpsustada" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Lisavalikud" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Sooduskaart" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Reisiklass" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Esimene klass" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Teine klass" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Jalgratast saab kaasa võtta" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Minimaalne ümberistumise aeg" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Ainult otseliinid" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Transpordiliigid" #: data/resources/ui/search_options_dialog.blp:60 msgid "Mainline Train" msgstr "Magistraalliinide rong" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Piirkondlik rong" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "Saksa S-Bahn linnalähirong" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Buss" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Praam" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Metroo" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Tramm" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Köisraudtee" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Takso" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "Algpunkt" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "Sihtpunkt" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Otsi" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Reiside järjehoidjad" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Otsingute järjehoidjad" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Rakendus" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Lisa otsing järjehoidjana" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Lisa reis järjehoidjana" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Laadi reis uuesti" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Välju" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Näita kiirklahve" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Näita eelistusi" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Ava menüü" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Vaheta algpunkt ja sihtpunkt" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Vali liinivõrk" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Põhimenüü" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Ühendused" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Lisa see reis järjehoidjana" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Reisi üksikasjad" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Uuenda selle reisi andmeid" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Lisa sellele reisile järjehoidja" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "Järlgi selle reisi andmeid" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Eelistused" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Kiirklahvid" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "R_akenduse teave" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Suur täituvus" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Väga suur täituvus" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Ülisuur täituvus" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "Vastavalt sõiduplaanile" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Väike hilinemine" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Hilineb" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Hilineb palju" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Hilineb ülipalju" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Perroon on muutunud" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Ühendus pole võimalik" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Tühistatud" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "Järjehoidjana märgitud reis lõppes hiljuti." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "_Kustuta alati" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Algpunkt ja sihtpunkt on puudu" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Algpunkt on puudu" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Sihtpunkt on puudu" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Otsing on pooleli" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Saabud sihtpunkti {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Kõnni {walk}, oota {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Ümberistumine {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Kõnni {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Ümberistumine" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} min" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H t %_M min" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] " %_d päev %_H t %_M min" msgstr[1] "%_d päeva %_H t %_M min" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} min." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} t." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H t %-M min." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d päev %-H t %-M min." msgstr[1] "%-d päeva %-H t %-M min." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Täna" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Homme" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Eile" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%d.%m.%Y" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} t" msgstr[1] "{} t" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Puudub" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, 1. klass" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, 2. klass" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, 1. klass" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, 2. klass" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A – VORTEILScard (RAILPLUS kaardiga)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH – HalbtaxAbo (RAILPLUS kaardiga)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH – HalbtaxAbo (RAILPLUS kaardita)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL – Voordeelurenabo (RAILPLUS kaardiga)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL – Voordeelurenabo (RAILPLUS kaardita)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-Card" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – General-Abonnement" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Teadmata" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "1. klass" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "2. klass" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Ainult regionaalliiklus" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Vali transpordiliik" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Otseliin" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "" "Andmete laadimine ei õnnestu. Kas sinu arvutis või nutiseadmes kindlasti " "võrguühendus?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Saime päringuvastuseks vea. Palun jaga seda teavet meiega." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Lisateave" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "Tekkis tundmatu olukord. Palun jaga seda teavet meiega." #: src/gui/error.rs:42 msgid "Error" msgstr "Viga" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Sulge" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "%a %b %d" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} ümberistumine" msgstr[1] "{} ümberistumist" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "" "Algpunktist {departure} sihtpunkti {arrival} reisiajaga {travel_time}, " "ümberistumisi {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} sihtpunkti {destination} suunas" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Väljumine algpunktist {start} kell {departure} perroonilt {platform}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Väljumine algpunktist {start} kell {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "" "Saabumine sihtpunkti {destination} kell {arrival} perroonile {platform}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Saabumine sihtpunkti {destination} kell {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} peatus" msgstr[1] "{} peatust" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "vahepeatus {stop} kell {arrival} perroonil {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "vahepeatus {stop} kell {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "{} - soovitus on valitud" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Ühtegi soovitust pole valitud" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "üks soovitus, pole valitud" msgstr[1] "{n} soovitust, ühtegi pole valitud" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "Priit Jõerüüt" #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Tõlge" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "iga ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "{amount} €" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "{amount} $" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{currency} {amount}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Saksamaa" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "Põhja-Ameerika" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Euroopa" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Austria" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Schleswig-Holstein" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "Üle maailma (beetaversioon)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Kasutades Transitouse teenust" #: src/backend/journey.rs:271 msgid "Start at {station} on platform {platform} at {time}" msgstr "Väljumine kell {time} jaamast {station} perroonilt {platform}" #: src/backend/journey.rs:274 msgid "Start at {station} at {time}" msgstr "Väljumine kell {time} jaamast {station}" #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "Reis sihtkohta {destination} algab peagi" #: src/backend/journey.rs:309 msgid "{time} transfer time to get to platform {platform}" msgstr "ümberistumise aeg {time} jõudmaks perroonile {platform}" #: src/backend/journey.rs:315 msgid "{time} transfer time" msgstr "ümberistumise aeg {time}" #: src/backend/journey.rs:318 msgid "Upcoming departure on platform {platform}" msgstr "Väljumine õige pea perroonilt {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "Õige pea on ümberistumine jaamas: {station}" #: src/backend/journey.rs:335 msgid "Arriving at {destination} soon" msgstr "Saabud õige pea sihtkohta {destination}" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "{train} rongi väljumine hilineb {time} võrra" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "{train} rongi saabumine hilineb {time} võrra" #: src/backend/journey.rs:427 msgid "{train} departing on platform {platform} today instead" msgstr "{train} rong väljub täna perroonilt {platform}" #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" "Hoiatus: Enam ei jõua ümber istuda {train} rongile liinil {origin} - " "{destination}." #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "Hoiatus: Rong {train} liinil {origin} - {destination} on tühistatud." #: src/backend/journey.rs:562 msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "" "Väljumiseni järgmisesse sihtkohta {destination} perroonilt {platform} jäänud " "aega {duration}" #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "Alguseni järgmisest lähtekohast {next-origin} jäänud {duration}" #: src/backend/journey.rs:568 msgid "Arriving at {current-destination} in {duration}" msgstr "Saabumiseni sihtpunkti {current-destination} jäänud aega {duration}" #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" "Ümberistumine sihtkoha {next-leg-name} suunas perroonilt {next-platform}, " "väljumiseni jäänud: {duration}" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "Ümberistumine sihtkoha {next-leg-name}, väljumiseni jäänud: {duration}" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "Oled jõudnud reisi sihtkohta" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Kõnni" #~ msgid "High Speed Train" #~ msgstr "Kiirrong" #~ msgid "Last refreshed {}" #~ msgstr "Viimati uuendatud {}" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/eu.po000066400000000000000000000630201517666454200230370ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2026-02-19 00:09+0000\n" "Last-Translator: Ibai Oihanguren Sala \n" "Language-Team: Basque \n" "Language: eu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.16.1-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Railway" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Bilatu zure bidaietarako informazio guztia" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "trena;railway;bidaia;ibilbidea;planifikatu;ordutegiak;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Railwayk bidaietarako informazioa kontsultatzeko aukera ematen dizu, sare " "eta mugez gaindi, webgune ezberdinak arakatzen aritu beharrik gabe. Diseinu " "moldagarriari esker, oso egokia da bidaia aurrez planifikatzeko edo bidean " "zoazela mugikorrarekin erabiltzeko:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "" "Ikusi zure bidaien xehetasunak, nasei eta atzerapenei buruzko informazio eta " "guzti" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "Gorde uneko eta etorkizuneko bidaiak, eta ohiko bilaketak" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" "Bilaketa aukera aurreratuak eskura; adibidez, garraiobideagatik iragaztea" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "Eta guzti hau mundu osoko sareentzako, baina bereziki Europakoentzako." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Aplikazioaren ikuspegi orokorra" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Irteera" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Iritsiera" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Sartu data" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Data" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Sartu ordua" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Ordua" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Orain" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Bidaiaren iraupena guztira" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Bidaiaren zatiak" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Aukeratu bidaia bat" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Bilatu bidaiak" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Erakutsi geldialdiak" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Erakutsi tarteko geldialdiak" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Erakutsi oharrak" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Oharrak" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Geldialdiak" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Orokorra" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Ezabatu automatikoki gordetako bidaia/bilaketa zaharrak" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "Pasatako bidaiak denbora-tarte baterako soilik gordeko dira" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Bidaiak gordetzeko denbora-tartea" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "" "Bidaia helmugara iritsi ondoren zenbat denboraz gorde behar den informazioa" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Bilatu sareetan…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Eguneratu bidaia" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Bilaketa aukera gehiago" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Findu bilaketa aurreratuko aukerak" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Aukera gehiago" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Deskontu txartela" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Maila" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Lehen maila" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Bigarren maila" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Bizikletak onartzen dira" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Tren-aldaketarako gutxieneko denbora" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Lotura zuzenak soilik" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Garraiobideak" #: data/resources/ui/search_options_dialog.blp:60 #, fuzzy msgid "Mainline Train" msgstr "Eskualdeko trena" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Eskualdeko trena" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "Aldiriko trena" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Autobusa" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Ferrya" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Metroa" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Tranbia" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Teleferikoa" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Taxia" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "Jatorria" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "Helmuga" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Bilatu" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Gordetako bidaiak" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Gordetako bilaketak" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Aplikazioa" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Gorde bilaketa" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Gorde bidaia" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Birkargatu bidaia" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Irten" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Erakutsi laster-teklak" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Erakutsi hobespenak" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Ireki menua" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Trukatu jatorria eta helmuga" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Hautatu sarea" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Menu nagusia" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Loturak" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Gorde bilaketa hau" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Bidaiaren xehetasunak" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Eguneratu bidaia hau" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Gorde bidaia hau" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "Zaindu bidaia hau" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Hobespenak" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Lasterbideak" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "Railwayri _buruz" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Karga altua" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Oso karga altua" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Karga bereziki altua" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "Garaiz dator" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Atzerapen txikia" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Berandu dator" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Oso berandu dator" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Izugarri berandu dator" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Nasa aldaketak" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Ez dago lotura posiblerik" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Bertan behera utzia" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "Gordetako bidaia bat orain gutxi amaitu da." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "_Ezabatu beti" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Jatorria eta helmuga falta dira" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Jatorria falta da" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Helmuga falta da" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Bilaketa martxan dago" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "{destination}(e)ra iritsiera." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Oinez {walk} Itxaron {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Tren-aldaketarako denbora {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Oinez {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Tren-aldaketa" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} min" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H h %_M min" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] " egun %_d, %_H h %_M min" msgstr[1] "%_d egun %_H h %_M min" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} min." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} ordu" #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H ordu %-M min." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "egun %-d, %-H ordu %-M min." msgstr[1] "%-d egun %-H ordu %-M min." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Gaur" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Bihar" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Atzo" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %Bk %e" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%Y-%m-%d" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} h" msgstr[1] "{} h" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Bat ere ez" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, 1. maila" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, 2. maila" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, 1. maila" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, 2. maila" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A – VORTEILScard (RAILPLUSekin)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH – HalbtaxAbo (RAILPLUSekin)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH – HalbtaxAbo (RAILPLUS gabe)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL – Voordeelurenabo (RAILPLUSekin)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL – Voordeelurenabo (RAILPLUS gabe)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-Card" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – Abonamendu orokorra" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Ezezaguna" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "1. maila" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "2. maila" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Eskualdekoak soilik" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Hautatutako garraiobideak" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Lotura zuzena" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "Huts egin du datuak eskuratzean. Internetera konektatua zaude?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Errore bat gertatu da. Mesedez, partekatu gurekin informazioa." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Informazio gehiago" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "Arazo ezezaguna gertatu da. Mesedez, partekatu gurekin informazioa." #: src/gui/error.rs:42 msgid "Error" msgstr "Errorea" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Itxi" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "%a %b %e" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "aldaketa {}" msgstr[1] "{} aldaketa" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "{departure}(e)tik {arrival}(e)ra {travel_time}an, {changes_text}rekin" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} trena, {destination} norabidean" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "{start}(e)tik irteera {platform} nasatik, {departure}(e)an." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "{start}(e)tik irteera {departure}(e)an." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "{destination}(e)ra iritsiera {platform} nasara {arrival}(e)an." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "{destination}(e)ra iritsiera {arrival}(e)an." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "Geldialdi {}" msgstr[1] "{} geldialdi" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} geldialdia {platform} nasan {arrival}(e)an" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} geldialdia {arrival}(e)an" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "{} iradokizuna hautatua" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Ez da iradokizunik hautatu" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "iradokizun bat, hautatu gabe" msgstr[1] "{n} iradokizun, hautatu gabe" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "Ibai Oihanguren Sala" #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Iturrien itzulpenaren sostengua" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "~{}(e)ko maiztasuna" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "{amount} €" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "{amount} $" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{amount} {currency}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Alemania" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "Ipar Amerika" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Europa" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Austria" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Schleswig-Holstein" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "Mundu osoa (beta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Transitous erabiltzen" #: src/backend/journey.rs:271 #, fuzzy msgid "Start at {station} on platform {platform} at {time}" msgstr "{destination}(e)ra iritsiera {platform} nasara {arrival}(e)an." #: src/backend/journey.rs:274 #, fuzzy msgid "Start at {station} at {time}" msgstr "{destination}(e)ra iritsiera {arrival}(e)an." #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "" #: src/backend/journey.rs:309 #, fuzzy msgid "{time} transfer time to get to platform {platform}" msgstr "{stop} geldialdia {platform} nasan {arrival}(e)an" #: src/backend/journey.rs:315 #, fuzzy msgid "{time} transfer time" msgstr "Tren-aldaketarako gutxieneko denbora" #: src/backend/journey.rs:318 #, fuzzy msgid "Upcoming departure on platform {platform}" msgstr "{stop} geldialdia {platform} nasan {arrival}(e)an" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 #, fuzzy msgid "Arriving at {destination} soon" msgstr "{destination}(e)ra iritsiera." #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 #, fuzzy msgid "{train} departing on platform {platform} today instead" msgstr "{destination}(e)ra iritsiera {platform} nasara {arrival}(e)an." #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 #, fuzzy msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "{destination}(e)ra iritsiera {platform} nasara {arrival}(e)an." #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 #, fuzzy msgid "Arriving at {current-destination} in {duration}" msgstr "{destination}(e)ra iritsiera {arrival}(e)an." #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Oinez" #~ msgid "High Speed Train" #~ msgstr "Abiadura handiko trena" #~ msgid "Last refreshed {}" #~ msgstr "Azken eguneratzea {}" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/fi.po000066400000000000000000000632301517666454200230270ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2025-02-18 12:52+0000\n" "Last-Translator: Ricky Tigg \n" "Language-Team: Finnish \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.10.1-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Railway" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Löydä matkatiedot" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "train;railway;journey;planner;timetables;juna;aikataulu;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Railway mahdollistaa matkatietojen etsinnän välittämättä eri verkostoista ja " "maarajoista ilman, että joudut vierailla lukuisilla eri verkkosivustoilla. " "Mukautuvan käyttöliittymän avulla voit suunnitella matkat joko etukäteen tai " "mobiililaitteella ollessasi jo liikkeellä:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "Katso matkan yksityiskohdat mukaan lukien laiturit ja viivästykset" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "Lisää matkat ja usein toistuvat haut kirjanmerkkeihin" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" "Käytä lisävalintoja suodattaaksesi matkoja esimerkiksi liikkumistavan " "perusteella" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "" "Kaikki tämä maailmanlaajuisiin verkostoihin, mutta pääasiassa Eurooppaan." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Sovelluksen yleisnäkymä" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Lähtö" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Saapuminen" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Syötä päivä" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Päivä" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Syötä kellonaika" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Kellonaika" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Nyt" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Matkustusaika yhteensä" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Matkaosuuksia" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Valitse matka" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Etsi matkoja" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Näytä pysähdykset" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Näytä välipysähdykset" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Näytä ilmoitukset" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Ilmoitukset" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Pysähdykset" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Yleiset" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Poista vanhat kirjanmerkit automaattisesti" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "Menneet matkat säilytetään vain tämän ajan" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Matkojen säilytysaika" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Kuinka kauan matkoja säilytetään saapumisen jälkeen" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Etsi verkostoja…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Virkistä matka" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Lisää hakuvalintoja" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Määritä lisähakuvalinnat" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Lisää valintoja" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Alennuskortti" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Luokka" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Ensimmäinen luokka" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Toinen luokka" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Pyörä mukana" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Siirtymäaika vähintään" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Vain suorat yhteydet" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Liikkumistavat" #: data/resources/ui/search_options_dialog.blp:60 #, fuzzy msgid "Mainline Train" msgstr "Alueellinen juna" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Alueellinen juna" #: data/resources/ui/search_options_dialog.blp:70 #, fuzzy msgid "S-Bahn Train" msgstr "Paikallisjuna" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Bussi" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Lautta" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Metro" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Raitiovaunu" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Köysirata" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Taksi" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "Mistä" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "Minne" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Etsi" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Kirjanmerkityt matkat" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Kirjanmerkityt haut" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Sovellus" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Lisää haku kirjanmerkkeihin" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Lisää matka kirjanmerkkeihin" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Lataa matka uudelleen" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Lopeta" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Näytä pikanäppäimet" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Näytä asetukset" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Avaa valikko" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Vaihda lähtö- ja määränpää" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Valitse verkosto" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Päävalikko" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Yhteydet" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Lisää tämä haku kirjanmerkkeihin" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Matkan yksityiskohdat" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Virkistä tämä matka" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Lisää tämä matka kirjanmerkkeihin" #: data/resources/ui/window.blp:166 #, fuzzy msgid "Watch this Trip" msgstr "Virkistä tämä matka" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Asetukset" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Pikanäppäimet" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "_Tietoja - Railway" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Suuri kuorma" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Erittäin suuri kuorma" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Poikkeuksellisen suuri kuorma" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "Ajallaan" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Pieniä viivästyksiä" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Myöhässä" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Varsin myöhässä" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Erittäin myöhässä" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Laiturimuutoksia" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Yhteys ei ole mahdollinen" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Peruttu" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "Kirjanmerkitty matka päättyi äskettäin." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "Poista _aina" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Aloitus ja määränpää puuttuvat" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Aloitus puuttuu" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Määränpää puuttuu" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Haku on meneillään" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Saavu kohteeseen {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Kävele {walk} Odota {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Siirtymäaika {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Kävele {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Siirtymä" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} min" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H t %_M min" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] " %_d päivä %_H t %_M min" msgstr[1] "%_d päivää %_H t %_M min" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} min." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} t." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H t. %-M min." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d päivä %-H t. %-M min." msgstr[1] "%-d päivää %-H t. %-M min." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H.%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Tänään" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Huomenna" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Eilen" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} t" msgstr[1] "{} t" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Ei mitään" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, 1. luokka" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, 2. luokka" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, 1. luokka" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, 2. luokka" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A – VORTEILScard (RAILPLUS:n kanssa)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH – HalbtaxAbo (RAILPLUS:n kanssa)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH – HalbtaxAbo (ilman RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL – Voordeelurenabo (RAILPLUS:n kanssa)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL – Voordeelurenabo (ilman RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-Card" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – General-Abonnement" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Tuntematon" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "1. luokka" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "2. luokka" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Vain alueellinen" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Valitse liikkumistavat" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Suora yhteys" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "Tietojen noutaminen epäonnistui. Oletko yhteydessä internetiin?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Virhe vastaanotettu. Lähetä palautetta." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Lisätietoja" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "Tapahtui tuntematon virhe. Lähetä palautetta." #: src/gui/error.rs:42 msgid "Error" msgstr "Virhe" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Sulje" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} vaihto" msgstr[1] "{} vaihtoa" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "" "Lähtö {departure}, määränpää {arrival}, aika {travel_time}, vaihtoja " "{changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} suuntaan {destination}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Lähtö {start} laiturilta {platform} kello {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Lähtö {start} kello {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "" "Saavu määränpäähän {destination} laiturille {platform} kello {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Saavu määränpäähän {destination} kello {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} pysähdys" msgstr[1] "{} pysähdystä" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} kohteessa {arrival} laiturilla {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 #, fuzzy msgid "{stop} at {arrival}" msgstr "Saavu määränpäähän {destination} kello {arrival}." #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Ehdotus {} valittu" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Ehdotusta ei ole valittu" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "yksi ehdotus, yhtäkään ei valittu" msgstr[1] "{n} ehdotusta, yhtäkään ei valittu" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "Jiri Grönroos" #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "~{} välein" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "{amount} €" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "${amount}" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{currency} {amount}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Saksa" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "Pohjois-Amerikka" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Eurooppa" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Itävalta" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Schleswig-Holstein" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "Maailmanlaajuinen (beeta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "" #: src/backend/journey.rs:271 #, fuzzy msgid "Start at {station} on platform {platform} at {time}" msgstr "" "Saavu määränpäähän {destination} laiturille {platform} kello {arrival}." #: src/backend/journey.rs:274 #, fuzzy msgid "Start at {station} at {time}" msgstr "Saavu määränpäähän {destination} kello {arrival}." #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "" #: src/backend/journey.rs:309 #, fuzzy msgid "{time} transfer time to get to platform {platform}" msgstr "{stop} kohteessa {arrival} laiturilla {platform}" #: src/backend/journey.rs:315 #, fuzzy msgid "{time} transfer time" msgstr "Siirtymäaika vähintään" #: src/backend/journey.rs:318 #, fuzzy msgid "Upcoming departure on platform {platform}" msgstr "{stop} kohteessa {arrival} laiturilla {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 #, fuzzy msgid "Arriving at {destination} soon" msgstr "Saavu kohteeseen {destination}." #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 #, fuzzy msgid "{train} departing on platform {platform} today instead" msgstr "" "Saavu määränpäähän {destination} laiturille {platform} kello {arrival}." #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 #, fuzzy msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "" "Saavu määränpäähän {destination} laiturille {platform} kello {arrival}." #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 #, fuzzy msgid "Arriving at {current-destination} in {duration}" msgstr "Saavu määränpäähän {destination} kello {arrival}." #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Kävele" #~ msgid "High Speed Train" #~ msgstr "Nopea juna" #~ msgid "Last refreshed {}" #~ msgstr "Viimeksi virkistetty {}" #~ msgid "Julian Schmidhuber" #~ msgstr "Julian Schmidhuber" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/fr.po000066400000000000000000000701421517666454200230400ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # Irénée THIRION , 2023. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2024-09-12 17:09+0000\n" "Last-Translator: rene-coty \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 5.8-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Chemin de fer" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Trouvez toutes vos informations de voyage" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "trains;chemin de fer;trajets;voyages;planifier;horaires;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Railway vous permet de rechercher des trajets en train nationaux et " "internationaux sans avoir à naviguer sur plusieurs sites différents. Grâce à " "son design adaptatif, Railway est aussi pratique pour planifier votre voyage " "à l’avance que pour accéder à vos informations de trajet sur mobile :" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "Visualiser les détails de votre voyage, comme le quai et les retards" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "" "Ajoutez en favoris vos voyage présents et futurs ainsi que vos recherches " "fréquentes" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" "Utiliser des options de recherche avancées comme le filtrage par mode de " "transport" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "" "Et tout cela pour de nombreux réseaux de chemins de fer à travers le monde, " "mais principalement en Europe." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Aperçu de l’application" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Départ" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Arrivée" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Date saisie" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Date" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Heure saisie" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Heure" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Maintenant" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Temps de trajet total" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Segments du voyage" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Sélectionnez un trajet" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Recherchez un trajet" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Afficher les arrêts" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Afficher les arrêts intermédiaires" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Afficher les annonces" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Annonces" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Arrêts" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Général" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Suppression automatique des anciens favoris" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "Les voyages précédents ne sont gardés que pendant un temps limité" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Durée des voyages à préserver" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Pour combien de temps il faut garder les voyages après l'arrivée" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Rechercher des réseaux…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Actualiser voyage" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Plus d’options de recherche" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Affiner les options de recherche avancée" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Plus d’options" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Carte de réduction" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Classe" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Première classe" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Seconde classe" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Accessible en vélo" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Délai minimal de correspondance" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Connexions directes uniquement" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Modes de transport" #: data/resources/ui/search_options_dialog.blp:60 #, fuzzy msgid "Mainline Train" msgstr "Train régional" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Train régional" #: data/resources/ui/search_options_dialog.blp:70 #, fuzzy msgid "S-Bahn Train" msgstr "Trains périurbains" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Bus" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Ferry" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Métro" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Tramway" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Téléphérique" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Taxi" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "De" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "À" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Rechercher" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Voyages favoris" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Recherches favoris" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Application" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Ajouter recherche aux favoris" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Ajouter voyage aux favoris" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Actualiser voyage" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Quitter" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Raccourcis clavier" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Préférences" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Menu principal" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Inverser le départ et la destination" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Sélectionnez un réseau" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Menu principal" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Connexions" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Marquer cette recherche d’un signet" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Détails du voyage" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Actualiser ce trajet" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Ajouter ce trajet aux signets" #: data/resources/ui/window.blp:166 #, fuzzy msgid "Watch this Trip" msgstr "Actualiser ce trajet" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Préférences" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Raccourcis clavier" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "À _propos de Railway" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Forte affluence" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Très forte affluence" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Affluence exceptionnelle" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "À l’heure" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Retards mineurs" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Retardé" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Très retardé" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Extrêmement retardé" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Quai modifié" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Connexion impossible" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Annulé" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "Un voyage mis en favori s’est terminé récemment." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "Toujours_Supprimer" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Départ et destination manquants" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Départ manquant" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Destination manquante" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Recherche en cours" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Arriver à {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Marcher {walk} Attendre {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Durée de correspondance {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Marcher {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Correspondance" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} min" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H h %_M min" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] "%_d jour %_H h %_M min" msgstr[1] "%_d jours %_H h %_M min" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} min." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} h." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H h. %-M min." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d jour %-H hrs. %-M min." msgstr[1] "%-d jours %-H hrs. %-M min." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H : %M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Aujourd’hui" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Demain" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Hier" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%d-%m-%Y" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} h" msgstr[1] "{} h" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Aucune" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, 1ère classe" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, 2nde classe" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, 1ère classe" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, 2nde classe" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A – VORTEILScard (avec RAILPLUS)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH – HalbtaxAbo (avec RAILPLUS)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH – HalbtaxAbo (sans RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL – Voordeelurenabo (avec RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL – Voordeelurenabo (sans RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-Card" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – General-Abonnement" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Inconnu" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "1ère classe" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "2nde classe" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Régional uniquement" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Modes de transport sélectionnés" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Liaison directe" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "Échec de la récupération des données. Êtes-vous connecté à Internet ?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Erreur reçue. Merci de la signaler." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Plus d’informations" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "Une erreur inconnue s’est produite. Pensez à la signaler." #: src/gui/error.rs:42 msgid "Error" msgstr "Erreur" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Fermer" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, fuzzy, c-format msgid "%a %b %d" msgstr "%a %d %b" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} correspondance" msgstr[1] "{} correspondances" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "De {departure} à {arrival} dans {travel_time} avec {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} à destination de {destination}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Départ de {start} de la voie {platform} à {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Départ {start} à {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "Arrivée à {destination} sur la voie {platform} à {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Arrivée à {destination} à {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} Arrêt" msgstr[1] "{} Arrêts" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} à {arrival} sur la voie {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} à {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Suggestion {} sélectionnée" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Aucune suggestion sélectionnée" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "une suggestion, non sélectionnée" msgstr[1] "{n} suggestions, non sélectionnées" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "Irénée Thirion" #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Traduction de source soutenu par" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "chaque ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "{amount} €" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "{amount} $" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{amount} {currency}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Allemagne" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "Amérique du Nord" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Europe" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Autriche" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Schleswig-Holstein" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "À travers le monde (beta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Correspondances" #: src/backend/journey.rs:271 #, fuzzy msgid "Start at {station} on platform {platform} at {time}" msgstr "Arrivée à {destination} sur la voie {platform} à {arrival}." #: src/backend/journey.rs:274 #, fuzzy msgid "Start at {station} at {time}" msgstr "Arrivée à {destination} à {arrival}." #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "" #: src/backend/journey.rs:309 #, fuzzy msgid "{time} transfer time to get to platform {platform}" msgstr "{stop} à {arrival} sur la voie {platform}" #: src/backend/journey.rs:315 #, fuzzy msgid "{time} transfer time" msgstr "Délai minimal de correspondance" #: src/backend/journey.rs:318 #, fuzzy msgid "Upcoming departure on platform {platform}" msgstr "{stop} à {arrival} sur la voie {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 #, fuzzy msgid "Arriving at {destination} soon" msgstr "Arriver à {destination}." #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 #, fuzzy msgid "{train} departing on platform {platform} today instead" msgstr "Arrivée à {destination} sur la voie {platform} à {arrival}." #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 #, fuzzy msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "Arrivée à {destination} sur la voie {platform} à {arrival}." #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 #, fuzzy msgid "Arriving at {current-destination} in {duration}" msgstr "Arrivée à {destination} à {arrival}." #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Marche" #~ msgid "High Speed Train" #~ msgstr "Train à Haute Vitesse" #~ msgid "Last refreshed {}" #~ msgstr "Dernièrement actualisé {}" #~ msgid "Julian Schmidhuber" #~ msgstr "Julian Schmidhuber" #~ msgid "Show Stopovers in Between" #~ msgstr "Afficher les arrêts intermédiaires" #~ msgid "ICE" #~ msgstr "ICE" #~ msgid "IC/EC" #~ msgstr "IC/EC" #~ msgid "Interregio/RegionalExpress" #~ msgstr "Interrégion/ExpressRégional" #~ msgid "Regio" #~ msgstr "Regio" #~ msgid "S-Bahn" #~ msgstr "RER" #~ msgid "Received an invalid response. Please share feedback." #~ msgstr "Réponse invalide reçue. Merci de la signaler." #~ msgid "North Rhine-Westphalia" #~ msgstr "Rhénanie-du-Nord-Westphalie" #, fuzzy #~ msgid "Changed" #~ msgstr "{} correspondance" #, fuzzy #~ msgid "Translation support using Weblate." #~ msgstr "Traduction de source soutenu par" #, fuzzy #~ msgid "Keyboard shortcuts" #~ msgstr "Raccourcis clavier" #, fuzzy #~ msgid "Many more settings" #~ msgstr "Plus d’options" #, fuzzy #~ msgid "Bookmark journeys" #~ msgstr "Ajouter voyage aux favoris" #, fuzzy #~ msgid "language-code" #~ msgstr "langue" #~ msgid "Remove Past Trips From Bookmarks" #~ msgstr "Retirer les voyages passés des signets" #~ msgid "Time After Arrival After Which to Remove Them" #~ msgstr "Délai de retrait après l’arrivée" #, fuzzy #~ msgid "Refresh Journey" #~ msgstr "Trajet" #~ msgid "Open Remarks" #~ msgstr "Ouvrir les remarques" #~ msgid "Delete Old Journeys" #~ msgstr "Supprimer les anciens trajets" #~ msgid "Time to Keep Journey After Arrival" #~ msgstr "Temps nécessaire pour poursuivre le voyage après l’arrivée" #~ msgid "On time" #~ msgstr "À l’heure" #~ msgid "Unreachable" #~ msgstr "Inaccessible" #~ msgid "Custom selection" #~ msgstr "Sélection personnalisée" #~ msgid "Bike accessible" #~ msgstr "Accessible en vélo" #~ msgid "The API returned a error. Please report this." #~ msgstr "L’API a retourné une erreur. Pensez à le signaler." #~ msgid "Failed to parse response. Please report this." #~ msgstr "Échec de l’analyse de la réponse. Pensez à signaler cet événement." #~ msgid "{amount} €" #~ msgstr "{amount} €" #~ msgid "{amount} {currency}" #~ msgstr "{amount} {currency}" #~ msgid "Hours after planned arrival journeys will be kept" #~ msgstr "Heures prises en compte après l’arrivée prévue" #~ msgid "BahnCard" #~ msgstr "BahnCard" #~ msgid "Journeys" #~ msgstr "Trajets" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/hi.po000066400000000000000000000745671517666454200230500ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2024-07-22 16:09+0000\n" "Last-Translator: Scrambled777 \n" "Language-Team: Hindi \n" "Language: hi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 5.7-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "रेलवे" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "अपनी यात्रा की सारी जानकारी प्राप्त करें" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "ट्रेन;रेलवे;यात्रा;योजनाकार;समय सारिणी;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "रेलवे आपको विभिन्न वेबसाइटों पर जाये बिना नेटवर्क और सीमाओं पर यात्रा की जानकारी देखने " "की सुविधा देता है। अनुकूली डिज़ाइन के कारण, अपनी यात्रा की योजना पहले से बनाना या चलते-" "फिरते मोबाइल से बनाना उपयुक्त है:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "प्लेटफार्म और देरी सहित अपनी यात्राओं का विवरण देखें" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "वर्तमान और भविष्य की यात्राओं के साथ-साथ बारंबार खोज को भी बुकमार्क करें" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "परिवहन के साधन के आधार पर फिल्टर करने जैसे अग्रिम खोज विकल्पों का उपयोग करें" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "और यह सब दुनिया भर के नेटवर्क के लिए, लेकिन अधिकतर यूरोप से।" #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "अनुप्रयोग अवलोकन" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "प्रस्थान" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "आगमन" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "आगत तारीख" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "तारीख" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "आगत समय" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "समय" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "अभी" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "कुल यात्रा समय" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "यात्रा खंड" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "एक यात्रा चुनें" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "यात्राएं खोजें" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "ठहराव दिखाएं" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "मध्यवर्ती ठहराव दिखाएं" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "घोषणाएं दिखाएं" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "घोषणाएं" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "ठहराव" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "सामान्य" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "पुराने बुकमार्क स्वचालित रूप से हटाएं" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "पिछली यात्राओं को केवल कुछ समय के लिए रखा जाता है" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "यात्राओं के लिए संरक्षण समय" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "आगमन के बाद यात्राओं को कितने समय तक बनाए रखना है" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "नेटवर्क खोजें…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "यात्रा ताजा करें" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "अधिक खोज विकल्प" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "उन्नत खोज विकल्प परिष्कृत करें" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "अधिक विकल्प" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "डिस्काउंट कार्ड" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "श्रेणी" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "प्रथम श्रेणी" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "द्रितीय श्रेणी" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "साइकिल सुलभ" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "न्यूनतम स्थानांतरण समय" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "केवल सीधे कनेक्शन" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "परिवहन के तरीके" #: data/resources/ui/search_options_dialog.blp:60 #, fuzzy msgid "Mainline Train" msgstr "क्षेत्रीय रेल" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "क्षेत्रीय रेल" #: data/resources/ui/search_options_dialog.blp:70 #, fuzzy msgid "S-Bahn Train" msgstr "उपनगरीय रेल" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "बस" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "फेरी" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "सबवे" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "ट्राम" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "केबलकार" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "टैक्सी" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "यहां से" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "यहां तक" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "खोजें" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "बुकमार्क की गई यात्राएं" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "बुकमार्क की गई खोजें" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "अनुप्रयोग" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "बुकमार्क खोजें" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "यात्रा को बुकमार्क करें" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "यात्रा पुनः लोड करें" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "छोड़ें" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "शॉर्टकट दिखाएं" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "प्राथमिकताएं दिखाएं" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "मेनू खोलें" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "प्रस्थान और गंतव्य बदलें" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "नेटवर्क चुनें" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "मुख्य मेनू" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "कनेक्शन" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "इस खोज को बुकमार्क करें" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "यात्रा विवरण" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "इस यात्रा को ताजा करें" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "इस यात्रा को बुकमार्क करें" #: data/resources/ui/window.blp:166 #, fuzzy msgid "Watch this Trip" msgstr "इस यात्रा को ताजा करें" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "प्राथमिकताएं" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "कीबोर्ड शॉर्टकट" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "रेलवे के बारे में (_A)" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "उच्च भार" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "बहुत उच्च भार" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "असाधारण उच्च भार" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "समय पर" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "मामूली देरी" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "विलंबित" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "बहुत विलंबित" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "अत्यंत विलंबित" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "प्लेटफार्म परिवर्तन" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "कनेक्शन संभव नहीं" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "रद्द" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "एक बुकमार्क की गई यात्रा हाल ही में समाप्त हुई।" #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "हमेशा मिटाएं (_D)" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "प्रस्थान और गंतव्य गायब हैं" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "प्रस्थान गायब है" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "गंतव्य गायब है" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "खोज जारी है" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "{destination} पर आगमन।" #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "{walk} चलें, {wait} रुकें" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "स्थनांतरण समय {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "{} चलें" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "स्थानांतरण" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} मिन" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H घं %_M मिन" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] "%_d दिन %_H घं %_M मिन" msgstr[1] "%_d दिन %_H घं %_M मिन" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} मिन।" #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} घं।" #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H घं. %-M मिन।" #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d दिन %-H घं. %-M मिन।" msgstr[1] "%-d दिन %-H घं. %-M मिन।" #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "आज" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "कल" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "बिता कल" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%Y-%m-%d" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} घं" msgstr[1] "{} घं" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "कोई नहीं" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, प्रथम श्रेणी" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, द्वितीय श्रेणी" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, प्रथम श्रेणी" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, द्वितीय श्रेणी" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A – VORTEILScard (RAILPLUS के साथ)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH – HalbtaxAbo (RAILPLUS के साथ)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH – HalbtaxAbo (बिना RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL – Voordeelurenabo (बिना RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL – Voordeelurenabo (बिना RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-Card" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – General-Abonnement" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "अज्ञात" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "प्रथम श्रेणी" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "द्वितीय श्रेणी" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "केवल क्षेत्रीय" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "परिवहन के चयनित साधन" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "सीधे कनेक्शन" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "डेटा लाने में विफल। क्या आप इंटरनेट से जुड़े हैं?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "एक त्रुटि मिली। कृपया प्रतिक्रिया साझा करें।" #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "अधिक जानकारी" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "एक अज्ञात समस्या उत्पन्न हुई। कृपया प्रतिक्रिया साझा करें।" #: src/gui/error.rs:42 msgid "Error" msgstr "त्रुटि" #: src/gui/error.rs:46 msgid "_Close" msgstr "बंद करें (_C)" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "%a %b %d" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} परिवर्तन" msgstr[1] "{} परिवर्तन" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "{changes_text} के साथ {travel_time} में {departure} से {arrival} तक" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{destination} की दिशा में {train}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "{departure} {start} से प्लेटफार्म {platform} से प्रस्थान।" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "{departure} {start} से प्रस्थान।" #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "{destination} प्लेटफार्म {platform} पर {arrival} आगमन।" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "{destination} पर {arrival} आगमन।" #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} ठहराव" msgstr[1] "{} ठहराव" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "प्लेटफार्म {platform} पर {arrival} पर {stop}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{arrival} पर {stop}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "सुझाव {} चयनित" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "कोई सुझाव चयनित नहीं" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "एक सुझाव, चयनित नहीं" msgstr[1] "{n} सुझाव, कोई भी चयनित नहीं" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "Scrambled777 " #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "स्रोत अनुवाद समर्थित" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "हर ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "€{amount}" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "${amount}" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{currency} {amount}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "जर्मनी" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "उत्तर अमेरिका" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "यूरोप" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "ऑस्ट्रिया" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "स्लेसविग-होल्स्टेन" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "विश्वव्यापी (बीटा)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Transitous पर आधारित" #: src/backend/journey.rs:271 #, fuzzy msgid "Start at {station} on platform {platform} at {time}" msgstr "{destination} प्लेटफार्म {platform} पर {arrival} आगमन।" #: src/backend/journey.rs:274 #, fuzzy msgid "Start at {station} at {time}" msgstr "{destination} पर {arrival} आगमन।" #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "" #: src/backend/journey.rs:309 #, fuzzy msgid "{time} transfer time to get to platform {platform}" msgstr "प्लेटफार्म {platform} पर {arrival} पर {stop}" #: src/backend/journey.rs:315 #, fuzzy msgid "{time} transfer time" msgstr "न्यूनतम स्थानांतरण समय" #: src/backend/journey.rs:318 #, fuzzy msgid "Upcoming departure on platform {platform}" msgstr "प्लेटफार्म {platform} पर {arrival} पर {stop}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 #, fuzzy msgid "Arriving at {destination} soon" msgstr "{destination} पर आगमन।" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 #, fuzzy msgid "{train} departing on platform {platform} today instead" msgstr "{destination} प्लेटफार्म {platform} पर {arrival} आगमन।" #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 #, fuzzy msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "{destination} प्लेटफार्म {platform} पर {arrival} आगमन।" #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 #, fuzzy msgid "Arriving at {current-destination} in {duration}" msgstr "{destination} पर {arrival} आगमन।" #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "चलें" #~ msgid "High Speed Train" #~ msgstr "उच्च गति रेल" #~ msgid "Last refreshed {}" #~ msgstr "अंतिम बार ताजा {}" #~ msgid "Julian Schmidhuber" #~ msgstr "जूलियन श्मिधुबर" #~ msgid "Show Stopovers in Between" #~ msgstr "बीच के ठहराव दिखाएं" #~ msgid "ICE" #~ msgstr "ICE" #~ msgid "IC/EC" #~ msgstr "IC/EC" #~ msgid "Interregio/RegionalExpress" #~ msgstr "Interregio/RegionalExpress" #~ msgid "Regio" #~ msgstr "Regio" #~ msgid "S-Bahn" #~ msgstr "S-Bahn" #~ msgid "Received an invalid response. Please share feedback." #~ msgstr "एक अमान्य प्रतिक्रिया प्राप्त हुई। कृपया प्रतिक्रिया साझा करें।" #~ msgid "North Rhine-Westphalia" #~ msgstr "उत्तर राइन-वेस्टफालिया" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/hr.po000066400000000000000000000655101517666454200230450ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2025-10-29 12:49+0000\n" "Last-Translator: Milo Ivir \n" "Language-Team: Croatian \n" "Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=" "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? " "1 : 2);\n" "X-Generator: Weblate 5.14.1-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Željeznica" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Pronađi sve informacije za tvoje putovanje" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "vlak;željeznica;putovanje;planiranje;vremenske tablice;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Aplikacija „Željeznica” omogućuje traženje putnih informacija o željezničkim " "mrežama i granicama bez potrebe za pretraživanje raznih web stranica. " "Prilagodljiv dizajn omogućuje planiranje putovanja unaprijed ili koristeći " "mobitel tijekom putovanja:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "Pogledaj detalje putovanja uključujući perone i kašnjenja" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "Zabilježi trenutačna i buduća putovanja kao i česte pretrage" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" "Koristi napredne opcije pretraživanja kao što je filtriranje prema vrsti " "prijevoza" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "" "I sve to za željezničke mreže iz cijelog svijeta, ali uglavnom za Europu." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Pregled aplikacije" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Odlazak" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Dolazak" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Unesi datum" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Datum" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Unesi vrijeme" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Vrijeme" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Sada" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Ukupno vrijeme putovanja" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Dionice putovanja" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Odaberi putovanje" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Pretraži putovanja" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Prikaži stanice" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Prikaži međustanice" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Prikaži najave" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Najave" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Stanice" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Općenito" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Automatski ukloni stare zabilješke" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "Prošla putovanja se čuvaju samo određeno vrijeme" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Vrijeme čuvanja putovanja" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Vrijeme čuvanja putovanja nakon dolaska" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Pretraži željezničke mreže …" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Aktualiziraj putovanje" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Više opcija pretrage" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Napredne opcije pretrage" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Više opcija" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Kartica s popustom" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Razred" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Prvi razred" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Drugi razred" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Pristupačno za bicikle" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Minimum vremena za presjedanje" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Samo direktne veze" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Vrste transporta" #: data/resources/ui/search_options_dialog.blp:60 msgid "Mainline Train" msgstr "Međugradski vlak" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Regionalni vlak" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "Prigradski vlak" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Autobus" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Trajekt" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Podzemna željeznica" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Tramvaj" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Žičara" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Taksi" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "Od" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "Do" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Pretraga" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Zabilježena putovanja" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Zabilježene pretrage" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Aplikacija" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Zabilježi pretragu" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Zabilježi putovanje" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Ponovo učitaj putovanje" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Zatvori aplikaciju" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Prikaži prečace" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Prikaži postavke" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Otvori izbornik" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Zamijeni polazište i odredište" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Odaberi željezničku mrežu" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Glavni izbornik" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Veze" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Zabilježi ovu pretragu" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Detalji putovanja" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Aktualiziraj ovo putovanje" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Zabilježi ovo putovanje" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "Prati ovo putovanje" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Postavke" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Tipkovni prečaci" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "_O aplikaciji Željeznica" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Veliki tovar" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Vrlo veliki tovar" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Izuzetno veliki tovar" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "Na vrijeme" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Manja kašnjenja" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Kasni" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Podosta kasni" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Kasni izuzetno dugo" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Promjene perona" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Veza nije moguća" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Otkazano" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "Jedno zabilježeno putovanje je nedavno završeno." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "Uvijek _izbriši" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Nedostaju polazište i odredište" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Nedostaje polazište" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Nedostaje odredište" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Pretraga u tijeku" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Dolazak u {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Hodaj {walk}, čekaj {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Vrijeme za presjedanje {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Hodaj {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Presjedanje" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} min" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H h %_M min" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] "%_d dan %_H h, %_M min" msgstr[1] "%_d dana %_H h, %_M min" msgstr[2] "%_d dana %_H h, %_M min" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} min" #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} h" #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H h %-M min" #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%_d dan %_H h, %_M min" msgstr[1] "%_d dana %_H h, %_M min" msgstr[2] "%_d dana %_H h, %_M min" #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Danas" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Sutra" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Jučer" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%d. %m. %Y." #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} h" msgstr[1] "{} h" msgstr[2] "{} h" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Niti jedan" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, prvi razred" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, drugi razred" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, prvi razred" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, drugi razred" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A – VORTEILScard (s RAILPLUS)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH – HalbtaxAbo (s RAILPLUS)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH – HalbtaxAbo (bez RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL – Voordeelurenabo (s RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL – Voordeelurenabo (bez RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-Card" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – General-Abonnement" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Nepoznato" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "Prvi razred" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "Drugi razred" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Samo regionalni" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Odabrani načini transporta" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Direktna veza" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "Neuspjelo dohvaćanje podataka. Je li postoji internetska veza?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Primljena je greška. Pošalji povratne informacije." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Više informacija" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "Dogodio se nepoznat problem. Pošalji povratne informacije." #: src/gui/error.rs:42 msgid "Error" msgstr "Greška" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Zatvori" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "%a, %d. %m." #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} promjena" msgstr[1] "{} promjene" msgstr[2] "{} promjena" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "Od {departure} do {arrival} u {travel_time} sa {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} u smjeru {destination}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Odlazak iz polazišta {start} s perona {platform} u {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Odlazak iz polazišta {start} u {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "Dolazak u {destination} na peronu {platform} u {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Dolazak u {destination} u {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} stanica" msgstr[1] "{} stanice" msgstr[2] "{} stanica" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} u {arrival} na peronu {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} u {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Odabran je prijedlog {}" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Nijedan pridlog nije odabran" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "jedan prijedlog, nije odabran" msgstr[1] "{n} prijedloga, nijedan nije odabran" msgstr[2] "{n} prijedloga, nijedan nije odabran" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "Milo Ivir " #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Prijevod izvora podržava" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "svakih ca {}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "{amount} €" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "{amount} $" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{amount} {currency}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Njemačka" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "Sjeverna amerika" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Europa" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Austrija" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Schleswig-Holstein" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "Širom svijeta (beta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Koristi uslugu Transitous" #: src/backend/journey.rs:271 msgid "Start at {station} on platform {platform} at {time}" msgstr "Polazište: {station} na peronu {platform} u {time}" #: src/backend/journey.rs:274 msgid "Start at {station} at {time}" msgstr "Polazište: {station} u {time}" #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "Putovanje za {destination} će uskoro početi" #: src/backend/journey.rs:309 msgid "{time} transfer time to get to platform {platform}" msgstr "{time} vrijeme presjedanja do perona {platform}" #: src/backend/journey.rs:315 msgid "{time} transfer time" msgstr "{time} vrijeme presjedanja" #: src/backend/journey.rs:318 msgid "Upcoming departure on platform {platform}" msgstr "Nadolazeći polazak na peronu {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "Uskoro nadolazi stanica {station} za presjedanje" #: src/backend/journey.rs:335 msgid "Arriving at {destination} soon" msgstr "Dolazak u {destination} uskoro" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "{train} odlazak kasni {time}" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "{train} dolazak kasni {time}" #: src/backend/journey.rs:427 msgid "{train} departing on platform {platform} today instead" msgstr "{train} danas odlazi na peronu {platform}" #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" "Upozorenje: Više nije moguće stići {train} iz {origin} za {destination}." #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "Upozorenje: {train} iz {origin} za {destination} je otkazan." #: src/backend/journey.rs:562 msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "Polazište: {next-origin} za {duration} na peronu {next-platform}" #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "Polazište: {next-origin} za {duration}" #: src/backend/journey.rs:568 msgid "Arriving at {current-destination} in {duration}" msgstr "Dolazak u {current-destination} za {duration}" #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" "Promjena u {next-leg-name} na platformi {next-platform}, preostalo: " "{duration}" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "Promijenite u {next-leg-name}, preostalo: {duration}" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "Cilj putovanja je dostignut" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Hodaj" #~ msgid "High Speed Train" #~ msgstr "Brzi vlak" #~ msgid "Last refreshed {}" #~ msgstr "Zadnji put aktualizirano {}" #~ msgid "Julian Schmidhuber" #~ msgstr "Julian Schmidhuber" #~ msgid "ICE" #~ msgstr "ICE" #~ msgid "IC/EC" #~ msgstr "IC/EC" #~ msgid "Interregio/RegionalExpress" #~ msgstr "Interregionalni/Regionalni express" #~ msgid "Regio" #~ msgstr "Regija" #, fuzzy #~ msgid "Keyboard shortcuts" #~ msgstr "Tipkovničke kratice" #, fuzzy #~ msgid "Many more settings" #~ msgstr "Više opcija" #, fuzzy #~ msgid "Bookmark journeys" #~ msgstr "Izaberi putovanje" #, fuzzy #~ msgid "language-code" #~ msgstr "jezik" #~ msgid "Open Remarks" #~ msgstr "Otvori primjedbe" #~ msgid "Delete Old Journeys" #~ msgstr "Obriši stara putovanja" #~ msgid "Time to Keep Journey After Arrival" #~ msgstr "Vrijeme zadržavanja putovanja nakon dolaska" #~ msgid "On time" #~ msgstr "Na vrijeme" #~ msgid "Unreachable" #~ msgstr "Nedostupno" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/hu.po000066400000000000000000000657061517666454200230570ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2025-03-21 00:06+0000\n" "Last-Translator: rdbende \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.11-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Vasút" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Utazások részletes tervezése" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "vonat;vasút;utazás;tervező;menetrendek;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "A Vasút segítségével hálózatokon és határokon átívelő utazási információkat " "kereshet anélkül, hogy különböző webhelyeken kellene keresgélnie. Az adaptív " "kialakításnak köszönhetően alkalmas az utazás előre megtervezésére vagy " "mobilra útközben:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "" "Utazások részleteinek megtekintése, beleértve a vágányokat és a késéseket" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "" "Jelenlegi és jövőbeli utazások, valamint gyakori keresések mentése a " "könyvjelzők közé" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "Haladó keresési beállítások, például a közlekedési eszközök szűrésével" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "" "És mindezt a világ minden tájáról, de leginkább Európából származó hálózatok " "számára." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Alkalmazás áttekintése" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Indulás" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Érkezés" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Dátum megadása" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Dátum" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Idő megadása" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Idő" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Most" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Összes utazási idő" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Utazási szakaszok" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Utazás kijelölése" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Utazások keresése" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Megállóhelyek megjelenítése" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Közbenső megállók megjelenítése" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Közlemények megjelenítése" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Közlemények" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Megállóhelyek" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Általános" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Régi könyvjelzők automatikus eltávolítása" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "A korábbi utazásokat csak egy ideig tároljuk" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Utazások megőrzési ideje" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Mennyi ideig kell megtartani az utazásokat az érkezés után" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Hálózatok keresése…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Utazás frissítése" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "További keresési beállítások" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Haladó keresési beállítások finomítása" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "További beállítások" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Kedvezménykártya" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Osztály" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Első osztály" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Másodosztály" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Kerékpár szállítható" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Legkisebb átszállási idő" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Csak közvetlen járat" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Közlekedési eszközök" #: data/resources/ui/search_options_dialog.blp:60 #, fuzzy msgid "Mainline Train" msgstr "Regionális vonatok" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Regionális vonatok" #: data/resources/ui/search_options_dialog.blp:70 #, fuzzy msgid "S-Bahn Train" msgstr "Elővárosi vonatok" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Busz" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Komp" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Metró" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Villamos" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Felvonó" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Taxi" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "Honnan?" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "Hova?" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Keresés" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Könyvjelzővel ellátott utazások" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Könyvjelzővel ellátott keresések" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Alkalmazás" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Könyvjelző keresés mentése" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Utazás könyvjelzőzése" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Utazás újratöltése" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Kilépés" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Gyorsbillentyűk" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Beállítások megjelenítése" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Menü megnyitása" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Indulás és érkezés cserése" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Hálózat kijelölése" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Főmenü" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Csatlakozások" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Keresés mentése a könyvjelzők közé" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Utazás részletei" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Utazás frissítése" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Utazás mentése a könyvjelzők közé" #: data/resources/ui/window.blp:166 #, fuzzy msgid "Watch this Trip" msgstr "Utazás frissítése" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Beállítások" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Gyorsbillentyűk" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "_A Vasút névjegye" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Magas terhelés" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Nagyon magas terhelés" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Kivételesen magas terhelés" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "Időben" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Kisebb késések" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Késleltetett" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Nagyon késleltetett" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Rendkívül késleltetett" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Vágány változások" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Csatlakozás nem lehetséges" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Törölve" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "Egy könyvjelzőzött utazás nemrég véget ért." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "_Törlés mindig" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Indulás és érkezés hiányzik" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Indulás hiányzik" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Érkezés hiányzik" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Keresés folyamatban van…" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Érkezés ide: {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "{walk} séta, {wait} várakozás" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Átszállási idő {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Séta {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Átszállás" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} perc" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H óra %_M perc" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] " %_d nap %_H óra %_M perc" msgstr[1] "%_d nap %_H óra %_M perc" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} perc" #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} óra" #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H óra %-M perc" #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d nap %-H óra %-M perc" msgstr[1] "%-d nap %-H óra %-M perc" #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Ma" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Holnap" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Tegnap" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%B %d., %a" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%Y-%m-%d" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} óra" msgstr[1] "{} óra" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Nincs" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, 1. osztály" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, 2. osztály" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, 1. osztály" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, 2. osztály" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A – VORTEILScard (RAILPLUS-szal)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH – HalbtaxAbo (RAILPLUS-szal)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH – HalbtaxAbo (RAILPLUS nélkül)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL – Voordeelurenabo (RAILPLUS-szal)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL – Voordeelurenabo (RAILPLUS nélkül)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-kártya" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – General-Abonnement" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Ismeretlen" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "1. osztály" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "2. osztály" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Csak regionális" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Kijelölt közlekedési eszközök" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Közvetlen járat" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "Az adatok lekérése nem sikerült. Működik az internetkapcsolat?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Hiba történt. Kérjük, ossza meg visszajelzését." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "További tájékoztatás" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "Ismeretlen hiba történt. Kérjük, ossza meg visszajelzését." #: src/gui/error.rs:42 msgid "Error" msgstr "Hiba" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Bezárás" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, fuzzy, c-format msgid "%a %b %d" msgstr "%b. %d., %a" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} változás" msgstr[1] "{} változás" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "" "Indulás: {departure}. Érkezés: {arrival}. Utazási idő: {travel_time}. " "Változásokkal: {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} vonat, {destination} irányába" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "" "Indulás innen: {start} {platform}. vágányon, a következő időpontban: " "{departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Indulás innen: {start}, a következő időpontban: {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "" "Érkezés ide: {destination} {platform}. vágányon, a következő időpontban: " "{arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Érkezés ide: {destination}, a következő időpontban: {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} megállóhely" msgstr[1] "{} megállóhely" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} {arrival} időpontban a(z) {platform}. vágányon" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "Megállóhely: {stop}, a következő időpontban: {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Javaslat {} kiválasztva" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Nincs kiválasztva javaslat" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "Egy javaslat, nincs kiválasztva" msgstr[1] "{n} javaslat, nincs kiválasztva" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "" "Ad majórem Dei glóriam\n" "Dévényi Benedek " #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "A forrás fordítását támogatja" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "körülbelül minden: {}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "EUR€{amount}" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "USD${amount}" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{currency}{amount}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Németország" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "Észak-Amerika" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Európa" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Ausztria" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Schleswig-Holstein" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "Világszintű (béta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "A Transitous használatával" #: src/backend/journey.rs:271 #, fuzzy msgid "Start at {station} on platform {platform} at {time}" msgstr "" "Érkezés ide: {destination} {platform}. vágányon, a következő időpontban: " "{arrival}." #: src/backend/journey.rs:274 #, fuzzy msgid "Start at {station} at {time}" msgstr "Érkezés ide: {destination}, a következő időpontban: {arrival}." #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "" #: src/backend/journey.rs:309 #, fuzzy msgid "{time} transfer time to get to platform {platform}" msgstr "{stop} {arrival} időpontban a(z) {platform}. vágányon" #: src/backend/journey.rs:315 #, fuzzy msgid "{time} transfer time" msgstr "Legkisebb átszállási idő" #: src/backend/journey.rs:318 #, fuzzy msgid "Upcoming departure on platform {platform}" msgstr "{stop} {arrival} időpontban a(z) {platform}. vágányon" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 #, fuzzy msgid "Arriving at {destination} soon" msgstr "Érkezés ide: {destination}." #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 #, fuzzy msgid "{train} departing on platform {platform} today instead" msgstr "" "Érkezés ide: {destination} {platform}. vágányon, a következő időpontban: " "{arrival}." #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 #, fuzzy msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "" "Érkezés ide: {destination} {platform}. vágányon, a következő időpontban: " "{arrival}." #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 #, fuzzy msgid "Arriving at {current-destination} in {duration}" msgstr "Érkezés ide: {destination}, a következő időpontban: {arrival}." #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Séta" #~ msgid "High Speed Train" #~ msgstr "Nagysebességű vasút" #~ msgid "Last refreshed {}" #~ msgstr "Utolsó frissítés: {}" #~ msgid "Julian Schmidhuber" #~ msgstr "Julian Schmidhuber" #~ msgid "Show Stopovers in Between" #~ msgstr "Megállóhelyek megjelenítése között" #~ msgid "ICE" #~ msgstr "ICE" #~ msgid "IC/EC" #~ msgstr "IC/EC" #~ msgid "Interregio/RegionalExpress" #~ msgstr "InterRégió/RegionálisExpressz" #~ msgid "Regio" #~ msgstr "Régió" #~ msgid "S-Bahn" #~ msgstr "S-Bahn" #~ msgid "Received an invalid response. Please share feedback." #~ msgstr "Érvénytelen válasz érkezett. Kérjük, ossza meg visszajelzését." #~ msgid "North Rhine-Westphalia" #~ msgstr "Észak-Rajna-Vesztfália" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/ia.po000066400000000000000000000522141517666454200230220ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2025-02-03 18:01+0000\n" "Last-Translator: \"Emilio S.\" \n" "Language-Team: Interlingua \n" "Language: ia\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.10-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Railway" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "" #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Data" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "" #: data/resources/ui/search_options_dialog.blp:60 msgid "Mainline Train" msgstr "" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "" #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "" #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] "" msgstr[1] "" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "" #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "" #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "" #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "" msgstr[1] "" #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "" msgstr[1] "" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "" #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "" #: src/gui/error.rs:42 msgid "Error" msgstr "" #: src/gui/error.rs:46 msgid "_Close" msgstr "" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "" msgstr[1] "" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "" #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "" #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "" msgstr[1] "" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "" msgstr[1] "" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "" #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "" #: src/backend/journey.rs:271 msgid "Start at {station} on platform {platform} at {time}" msgstr "" #: src/backend/journey.rs:274 msgid "Start at {station} at {time}" msgstr "" #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "" #: src/backend/journey.rs:309 msgid "{time} transfer time to get to platform {platform}" msgstr "" #: src/backend/journey.rs:315 msgid "{time} transfer time" msgstr "" #: src/backend/journey.rs:318 msgid "Upcoming departure on platform {platform}" msgstr "" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 msgid "Arriving at {destination} soon" msgstr "" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 msgid "{train} departing on platform {platform} today instead" msgstr "" #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "" #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 msgid "Arriving at {current-destination} in {duration}" msgstr "" #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/it.po000066400000000000000000000713171517666454200230520ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2025-12-01 21:00+0000\n" "Last-Translator: boblaspugna4f1ee5d391024b4c \n" "Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.15-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Ferrovia" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Trova tutte le informazioni di viaggio" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "treno;ferrovia;viaggio;orari;pianificazione;mezzi;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Railway permette di cercare informazioni di viaggio attraverso diversi " "servizi e stati senza dover navigare attraverso diversi siti web. Grazie al " "suo design adattativo, risulta perfetto per pianificare viaggi su " "dispositivi mobile:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "" "Visualizza i dettagli relativi ai tuoi percorsi, compresi binari e ritardi" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "Salva tra i preferiti percorsi futuri e le ricerche più frequenti" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" "Fai uso di opzioni avanzate di ricerca, ad esempio filtrando per tipologia " "di trasporto" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "" "E tutto questo attraverso servizi di trasporti in tutto il mondo, con una " "maggiore copertura per quelli in Europa." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Panoramica dell' Applicazione" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Partenza" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Arrivo" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Inserire la data" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Data" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Inserire l'ora" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Ora" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Adesso" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Durata totale del viaggio" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Dettagli percorso" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Scegliere un percorso" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Cerca percorsi" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Mostra fermate" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Mostra Fermate Intermedie" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Mostra avvisi" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Avvisi" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Fermate" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Informazioni generali" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Rimuovi automaticamente vecchi preferiti" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "I percorsi passati vengono salvati solo per un certo periodo di tempo" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Tempo di conservazione dei percorsi" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "" "Quanto tempo i percorsi vengono mantenuti una volta raggiunta la destinazione" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Cerca servizio…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Aggiorna percorso" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Più opzioni di ricerca" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Perfeziona le opzioni di ricerca avanzata" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Più opzioni" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Carta sconto" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Classe" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Prima classe" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Seconda classe" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Accessibile con biciclette" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Tempo minimo per il cambio" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Solo connessioni dirette" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Modalità di trasporto" #: data/resources/ui/search_options_dialog.blp:60 msgid "Mainline Train" msgstr "Treno Di Linea" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Treno Regionale" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "Treni Suburbani" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Bus" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Traghetto" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Metropolitana" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Tram" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Funivia" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Taxi" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "Da" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "A" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Cerca" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Percorsi salvati nei preferiti" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Ricerche salvate nei preferiti" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Applicazione" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Salva la ricerca" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Salva il percorso" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Ricarica il percorso" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Esci" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Mostra le scorciatoie da tastiera" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Mostra le preferenze" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Apre il menù" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Scambia partenza e destinazione" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Seleziona il servizio" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Menù principale" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Connessioni" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Aggiungi questa ricerca ai preferiti" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Dettagli percorso" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Aggiorna questo percorso" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Aggiungi questo percorso ai preferiti" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "Controlla questo percorso" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Preferenze" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Scorciatoie da tastiera" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "_Informazioni su Railway" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Affollato" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Molto affollato" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Estremamente affollato" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "Puntuale" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Brevi ritardi" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "In ritardo" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "In forte ritardo" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Estremamente in ritardo" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Binario modificato" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Connessione non possibile" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Cancellato" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "Uno dei percorsi salvati è recentemente terminato." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "Cancella_Sempre" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Partenza e destinazione non indicate" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Partenza non indicata" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Destinazione non indicata" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Ricerca in corso" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Arrivo a {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Cammina per {walk}, attendi {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Tempo per il trasferimento {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Cammina per {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Trasferimento" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} min" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H ore %_M min" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] " %_d giorno %_H h %_M min" msgstr[1] "%_d giorni %_H h %_M min" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} min." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} ore." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H ore %-M min." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d giorno %-H ore %-M min." msgstr[1] "%-d giorni %-H ore %-M min." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Oggi" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Domani" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Ieri" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%Y-%m-%d" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} h" msgstr[1] "{} h" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Nessuno" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, prima classe" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, seconda classe" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, prima classe" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, seconda classe" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A - VORTEILScard (con RAILPLUS)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH - HalbtaxAbo (con RAILPLUS)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH - HalbtaxAbo (senza RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL - Voordeelurenabo (con RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL - Voordeelurenabo (senza RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "Carta SH" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH - Abbonamento generico" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Sconosciuto" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "Prima classe" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "Seconda classe" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Solo regionali" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Modalità di trasporto selezionate" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Connessione diretta" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "Impossibile recuperare informazioni. La connessione internet è attiva?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Si è verificato un errore. Per favore aprire una segnalazione." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Ulteriori informazioni" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "Errore sconosciuto. Per favore aprire una segnalazione." #: src/gui/error.rs:42 msgid "Error" msgstr "Errore" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Chiudi" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "%a %b %d" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} cambio" msgstr[1] "{} cambi" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "Da {departure} a {arrival} in {travel_time} con {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} in direzione di {destination}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Partenza {start} dal binario {platform} alle {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Partenza {start} alle {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "Arrivo a {destination} sulla piattaforma {platform} alle {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Arrivo a {destination} alle {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} fermata" msgstr[1] "{} fermate" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} alle {arrival} al binario {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} alle {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Proposta {} selezionata" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Nessuna proposta selezionata" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "una proposta, non selezionata" msgstr[1] "{n} proposte, nessuna selezionata" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "" "Bob Sponge \n" "Davide Ferracin " #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Traduzione del codice sorgente supportata da" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "ogni ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "{amount} €" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "{amount} $" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{amount} {currency}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Germania" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "Nord America" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Europa" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Austria" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Schleswig-Holstein" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "In Tutto Il Mondo (beta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Utilizzare Transitous" #: src/backend/journey.rs:271 msgid "Start at {station} on platform {platform} at {time}" msgstr "Partenza a {station} sul binario {platform} alle {time}." #: src/backend/journey.rs:274 msgid "Start at {station} at {time}" msgstr "Partenza a {station} alle {time}." #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "Il Viaggio verso {destination} inizierà a breve" #: src/backend/journey.rs:309 msgid "{time} transfer time to get to platform {platform}" msgstr "{time} Tempo di cambio per giungere al binario {platform}" #: src/backend/journey.rs:315 msgid "{time} transfer time" msgstr "{time} Tempo per il cambio" #: src/backend/journey.rs:318 msgid "Upcoming departure on platform {platform}" msgstr "Prossima partenza al binario {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "Prossimo cambio a {station}" #: src/backend/journey.rs:335 msgid "Arriving at {destination} soon" msgstr "Arrivo a {destination}" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "La partenza di {train} è in ritardo di {time}" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "L'arrivo di {train} è in ritardo di {time}" #: src/backend/journey.rs:427 msgid "{train} departing on platform {platform} today instead" msgstr "Il {train} è in partenza oggi dal binario {platform}" #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" "Attenzione: il collegamento {train} da {origin} a {destination} non è più " "possibile." #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "Attenzione: {train} da {origin} a {destination} è stato cancellato." #: src/backend/journey.rs:562 msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "Partenza {next-origin} tra {duration} sul binario {next-platform}" #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "Partenza {next-origin} tra {duration}" #: src/backend/journey.rs:568 msgid "Arriving at {current-destination} in {duration}" msgstr "Arrivo a {current-destination} tra {duration}" #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" "Cambio per {next-leg-name} sul binario {next-platform}, tempo rimanente: " "{duration}" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "Cambio per {next-leg-name}, tempo rimanente: {duration}" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "La destinazione è stata raggiunta" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Cammina" #~ msgid "High Speed Train" #~ msgstr "Treno Ad Alta Velocità" #~ msgid "Last refreshed {}" #~ msgstr "Ultimo aggiornamento {}" #~ msgid "Julian Schmidhuber" #~ msgstr "Julian Schmidhuber" #~ msgid "Show Stopovers in Between" #~ msgstr "Mostra fermate intermedie" #~ msgid "ICE" #~ msgstr "ICE" #~ msgid "IC/EC" #~ msgstr "IC/EC" #~ msgid "Interregio/RegionalExpress" #~ msgstr "Interregionale/RegionalExpress" #~ msgid "Regio" #~ msgstr "Regionale" #~ msgid "S-Bahn" #~ msgstr "S-Bahn" #~ msgid "Received an invalid response. Please share feedback." #~ msgstr "Risposta non valida. Per favore aprire una segnalazione." #~ msgid "North Rhine-Westphalia" #~ msgstr "Renania Settentrionale-Vestfalia" #, fuzzy #~ msgid "Changed" #~ msgstr "{} cambio" #, fuzzy #~ msgid "Translation support using Weblate." #~ msgstr "Traduzione del codice sorgente supportata da" #, fuzzy #~ msgid "Keyboard shortcuts" #~ msgstr "Scorciatoie da tastiera" #, fuzzy #~ msgid "Many more settings" #~ msgstr "Più opzioni" #, fuzzy #~ msgid "Bookmark journeys" #~ msgstr "Salva il percorso" #, fuzzy #~ msgid "language-code" #~ msgstr "lingua" #~ msgid "language" #~ msgstr "it" #~ msgid "{}\\u{202F}min" #~ msgstr "{}\\u{202F}min" #~ msgid "%_H\\u{202F}h %_M\\u{202F}min" #~ msgstr "%_H\\u{202F}h %_M\\u{202F}min" #~ msgid "{}\\u{202F}min." #~ msgstr "{}\\u{202F}min." #~ msgid "{}\\u{202F}hrs." #~ msgstr "{}\\u{202F}h." #~ msgid "%-H\\u{202F}hrs. %-M\\u{202F}min." #~ msgstr "%-H\\u{202F}h %-M\\u{202F}min." #~ msgid "{}\\u{202F}h" #~ msgid_plural "{}\\u{202F}h" #~ msgstr[0] "{}\\u{202F}h" #~ msgstr[1] "{}\\u{202F}h" #~ msgid "Remove Past Trips From Bookmarks" #~ msgstr "Cancella Vecchi Percorsi Dai Preferiti" #~ msgid "Time After Arrival After Which to Remove Them" #~ msgstr "Tempo Dopo Il Quale Rimuoverli" #~ msgid "Refresh Journey" #~ msgstr "Aggiorna Viaggio" #~ msgid "Open Remarks" #~ msgstr "Mostra Avvisi" #~ msgid "Delete Old Journeys" #~ msgstr "Elimina Vecchi Percorsi" #~ msgid "Time to Keep Journey After Arrival" #~ msgstr "Durata conservazione vecchi percorsi" #~ msgid "On time" #~ msgstr "Puntuale" #~ msgid "Unreachable" #~ msgstr "Irraggiungibile" #~ msgid "Custom selection" #~ msgstr "Selezione Personalizzata" #~ msgid "Bike accessible" #~ msgstr "Accessibilità Biciclette" #~ msgid "The API returned a error. Please report this." #~ msgstr "L'API ha riscontrato un errore. Per favore apri una segnalazione." #~ msgid "Failed to parse response. Please report this." #~ msgstr "" #~ "Impossibile analizzare la risposta. Per favore apri una segnalazione." #~ msgid "{amount} €" #~ msgstr "{amount} €" #~ msgid "{amount} {currency}" #~ msgstr "{amount} {currency}" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/ja.po000066400000000000000000000655311517666454200230310ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2025-10-09 17:07+0000\n" "Last-Translator: maboroshin \n" "Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 5.14-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Railway" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "あらゆる旅行情報を検索" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "train;railway;journey;planner;timetables;電車;鉄道;列車;旅;時刻表;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Railway を使えば、さまざまなウェブサイトを移動することなく、ネットワークや国" "境を越えて旅行情報を検索できます。適応性のあるデザインのため、事前の旅行の計" "画や、外出先でのモバイル利用にも適しています。" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "プラットフォームや遅延など、乗車の詳細を表示する" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "現在および将来の旅行をブックマークし、頻繁に検索する" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "交通手段によるフィルタリングなど、高度な検索オプションを利用する" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "" "世界中のネットワークのためのものですが、ほとんどがヨーロッパのものです。" #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "アプリケーションの外観" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "出発" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "到着" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "日付を入力" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "日付" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "時間を入力" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "時間" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "現在" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "移動時間合計" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "旅行区間" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "旅行を選択" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "旅行を検索" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "停車駅を表示" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "途中停車駅を表示" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "お知らせを表示" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "お知らせ" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "停車駅" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "一般" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "自動的に古いブックマークを消去" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "過去の旅行は一定期間のみ保存されます" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "旅行の保存時間" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "到着後の旅行の保持期間" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "ネットワークを検索…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "旅行を更新" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "その他の検索オプション" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "詳細検索オプションを絞り込む" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "他のオプション" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "割引カード" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "クラス" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "ファーストクラス" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "普通クラス" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "自転車利用可" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "最低乗り換え時間" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "直接接続のみ" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "交通手段" #: data/resources/ui/search_options_dialog.blp:60 msgid "Mainline Train" msgstr "本線列車" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "中距離列車" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "都市高速鉄道" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "バス" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "フェリー" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "地下鉄" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "市電" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "ケーブルカー" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "タクシー" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "出発" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "到着" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "検索" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "ブックマークされた旅行" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "ブックマークされた検索" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "アプリケーション" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "検索をブックマーク" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "旅行をブックマーク" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "旅行を再読み込み" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "終了" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "ショートカットを表示" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "設定を表示" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "メニューを開く" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "出発地と目的地を入れ替え" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "ネットワークを選択" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "メインメニュー" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "接続" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "この検索をブックマークする" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "旅行の詳細" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "この旅行を更新" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "この旅行をブックマークする" #: data/resources/ui/window.blp:166 #, fuzzy msgid "Watch this Trip" msgstr "この旅行を見る" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "設定" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "キーボードショートカット" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "Railway について(_A)" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "混雑" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "かなりの混雑" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "非常に混雑" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "時間通り" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "わずかな遅れ" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "遅れ" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "かなりの遅れ" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "大幅な遅れ" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "番線変更" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "接続不可能" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "運休" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "ブックマークしていた旅行が最近終わった。" #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "常に削除(_D)" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "出発地と目的地が未指定" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "出発地が未指定" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "目的地が未指定" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "検索中" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "{destination}に到着する。" #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "徒歩 {walk} 待ち {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "乗り換え時間 {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "徒歩 {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "乗り換え" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} 分" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H 時間 %_M 分" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] "%_d 日 %_H 時間 %_M 分" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} 分" #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} 時間" #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H 時間 %-M 分" #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d 日 %-H 時間 %-M 分" #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "今日" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "明日" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "昨日" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%B%d日 (%a)" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%Y-%m-%d" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} 時間" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "なし" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, ファーストクラス" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, 普通席" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, ファーストクラス" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, 普通席" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "オーストリア – VORTEILScard (RAILPLUS 付き)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "チェコ – HalbtaxAbo (RAILPLUS 付き)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "チェコ – HalbtaxAbo (RAILPLUS なし)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "オランダ – Voordeelurenabo (RAILPLUS 付き)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "オランダ – Voordeelurenabo (RAILPLUS なし)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-カード" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "チェコ – 一般購読" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "不明" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "ファーストクラス" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "普通席" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "区間のみ" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "選択された交通手段" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "直接接続" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "データの取得に失敗しました。インターネットに接続していますか?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "エラーが発生しました。フィードバックを共有してください。" #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "追加情報" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "不明な問題が発生しました。フィードバックを共有してください。" #: src/gui/error.rs:42 msgid "Error" msgstr "エラー" #: src/gui/error.rs:46 msgid "_Close" msgstr "閉じる(_C)" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, fuzzy, c-format msgid "%a %b %d" msgstr "%b%d日 (%a)" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} 変更" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "{changes_text}で{travel_time}に{departure}から{arrival}まで" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{destination}方向の{train}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "{start}に{platform}番線で{departure}に出発してください." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "{departure}に{start}から出発して。" #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "{destination}の{platform}番線で{arrival}に到着します。" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "{destination}で{arrival}に到着します。" #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} 停車駅" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop}の{platform}番線で{arrival}に" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop}で{arrival}に" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "提案 {} を選択中" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "提案未選択" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "{n} 件の提案、選択中の提案なし" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "" "Niek Nooijens\n" "Ryo Nakano" #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "ソース翻訳のサポート" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "{} 間隔" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "€{amount}" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "${amount}" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{currency} {amount}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "ドイツ" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "北米" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "ヨーロッパ" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "オーストリア" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "シュレースヴィヒ ホルシュタイン州" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "全世界 (ベータ機能)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Transitous を使用" #: src/backend/journey.rs:271 #, fuzzy msgid "Start at {station} on platform {platform} at {time}" msgstr "{destination}の{platform}番線で{arrival}に到着します。" #: src/backend/journey.rs:274 #, fuzzy msgid "Start at {station} at {time}" msgstr "{destination}で{arrival}に到着します。" #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "" #: src/backend/journey.rs:309 #, fuzzy msgid "{time} transfer time to get to platform {platform}" msgstr "{stop}の{platform}番線で{arrival}に" #: src/backend/journey.rs:315 #, fuzzy msgid "{time} transfer time" msgstr "最低乗り換え時間" #: src/backend/journey.rs:318 #, fuzzy msgid "Upcoming departure on platform {platform}" msgstr "{stop}の{platform}番線で{arrival}に" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 #, fuzzy msgid "Arriving at {destination} soon" msgstr "{destination}に到着する。" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 #, fuzzy msgid "{train} departing on platform {platform} today instead" msgstr "{destination}の{platform}番線で{arrival}に到着します。" #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 #, fuzzy msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "{destination}の{platform}番線で{arrival}に到着します。" #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 #, fuzzy msgid "Arriving at {current-destination} in {duration}" msgstr "{destination}で{arrival}に到着します。" #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "徒歩" #~ msgid "High Speed Train" #~ msgstr "高速鉄道" #~ msgid "Last refreshed {}" #~ msgstr "最後の更新 {}" #~ msgid "Julian Schmidhuber" #~ msgstr "Julian Schmidhuber" #~ msgid "Show Stopovers in Between" #~ msgstr "途中の途中降機を表示" #~ msgid "ICE" #~ msgstr "都市間特急" #~ msgid "IC/EC" #~ msgstr "都市間/ユーロシティ" #~ msgid "Interregio/RegionalExpress" #~ msgstr "快速/区間快速" #~ msgid "Regio" #~ msgstr "区間" #~ msgid "S-Bahn" #~ msgstr "S バーン" #~ msgid "Received an invalid response. Please share feedback." #~ msgstr "無効な応答を受け取りました。 フィードバックを共有してください。" #~ msgid "North Rhine-Westphalia" #~ msgstr "ノルトライン ヴェストファーレン州" #, fuzzy #~ msgid "Changed" #~ msgstr "{} 変更" #, fuzzy #~ msgid "Translation support using Weblate." #~ msgstr "ソース翻訳のサポート者" #, fuzzy #~ msgid "Keyboard shortcuts" #~ msgstr "キーボードショートカット" #, fuzzy #~ msgid "Many more settings" #~ msgstr "他のオプション" #, fuzzy #~ msgid "Bookmark journeys" #~ msgstr "旅行をブックマーク" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/kab.po000066400000000000000000000517731517666454200231770ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: kab\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "" #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "" #: data/resources/ui/search_options_dialog.blp:60 msgid "Mainline Train" msgstr "" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "" #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "" #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] "" msgstr[1] "" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "" #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "" #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "" #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "" msgstr[1] "" #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "" msgstr[1] "" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "" #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "" #: src/gui/error.rs:42 msgid "Error" msgstr "" #: src/gui/error.rs:46 msgid "_Close" msgstr "" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "" msgstr[1] "" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "" #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "" #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "" msgstr[1] "" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "" msgstr[1] "" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "" #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "" #: src/backend/journey.rs:271 msgid "Start at {station} on platform {platform} at {time}" msgstr "" #: src/backend/journey.rs:274 msgid "Start at {station} at {time}" msgstr "" #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "" #: src/backend/journey.rs:309 msgid "{time} transfer time to get to platform {platform}" msgstr "" #: src/backend/journey.rs:315 msgid "{time} transfer time" msgstr "" #: src/backend/journey.rs:318 msgid "Upcoming departure on platform {platform}" msgstr "" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 msgid "Arriving at {destination} soon" msgstr "" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 msgid "{train} departing on platform {platform} today instead" msgstr "" #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "" #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 msgid "Arriving at {current-destination} in {duration}" msgstr "" #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/ko.po000066400000000000000000000555471517666454200230560ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2024-04-27 04:07+0000\n" "Last-Translator: Dong Heon Hee \n" "Language-Team: Korean \n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 5.5.1\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Railway" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "모든 여행 정보를 찾으세요" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "기차;철도;여행;계획;플래너;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Railway를 사용하면 여러 사이트를 뒤질 필요없이 여행정보를 네트워크와 국경을 " "넘어 검색할 수 있습니다. 적응형 디자인으로 모바일이나 이동중에 여행 계획을 세" "우기 적합합니다." #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "플랫폼과 지연을 포함하여 여행 세부 정보 확인" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "현재 및 향후 여행은 물론, 자주 검색하는 여행도 즐겨찾기에 추가하세요" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "운송 수단별 필터링과 같은 고급 검색 옵션을 활용하세요" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "" "그리고 이것은 전 세계의 네트워크를 위한 것이긴 하지만, 대부분은 유럽에서 작동" "합니다." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "애플리케이션 개요" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "날짜 입력" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "날짜" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "시간 입력" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "시간" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "총 여행 시간" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "여행 구간" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "여행 선택" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "여행 검색" #: data/resources/ui/leg_item.blp:129 #, fuzzy msgid "Show Stops" msgstr "경유지 표시" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "공지 표시" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "공지" #: data/resources/ui/leg_item.blp:231 #, fuzzy msgid "Stops" msgstr "경유지" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "자동으로 오래된 북마크 제거" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "지난 여행은 일정 기간 동안만 보관됩니다" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "여행 보존 시간" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "도착 후 여행을 보존하는 기간" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "네트워크 검색…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "더 많은 검색 설정" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "고급 검색 설정 세분화" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "더 많은 설정" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "할인 카드" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "등급" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "일등석" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "우등석" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "자전거 탑승 가능" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "최소 이동 시간" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "직통만" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "운송 수단" #: data/resources/ui/search_options_dialog.blp:60 msgid "Mainline Train" msgstr "" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "버스" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "페리" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "지하철" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "트램" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "택시" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "출발" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "도착" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "검색" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "즐겨찾기한 여행" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "즐겨찾기한 검색" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "애플리케이션" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "즐겨찾기 검색" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "" #: src/gui/indicator_icons.rs:165 #, fuzzy msgid "On Time" msgstr "시간" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "" #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "" #: src/gui/search_page.rs:127 #, fuzzy msgid "Search ongoing" msgstr "여행 검색" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "" #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "" #: src/gui/transition.rs:229 #, fuzzy msgid "Transfer Time {}" msgstr "최소 이동 시간" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] "" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "" #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "" #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "" #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "" #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "" #: src/gui/search_options_button.rs:141 #, fuzzy msgid "1st class" msgstr "일등석" #: src/gui/search_options_button.rs:143 #, fuzzy msgid "2nd class" msgstr "우등석" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "" #: src/gui/search_options_button.rs:189 #, fuzzy msgid "Selected Modes of Transport" msgstr "운송 수단" #: src/gui/search_options_button.rs:201 #, fuzzy msgid "Direct Connection" msgstr "직통만" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "" #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "" #: src/gui/error.rs:42 msgid "Error" msgstr "" #: src/gui/error.rs:46 msgid "_Close" msgstr "" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "" #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "" #: src/gui/leg_item.rs:153 #, fuzzy msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "경유지" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "" #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "" #: src/backend/journey.rs:271 msgid "Start at {station} on platform {platform} at {time}" msgstr "" #: src/backend/journey.rs:274 msgid "Start at {station} at {time}" msgstr "" #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "" #: src/backend/journey.rs:309 msgid "{time} transfer time to get to platform {platform}" msgstr "" #: src/backend/journey.rs:315 #, fuzzy msgid "{time} transfer time" msgstr "최소 이동 시간" #: src/backend/journey.rs:318 msgid "Upcoming departure on platform {platform}" msgstr "" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 msgid "Arriving at {destination} soon" msgstr "" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 msgid "{train} departing on platform {platform} today instead" msgstr "" #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "" #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 msgid "Arriving at {current-destination} in {duration}" msgstr "" #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "" #~ msgid "Julian Schmidhuber" #~ msgstr "Julian Schmidhuber" #~ msgid "Show Stopovers in Between" #~ msgstr "사이에 있는 경유지 표시" #~ msgid "ICE" #~ msgstr "ICE" #~ msgid "IC/EC" #~ msgstr "IC/EC" #~ msgid "Interregio/RegionalExpress" #~ msgstr "지역간/지역 특급" #~ msgid "Regio" #~ msgstr "Regio" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/meson.build000066400000000000000000000000561517666454200242300ustar00rootroot00000000000000i18n.gettext(gettext_package, preset: 'glib') railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/nb_NO.po000066400000000000000000000625001517666454200234230ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2024-10-29 09:40+0000\n" "Last-Translator: sunniva \n" "Language-Team: Norwegian Bokmål \n" "Language: nb_NO\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.8.2-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Railway" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Finn all din reiseinformasjon" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "tog;jernbane;bane;reise;reiseplan;kjøreplan;tidstabeller;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Med Railway kan du hente frem reiseinformasjon på tvers av transportnett og " "grenser uten å måtte bla gjennom flere forskjellige nettsider. På grunn av " "den adaptive designen, er det velegnet til å planlegge reisen din eller slå " "den opp på farten:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "Vis reisene dine sine detaljer, inkludert spor og forsinkelser" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "" "Lag bokmerker for nåværende og fremtidige reiser, samt frekvente søkninger" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" "Bruk avanserte søkningsalternativer, som f.eks. å filtrere etter " "transportmiddel" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "Og det hele for transportnett verden rundt, men mest fra Europa." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Applikasjonsoversikt" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Avgang" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Ankomst" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Inntastingsdato" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Dato" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Inntastingstid" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Tid" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Nå" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Total reisetid" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Reisedeler" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Velg en reise" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Søk etter reiser" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Vis holdeplasser" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Vis mellomholdeplasser" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Vis kunngjøringer" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Kunngjøringer" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Holdeplasser" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Generelt" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Fjern gamle bokmerker automatisk" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "Tidligere reiser beholdes kun under en viss tid" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Beholdningstid for reiser" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Hvor lenge reiser skal beholdes etter ankomst" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Søk etter transportnett…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Last inn reise på nytt" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Flere søkealternativer" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Tilpass avanserte søkealternativer" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Flere alternativer" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Rabattkort" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Klasse" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Første klasse" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Andre klasse" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Tilgjengelig for sykler" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Minst byttetid" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Kun direkte forbindelser" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Transportmidler" #: data/resources/ui/search_options_dialog.blp:60 #, fuzzy msgid "Mainline Train" msgstr "Regiontog" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Regiontog" #: data/resources/ui/search_options_dialog.blp:70 #, fuzzy msgid "S-Bahn Train" msgstr "Lokaltog" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Buss" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Ferge" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "T-bane" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Trikk" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Kabelbane" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Drosje" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "Fra" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "Til" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Søk" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Bokmerkede reiser" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Bokmerkede søkninger" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "App" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Søk etter lagrede reiser" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Lag bokmerke for denne reisen" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Last inn reise på nytt" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Avslutt" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Vis tastatursnarveier" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Vis brukervalg" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Åpne meny" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Bytt start og destinasjon" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Velg nettverk" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Hovedmeny" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Forbindelser" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Lag bokmerke for denne søkningen" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Reisedetaljer" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Last inn denne reisen på nytt" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Lag bokmerke for denne reisen" #: data/resources/ui/window.blp:166 #, fuzzy msgid "Watch this Trip" msgstr "Last inn denne reisen på nytt" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Brukervalg" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Tastatursnarveier" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "_Om Railway" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Stor belastning" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Veldig stor belastning" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Overordentlig belastning" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "I rute" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Små forsinkelser" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Forsinket" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Veldig forsinket" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Ekstremt forsinket" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Sporendringer" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Forbindelse ikke mulig" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Innstilt" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "En bokmerket reise endte nylig." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "Alltid _slett" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Mangler start og destinasjon" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Mangler start" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Mangler destinasjon" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Søkning pågår" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Ankomme på {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Gå i {walk} Vent i {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Byttetid {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Gå i {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Bytte" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} minutt" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H t %_M minutt" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] " %_d dag %_H t %_M minutt" msgstr[1] "%_d dager %_H t %_M minutt" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} minutt." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} timer." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H timer. %-M minutt." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d dag %-H timer. %-M minutt." msgstr[1] "%-d dager %-H timer. %-M minutt." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H.%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "I dag" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "I morgen" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "I går" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%d. %m, %Y" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} t" msgstr[1] "{} t" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Ingen" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, første klasse" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, andre klasse" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, første klasse" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, andre klasse" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A – VORTEILScard (med RAILPLUS)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH – HalbtaxAbo (med RAILPLUS)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH – Halbtax Abo (uten RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL – Voordeelurenabo (med RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL – Voordeelurenabo (uten RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-kort" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – General-Abonnement" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Ukjent" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "Første klasse" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "Andre klasse" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Gjelder kun for regionbuss og -tog" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Valgte transportmidler" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Direkte forbindelse" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "Kunne ikke hente data. Har du en internettforbindelse?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Det oppstod en feil. Vennligst gi tilbakemelding." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Flere opplysninger" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "Det oppstod en ukjent feil. Vennligst send tilbakemelding." #: src/gui/error.rs:42 msgid "Error" msgstr "Feil" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Lukk" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "%a %b. %d" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} bytte" msgstr[1] "{} bytter" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "Fra {departure} til {arrival} på {travel_time} med {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} retning {destination}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Avgang {start} fra spor {platform} kl. {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Avgang {start} kl. {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "Ankom på {destination} på spor {platform} kl. {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Ankom på {destination} kl. {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} holdeplass" msgstr[1] "{} holdeplasser" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} kl. {arrival} på spor {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} kl. {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Forslag {} valgt" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Intet forslag valgt" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "Ett forslag, ikke valgt" msgstr[1] "{n} forslag, ingen valgte" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "Sunniva Løvstad " #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Kildeoversettning støttet av" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "omtrent hver {}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "€{amount}" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "${amount}" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{currency} {amount}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Tyskland" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "Nordamerika" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Europa" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Østerrike" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Schleswig-Holstein" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "Verdensomspennende (beta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Med bruk av Transitous" #: src/backend/journey.rs:271 #, fuzzy msgid "Start at {station} on platform {platform} at {time}" msgstr "Ankom på {destination} på spor {platform} kl. {arrival}." #: src/backend/journey.rs:274 #, fuzzy msgid "Start at {station} at {time}" msgstr "Ankom på {destination} kl. {arrival}." #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "" #: src/backend/journey.rs:309 #, fuzzy msgid "{time} transfer time to get to platform {platform}" msgstr "{stop} kl. {arrival} på spor {platform}" #: src/backend/journey.rs:315 #, fuzzy msgid "{time} transfer time" msgstr "Minst byttetid" #: src/backend/journey.rs:318 #, fuzzy msgid "Upcoming departure on platform {platform}" msgstr "{stop} kl. {arrival} på spor {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 #, fuzzy msgid "Arriving at {destination} soon" msgstr "Ankomme på {destination}." #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 #, fuzzy msgid "{train} departing on platform {platform} today instead" msgstr "Ankom på {destination} på spor {platform} kl. {arrival}." #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 #, fuzzy msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "Ankom på {destination} på spor {platform} kl. {arrival}." #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 #, fuzzy msgid "Arriving at {current-destination} in {duration}" msgstr "Ankom på {destination} kl. {arrival}." #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Gå" #~ msgid "High Speed Train" #~ msgstr "Høyhastighetstog" #~ msgid "Last refreshed {}" #~ msgstr "Sist oppdatert {}" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/nl.po000066400000000000000000000723031517666454200230430ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2022 Julian Schmidhuber # This file is distributed under the same license as the DieBahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: DieBahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2026-01-26 02:21+0000\n" "Last-Translator: MiloBeenhakker \n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.16-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Railway" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Vind al uw reis­informatie" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "" "train;railway;journey;planner;timetables;trein;spoorweg;reis;planner;" "dienstregelingen;ov;openbaar;vervoer;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Met Railway kunt u reis­informatie opzoeken over netwerken en grenzen heen, " "zonder dat u door verschillende websites hoeft te navigeren. Door het " "adaptieve ontwerp is de app geschikt om uw reis vooraf te plannen of mobiel " "onderweg:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "Bekijk de details van uw ritten, inclusief perrons en vertragingen" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "Sla huidige en toekomstige ritten op, evenals frequente zoek­opdrachten" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" "Maak gebruik van geavanceerde zoek­mogelijkheden, zoals filteren op vervoers­" "wijze" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "" "En dat allemaal voor netwerken van over de hele wereld, maar vooral uit " "Europa." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "App-overzicht" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Vertrekdatum/-tijd" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Aankomst" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Voer een datum in" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Datum" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Voer een tijd­stip in" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Tijd­stip" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Nu" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Totale reis­tijd" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Rit­segmenten" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Kies een rit" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Zoek naar ritten" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Haltes tonen" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Tussen­liggende haltes tonen" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Aan­kondigingen tonen" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Aan­kondigingen" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Haltes" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Algemeen" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Oude opgeslagen items auto­matisch verwijderen" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "Eerdere ritten worden slechts een bepaalde periode bewaard" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Bewaar­tijd voor ritten" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Hoe lang ritten na aan­komst moeten worden bewaard" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Netwerken zoeken…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Rit verversen" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Meer zoek­opties" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Geavanceerde zoek­opties verfijnen" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Meer opties" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Kortings­kaart" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Klasse" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Eerste klas" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Tweede klas" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Toegankelijk voor fietsen" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Minimale overstap­tijd" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Zonder overstap" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Vervoers­methoden" #: data/resources/ui/search_options_dialog.blp:60 msgid "Mainline Train" msgstr "Hoofdlijn­trein" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Regionale trein" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "S-Bahn-trein" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Bus" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Veer­boot" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Metro" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Tram" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Kabel­baan" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Taxi" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "Van" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "Naar" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Zoeken" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Opgeslagen ritten" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Opgeslagen zoek­opdrachten" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "App" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Zoek­opdracht opslaan" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Rit opslaan" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Rit herladen" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Afsluiten" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Snel­toetsen tonen" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Voorkeuren tonen" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Menu openen" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Start en bestemming omwisselen" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Netwerk selecteren" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Hoofdmenu" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Aansluitingen" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Zoek­resultaat opslaan" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Rit­details" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Rit verversen" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Rit opslaan" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "Rit volgen" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Voorkeuren" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Snel­toetsen" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "_Over Railway" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Druk" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Erg druk" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Extreem druk" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "Op tijd" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Kleine vertragingen" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Vertraagd" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Erg vertraagd" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Extreem vertraagd" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Perron­wijzigingen" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Verbinding niet mogelijk" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Geannuleerd" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "Een opgeslagen rit is recent beëindigd." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "Altijd _verwijderen" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Start en bestemming ontbreken" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Start ontbreekt" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Bestemming ontbreekt" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Bezig met zoeken" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Aankomst op {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Loop {walk}, wacht {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "{} overstap­tijd" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Lopen {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Overstap" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} min." #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%-H uur en %-M min." #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] " %-d dag, %-H uur en %-M min." msgstr[1] "%-d dagen, %-H uur en %-M min." #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} min." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} uur" #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H uur en %-M min." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d dag, %-H uur en %-M min." msgstr[1] "%-d dagen, %-H uur en %-M min." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Vandaag" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Morgen" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Gisteren" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a %e %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%d %m %Y" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} u" msgstr[1] "{} u" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Geen" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, 1e klas" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, 2e klas" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, 1e klas" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, 2e klas" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A – VORTEILScard (met RAILPLUS)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH – HalbtaxAbo (met RAILPLUS)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH – HalbtaxAbo (zonder RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL – Voordeel­uren­abonnement (met RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL – Voordeel­uren­abonnement (zonder RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-kortingskaart" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "Zwitsers \"alles-in-één\" abonnement" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Onbekend" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "1e klas" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "2e klas" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Alleen regionaal vervoer" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Geselecteerde vervoers­methoden" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Directe verbinding" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "" "De gegevens kunnen niet worden opgehaald. Bent u verbonden met het internet?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Fout ontvangen; deel dit alstublieft met ons." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Meer informatie" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "Er is een onbekend probleem opgetreden; deel dit alstublieft met ons." #: src/gui/error.rs:42 msgid "Error" msgstr "Foutmelding" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Sluiten" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "%a %d %b" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} wijziging" msgstr[1] "{} wijzigingen" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "Van {departure} tot {arrival} in {travel_time} met {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} naar {destination}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Vertrek {start} van platform {platform} om {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Vertrek {start} om {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "Aankomst op {destination} op platform {platform} om {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Aankomst op {destination} om {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} halte" msgstr[1] "{} haltes" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} om {arrival} op platform {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} om {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Suggestie {} geselecteerd" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Geen suggestie geselecteerd" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "één suggestie, niet geselecteerd" msgstr[1] "{n} suggesties, geen geselecteerd" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "" "Heimen Stoffels \n" "Philip Goto https://philipgoto.nl/" #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Bron­vertaling ondersteund door" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "elke ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "€ {amount}" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "$ {amount}" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{currency} {amount}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Duitsland" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "Noord-Amerika" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Europa" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Oostenrijk" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Sleeswijk-Holstein" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "Wereld­wijd (bèta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Transitous wordt gebruikt" #: src/backend/journey.rs:271 msgid "Start at {station} on platform {platform} at {time}" msgstr "Start bij {station} op perron {platform} om {time}" #: src/backend/journey.rs:274 msgid "Start at {station} at {time}" msgstr "Start bij {station} om {time}" #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "De rit naar {bestemming} begint binnenkort" #: src/backend/journey.rs:309 msgid "{time} transfer time to get to platform {platform}" msgstr "{time} overstaptijd om naar perron {platform} te komen" #: src/backend/journey.rs:315 msgid "{time} transfer time" msgstr "{time} overstap­tijd" #: src/backend/journey.rs:318 msgid "Upcoming departure on platform {platform}" msgstr "Aanstaande vertrektijd op perron {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "Binnenkort een overstap op {station}" #: src/backend/journey.rs:335 msgid "Arriving at {destination} soon" msgstr "Binnenkort aankomst op {bestemming}" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "Het vertrek van {train} is vertraagd met {time}" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "Aankomsttijd van {train} is vertraagd met {time}" #: src/backend/journey.rs:427 msgid "{train} departing on platform {platform} today instead" msgstr "{train} vertrekt vandaag vanaf perron {platform}" #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" "Waarschuwing: Het is niet langer mogelijk om aansluitende {train} van " "{origin} naar {destination} te bereiken." #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "Waarschuwing: {train} van {origin} naar {destination} is geannuleerd." #: src/backend/journey.rs:562 msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "Vertrek naar {next-origin} in {duration} op perron {next-platform}" #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "Begin bij {next-origin} over {duration}" #: src/backend/journey.rs:568 msgid "Arriving at {current-destination} in {duration}" msgstr "Aankomst op {current-destination} over {duration}" #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" "Wijziging naar {next-leg-name} op platform {next-platform}, resterende duur: " "{duration}" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "Wijziging naar {next-leg-name}, resterend: {duration}" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "De reisbestemming is bereikt" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Wandelen" #~ msgid "High Speed Train" #~ msgstr "Hoge­snelheids­trein" #~ msgid "Last refreshed {}" #~ msgstr "{} geleden verversd" #~ msgid "Julian Schmidhuber" #~ msgstr "Julian Schmidhuber" #~ msgid "Show Stopovers in Between" #~ msgstr "Tussen­stops tonen" #~ msgid "ICE" #~ msgstr "ICE" #~ msgid "IC/EC" #~ msgstr "IC/EC" #~ msgid "Interregio/RegionalExpress" #~ msgstr "Interregio/RegionalExpress (sneltrein)" #~ msgid "Regio" #~ msgstr "Regionaal/Streekvervoer" #~ msgid "S-Bahn" #~ msgstr "S-Bahn" #~ msgid "Received an invalid response. Please share feedback." #~ msgstr "Ongeldige reactie ontvangen; deel dit alstublieft met ons." #~ msgid "North Rhine-Westphalia" #~ msgstr "Noordrijn-Westfalen" #, fuzzy #~ msgid "Changed" #~ msgstr "{} wijziging" #, fuzzy #~ msgid "Translation support using Weblate." #~ msgstr "Bron­vertaling ondersteund door" #, fuzzy #~ msgid "Keyboard shortcuts" #~ msgstr "Snel­toetsen" #, fuzzy #~ msgid "Many more settings" #~ msgstr "Meer opties" #, fuzzy #~ msgid "Bookmark journeys" #~ msgstr "Rit opslaan" #~ msgid "language-code" #~ msgstr "nl" #~ msgid "{}\\u{202F}min" #~ msgstr "{}\\u{202F}min." #~ msgid "%_H\\u{202F}h %_M\\u{202F}min" #~ msgstr "%-H\\u{202F}uur en %-M\\u{202F}min." #~ msgid "{}\\u{202F}min." #~ msgstr "{}\\u{202F}min." #~ msgid "{}\\u{202F}hrs." #~ msgstr "{}\\u{202F}uur" #~ msgid "%-H\\u{202F}hrs. %-M\\u{202F}min." #~ msgstr "%-H\\u{202F}uur en %-M\\u{202F}min." #~ msgid "{}\\u{202F}h" #~ msgid_plural "{}\\u{202F}h" #~ msgstr[0] "{}\\u{202F}uur" #~ msgstr[1] "{}\\u{202F}uur" #~ msgid "Remove Past Trips From Bookmarks" #~ msgstr "Vorige ritten uit bladwijzers verwijderen" #~ msgid "Time After Arrival After Which to Remove Them" #~ msgstr "Tijd na aankomst waarna deze verwijderd moeten worden" #~ msgid "Refresh Journey" #~ msgstr "Reis verversen" #~ msgid "Open Remarks" #~ msgstr "Opmerkingen tonen" #~ msgid "Delete Old Journeys" #~ msgstr "Reisgeschiedenis wissen" #~ msgid "Time to Keep Journey After Arrival" #~ msgstr "Reis na aankomst bewaren gedurende" #~ msgid "On time" #~ msgstr "Op tijd" #~ msgid "Unreachable" #~ msgstr "Onbereikbaar" #~ msgid "Custom selection" #~ msgstr "Eigen keuze" #~ msgid "Bike accessible" #~ msgstr "Toegankelijk voor fietsen" #~ msgid "The API returned a error. Please report this." #~ msgstr "De api gaf een foutcode - meld dit voorval." #~ msgid "Failed to parse response. Please report this." #~ msgstr "Het antwoord kan niet worden verwerkt - meld dit voorval." #~ msgid "{amount} €" #~ msgstr "€{amount}" #~ msgid "{amount} {currency}" #~ msgstr "{currency}{amount}" #~ msgid "Hours after planned arrival journeys will be kept" #~ msgstr "Reizen met nog geplande aankomsttijden worden bewaard" #~ msgid "BahnCard" #~ msgstr "BahnCard" #~ msgid "Journeys" #~ msgstr "Reismogelijkheden" #, fuzzy #~ msgid "One transition" #~ msgid_plural "{} transitions" #~ msgstr[0] "Aantal overstappen" #~ msgstr[1] "Aantal overstappen" #~ msgid "{} Minutes" #~ msgstr "{} minuten" #~ msgid "Earlier" #~ msgstr "Eerder" #~ msgid "Later" #~ msgstr "Later" #~ msgid "to" #~ msgstr "naar" #~ msgid "BahnCard 25" #~ msgstr "BahnCard 25" #~ msgid "BahnCard 50" #~ msgstr "BahnCard 50" #~ msgid "BahnCard 100" #~ msgstr "BahnCard 100" #~ msgid "Settings" #~ msgstr "Voorkeuren" #~ msgid "" #~ "The prices displayed using a BahnCard might not always match the real " #~ "prices" #~ msgstr "" #~ "De getoonde reiskosten kunnen afwijken van de daadwerkelijke reiskosten" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/oc.po000066400000000000000000000656461517666454200230470ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2025-12-27 09:00+0000\n" "Last-Translator: Quentin PAGÈS \n" "Language-Team: Occitan \n" "Language: oc\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 5.15.1\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Camin de fèr" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Trapatz totas las informacions de viatge" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "tren;ferroviari;viatge;planificador;oraris;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Railway vos permet de cercar d’informacions de viatges a travèrs los rets e " "las frontièras sens deure navegar demest diferentas paginas web. Gràcias a " "sa concepcion adaptativa, es de bon utilizar per planificar vòstre viatge en " "avança o utilizar lo mobil en viatjant :" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "Veire los detalhs del viatge, coma lo cai e los retards" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "Marcar los viatges actuals e futurs e atanben las recèrcas frequentas" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" "Utilizar d’opcions de recèrcas avançadas coma lo filtratge per mòde de " "transpòrt" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "E tot çò pels rets de tot lo monde mas, principalament d’Euròpa." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Apercebut de l’aplicacion" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Partença" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Arribada" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Data picada" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Data" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Ora picada" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Ora" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Ara" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Durada tota del viatge" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Segments del viatge" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Seleccionar un viatge" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Cercar viatges" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Mostrar los arrèstes" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Mostrar los arrèstes intermediaris" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Mostrar los anoncis" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Anoncis" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Arrèstes" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "General" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Suprimir automaticament los marcapaginas ancians" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "" "Los viatges precedents son solament gardats pendent una durada limitada" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Durada de conservacion dels viatges" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Quant de temps cal gardar los viatges precedents" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Cercar de rets…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Actualizar lo viatge" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Mai d'opcions de recèrca" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Redefinir las opcions de recèrca avançada" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Mai d'opcions" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Carta de reduccion" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Classa" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Primièra classa" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Segonda classa" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Accès per bicicletas" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Temps de correspondéncia minimal" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Sonque las ligasons dirèctas" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Mòdes de transpòrt" #: data/resources/ui/search_options_dialog.blp:60 msgid "Mainline Train" msgstr "Tren granda linha" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Tren regional" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "Tren S-Bahn" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Bus" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Fèrri" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Mètro" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Tram" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Teleferic" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Taxi" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "De" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "A" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Recercar" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Viatges favorits" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Recèrcas en favorit" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Aplicacion" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Marcar la recèrca" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Marcar lo viatge" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Recargar lo viatge" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Quitar" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Mostrar los acorchis" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Afichar las preferéncias" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Dobrir lo menú" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Intervertir la partença e la destinacion" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Seleccionatz un ret" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Menú principal" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Correspondéncias" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Marcar aquesta recèrca" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Detalhs del viatge" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Actualizar aqueste viatge" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Marcar aqueste viatge" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "Veire aqueste viatge" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Preferéncias" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Acorchis de clavièr" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "_A prepaus de Camin de fèr" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Carga nauta" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Carga plan nauta" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Carga excepcionalament nauta" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "A l’ora" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Retards pichons" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "En retard" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Plan en retard" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Bravament en retard" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Cambiament de platafòrma" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Connexion impossibla" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Anullat" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "Un viatge marcat coma favorit s’acabèt fa pas res." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "Totjorn _suprimir" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Debuta e destinacion absentas" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Debuta absenta" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Destinacion absenta" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Recèrca en cors" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Arribada a {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Caminar {walk} Esperar {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Durada de transferiment {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Caminar {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Correspondéncia" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} min" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H h %_M min" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] "%_d jorn %_H h %_M min" msgstr[1] "%_d jorns %_H h %_M min" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} min." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} h." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H h. %-M min." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d jorn %-H hrs. %-M min." msgstr[1] "%-d jorns %-H hrs. %-M min." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H : %M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Uèi" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Deman" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Ièr" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a %d %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%d-%m-%Y" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} h" msgstr[1] "{} h" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Cap" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, 1èra classa" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, 2nda classa" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, 1èra classa" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, 2nda classa" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A – VORTEILScard (amb RAILPLUS)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH – HalbtaxAbo (amb RAILPLUS)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH – HalbtaxAbo (sens RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL - Voordeelurenabo (amb RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL - Voordeelurenabo (sens RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-Card" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – Abonament general" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Desconegut" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "1èra classa" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "2nda classa" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Regional sonque" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Mòde de transpòrt seleccionat" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Ligason dirècta" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "" "Fracàs de la recuperacion de las donadas. Fonciona la connexion Internet ?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Error recebuda. Mercés de la senhalar." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Mai d'informacions" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "Una error desconeguda se's producha. Mercés de la senhalar." #: src/gui/error.rs:42 msgid "Error" msgstr "Error" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Tampar" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "%a %d %b" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} correspondéncia" msgstr[1] "{} correspondéncias" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "De {departure} a {arrival} en {travel_time} amb {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} en direccion de {destination}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Partença de {start} de la via {platform} a {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Partença {start} a {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "Arribada a {destination} a la via {platform} a {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Arriba a {destination} a {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} arrèst" msgstr[1] "{} arrèstes" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} a {arrival} a la via {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} a {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Suggestion {} seleccionada" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Cap de suggestion pas seleccionada" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "una suggestion, pas seleccionada" msgstr[1] "{n} suggestions, cap pas seleccionada" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "Quentin PAGÈS" #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Traduccion de font sostenguda per" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "cada ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "{amount} €" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "{amount} $" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{currency} {amount}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Alemanha" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "America del nòrd" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Euròpa" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Àustria" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Schleswig-Holstein" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "Mondial (beta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Utilizar Transitous" #: src/backend/journey.rs:271 msgid "Start at {station} on platform {platform} at {time}" msgstr "Partença a {station} a la via {platform} a {time}" #: src/backend/journey.rs:274 msgid "Start at {station} at {time}" msgstr "Partença a {station} a {time}" #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "Lo viatge a {destination} comença lèu" #: src/backend/journey.rs:309 msgid "{time} transfer time to get to platform {platform}" msgstr "{time} de temps de correspondéncia per anar a la via {platform}" #: src/backend/journey.rs:315 msgid "{time} transfer time" msgstr "Correspondéncia de {time}" #: src/backend/journey.rs:318 msgid "Upcoming departure on platform {platform}" msgstr "Partença lèu via {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "Correspondéncia lèu a {station}" #: src/backend/journey.rs:335 msgid "Arriving at {destination} soon" msgstr "Arribada a {destination} lèu" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "Partença de {train} retardada de {time}" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "Arribada de {train} retardada de {time}" #: src/backend/journey.rs:427 msgid "{train} departing on platform {platform} today instead" msgstr "{train} a la partença de la via {platform} uèi a la plaça" #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" "Atencion : es pas mai possible de prendre la correspondéncia del {train} de " "{origin} cap a {destination}." #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" "Avertiment : lo {train} de {origin} cap a {destination} es estat anullat." #: src/backend/journey.rs:562 msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "Partença a {next-origin} d’aquí {duration} a la via {next-platform}" #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "Partença a {next-origin} d’aquí {duration}" #: src/backend/journey.rs:568 msgid "Arriving at {current-destination} in {duration}" msgstr "Arriba a {current-destination} d’aquí {duration}" #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "Cambiament a {next-leg-name} via [next-platform}, demòran : {duration}" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "Cambiament a {next-leg-name}, demòran : {duration}" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "La destinacion del viatge es estada atenguda" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Caminar" #~ msgid "High Speed Train" #~ msgstr "Tren de nauta velocitat" #~ msgid "Last refreshed {}" #~ msgstr "Darrièra actualizacion {}" #~ msgid "Julian Schmidhuber" #~ msgstr "Julian Schmidhuber" #~ msgid "Show Stopovers in Between" #~ msgstr "Mostrar los arrèstes intermediaris" #~ msgid "ICE" #~ msgstr "ICE" #~ msgid "IC/EC" #~ msgstr "IC/EC" #~ msgid "Interregio/RegionalExpress" #~ msgstr "Interregio/RegionalExpress" #~ msgid "Regio" #~ msgstr "Regio" #~ msgid "S-Bahn" #~ msgstr "S-Bahn" #~ msgid "Received an invalid response. Please share feedback." #~ msgstr "Responsa invalida recebuda. Mercés d'enviar un comentari." #~ msgid "North Rhine-Westphalia" #~ msgstr "Renània del Nòrd-Vestfàlia" #, fuzzy #~ msgid "Changed" #~ msgstr "{} correspondéncia" #, fuzzy #~ msgid "Translation support using Weblate." #~ msgstr "Traduccion de font sostenguda per" #, fuzzy #~ msgid "Keyboard shortcuts" #~ msgstr "Acorchis de clavièr" #, fuzzy #~ msgid "Many more settings" #~ msgstr "Mai d'opcions" #, fuzzy #~ msgid "Bookmark journeys" #~ msgstr "Marcar lo viatge" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/pl.po000066400000000000000000000644271517666454200230550ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2025-12-16 16:00+0000\n" "Last-Translator: \"Bartłomiej Stępień (qosmik)\" \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" "X-Generator: Weblate 5.15.1-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Koleje" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Znajdź wszystkie informacje dotyczącej twojej podrózy" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "pociąg;kolej;podróż;planner;rozkłady;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Railway pozwala na wyszukiwanie połączeń kolejowych pomiędzy krajami i " "firmami. Dzięki nowoczesnej aranżacji możesz łatwo wyszukać podróże z " "wyprzedzeniem lub w trakcie drogi:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "" "Zobacz informacje dotyczące twojej podróży takie jak numer peronu i " "opóźnienia" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "" "Zapisz obecne lub przyszłe podróże, zarówno jak twoje częste wyszukiwania" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" "Skorzystaj z zaawansowanego wyszukiwania takiego jak filtrowanie poprzez " "formę transportu" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "I to wszystko dla kolei dookoła świata, lecz w większości z Europy." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Aplikacja" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Odjazd" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Przyjazd" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Wprowadź datę" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Data" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Wprowadź czas" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Czas" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Teraz" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Całkowity czas podróży" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Odcinki podróży" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Wybierz Podróż" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Wyszukaj podróż" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Pokaż Stacje" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Pokaż Stacje po drodze" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Pokaż ogłoszenia" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Ogłoszenia" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Stacje" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Ogólne" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Automatycznie Usuń Stare Zakładki" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "Przeszłe podróże są zapisane tylko na jakiś czas" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Okres zapisu dla podrózy" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Na jak długo powinny być przechowane podróże" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Wyszukaj sieć…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Odśwież tę podróż" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Więcej opcji wyszukiwania" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Dostrój Zaawansowane Opcje Wyszukiwania" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Więcej opcji" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Karta zniżkowa" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Klasa" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Pierwsza klasa" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Druga klasa" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Dostępne dla rowerów" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Najkrótszy czas podróży" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Tylko połączenia bezpośrednie" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Rodzaje transportu" #: data/resources/ui/search_options_dialog.blp:60 #, fuzzy msgid "Mainline Train" msgstr "Kolej regionalna" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Kolej regionalna" #: data/resources/ui/search_options_dialog.blp:70 #, fuzzy msgid "S-Bahn Train" msgstr "Kolej podmiejska" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Bus" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Prom" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Metro" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Tramwaj" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Kolejka linowa" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Taxi" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "Od" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "Do" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Szukaj" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Zapisane podróże" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Zapisane wyszukiwania" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Aplikacja" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Dodaj do zakładek" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Dodaj tę podróż do zakładek" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Odśwież podróż" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Wyjście" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Skróty klawiszowe" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Pokaż ustawienia" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Otwórz menu" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Zamień start i miejsce docelowe" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Wybierz sieć" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Menu główne" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Połączenia" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Dodaj to wyszukiwanie do zakładek" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Szczegóły podróży" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Odśwież tę podróż" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Dodaj tę podróż do zakładek" #: data/resources/ui/window.blp:166 #, fuzzy msgid "Watch this Trip" msgstr "Odśwież tę podróż" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Preferencje" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Skróty klawiszowe" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "_O Railway" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Wysokie Obciążenie" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Bardzo Wysokie Obciążenie" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Wyjątkowo Wysokie Obciążenie" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "Na Czas" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Małe Opóźnienia" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Opóźniony" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Bardzo opóźniony" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Nadzwyczaj Opóźniony" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Zmiana Peronu" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Połączenie Niemożliwe" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Anulowane" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "Zapisana podróż zakończyła się niedawno." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "Zawsze _Usuń" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Start i miejsce docelowe niepodane" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Miejsce startowe niepodane" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Miejsce docelowe niepodane" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Szukaj trwające" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Przyjazd do {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Idź {walk} Czekaj {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Czas na przesiadkę {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Idź {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Przesiadka" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} min" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H h %_M min" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] " %_d dzień %_H h %_M min" msgstr[1] "%_d dni %_H h %_M min" msgstr[2] "%_d dni %_H h %_M min" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} min." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} godz." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H godz. %-M min." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d dzień %-H godz. %-M min." msgstr[1] "%-d dni %-H godz. %-M min." msgstr[2] "%-d dni %-H godz. %-M min." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Dzisiaj" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Jutro" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Wczoraj" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%d.%m.%Y" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} godz." msgstr[1] "{} godz." msgstr[2] "{} godz." #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Brak" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, 1. klasa" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, 2. klasa" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, 1. klasa" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, 2. klasa" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A – VORTEILScard (z RAILPLUS)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH – HalbtaxAbo (z RAILPLUS)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH – HalbtaxAbo (bez RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL – Voordeelurenabo (z RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL – Voordeelurenabo (bez RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-Card" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – General-Abonnement" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Nieznany" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "1. klasa" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "2. klasa" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Tylko regionalne" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Wybrane metody transportu" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Połączenie bezpośrednie" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "Nie udało się pobrać danych. Masz połączenie z internetem?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Wystąpił błąd. Prosimy o informację zwrotną." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Więcej informacji" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "Wystąpił nie znany błąd. Proszę opisać swoje doświadczenie." #: src/gui/error.rs:42 msgid "Error" msgstr "Błąd" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Zamknij" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, fuzzy, c-format msgid "%a %b %d" msgstr "%a %d %b" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} przesiadka" msgstr[1] "{} przesiadki" msgstr[2] "{} przesiadek" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "Z {departure} do {arrival} w {travel_time} z {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} w kierunku {destination}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Odjazd ze stacji {start} z peronu {platform} o {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Odjazd ze stacji {start} o {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "Przyjazd do stacji {destination} na peron {platform} o {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Przyjazd do stacji {destination} o {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "Przystanek" msgstr[1] "Przystanki" msgstr[2] "Przystanków" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} o {arrival} na peronie {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} o {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Sugestie {} zaznaczone" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Brak zaznaczonych sugestii" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "Jedna sugestia, nie zaznaczona" msgstr[1] "{n} sugestie, nie zaznaczone" msgstr[2] "{n} sugestii, nie zaznaczonych" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "Patrycja Rosa" #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Przetłumaczone przez" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "co ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "€{amount}" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "${amount}" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{amount} {currency}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Niemcy" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "Ameryka Północna" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Europa" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Austria" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Szlezwik-Holsztyn" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "Cały świat (beta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Używanie Transitous" #: src/backend/journey.rs:271 #, fuzzy msgid "Start at {station} on platform {platform} at {time}" msgstr "Przyjazd do stacji {destination} na peron {platform} o {arrival}." #: src/backend/journey.rs:274 #, fuzzy msgid "Start at {station} at {time}" msgstr "Przyjazd do stacji {destination} o {arrival}." #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "Podróż do {destination} rozpocznie się wkrótce" #: src/backend/journey.rs:309 #, fuzzy msgid "{time} transfer time to get to platform {platform}" msgstr "{stop} o {arrival} na peronie {platform}" #: src/backend/journey.rs:315 #, fuzzy msgid "{time} transfer time" msgstr "Najkrótszy czas podróży" #: src/backend/journey.rs:318 #, fuzzy msgid "Upcoming departure on platform {platform}" msgstr "{stop} o {arrival} na peronie {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 #, fuzzy msgid "Arriving at {destination} soon" msgstr "Przyjazd do {destination}." #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 #, fuzzy msgid "{train} departing on platform {platform} today instead" msgstr "Przyjazd do stacji {destination} na peron {platform} o {arrival}." #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 #, fuzzy msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "Przyjazd do stacji {destination} na peron {platform} o {arrival}." #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 #, fuzzy msgid "Arriving at {current-destination} in {duration}" msgstr "Przyjazd do stacji {destination} o {arrival}." #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Spacer" #~ msgid "High Speed Train" #~ msgstr "Szybka kolej" #~ msgid "Last refreshed {}" #~ msgstr "Ostatnio odświeżono {}" #~ msgid "Julian Schmidhuber" #~ msgstr "Julian Schmidhuber" #~ msgid "ICE" #~ msgstr "ICE" #~ msgid "IC/EC" #~ msgstr "IC/EC" #~ msgid "Interregio/RegionalExpress" #~ msgstr "Interregio/RegionalExpress" #~ msgid "Regio" #~ msgstr "Regio" #~ msgid "S-Bahn" #~ msgstr "S-Bahn" #, fuzzy #~ msgid "Keyboard shortcuts" #~ msgstr "Skróty klawiszowe" #, fuzzy #~ msgid "Many more settings" #~ msgstr "Więcej opcji" #, fuzzy #~ msgid "Bookmark journeys" #~ msgstr "Dodaj tą podróż do zakładek" #~ msgid "Refresh Journey" #~ msgstr "Odśwież podróż" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/pt.po000066400000000000000000000646411517666454200230630ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2024-10-05 21:16+0000\n" "Last-Translator: ssantos \n" "Language-Team: Portuguese \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 5.8-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Railway" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Encontre as suas informações de viagem" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "" "train;railway;journey;planner;timetables;comboio;ferrovia;viagem;planejador;" "horários;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Railway permite que pesquise informações de viagens por diversas redes e " "fronteiras sem precisar navegar por diferentes páginas da web. Com o seu " "design adaptável, é perfeito para planejar a sua viagem com antecedência ou " "em dispositivos móveis, de qualquer lugar:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "Veja os pormenores das suas viagens, incluindo plataformas e atrasos" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "Grave viagens atuais e futuras, assim como pesquisas frequentes" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "Use opções de pesquisa avançada, como filtragem por meio de transporte" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "E tudo isso para redes de todo o mundo, mas principalmente da Europa." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Visão geral da aplicação" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Partida" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Chegada" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Data de entrada" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Data" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Hora de entrada" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Tempo" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Agora" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Tempo Total de Viagem" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Segmentos de Viagem" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Escolha uma Viagem" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Pesquisar Viagens" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Mostrar paragens" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Mostrar paragens intermediárias" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Mostrar Anúncios" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Anúncios" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Paragens" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Geral" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Remover Marcadores Antigos Automaticamente" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "As viagens anteriores são mantidas apenas por um período de tempo" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Tempo de preservação das viagens" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Por quanto tempo manter as viagens após a chegada" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Pesquisar Redes…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Atualizar Viagem" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Mais opções de pesquisa" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Refinar Opções de Pesquisa Avançada" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Mais Opções" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Cartão de Desconto" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Classe" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Primeira Classe" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Segunda Classe" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Acessível para Bicicleta" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Tempo Mínimo de Transferência" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Somente Conexões Diretas" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Modos de Transporte" #: data/resources/ui/search_options_dialog.blp:60 #, fuzzy msgid "Mainline Train" msgstr "Comboio regional" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Comboio regional" #: data/resources/ui/search_options_dialog.blp:70 #, fuzzy msgid "S-Bahn Train" msgstr "Comboios suburbanos" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Ônibus" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Balsa" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Metrô" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Bonde" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Teleférico" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Táxi" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "De" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "Para" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Procurar" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Viagens Favoritas" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Pesquisas Favoritas" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Aplicação" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Favoritar Pesquisa" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Favoritar Viagem" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Recarregar Viagem" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Sair" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Mostrar Atalhos" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Mostrar Preferências" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Abrir Menu" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Inverter origem e destino" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Selecionar Rede" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Menu Principal" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Conexões" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Favoritar Esta Pesquisa" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Detalhes da Viagem" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Atualizar esta Viagem" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Favoritar esta Viagem" #: data/resources/ui/window.blp:166 #, fuzzy msgid "Watch this Trip" msgstr "Atualizar esta Viagem" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Preferências" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Atalhos do Teclado" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "_Sobre o Railway" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Ocupação alta" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Ocupação muito alta" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Ocupação extremamente alta" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "No horário" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Pequenos Atrasos" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Atrasado" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Muito Atrasado" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Extremamente Atrasado" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Mudanças de Plataforma" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Conexão não é Possível" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Cancelado" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "Uma viagem favorita terminou recentemente." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "Sempre _excluir" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "O início e o destino estão faltando" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Falta o início" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Falta o destino" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Pesquisa em andamento" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Chegue em {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Caminhe {walk} Espere {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Tempo de Transferência {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Andar {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Transferência" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} min" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H h %_M min" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] "%_d dia %_H h %_M min" msgstr[1] "%_d dias %_H h %_M min" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} min." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} hrs." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H hrs. %-M min." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d dia %-H hrs. %-M min." msgstr[1] "%-d dias %-H hrs. %-M min." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Hoje" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Amanhã" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Ontem" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%Y-%m-%d" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} h" msgstr[1] "{} h" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Nenhum" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, 1ª classe" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, 2ª classe" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, 1ª classe" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, 2ª classe" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A – VORTEILScard (com RAILPLUS)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH – HalbtaxAbo (com RAILPLUS)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH – HalbtaxAbo (sem RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL – Voordeelurenabo (com RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL – Voordeelurenabo (sem RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-Card" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – General-Abonnement" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Desconhecido" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "1ª classe" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "2ª classe" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Apenas Regionais" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Meios de Transporte Selecionados" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Conexão Direta" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "Falha ao buscar dados. Você está conectado à internet?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Recebeu um erro. Por favor, compartilhe comentários." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Mais Informações" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "Ocorreu um problema desconhecido. Por favor, compartilhe comentários." #: src/gui/error.rs:42 msgid "Error" msgstr "Erro" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Fechar" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "%a %b %d" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} mudança" msgstr[1] "{} mudanças" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "De {departure} a {arrival} em {travel_time} com {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} na direção de {destination}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Partida {start} da plataforma {platform} em {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Partida {start} às {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "Chegue em {destination} na plataforma {platform} às {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Chegue em {destination} às {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} parada" msgstr[1] "{} paradas" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} em {arrival} na plataforma {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} em {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Sugestão {} selecionada" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Nenhuma sugestão selecionada" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "uma sugestão, não selecionada" msgstr[1] "{n} sugestões, nenhuma selecionada" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "Tiago Lucas Flach " #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Tradução da fonte apoiada por" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "a cada ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "€{amount}" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "${amount}" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{currency} {amount}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Alemanha" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "América do Norte" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Europa" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Áustria" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Schleswig-Holstein" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "Em todo o mundo (beta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "A usar Transitous" #: src/backend/journey.rs:271 #, fuzzy msgid "Start at {station} on platform {platform} at {time}" msgstr "Chegue em {destination} na plataforma {platform} às {arrival}." #: src/backend/journey.rs:274 #, fuzzy msgid "Start at {station} at {time}" msgstr "Chegue em {destination} às {arrival}." #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "" #: src/backend/journey.rs:309 #, fuzzy msgid "{time} transfer time to get to platform {platform}" msgstr "{stop} em {arrival} na plataforma {platform}" #: src/backend/journey.rs:315 #, fuzzy msgid "{time} transfer time" msgstr "Tempo Mínimo de Transferência" #: src/backend/journey.rs:318 #, fuzzy msgid "Upcoming departure on platform {platform}" msgstr "{stop} em {arrival} na plataforma {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 #, fuzzy msgid "Arriving at {destination} soon" msgstr "Chegue em {destination}." #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 #, fuzzy msgid "{train} departing on platform {platform} today instead" msgstr "Chegue em {destination} na plataforma {platform} às {arrival}." #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 #, fuzzy msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "Chegue em {destination} na plataforma {platform} às {arrival}." #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 #, fuzzy msgid "Arriving at {current-destination} in {duration}" msgstr "Chegue em {destination} às {arrival}." #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Caminhar" #~ msgid "High Speed Train" #~ msgstr "Comboio de alta velocidade" #~ msgid "Last refreshed {}" #~ msgstr "Última atualização {}" #~ msgid "Show Stopovers in Between" #~ msgstr "Mostrar Escalas Intermediárias" #~ msgid "ICE" #~ msgstr "ICE" #~ msgid "IC/EC" #~ msgstr "IC/EC" #~ msgid "Interregio/RegionalExpress" #~ msgstr "Interregio/RegionalExpress" #~ msgid "Regio" #~ msgstr "Regional" #, fuzzy #~ msgid "S-Bahn" #~ msgstr "Trem Urbano" #~ msgid "Received an invalid response. Please share feedback." #~ msgstr "Recebeu uma resposta inválida. Por favor, compartilhe comentários." #, fuzzy #~ msgid "North Rhine-Westphalia" #~ msgstr "North Rhine-Westphalia" #, fuzzy #~ msgid "Changed" #~ msgstr "{} mudança" #, fuzzy #~ msgid "Translation support using Weblate." #~ msgstr "Tradução Fonte Apoiada por" #, fuzzy #~ msgid "Keyboard shortcuts" #~ msgstr "Atalhos do Teclado" #, fuzzy #~ msgid "Many more settings" #~ msgstr "Mais Opções" #, fuzzy #~ msgid "Bookmark journeys" #~ msgstr "Favoritar Viagem" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/pt_BR.po000066400000000000000000000646401517666454200234450ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2025-10-25 21:02+0000\n" "Last-Translator: John Peter Sa \n" "Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 5.14.1-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Railway" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Encontre suas informações de viagem" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "" "train;railway;journey;planner;timetables;trem;ferrovia;viagem;planejador;" "horários;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Railway permite que você pesquise informações de viagens por diversas redes " "e fronteiras sem precisar navegar por diferentes páginas da web. Com seu " "design adaptável, ele é perfeito para planejar sua viagem com antecedência " "ou em dispositivos móveis, de qualquer lugar:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "Veja os detalhes das suas viagens, incluindo plataformas e atrasos" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "Salve viagens atuais e futuras, assim como pesquisas frequentes" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "Use opções de pesquisa avançada, como filtragem por meio de transporte" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "E tudo isso para redes de todo o mundo, mas principalmente da Europa." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Visão geral do aplicativo" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Partida" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Chegada" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Insira a data" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Data" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Insira a hora" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Hora" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Agora" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Tempo total de viagem" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Segmentos da viagem" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Escolha uma viagem" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Pesquisar viagens" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Mostrar paradas" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Mostrar paradas intermediárias" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Mostrar anúncios" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Anúncios" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Paradas" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Geral" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Remover automaticamente favoritos antigos" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "As viagens anteriores são mantidas apenas por um período de tempo" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Tempo de preservação das viagens" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Por quanto tempo manter as viagens após a chegada" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Pesquisar redes…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Atualizar viagem" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Mais opções de pesquisa" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Refinar opções avançadas de pesquisa" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Mais opções" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Cartão de desconto" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Classe" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Primeira classe" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Segunda classe" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Acessível para bicicletas" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Tempo mínimo de transferência" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Somente conexões diretas" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Meios de transporte" #: data/resources/ui/search_options_dialog.blp:60 msgid "Mainline Train" msgstr "Trem da linha principal" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Trem regional" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "Trem S-Bahn" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Ônibus" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Balsa" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Metrô" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Bonde" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Teleférico" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Táxi" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "De" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "Para" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Pesquisar" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Viagens favoritas" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Pesquisas favoritas" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Aplicativo" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Favoritar pesquisa" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Favoritar viagem" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Recarregar viagem" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Sair" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Mostrar atalhos" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Mostrar Preferências" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Abrir menu" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Inverter origem e destino" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Selecionar rede" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Menu principal" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Conexões" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Favoritar esta pesquisa" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Detalhes da viagem" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Atualizar esta viagem" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Favoritar esta viagem" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "Assista esta viagem" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Preferências" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Atalhos de teclado" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "_Sobre o Railway" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Ocupação alta" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Ocupação muito alta" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Ocupação extremamente alta" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "No horário" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Pequenos atrasos" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Atrasado" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Muito atrasado" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Extremamente atrasado" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Mudanças de plataforma" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Conexão não é possível" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Cancelado" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "Uma viagem favorita terminou recentemente." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "Sempre _excluir" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Falta escolher origem e destino" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Falta escolher a origem" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Falta escolher o destino" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Pesquisa em andamento" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Chegue em {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Caminhe {walk} Espere {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Tempo de transferência {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Caminhe {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Transferência" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} min" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H h %_M min" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] "%_d dia %_H h %_M min" msgstr[1] "%_d dias %_H h %_M min" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} min." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} h." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H h. %-M min." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d dia %-H h. %-M min." msgstr[1] "%-d dias %-H h. %-M min." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Hoje" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Amanhã" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Ontem" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%d/%m/%Y" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} h" msgstr[1] "{} h" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Nenhum" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, 1ª classe" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, 2ª classe" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, 1ª classe" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, 2ª classe" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A – VORTEILScard (com RAILPLUS)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH – HalbtaxAbo (com RAILPLUS)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH – HalbtaxAbo (sem RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL – Voordeelurenabo (com RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL – Voordeelurenabo (sem RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-Card" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – General-Abonnement" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Desconhecido" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "1ª classe" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "2ª classe" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Somente regional" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Meios de transporte selecionados" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Conexão direta" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "Falha ao buscar dados. Você tem uma conexão à internet?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Um erro foi recebido. Por favor, compartilhe o relato conosco." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Mais informações" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "" "Ocorreu um problema desconhecido. Por favor, compartilhe o relato conosco." #: src/gui/error.rs:42 msgid "Error" msgstr "Erro" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Fechar" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "%a %b %d" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} mudança" msgstr[1] "{} mudanças" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "De {departure} a {arrival} em {travel_time} com {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} em direção a {destination}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Partida {start} da plataforma {platform} às {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Partida {start} às {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "Chegue em {destination} na plataforma {platform} às {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Chegue em {destination} às {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} parada" msgstr[1] "{} paradas" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} às {arrival} na plataforma {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} às {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Sugestão {} selecionada" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Nenhuma sugestão selecionada" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "uma sugestão, não selecionada" msgstr[1] "{n} sugestões, nenhuma selecionada" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "" "Tiago Lucas Flach https://github.com/tiagoFlach\n" "Filipe Motta " #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Tradução da fonte apoiada por" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "a cada ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "€{amount}" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "${amount}" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{currency} {amount}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Alemanha" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "América do Norte" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Europa" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Áustria" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Eslésvico-Holsácia" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "Em todo o mundo (beta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Usando Transitous" #: src/backend/journey.rs:271 msgid "Start at {station} on platform {platform} at {time}" msgstr "Comece em {station} na plataforma {platform} às {time}" #: src/backend/journey.rs:274 msgid "Start at {station} at {time}" msgstr "Comece em {station} às {time}" #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "A viagem para {destination} começará em breve" #: src/backend/journey.rs:309 msgid "{time} transfer time to get to platform {platform}" msgstr "{time} tempo de transferência para chegar à plataforma {platform}" #: src/backend/journey.rs:315 msgid "{time} transfer time" msgstr "{time} tempo de transferência" #: src/backend/journey.rs:318 msgid "Upcoming departure on platform {platform}" msgstr "Próxima partida na plataforma {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "Em breve, próxima transferência em {station}" #: src/backend/journey.rs:335 msgid "Arriving at {destination} soon" msgstr "Chegando em {destination} em breve" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "{train} a partida está atrasada por {time}" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "A chegada do {train} está atrasada por {time}" #: src/backend/journey.rs:427 msgid "{train} departing on platform {platform} today instead" msgstr "{train} partindo na plataforma {platform} hoje em vez" #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" "Aviso: Não é mais possível fazer a conexão {train} de {origin} para " "{destination}." #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "Aviso: {train} de {origin} para {destination} foi cancelado." #: src/backend/journey.rs:562 msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "Comece em {next-origin} em {duration} na plataforma {next-platform}" #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "Comece em {next-origin} em {duration}" #: src/backend/journey.rs:568 msgid "Arriving at {current-destination} in {duration}" msgstr "Chegando em {destination-current} em {duration}" #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" "Alterar para {next-leg-name} na plataforma {next-platform}, restante: " "{duration}" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "Alterar para {next-leg-name}, restante: {duration}" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "O destino da viagem foi alcançado" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Caminhada" #~ msgid "High Speed Train" #~ msgstr "Trem de alta velocidade" #~ msgid "Last refreshed {}" #~ msgstr "Última atualização {}" #~ msgid "Julian Schmidhuber" #~ msgstr "Julian Schmidhuber" #~ msgid "Show Stopovers in Between" #~ msgstr "Mostrar Escalas no Meio" #~ msgid "Received an invalid response. Please share feedback." #~ msgstr "Recebeu uma resposta inválida. Por favor, compartilhe comentários." #~ msgid "North Rhine-Westphalia" #~ msgstr "Renânia do Norte-Vestfália" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/ro.po000066400000000000000000000661271517666454200230610ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2026-04-16 15:09+0000\n" "Last-Translator: Andrea Andrei \n" "Language-Team: Romanian \n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " "20)) ? 1 : 2;\n" "X-Generator: Weblate 5.17.1-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Railway" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Găsește toate informațiile despre călătorie" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "" "train;railway;journey;planner;timetables;tren;caleferată;călătorie;" "planificator;orar;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Railway permite căutarea de informații despre călătoriile prin diferite " "frontiere și țări, fără a fi nevoie de căutare pe diferite situri web. " "Datorită aspectului adaptabil, aplicația este potrivită pentru a planifica " "călătoria dinainte sau în mișcare:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "Vezi detaliile traseelor tale, inclusiv peroanele și întârzierile" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "Salvează traseele actuale și viitoare, precum și căutările frecvente" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" "Folosește opțiunile avansate de căutare, cum ar fi căutarea în funcție de " "mijlocul de transport" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "" "Și toate acestea pentru serviciile de transport din întreaga lume, dar mai " "ales din Europa." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Prezentarea aplicației" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Plecare" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Sosire" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Introdu data" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Data" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Introdu ora" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Ora" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Acum" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Durata călătoriei" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Etapele traseului" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Alege un traseu" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Caută trasee" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Arată opririle" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Arată opririle intermediare" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Arată anunțuri" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Anunțuri" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Opriri" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Generale" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Elimină automat vechile preferințe salvate" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "Vechile trasee sunt păstrate doar pentru o perioadă de timp" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Timp de păstrare pentru trasee" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Cât timp să fie păstrate traseele după sosire" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Caută furnizorul de servicii…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Actualizează traseul" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Mai multe opțiuni de căutare" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Precizează opțiunile de căutare avansată" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Alte opțiuni" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Card de reducere" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Clasa" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Clasa 1" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Clasa a 2-a" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Accesibil pentru biciclete" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Timp minim de transfer" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Doar legături directe" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Mijloace de transport" #: data/resources/ui/search_options_dialog.blp:60 msgid "Mainline Train" msgstr "Tren interregional" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Tren regional" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "Tren urban/suburban" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Autobuz" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Bac" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Metrou" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Tramvai" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Telecabină" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Taxi" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "De la" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "La" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Caută" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Trasee salvate" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Căutări salvate" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Aplicație" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Salvează căutarea" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Salvează traseul" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Actualizează traseul" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Închide" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Arată scurtăturile" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Arată preferințele" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Arată opțiunile" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Schimbă Plecarea cu Destinația" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Alege furnizorul de servicii" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Opțiuni" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Legături" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Salvează această căutare" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Detaliile traseului" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Actualizează acest traseu" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Salvează acest traseu" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "Vezi acest traseu" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Preferințe" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Scurtături" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "_Despre Railway" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Aglomerat" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Foarte aglomerat" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Extrem de aglomerat" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "Punctual" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Întârziere mică" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Întârzie" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Întârzie mult" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Întârzie foarte mult" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Schimbări de peron" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Legătură imposibilă" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Anulat" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "O călătorie salvată s-a terminat recent." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "Șterge tot_deauna" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Lipsesc plecarea și destinația" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Lipsește plecarea" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Lipsește destinația" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Căutare în curs" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Sosire la {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Mergi {walk} Așteaptă {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Timp de transfer {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Mergi {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Transfer" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} min" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H h %_M min" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] " %_d zi %_H h %_M min" msgstr[1] "%_d zile %_H h %_M min" msgstr[2] "%_d de zile %_H h %_M min" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} min." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} ore." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H ore %-M min." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d zi %-H ore %-M min." msgstr[1] "%-d zile %-H ore %-M min." msgstr[2] "%-d de zile %-H ore %-M min." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Azi" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Mâine" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Ieri" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%d-%m-%Y" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} h" msgstr[1] "{} h" msgstr[2] "{} h" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Nimic" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, clasa 1" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, clasa a 2-a" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, clasa 1" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, clasa a 2-a" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A – VORTEILScard (cu RAILPLUS)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH – HalbtaxAbo (cu RAILPLUS)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH – HalbtaxAbo (fără RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL – Voordeelurenabo (cu RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL – Voordeelurenabo (fără RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "Card SH" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – Abonament general" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Necunoscut" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "Clasa 1" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "Clasa a 2-a" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Doar Regional" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Mijloace de transport alese" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Legătură directă" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "Nu se pot obține informații. Ești conectat la internet?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "A apărut o eroare. Raportează eroarea." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Alte informații" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "Eroare necunoscută. Poate fi raportată." #: src/gui/error.rs:42 msgid "Error" msgstr "Eroare" #: src/gui/error.rs:46 msgid "_Close" msgstr "În_chide" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "%a %d %b" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} schimbare" msgstr[1] "{} schimbări" msgstr[2] "{} de schimbări" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "De la {departure} la {arrival} în {travel_time} cu {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} în direcția {destination}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Plecare din {start} de la peronul {platform} la {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Plecare {start} la {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "Sosire la {destination} la peronul {platform} la {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Sosire la {destination} la {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} oprire" msgstr[1] "{} opriri" msgstr[2] "{} de opriri" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} la {arrival} la peronul {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} la {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Propunerea {} a fost aleasă" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Nu a fost aleasă nicio propunere" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "o propunere, nu a fost aleasă" msgstr[1] "{n} propuneri, niciuna aleasă" msgstr[2] "{n} de propuneri, niciuna aleasă" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "Andrea Andrei" #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Traducere întreținută de" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "o dată la ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "{amount} €" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "{amount} $" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{amount} {currency}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Germania" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "America de Nord" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Europa" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Austria" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Schleswig-Holstein" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "În toată lumea (beta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Folosește Transitous" #: src/backend/journey.rs:271 msgid "Start at {station} on platform {platform} at {time}" msgstr "Plecare din {station} de la peronul {platform} la {time}" #: src/backend/journey.rs:274 msgid "Start at {station} at {time}" msgstr "Plecare din {station} la {time}" #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "Călătoria către {destination} va începe în curând" #: src/backend/journey.rs:309 msgid "{time} transfer time to get to platform {platform}" msgstr "{time} pentru a ajunge la peronul {platform}" #: src/backend/journey.rs:315 msgid "{time} transfer time" msgstr "Timp de transfer {time}" #: src/backend/journey.rs:318 msgid "Upcoming departure on platform {platform}" msgstr "Plecarea următoare de la peronul {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "Următoarea schimbare la {station}" #: src/backend/journey.rs:335 msgid "Arriving at {destination} soon" msgstr "Sosește în curând la {destination}" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "{train} pleacă cu o întârziere de {time}" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "{train} sosește cu o întârziere de {time}" #: src/backend/journey.rs:427 msgid "{train} departing on platform {platform} today instead" msgstr "{train} pleacă astăzi de la peronul {platform} ca alternativă" #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" "Atenție: Nu se mai poate ajunge la trenul de legătură {train} de la {origin} " "la {destination}." #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "Atenție: {train} de la {origin} la {destination} a fost anulat." #: src/backend/journey.rs:562 msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "" "Plecare din {next-origin} peste {duration} de la peronul {next-platform}" #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "Plecare din {next-origin} peste {duration}" #: src/backend/journey.rs:568 msgid "Arriving at {current-destination} in {duration}" msgstr "Sosire la {current-destination} peste {duration}" #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" "Schimbare la {next-leg-name} de la peronul {next-platform}, timp rămas: " "{duration}" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "Schimbare la {next-leg-name}, timp rămas: {duration}" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "Destinația călătoriei a fost atinsă" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Mergi" #~ msgid "High Speed Train" #~ msgstr "Tren de mare viteză" #~ msgid "Last refreshed {}" #~ msgstr "Ultima actualizare {}" #~ msgid "Julian Schmidhuber" #~ msgstr "Julian Schmidhuber" #~ msgid "Show Stopovers in Between" #~ msgstr "Arată opririle intermediare" #~ msgid "ICE" #~ msgstr "ICE" #~ msgid "IC/EC" #~ msgstr "IC/EC" #~ msgid "Interregio/RegionalExpress" #~ msgstr "InterRegio/RegionalExpress" #~ msgid "Regio" #~ msgstr "Personal" #~ msgid "S-Bahn" #~ msgstr "S-Bahn" #~ msgid "Received an invalid response. Please share feedback." #~ msgstr "Răspuns incorect. Trimite un comentariu." #~ msgid "North Rhine-Westphalia" #~ msgstr "Renania de Nord-Westfalia" #, fuzzy #~ msgid "Changed" #~ msgstr "{} schimbare" #, fuzzy #~ msgid "Translation support using Weblate." #~ msgstr "Traducere susținută de" #, fuzzy #~ msgid "Keyboard shortcuts" #~ msgstr "Taste rapide" #, fuzzy #~ msgid "Many more settings" #~ msgstr "Mai multe opțiuni" #, fuzzy #~ msgid "Bookmark journeys" #~ msgstr "Salvează traseul" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/ru.po000066400000000000000000000727161517666454200230700ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2025-12-25 17:00+0000\n" "Last-Translator: Ilnur Sultanov \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Weblate 5.15.1\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Railway" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Найти всю информацию о ваших путешествиях" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "поезд;путь;путешествие;планировщик;расписания;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Railway позволяет Вам просматривать информацию о путешествиях по маршрутам и " "через границы, не копаясь в веб-сайтах. Благодаря адаптивному дизайну, оно " "подходит для предварительного планирования маршрута и его корректировки на " "ходу:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "Просматривайте детали маршрута, включая платформы и задержки" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "Сохранять текущие и будущие поездки, а также частые запросы" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" "Использовать дополнительные параметры поиска, например, фильтры по видам " "транспорта" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "И всё это для путей всего мира, но в основном Европы." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Обзор приложения" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Отправление" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Прибытие" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Введите дату" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Дата" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Введите время" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Время" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Сейчас" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Общее время в пути" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Сегменты поездки" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Выберите поездку" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Поиск поездок" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Показать остановки" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Показать промежуточные остановки" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Показать объявления" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Объявления" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Остановки" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Общие" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Автоматически удалять старые закладки" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "" "Прошлые поездки хранятся только в течение определенного периода времени" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Время сохранения для поездок" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Как долго сохранить поездки после прибытия" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Поисковые сети…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Обновить поездку" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Больше параметров поиска" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Уточнить дополнительные параметры поиска" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Дополнительные параметры" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Скидочная карта" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Класс" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Первый класс" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Второй класс" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Можно с велосипедом" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Минимальное время в пути" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Только прямые рейсы" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Виды транспорта" #: data/resources/ui/search_options_dialog.blp:60 msgid "Mainline Train" msgstr "Магистральный поезд" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Местный поезд" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "S-Bahn Поезд" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Автобус" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Паром" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Метро" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Трамвай" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Канатная дорога" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Такси" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "Из" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "В" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Поиск" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Маршруты в закладках" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Поиски в закладках" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Приложение" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Запомнить поиск" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Запомнить маршрут" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Заново загрузить маршрут" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Выйти" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Ярлыки" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Предпочтения" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Открыть меню" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Следовать из пункта назначения" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Выбрать сеть" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Главное меню" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Рейсы" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Запомнить этот поиск" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Детали маршрута" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Обновить маршрут" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Запомнить этот маршрут" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "Просмотреть этот маршрут" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Предпочтения" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Клавиши клавиатуры" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "_О Railway" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Высокая загруженность" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Очень высокая загруженность" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Исключительно высокая загруженность" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "Вовремя" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Небольшие задержки" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Задерживается" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Задерживается надолго" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Сильно задерживается" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Изменения платформы" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Стыковка невозможна" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Отменён" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "Недавно завершилась поездка, добавленная в закладки." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "Всегда_Удалять" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Не указаны пункты отправления и назначения" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Пункт отправления не указан" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Пункт назначения не указан" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Идёт поиск" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Прибытие в {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Пешком {walk} ждать {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Время в пути {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Пешком {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Трансфер" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} мин" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H ч %_M мин" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] "%_d день %_H ч %_M мин" msgstr[1] "%_d дня %_H ч %_M мин" msgstr[2] "%_d дней %_H ч %_M мин" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} мин." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} ч." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H ч. %-M мин." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d день %-H ч. %-M мин." msgstr[1] "%-d дня %-H ч. %-M мин." msgstr[2] "%-d дней %-H ч. %-M мин." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Сегодня" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Завтра" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Вчера" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%d-%m-%Y" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} ч" msgstr[1] "{} ч" msgstr[2] "{} ч" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Ничего" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, 1-й класс" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, 2-й класс" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, 1-й класс" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, 2-й класс" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A – VORTEILScard (с RAILPLUS)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH – HalbtaxAbo (с RAILPLUS)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH – HalbtaxAbo (без RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL – Voordeelurenabo (с RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL – Voordeelurenabo (без RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-Карта" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – General-Abonnement" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Неизвестный" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "первый класс" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "второй класс" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Только пригород" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Выбранные типы транспорта" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Без пересадок" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "Не удалось получить данные. Вы подключены к Интернету?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Возникла ошибка. Пожалуйста, опишите её в обратной связи." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Дополнительная информация" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "" "Возникла неизвестная проблема. Пожалуйста, опишите её в обратной связи." #: src/gui/error.rs:42 msgid "Error" msgstr "Ошибка" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Закрыть" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, fuzzy, c-format msgid "%a %b %d" msgstr "%a %d %b" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} изменение" msgstr[1] "{} изменений" msgstr[2] "{} изменений" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "От {departure} до {arrival} за {travel_time} с {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} в направлении {destination}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Отправление {start} от платформы {platform} в {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Отправление {start} в {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "Прибытие в {destination} на платформу {platform} в {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Прибытие в {destination} в {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} остановка" msgstr[1] "{} остановки" msgstr[2] "{} остановок" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} в {arrival} на платформе {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} в {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Вариант {} выбран" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Не выбрано ни одного варианта" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "один вариант, не выбран" msgstr[1] "{n} варианта, не выбраны" msgstr[2] "{n} вариантов, ни один не выбран" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "Давид Лапшин , Сергей Антонов " #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Перевод источника осуществлён при поддержке" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "каждый ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "{amount}€" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "{amount}$" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{amount} {currency}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Германия" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "Северная Америка" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Европа" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Австрия" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Шлезвиг-Гольштейн" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "По всему миру (beta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "С использованием Transitous" #: src/backend/journey.rs:271 #, fuzzy msgid "Start at {station} on platform {platform} at {time}" msgstr "Прибытие в {destination} на платформу {platform} в {arrival}." #: src/backend/journey.rs:274 #, fuzzy msgid "Start at {station} at {time}" msgstr "Прибытие в {destination} в {arrival}." #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "Поездка в {место назначения} скоро начнётся" #: src/backend/journey.rs:309 #, fuzzy msgid "{time} transfer time to get to platform {platform}" msgstr "{stop} в {arrival} на платформе {platform}" #: src/backend/journey.rs:315 msgid "{time} transfer time" msgstr "{time} время в пути" #: src/backend/journey.rs:318 #, fuzzy msgid "Upcoming departure on platform {platform}" msgstr "{stop} в {arrival} на платформе {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "Скоро пересадка на станции {station}" #: src/backend/journey.rs:335 #, fuzzy msgid "Arriving at {destination} soon" msgstr "Прибытие в {destination}." #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "Отправление {train} задержано на {time}" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 #, fuzzy msgid "{train} departing on platform {platform} today instead" msgstr "Прибытие в {destination} на платформу {platform} в {arrival}." #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 #, fuzzy msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "Прибытие в {destination} на платформу {platform} в {arrival}." #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 #, fuzzy msgid "Arriving at {current-destination} in {duration}" msgstr "Прибытие в {destination} в {arrival}." #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Пешком" #~ msgid "High Speed Train" #~ msgstr "Высокоскоростной поезд" #~ msgid "Last refreshed {}" #~ msgstr "Последнее обновление {}" #~ msgid "Julian Schmidhuber" #~ msgstr "Джулиан Шмидхубер" #~ msgid "Show Stopovers in Between" #~ msgstr "Показывать остановки между ними" #~ msgid "ICE" #~ msgstr "Междугородний экспресс" #~ msgid "IC/EC" #~ msgstr "Междугородный/EuroCity" #~ msgid "Interregio/RegionalExpress" #~ msgstr "Межрегиональный/Региональный(Экспресс)" #~ msgid "Regio" #~ msgstr "Пригородный" #~ msgid "S-Bahn" #~ msgstr "Берлинская городская электричка (S-Bahn)" #~ msgid "Received an invalid response. Please share feedback." #~ msgstr "" #~ "Получен неверный ответ. Пожалуйста, опишите проблему в обратной связи." #~ msgid "North Rhine-Westphalia" #~ msgstr "Северный Рейн-Вестфалия" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/sv.po000066400000000000000000000671641517666454200230730ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2024-07-21 12:09+0000\n" "Last-Translator: bittin1ddc447d824349b2 \n" "Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.7-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Järnväg" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Hitta all din reseinformation" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "tåg;järnväg;resa;planerare;tidtabeller;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Railway låter dig söka upp reseinformation över nätverk och gränser utan att " "behöva navigera genom olika webbplatser. På grund av den adaptiva designen " "är det lämpligt att planera din resa i förväg eller mobilt på språng:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "Se detaljer om dina resor inklusive spår och förseningar" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "Bokmärk nuvarande och framtida resor samt frekventa sökningar" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "Använd förhandssökningsalternativ som att filtrera efter transportsätt" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "Och allt det för nätverk från hela världen, men mest från Europa." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Applikationsöversikt" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Avgång" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Ankomst" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Inmatningsdatum" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Datum" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Inmatningstid" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Tid" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Nu" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Total restid" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Resesegment" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Välj en resa" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Sök efter resor" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Visa hållplatser" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Visa mellanhållplatser" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Visa meddelanden" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Meddelanden" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Hållplatser" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Allmänt" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Ta bort gamla bokmärken automatiskt" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "Tidigare resor sparas endast under en viss tid" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Tid för bevarande av resor" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Hur länge ska resor behållas efter ankomst" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Sök nätverk…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Uppdatera resa" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Mer sök alternativ" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Förfina avancerade sökalternativ" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Mer alternativ" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Rabattkort" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Klass" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Första klass" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Andra klass" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Cykel tillgänglig" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Minsta transfertid" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Direktanslutningar endast" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Transportsätt" #: data/resources/ui/search_options_dialog.blp:60 #, fuzzy msgid "Mainline Train" msgstr "Regionaltåg" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Regionaltåg" #: data/resources/ui/search_options_dialog.blp:70 #, fuzzy msgid "S-Bahn Train" msgstr "Förortståg" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Buss" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Färja" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Tunnelbana" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Spårvagn" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Kabelbana" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Taxi" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "Från" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "Till" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Sök" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Bokmärkta resor" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Bokmärkta sökningar" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Applikation" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Bokmärkessökning" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Bokmärk resa" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Ladda om resa" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Avsluta" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Visa genvägar" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Visa inställningar" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Öppna meny" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Växla start och destination" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Välj nätverk" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Huvudmeny" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Anslutningar" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Bokmärk denna sökningen" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Detaljer om resan" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Uppdatera denna resa" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Bokmärk denna resa" #: data/resources/ui/window.blp:166 #, fuzzy msgid "Watch this Trip" msgstr "Uppdatera denna resa" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Inställningar" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Tangentbordsgenvägar" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "_Om Järnväg" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Hög belastning" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Väldigt hög belastning" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Exceptionellt hög belastning" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "I tid" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Mindre förseningar" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Försenad" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Väldigt försenad" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Extremt försenad" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Plattforms ändringar" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Anslutning ej möjlig" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Inställt" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "En bokmärkt resa avslutades nyligen." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "Alltid _Ta bort" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Start och destination saknas" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Start saknas" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Destination saknas" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Sökning pågår" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Anländer till {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Gå {walk} Vänta {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Transfertid {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Gå {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Transfer" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} minut" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H t %_M min" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] " %_d dag %_H t %_M minut" msgstr[1] "%_d dagar %_H t %_M minuter" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} minut." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} timmar." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H timmar. %-M minuter." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d dag %-H timme. %-M minut." msgstr[1] "%-d dagar %-H timmar. %-M minuter." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Idag" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Imorgon" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Igår" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%Y-%m-%d" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} t" msgstr[1] "{} t" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Ingen" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, 1:a klass" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, 2:a klass" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, 1:a klass" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, 2:a klass" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A – VORTEILScard (med RAILPLUS)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH – Halbtax Abo (med RAILPLUS)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH – Halbtax Abo (utan RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL – Voordeelurenabo (med RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL – Voordeelurenabo (utan RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-kort" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – General-Abonnement" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Okänd" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "1:a klass" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "2:a klass" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Regionalt endast" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Valda transportsätt" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Direktanslutning" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "Misslyckades att hämta data. Är du ansluten till internet?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Fick ett fel. Vänligen dela feedback." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Mer information" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "Ett okänt problem uppstod. Vänligen dela feedback." #: src/gui/error.rs:42 msgid "Error" msgstr "Fel" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Stäng" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "%a %b %d" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} byte" msgstr[1] "{} byten" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "Från {departure} till {arrival} om {travel_time} med {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} i riktning mot {destination}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Avresa {start} från plattform {platform} vid {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Avresa {start} vid {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "Ankomst till {destination} på plattform {platform} vid {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Ankomst till {destination} vid {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} hållplats" msgstr[1] "{} hållplatser" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} vid {arrival} på plattform {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} vid {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Förslag {} vald" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Inget förslag valt" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "ett förslag, inte vald" msgstr[1] "{n} förslag, inte valda" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "Luna Jernberg " #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Källöversättning som stöds av" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "varje ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "€{amount}" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "${amount}" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{currency} {amount}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Tyskland" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "Nordamerika" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Europa" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Österrike" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Schleswig-Holstein" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "Globalt (beta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Använder Transitous" #: src/backend/journey.rs:271 #, fuzzy msgid "Start at {station} on platform {platform} at {time}" msgstr "Ankomst till {destination} på plattform {platform} vid {arrival}." #: src/backend/journey.rs:274 #, fuzzy msgid "Start at {station} at {time}" msgstr "Ankomst till {destination} vid {arrival}." #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "" #: src/backend/journey.rs:309 #, fuzzy msgid "{time} transfer time to get to platform {platform}" msgstr "{stop} vid {arrival} på plattform {platform}" #: src/backend/journey.rs:315 #, fuzzy msgid "{time} transfer time" msgstr "Minsta transfertid" #: src/backend/journey.rs:318 #, fuzzy msgid "Upcoming departure on platform {platform}" msgstr "{stop} vid {arrival} på plattform {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 #, fuzzy msgid "Arriving at {destination} soon" msgstr "Anländer till {destination}." #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 #, fuzzy msgid "{train} departing on platform {platform} today instead" msgstr "Ankomst till {destination} på plattform {platform} vid {arrival}." #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 #, fuzzy msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "Ankomst till {destination} på plattform {platform} vid {arrival}." #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 #, fuzzy msgid "Arriving at {current-destination} in {duration}" msgstr "Ankomst till {destination} vid {arrival}." #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Gå" #~ msgid "High Speed Train" #~ msgstr "Höghastighetståg" #~ msgid "Last refreshed {}" #~ msgstr "Senast uppdaterad {}" #~ msgid "Julian Schmidhuber" #~ msgstr "Julian Schmidhuber" #~ msgid "Show Stopovers in Between" #~ msgstr "Visa mellanlandningar mellan" #~ msgid "ICE" #~ msgstr "ICE" #~ msgid "IC/EC" #~ msgstr "IC/EC" #~ msgid "Interregio/RegionalExpress" #~ msgstr "Interregio/RegionalExpress" #~ msgid "Regio" #~ msgstr "Regio" #~ msgid "S-Bahn" #~ msgstr "S-Bahn" #~ msgid "Received an invalid response. Please share feedback." #~ msgstr "Fick ett ogiltigt svar. Vänligen dela feedback." #~ msgid "North Rhine-Westphalia" #~ msgstr "Nordrhein-Westfalen" #, fuzzy #~ msgid "Changed" #~ msgstr "{} byte" #, fuzzy #~ msgid "Translation support using Weblate." #~ msgstr "Källöversättning som stöds av" #, fuzzy #~ msgid "Keyboard shortcuts" #~ msgstr "Tangentbordsgenvägar" #, fuzzy #~ msgid "Many more settings" #~ msgstr "Mer alternativ" #, fuzzy #~ msgid "Bookmark journeys" #~ msgstr "Bokmärk resa" #, fuzzy #~ msgid "language-code" #~ msgstr "språk" #~ msgid "{}\\u{202F}min" #~ msgstr "{}\\u{202F}min" #~ msgid "%_H\\u{202F}h %_M\\u{202F}min" #~ msgstr "%_T\\u{202F}h %_M\\u{202F}min" #~ msgid "{}\\u{202F}min." #~ msgstr "{}\\u{202F}min." #~ msgid "{}\\u{202F}hrs." #~ msgstr "{}\\u{202F}timmar." #~ msgid "%-H\\u{202F}hrs. %-M\\u{202F}min." #~ msgstr "%-T\\u{202F}timmar. %-M\\u{202F}min." #~ msgid "{}\\u{202F}h" #~ msgid_plural "{}\\u{202F}h" #~ msgstr[0] "{}\\u{202F}t" #~ msgstr[1] "{}\\u{202F}t" #~ msgid "Remove Past Trips From Bookmarks" #~ msgstr "Ta bort tidigare resor från bokmärken" #~ msgid "Time After Arrival After Which to Remove Them" #~ msgstr "Tid efter ankomst efter vilket man ska ta bort dem" #~ msgid "Refresh Journey" #~ msgstr "Uppdatera resa" #~ msgid "Open Remarks" #~ msgstr "Öppna anmärkningar" #~ msgid "Delete Old Journeys" #~ msgstr "Radera gamla resor" #~ msgid "Time to Keep Journey After Arrival" #~ msgstr "Tid att behålla resan efter ankomsten" #~ msgid "On time" #~ msgstr "I tid" #~ msgid "Unreachable" #~ msgstr "Onåbar" #~ msgid "Custom selection" #~ msgstr "Anpassat urval" #~ msgid "Bike accessible" #~ msgstr "Cykel tillgänglig" #~ msgid "The API returned a error. Please report this." #~ msgstr "API:et returnerade ett fel. Vänligen rapportera detta." #~ msgid "Failed to parse response. Please report this." #~ msgstr "Det gick inte att tolka svar. Vänligen rapportera detta." #~ msgid "{amount} €" #~ msgstr "{amount} €" #~ msgid "{amount} {currency}" #~ msgstr "{amount} {currency}" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/ta.po000066400000000000000000001007111517666454200230310ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2025-04-20 15:57+0000\n" "Last-Translator: தமிழ்நேரம் \n" "Language-Team: Tamil \n" "Language: ta\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.11.1-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "ரயில்வே" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "உங்கள் பயணத் தகவல்களைக் கண்டறியவும்" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "ரயில்; ரயில்வே; பயணம்; திட்டமிடுபவர்; கால அட்டவணைகள்;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "வெவ்வேறு வலைத்தளங்கள் வழியாக செல்லாமல் நெட்வொர்க்குகள் மற்றும் எல்லைகள் முழுவதும் பயணத் " "தகவல்களைப் பார்க்க ரயில்வே உங்களை அனுமதிக்கிறது. தகவமைப்பு வடிவமைப்பு காரணமாக, " "பயணத்தின்போது உங்கள் பயணத்தை முன்கூட்டியே அல்லது மொபைலில் திட்டமிடுவது பொருத்தமானது:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "தளங்கள் மற்றும் தாமதங்கள் உள்ளிட்ட உங்கள் பயணங்களை காண்க" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "தற்போதைய மற்றும் எதிர்கால பயணங்கள் மற்றும் அடிக்கடி தேடல் புக்மார்க்கு" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" "போக்குவரத்து முறை மூலம் வடிகட்டுதல் போன்ற முன்கூட்டியே தேடல் விருப்பங்களைப் பயன்படுத்துங்கள்" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "உலகெங்கிலும் உள்ள நெட்வொர்க்குகளுக்காக, ஆனால் பெரும்பாலும் ஐரோப்பாவிலிருந்து." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "பயன்பாட்டு கண்ணோட்டம்" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "புறப்படுதல்" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "வருகை" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "உள்ளீட்டு தேதி" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "திகதி" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "உள்ளீட்டு நேரம்" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "நேரம்" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "இப்போது" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "மொத்த பயண நேரம்" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "பயணப் பிரிவுகள்" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "ஒரு பயணத்தைத் தேர்வுசெய்க" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "பயணங்களைத் தேடுங்கள்" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "நிறுத்தங்களைக் காட்டு" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "இடைநிலை நிறுத்தங்களைக் காட்டு" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "அறிவிப்புகளைக் காட்டு" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "அறிவிப்புகள்" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "நிறுத்தங்கள்" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "பொது" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "பழைய புக்மார்க்குகளை தானாக அகற்றவும்" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "கடந்த பயணங்கள் ஒரு குறிப்பிட்ட காலத்திற்கு மட்டுமே வைக்கப்படுகின்றன" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "பயணங்களுக்கான பாதுகாப்பு நேரம்" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "வந்த பிறகு எவ்வளவு நேரம் பயணங்களைத் தக்க வைத்துக் கொள்ள வேண்டும்" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "நெட்வொர்க்குகளைத் தேடுங்கள்…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "பயணத்தை புதுப்பிக்கவும்" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "மேலும் தேடல் விருப்பங்கள்" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "மேம்பட்ட தேடல் விருப்பங்களைச் செம்மைப்படுத்தவும்" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "மேலும் விருப்பங்கள்" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "தள்ளுபடி அட்டை" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "வகுப்பு" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "முதல் வகுப்பு" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "இரண்டாம் வகுப்பு" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "பைக் அணுகக்கூடியது" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "குறைந்தபட்ச பரிமாற்ற நேரம்" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "நேரடி இணைப்புகள் மட்டுமே" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "போக்குவரத்து முறைகள்" #: data/resources/ui/search_options_dialog.blp:60 #, fuzzy msgid "Mainline Train" msgstr "பிராந்திய ரயில்" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "பிராந்திய ரயில்" #: data/resources/ui/search_options_dialog.blp:70 #, fuzzy msgid "S-Bahn Train" msgstr "புறநகர் ரயில்கள்" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "பச்" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "படகு" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "சுரங்கப்பாதை" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "டிராம்" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "கேபிள்கார்" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "டாக்சி" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "இருந்து" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "பெறுநர்" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "தேடல்" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "புக்மார்க்கு செய்யப்பட்ட பயணங்கள்" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "புக்மார்க்கு தேடல்கள்" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "பயன்பாடு" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "புக்மார்க்கு தேடல்" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "புக்மார்க்கு பயணம்" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "பயணத்தை மீண்டும் ஏற்றவும்" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "வெளியேறு" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "குறுக்குவழிகளைக் காட்டு" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "விருப்பங்களைக் காட்டு" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "திறந்த பட்டியல்" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "இடமாற்று தொடக்க மற்றும் இலக்கு" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "பிணையத்தைத் தேர்ந்தெடுக்கவும்" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "பட்டியல் விளையாடுங்கள்" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "இணைப்புகள்" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "இந்த தேடலை புக்மார்க்கு செய்யுங்கள்" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "பயண விவரங்கள்" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "இந்த பயணத்தை புதுப்பிக்கவும்" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "இந்த பயணத்தை புக்மார்க்கு செய்யுங்கள்" #: data/resources/ui/window.blp:166 #, fuzzy msgid "Watch this Trip" msgstr "இந்த பயணத்தை புதுப்பிக்கவும்" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "விருப்பத்தேர்வுகள்" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "விசைப்பலகை குறுக்குவழிகள்" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "ரயில்வே" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "அதிக சுமை" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "மிக அதிக சுமை" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "விதிவிலக்காக அதிக சுமை" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "சரியான நேரத்தில்" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "சிறிய தாமதங்கள்" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "தாமதமானது" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "மிகவும் தாமதமானது" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "மிகவும் தாமதமானது" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "இயங்குதள மாற்றங்கள்" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "இணைப்பு சாத்தியமில்லை" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "ரத்து செய்யப்பட்டது" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "ஒரு புக்மார்க்கு பயணம் அண்மைக் காலத்தில் முடிந்தது." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "எப்போதும் _delete" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "தொடக்க மற்றும் இலக்கு காணவில்லை" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "தொடக்கமில்லை" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "இலக்கு இல்லை" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "தொடர்ந்து தேடுங்கள்" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "{destination}க்கு வந்து சேருங்கள்." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "நடை {walk} காத்திருங்கள் {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "நேரத்தை மாற்றவும் {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "நடைபயிற்சி {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "இடமாற்றம்" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} மணித்துளி" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_Hh %_mmin" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] " %_d நாள் %_hh %_mmin" msgstr[1] "%_d நாட்கள் %_hh %_mmin" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} மணித்துளி." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} மணி." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-Hhhrs. %-மின்." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d நாள் %-hhhrs. %-மின்." msgstr[1] "%-d நாட்கள் %-hhrs. %-மின்." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%எச்:%மீ" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "இன்று" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "நாளை" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "நேற்று" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%Y-%m-%d" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} ம" msgstr[1] "{} ம" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "எதுவுமில்லை" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "பஅன்கார்ட் 25, 1 ஆம் வகுப்பு" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "பஅன்கார்ட் 25, 2 ஆம் வகுப்பு" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "பஅன்கார்ட் 50, 1 ஆம் வகுப்பு" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "பஅன்கார்ட் 50, 2 ஆம் வகுப்பு" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A - அட்வாண்டேச் அட்டை (ரெயிலுடன்)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH - Halbtaxabo (ரெயிலுடன்)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "சி - அரை -ஃபாக்சாபோ (ரெயிலச் இல்லாமல்)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "என்.எல் - வூயோர்ட்வெரெனாபோ (ரெயிலுடன்)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "என்.எல் - வொய்ட்வெரெனாபோ (ரெயில்கள் இல்லாமல்)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "Sh- கார்ட்" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "சி - பொது சந்தா" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "தெரியவில்லை" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "1 ஆம் வகுப்பு" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "2 ஆம் வகுப்பு" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "பிராந்திய மட்டும்" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "தேர்ந்தெடுக்கப்பட்ட போக்குவரத்து முறைகள்" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "நேரடி இணைப்பு" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "தரவைப் பெறுவதில் தோல்வி. நீங்கள் இணையத்துடன் இணைக்கப்பட்டுள்ளீர்களா?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "பிழை பெற்றது. கருத்துக்களைப் பகிரவும்." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "மேலும் செய்தி" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "அறியப்படாத சிக்கல் ஏற்பட்டது. கருத்துக்களைப் பகிரவும்." #: src/gui/error.rs:42 msgid "Error" msgstr "பிழை" #: src/gui/error.rs:46 msgid "_Close" msgstr "மூடு (_C)" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "%a %b %d" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "}} மாற்றம்" msgstr[1] "}} மாற்றங்கள்" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "{departure} முதல் {arrival} வரை {travel_time}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{இலக்கு of இன் திசையில் {train}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "{start} இல் தளத்திலிருந்து {platform} புறப்படுங்கள்." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "{புறப்பாடு {start}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "{destination} இல் இயங்குதளத்தில் {platform} க்கு வந்து சேருங்கள்." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "{destination} இல் {arrival} க்கு வந்து சேருங்கள்." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} நிறுத்து" msgstr[1] "{} நிறுத்தப்படும்" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} இல் {arrival} மேடையில் {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} இல் நிறுத்துங்கள்}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "பரிந்துரை {} தேர்ந்தெடுக்கப்பட்டது" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "எந்த ஆலோசனையும் தேர்ந்தெடுக்கப்படவில்லை" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "ஒரு பரிந்துரை, தேர்ந்தெடுக்கப்படவில்லை" msgstr[1] "{n} பரிந்துரைகள், எதுவும் தேர்ந்தெடுக்கப்படவில்லை" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "மொழிபெயர்ப்பாளர்-வரவு" #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "ஆதரிக்கப்படும் மூல மொழிபெயர்ப்பு" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "ஒவ்வொரு ~ {}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "€ {amount}" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "$ {amount}" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{currency} {amount}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "செர்மனி" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "வட அமெரிக்கா" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "ஐரோப்பா" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "ஆச்திரியா" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "செல்ச்விக்-ஓல்ச்டீன்" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "உலகளவில் (பீட்டா)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "டிரான்சிடெசைப் பயன்படுத்துதல்" #: src/backend/journey.rs:271 #, fuzzy msgid "Start at {station} on platform {platform} at {time}" msgstr "{destination} இல் இயங்குதளத்தில் {platform} க்கு வந்து சேருங்கள்." #: src/backend/journey.rs:274 #, fuzzy msgid "Start at {station} at {time}" msgstr "{destination} இல் {arrival} க்கு வந்து சேருங்கள்." #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "" #: src/backend/journey.rs:309 #, fuzzy msgid "{time} transfer time to get to platform {platform}" msgstr "{stop} இல் {arrival} மேடையில் {platform}" #: src/backend/journey.rs:315 #, fuzzy msgid "{time} transfer time" msgstr "குறைந்தபட்ச பரிமாற்ற நேரம்" #: src/backend/journey.rs:318 #, fuzzy msgid "Upcoming departure on platform {platform}" msgstr "{stop} இல் {arrival} மேடையில் {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 #, fuzzy msgid "Arriving at {destination} soon" msgstr "{destination}க்கு வந்து சேருங்கள்." #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 #, fuzzy msgid "{train} departing on platform {platform} today instead" msgstr "{destination} இல் இயங்குதளத்தில் {platform} க்கு வந்து சேருங்கள்." #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 #, fuzzy msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "{destination} இல் இயங்குதளத்தில் {platform} க்கு வந்து சேருங்கள்." #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 #, fuzzy msgid "Arriving at {current-destination} in {duration}" msgstr "{destination} இல் {arrival} க்கு வந்து சேருங்கள்." #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "நடை" #~ msgid "High Speed Train" #~ msgstr "அதிவேக ரயில்" #~ msgid "Last refreshed {}" #~ msgstr "கடைசியாக புதுப்பிக்கப்பட்ட {}" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/te.po000066400000000000000000000525401517666454200230430ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2026-03-26 16:09+0000\n" "Last-Translator: Hyper Demon \n" "Language-Team: Telugu \n" "Language: te\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.17-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "లోహపథము" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "మీ ప్రయాన సమాచారాలని కనుక్కోండి" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "రైలు;రైల్వే;ప్రయాణం;ప్రణాళిక;వేళల పట్టిక;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "" #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "" #: data/resources/ui/search_options_dialog.blp:60 msgid "Mainline Train" msgstr "" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "" #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "" #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] "" msgstr[1] "" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "" #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "" #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "" #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "" msgstr[1] "" #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "" msgstr[1] "" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "" #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "" #: src/gui/error.rs:42 msgid "Error" msgstr "" #: src/gui/error.rs:46 msgid "_Close" msgstr "" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "" msgstr[1] "" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "" #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "" #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "" msgstr[1] "" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "" msgstr[1] "" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "" #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "" #: src/backend/journey.rs:271 msgid "Start at {station} on platform {platform} at {time}" msgstr "" #: src/backend/journey.rs:274 msgid "Start at {station} at {time}" msgstr "" #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "" #: src/backend/journey.rs:309 msgid "{time} transfer time to get to platform {platform}" msgstr "" #: src/backend/journey.rs:315 msgid "{time} transfer time" msgstr "" #: src/backend/journey.rs:318 msgid "Upcoming departure on platform {platform}" msgstr "" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 msgid "Arriving at {destination} soon" msgstr "" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 msgid "{train} departing on platform {platform} today instead" msgstr "" #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "" #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 msgid "Arriving at {current-destination} in {duration}" msgstr "" #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/tr.po000066400000000000000000000647601517666454200230670ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2026-02-16 18:09+0000\n" "Last-Translator: Sabri Ünal \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.16\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Demiryolu" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Tüm seyahat bilgilerinizi bulun" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "" "train;railway;journey;planner;timetables;tren;demiryolu;demir yolu;yolculuk;" "planlama;plan;zaman çizelgesi;kalkış saatleri;hareket saatleri;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Railway, farklı ağlar ve sınırlar arasında seyahat bilgilerini, farklı web " "sitelerinde gezinmek zorunda kalmadan bakmanızı sağlar. Uyum sağlayabilen " "tasarımı sayesinde, yolculuğunuzu önceden planlamak veya mobil olarak yolda " "kullanmak için uygundur:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "Peronlar ve gecikmeler dahil yolculuğunuza ait tüm ayrıntıları görün" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "" "Şu anki ve gelecekteki yolculuklarınızı ve sık yapılan aramaları yer " "işaretlerine ekleyin" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" "Ulaşım türüne göre filtreleme gibi gelişmiş arama seçeneklerinden yararlanın" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "" "Ve tüm bunlar dünyanın dört bir yanından, ama çoğunlukla Avrupa'dan gelen " "ağlar için." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Uygulama Önizlemesi" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Kalkış" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Varış" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Girdi tarihi" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Tarih" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Girdi süresi" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Süre" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Şimdi" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Toplam Seyahat Süresi" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Yolculuk Bölümleri" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Gezi Seç" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Gezi Ara" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Durakları Göster" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Ara Durakları Göster" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Duyuruları Göster" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Duyurular" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Duraklar" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Genel" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Eski Yer İmlerini Kendiliğinden Kaldır" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "Geçmiş geziler belirli bir süre için saklanır" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Gezilerin Koruma Süresi" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Varıştan sonra gezilerin ne kadar saklanacağı" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Ağları Ara…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Geziyi Yenile" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Daha çok arama seçeneği" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Gelişmiş Arama Seçeneklerini Daralt" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Daha Çok Seçenek" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "İndirim Kartı" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Sınıf" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Birinci Sınıf" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "İkinci Sınıf" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Bisiklet Erişilebilir" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Asgari Aktarma Süresi" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Yalnızca Doğrudan Bağlantılar" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Ulaşım Kipleri" #: data/resources/ui/search_options_dialog.blp:60 #, fuzzy msgid "Mainline Train" msgstr "Sadece Bölgesel" #: data/resources/ui/search_options_dialog.blp:65 #, fuzzy msgid "Regional Train" msgstr "Sadece Bölgesel" #: data/resources/ui/search_options_dialog.blp:70 #, fuzzy msgid "S-Bahn Train" msgstr "S-Bahn" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Otobüs" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Feribot" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Metro" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Tramvay" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Teleferik" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Taksi" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "Başlangıç" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "Bitiş" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Ara" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Yer İmli Geziler" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Yer İmli Aramalar" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Uygulama" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Yer İmi Ara" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Geziyi İmle" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Geziyi Yeniden Yükle" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Çık" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Kısayolları Göster" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Tercihleri Göster" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Menüyü Aç" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Başlangıç ve Hedefi Yer Değiştir" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Ağ Seç" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Ana Menü" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Bağlantılar" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Bu Aramayı İmle" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Gezi Ayrıntıları" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Bu Geziyi Yenile" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Bu Geziyi İmle" #: data/resources/ui/window.blp:166 #, fuzzy msgid "Watch this Trip" msgstr "Bu Geziyi Yenile" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Tercihler" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Klavye Kısayolları" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "Demiryolu _Hakkında" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Yüksek Yük" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Çok Yüksek Yük" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Aşırı Yüksek Yük" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "Zamanında" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Küçük Gecikmeler" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Gecikmeli" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Çok Gecikmeli" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Aşırı Gecikmeli" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Platform Değişiklikleri" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Bağlantı Mümkün Değil" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "İptal Edildi" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "Yakın zamanda imlenmiş bir sefer tamamlandı." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "Her zaman _Sil" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Başlangıç ve varış noktası eksik" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Başlangıç eksik" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Hedef eksik" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Arama devam ediyor" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Varış {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Yürü {walk} Bekle {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Aktarma Süresi {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Yürü {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Aktar" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} dk" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H sa %_M dk" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] " %_d gün %_H sa %_M dk" msgstr[1] "%_d gün %_H sa %_M dk" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} dk." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} sa." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H sa. %-M dk." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d gün %-H sa. %-M dk." msgstr[1] "%-d gün %-H sa. %-M dk." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Bugün" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Yarın" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Dün" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%d %b %a" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%d/%m/%Y" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} sa" msgstr[1] "{} sa" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Hiçbiri" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, 1. sınıf" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, 2. sınıf" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, 1. sınıf" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, 2. sınıf" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A - VORTEILScard (RAILPLUS ile)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH - HalbtaxAbo (RAILPLUS ile)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH - HalbtaxAbo (RAILPLUS olmadan)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL - Voordeelurenabo (RAILPLUS ile)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL - Voordeelurenabo (RAILPLUS olmadan)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-Kartı" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH - General-Abonnement" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Bilinmeyen" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "1. sınıf" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "2. sınıf" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Sadece Bölgesel" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Seçilmiş Aktarım Kipleri" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Doğrudan Bağlantı" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "Veri alınamadı. İnternete bağlı mısınız?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Hata alındı. Lütfen geri bildirim paylaşın." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Daha Çok Bilgi" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "Bilinmeyen hata oluştu. Lütfen geri bildirim paylaşın." #: src/gui/error.rs:42 msgid "Error" msgstr "Hata" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Kapat" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, fuzzy, c-format msgid "%a %b %d" msgstr "%b %d %a" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} değişimi" msgstr[1] "{} değişimleri" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "" "{changes_text} ile {travel_time} içinde {departure} noktasından {arrival} " "noktasına" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train}, {destination} yönünde" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 #, fuzzy msgid "Depart {start} from platform {platform} at {departure}." msgstr "" "{platform} platformunda {arrival} saatinde {destination noktasına ulaşın." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "" #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "" "{platform} platformunda {arrival} saatinde {destination noktasına ulaşın." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "{destination} noktasına {arrival} saatinde ulaşın." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} Durak" msgstr[1] "{} Duraklar" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 #, fuzzy msgid "{stop} at {arrival} on platform {platform}" msgstr "" "{platform} platformunda {arrival} saatinde {destination noktasına ulaşın." #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 #, fuzzy msgid "{stop} at {arrival}" msgstr "{destination} noktasına {arrival} saatinde ulaşın." #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "{} önerisi seçildi" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Öneri seçilmedi" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "bir öneri, seçilmedi" msgstr[1] "{n} öneri, hiçbiri seçilmedi" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "" "Sabri Ünal \n" "Yasin Karaaslan " #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Kaynak Çeviriyi Destekleyen" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "her ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "€{amount}" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "${amount}" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{currency} {amount}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Almanya" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "Kuzey Amerika" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Avrupa" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Avusturya" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Schleswig-Holstein" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "Dünya Çapında (beta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Transitous ile" #: src/backend/journey.rs:271 #, fuzzy msgid "Start at {station} on platform {platform} at {time}" msgstr "" "{platform} platformunda {arrival} saatinde {destination noktasına ulaşın." #: src/backend/journey.rs:274 #, fuzzy msgid "Start at {station} at {time}" msgstr "{destination} noktasına {arrival} saatinde ulaşın." #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "" #: src/backend/journey.rs:309 msgid "{time} transfer time to get to platform {platform}" msgstr "" #: src/backend/journey.rs:315 #, fuzzy msgid "{time} transfer time" msgstr "Asgari Aktarma Süresi" #: src/backend/journey.rs:318 msgid "Upcoming departure on platform {platform}" msgstr "" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 #, fuzzy msgid "Arriving at {destination} soon" msgstr "Varış {destination}." #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 #, fuzzy msgid "{train} departing on platform {platform} today instead" msgstr "" "{platform} platformunda {arrival} saatinde {destination noktasına ulaşın." #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 #, fuzzy msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "" "{platform} platformunda {arrival} saatinde {destination noktasına ulaşın." #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 #, fuzzy msgid "Arriving at {current-destination} in {duration}" msgstr "{destination} noktasına {arrival} saatinde ulaşın." #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Yürü" #~ msgid "High Speed Train" #~ msgstr "Yüksek Hızlı Tren" #~ msgid "Last refreshed {}" #~ msgstr "Son yenileme {}" #~ msgid "Julian Schmidhuber" #~ msgstr "Julian Schmidhuber" #~ msgid "Show Stopovers in Between" #~ msgstr "Aradaki Mola Yerlerini Göster" #~ msgid "ICE" #~ msgstr "ICE" #~ msgid "IC/EC" #~ msgstr "IC/EC" #~ msgid "Interregio/RegionalExpress" #~ msgstr "Interregio/RegionalExpress" #~ msgid "Regio" #~ msgstr "Regio" #~ msgid "Received an invalid response. Please share feedback." #~ msgstr "Geçersiz yanıt alındı. Lütfen geri bildirim paylaşın." #~ msgid "North Rhine-Westphalia" #~ msgstr "Kuzey Ren-Vestfalya" #, fuzzy #~ msgid "Changed" #~ msgstr "{} değişim" #, fuzzy #~ msgid "Translation support using Weblate." #~ msgstr "Kaynak Çeviriyi Destekleyen" #, fuzzy #~ msgid "Keyboard shortcuts" #~ msgstr "Klavye Kısayolları" #, fuzzy #~ msgid "Many more settings" #~ msgstr "Daha Çok Seçenek" #, fuzzy #~ msgid "Bookmark journeys" #~ msgstr "Geziyi İmle" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/uk.po000066400000000000000000000730351517666454200230540ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2026-04-16 15:09+0000\n" "Last-Translator: Roma \n" "Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Weblate 5.17.1-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Railway" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Знайти всю інформацію про подорожі" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "поїзд;шлях;подорож;планувальник;розклади;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Railway дозволяє переглядати інформацію про подорожі за маршрутами та через " "кордони, не копаючись у веб-сайтах. Завдяки адаптивному дизайну, підходить " "для попереднього планування маршруту та його коригування на ходу:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "Переглядайте деталі ваших поїздок, включаючи платформи та затримки" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "" "Додавання поточних і майбутніх поїздок до закладок, а також часті пошукові " "запити" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "" "Скористайтеся додатковими опціями пошуку, такими як фільтрація за видом " "транспорту" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "І все це для мереж з усього світу, але переважно з Європи." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Огляд програми" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Відправлення" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Прибуття" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Уведіть дату" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Дата" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Уведіть час" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Час" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Зараз" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Всього в дорозі" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Сегменти подорожі" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Оберіть поїздку" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Пошук поїздок" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Показати зупинки" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Показати проміжні зупинки" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Показати оголошення" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Оголошення" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Зупинки" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Загальне" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Автоматично видаляти старі закладки" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "Минулі поїздки зберігаються лише протягом певного періоду часу" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Час збереження для поїздок" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Як довго зберігати поїздки після прибуття" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Пошукові мережі…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Оновити поїздку" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Більше варіантів пошуку" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Уточнити параметри розширеного пошуку" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Більше опцій" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Дисконтна картка" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Клас" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Перший клас" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Другий клас" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Доступний для велосипедів" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Мінімальний час у дорозі" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Тільки прямі сполучення" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Види транспорту" #: data/resources/ui/search_options_dialog.blp:60 msgid "Mainline Train" msgstr "Магістральний потяг" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Регіональний потяг" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "Приміські поїзди" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Автобус" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Пором" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Метро" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Трамвай" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Канатна дорога" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Таксі" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "Від" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "До" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Пошук" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Поїздки в закладках" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Пошуки в закладках" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Додаток" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Зберегти пошук" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Додайте цю поїздку в закладки" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Перезавантажити поїздку" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Вийти" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Показати ярлики" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Показати налаштування" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Відкрити меню" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Поміняти місцями початковий та кінцевий пункти призначення" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Виберіть мережу" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Головне меню" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "З'єднання" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Додати в закладки цей пошук" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Деталі поїздки" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Оновити поїздку" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Додати поїздку в закладки" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "Слідкувати за цим маршрутом" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Уподобання" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Комбінації клавіш" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "_Про Railway" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Висока завантаженість" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Дуже висока завантаженість" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Виключно висока завантаженість" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "Вчасно" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Незначні затримки" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Затримується" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Значна затримка" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Дуже запізнюється" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Зміни платформи" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Стикування неможливе" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Скасовано" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "Поїздка в закладках нещодавно закінчилася." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "Завжди _Видалити" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Відсутній пункт відправлення та призначення" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Пункт відправлення відсутній" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Пункт призначення відсутній" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Триває пошук" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Прибуття в {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Пішки {walk} чекати {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Час в дорозі {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Пішки {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Трансфер" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} хв" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H год %_M хв" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] "%_d день %_H год %_M хв" msgstr[1] "%_d дні %_H год %_M хв" msgstr[2] "%_d днів %_H год %_M хв" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} хв." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} год." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H год. %-M хв." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d день %-H год. %-M хв." msgstr[1] "%-d дні %-H год. %-M хв." msgstr[2] "%-d днів %-H год. %-M хв." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Сьогодні" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Завтра" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Вчора" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%d %m %Y" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} година" msgstr[1] "{} години" msgstr[2] "{} годин" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Нічого" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, 1-й клас" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, 2-й клас" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, 1-й клас" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, 2-й клас" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A - VORTEILScard (з RAILPLUS)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH - HalbtaxAbo (з RAILPLUS)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH - HalbtaxAbo (без RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL - Voordeelurenabo (з RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL - Voordeelurenabo (без RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH - Card" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH - General-Abonnement" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Невідомий" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "перший клас" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "другий клас" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Тільки регіональні" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Вибрані види транспорту" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Пряме сполучення" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "Не вдалося отримати дані. Ви підключені до Інтернету?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Виникла помилка. Будь ласка, залиште відгук." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Більше інформації" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "Виникла невідома проблема. Будь ласка, поділіться відгуком." #: src/gui/error.rs:42 msgid "Error" msgstr "Помилка" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Закрити" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "%a %b %d" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} зміна" msgstr[1] "{} зміни" msgstr[2] "{} змін" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "Від {departure} до {arrival} за {travel_time} з {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} у напрямку {destination}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Відправлення {start} з платформи {platform} до {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Відправлення {start} до {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "Прибуття в {destination} на платформу {platform} в {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Прибуття в {destination} в {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} зупинка" msgstr[1] "{} зупинки" msgstr[2] "{} зупинок" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} в {arrival} на платформі {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} в {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Вибрано пропозицію {}" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Не вибрано жодної пропозиції" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "одна пропозиція, не обрана" msgstr[1] "{n} пропозиції, не вибрано жодної" msgstr[2] "{n} пропозицій, не вибрано жодної" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "mljoke <5h6yvkei5@mozmail.com>" #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Переклад оригіналу здійснено за підтримки" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "кожні ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "€{amount}" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "{amount}$" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{currency} {amount}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Німеччина" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "Північна Америка" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Європа" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Австрія" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Шлезвіг-Гольштейн" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "Всесвітня (бета)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Використовуючи Transitous" #: src/backend/journey.rs:271 msgid "Start at {station} on platform {platform} at {time}" msgstr "Відправлення з {destination} з платформи {platform} в {arrival}" #: src/backend/journey.rs:274 msgid "Start at {station} at {time}" msgstr "Початок на {station} о {time}" #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "Подорож до {destination} розпочнеться незабаром" #: src/backend/journey.rs:309 msgid "{time} transfer time to get to platform {platform}" msgstr "{time} до переходу на платформу {platform}" #: src/backend/journey.rs:315 msgid "{time} transfer time" msgstr "{time} час пересадки" #: src/backend/journey.rs:318 msgid "Upcoming departure on platform {platform}" msgstr "Наступне відправлення на платформі {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "Незабаром відбудеться пересадка на {station}" #: src/backend/journey.rs:335 msgid "Arriving at {destination} soon" msgstr "Незабаром прибуття до {destination}" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "{train} відправляється із затримкою на {time}" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "Прибуття {train} затримується на {time}" #: src/backend/journey.rs:427 msgid "{train} departing on platform {platform} today instead" msgstr "{train} відправляється сьогодні з платформи {platform}" #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" "Попередження: вже неможливо встигнути на наступний {train} з {origin} до " "{destination}." #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "Попередження: Поїзд {train} з {origin} до {destination} скасовано." #: src/backend/journey.rs:562 msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "Відправлення з {next-origin} о {duration} на платформі {next-platform}" #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "Початок у {next-origin} через {duration}" #: src/backend/journey.rs:568 msgid "Arriving at {current-destination} in {duration}" msgstr "За {duration} ви дістанетеся до {current-destination}" #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" "Пересадка на {next-leg-name} на платформі {next-platform} – час до " "відправлення: {duration}" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "Пересадка на {next-leg-name} – час до відправлення: {duration}" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "Ви досягли пункту призначення" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Пішки" #~ msgid "High Speed Train" #~ msgstr "Високошвидкісний потяг" #~ msgid "Last refreshed {}" #~ msgstr "Останнє оновлення {}" #~ msgid "Julian Schmidhuber" #~ msgstr "Джуліан Шмідхубер" #, fuzzy #~ msgid "Keyboard shortcuts" #~ msgstr "Відкрити зупинки" #, fuzzy #~ msgid "Bookmark journeys" #~ msgstr "Оберіть поїздку" #, fuzzy #~ msgid "Open Remarks" #~ msgstr "Відкрити примітки" #~ msgid "Delete Old Journeys" #~ msgstr "Видалити старі поїздки" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/vi.po000066400000000000000000000637501517666454200230560ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2025-12-12 19:00+0000\n" "Last-Translator: Loc Huynh \n" "Language-Team: Vietnamese \n" "Language: vi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 5.15-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "Railway" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "Tìm thông tin chuyến đi của bạn" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "" "train;railway;journey;planner;timetables;tàu;đường sắt;hành trình;lập kế " "hoạch;lịch tàu;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "Railway cho phép tra cứu thông tin chuyến đi trên nhiều mạng lưới và biên " "giới mà không cần duyệt qua nhiều trang web khác nhau. Nhờ thiết kế thích " "ứng, ứng dụng phù hợp để lập kế hoạch trước hoặc dùng khi di chuyển:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "Xem chi tiết chuyến đi gồm sân ga và độ trễ" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "Đánh dấu chuyến đi hiện tại, sắp tới và tìm kiếm thường dùng" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "Sử dụng tùy chọn tìm kiếm nâng cao như lọc theo phương tiện" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "Hỗ trợ mạng lưới trên toàn thế giới, chủ yếu tại châu Âu." #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "Tổng quan ứng dụng" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "Khởi hành" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "Đến nơi" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "Nhập ngày" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "Ngày" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "Nhập giờ" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "Giờ" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "Bây giờ" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "Tổng thời gian di chuyển" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "Các đoạn chuyến đi" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "Chọn chuyến đi" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "Tìm chuyến đi" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "Hiện điểm dừng" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "Hiện điểm dừng trung gian" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "Hiện thông báo" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "Thông báo" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "Điểm dừng" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "Chung" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "Tự động xóa đánh dấu cũ" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "Chuyến đi cũ chỉ được giữ trong một khoảng thời gian" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "Thời gian lưu chuyến đi" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "Thời gian giữ lại sau khi đến nơi" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "Tìm mạng lưới…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "Làm mới chuyến đi" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "Thêm tùy chọn tìm kiếm" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "Tinh chỉnh tùy chọn nâng cao" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "Thêm tùy chọn" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "Thẻ giảm giá" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "Hạng" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "Hạng nhất" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "Hạng hai" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "Mang theo xe đạp" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "Thời gian chuyển tuyến tối thiểu" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "Chỉ tuyến trực tiếp" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "Phương tiện" #: data/resources/ui/search_options_dialog.blp:60 msgid "Mainline Train" msgstr "Tàu chính tuyến" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "Tàu khu vực" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "Tàu S-Bahn" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "Xe buýt" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "Phà" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "Tàu điện ngầm" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "Tàu điện" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "Cáp treo" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "Taxi" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "Từ" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "Đến" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "Tìm kiếm" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "Chuyến đi đã đánh dấu" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "Tìm kiếm đã đánh dấu" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "Ứng dụng" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "Đánh dấu tìm kiếm" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "Đánh dấu chuyến đi" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "Tải lại chuyến đi" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "Thoát" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "Hiện phím tắt" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "Hiện cài đặt" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "Mở menu" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "Đổi vị trí điểm đi và điểm đến" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "Chọn mạng lưới" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "Menu chính" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "Kết nối" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "Đánh dấu tìm kiếm này" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "Chi tiết chuyến đi" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "Làm mới chuyến đi này" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "Đánh dấu chuyến đi này" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "Theo dõi chuyến đi này" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "Cài đặt" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "Phím tắt" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "_Giới thiệu Railway" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "Tải cao" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "Tải rất cao" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "Tải cực cao" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "Đúng giờ" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "Trễ nhẹ" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "Trễ" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "Trễ nhiều" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "Trễ nghiêm trọng" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "Đổi sân ga" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "Không thể kết nối" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "Hủy" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "Một chuyến đi đã đánh dấu vừa kết thúc." #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "Luôn _xóa" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "Thiếu điểm đi và điểm đến" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "Thiếu điểm đi" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "Thiếu điểm đến" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "Đang tìm kiếm" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "Đến {destination}." #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "Đi bộ {walk} Chờ {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "Thời gian chuyển tuyến {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "Đi bộ {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "Chuyển tuyến" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} phút" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H giờ %_M phút" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] "%_d ngày %_H h %_M min" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} phút." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} giờ." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H giờ. %-M phút." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d ngày %-H giờ. %-M phút." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "Hôm nay" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "Ngày mai" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "Hôm qua" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%Y-%m-%d" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} giờ" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "Không" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "BahnCard 25, hạng 1" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "BahnCard 25, hạng 2" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "BahnCard 50, hạng 1" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "BahnCard 50, hạng 2" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "A – VORTEILScard (kèm RAILPLUS)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "CH – HalbtaxAbo (kèm RAILPLUS)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "CH – HalbtaxAbo (không RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "NL – Voordeelurenabo (kèm RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "NL – Voordeelurenabo (không RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "SH-Card" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "CH – General-Abonnement" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "Không rõ" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "Hạng 1" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "Hạng 2" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "Chỉ tàu vùng" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "Các phương tiện đã chọn" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "Kết nối trực tiếp" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "Không lấy được dữ liệu. Bạn có đang kết nối internet không?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "Đã gặp lỗi. Vui lòng gửi phản hồi." #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "Thông tin thêm" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "Xuất hiện lỗi không xác định. Vui lòng gửi phản hồi." #: src/gui/error.rs:42 msgid "Error" msgstr "Lỗi" #: src/gui/error.rs:46 msgid "_Close" msgstr "_Đóng" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "%a %b %d" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} lần chuyển" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "Từ {departure} đến {arrival} trong {travel_time} với {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} hướng tới {destination}" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "Khởi hành tại {start} từ sân ga {platform} lúc {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "Khởi hành tại {start} lúc {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "Đến {destination} tại sân ga {platform} lúc {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "Đến {destination} lúc {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} điểm dừng" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} lúc {arrival} tại sân ga {platform}" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} lúc {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "Đã chọn gợi ý {}" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "Chưa chọn gợi ý nào" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "1 gợi ý, chưa chọn" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "" "Vietnam Linux L10n \n" "Loc Huynh " #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "Dịch nguồn được hỗ trợ bởi" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "mỗi ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "€{amount}" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "${amount}" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{currency} {amount}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "Đức" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "Bắc Mỹ" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "Châu Âu" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "Áo" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "Schleswig-Holstein" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "Toàn cầu (beta)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "Sử dụng Transitous" #: src/backend/journey.rs:271 msgid "Start at {station} on platform {platform} at {time}" msgstr "Khởi hành tại {station} ở sân ga {platform} lúc {time}" #: src/backend/journey.rs:274 msgid "Start at {station} at {time}" msgstr "Khởi hành tại {station} lúc {time}" #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "Chuyến đi đến {destination} sẽ bắt đầu sớm" #: src/backend/journey.rs:309 msgid "{time} transfer time to get to platform {platform}" msgstr "Thời gian chuyển {time} để đến sân ga {platform}" #: src/backend/journey.rs:315 msgid "{time} transfer time" msgstr "Thời gian chuyển {time}" #: src/backend/journey.rs:318 msgid "Upcoming departure on platform {platform}" msgstr "Sắp khởi hành tại sân ga {platform}" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "Sắp chuyển tại {station}" #: src/backend/journey.rs:335 msgid "Arriving at {destination} soon" msgstr "Sắp đến {destination}" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "{train} khởi hành trễ {time}" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "{train} đến trễ {time}" #: src/backend/journey.rs:427 msgid "{train} departing on platform {platform} today instead" msgstr "{train} hôm nay sẽ khởi hành tại sân ga {platform}" #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" "Cảnh báo: Không còn thể kịp chuyến nối {train} từ {origin} đến {destination}." #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "Cảnh báo: {train} từ {origin} đến {destination} đã bị hủy." #: src/backend/journey.rs:562 msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "Khởi hành tại {next-origin} trong {duration} ở sân ga {next-platform}" #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "Khởi hành tại {next-origin} trong {duration}" #: src/backend/journey.rs:568 msgid "Arriving at {current-destination} in {duration}" msgstr "Đến {current-destination} trong {duration}" #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" "Chuyển sang {next-leg-name} tại sân ga {next-platform}, còn lại: {duration}" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "Chuyển sang {next-leg-name}, còn lại: {duration}" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "Đã đến điểm cuối của chuyến đi" #: src/backend/leg.rs:130 msgid "Walk" msgstr "Đi bộ" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/po/zh_Hans.po000066400000000000000000000613451517666454200240300ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the diebahn package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: diebahn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-10-22 19:18+0200\n" "PO-Revision-Date: 2025-11-27 08:00+0000\n" "Last-Translator: MM 喵了个 \n" "Language-Team: Chinese (Simplified Han script) \n" "Language: zh_Hans\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 5.15-dev\n" #. Translators: The name of the application. #: data/de.schmidhuberj.DieBahn.desktop.in.in:4 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:8 #: data/resources/ui/window.blp:6 data/resources/ui/window.blp:50 msgid "Railway" msgstr "铁路" #. Translators: The summary of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.desktop.in.in:5 #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:10 msgid "Find all your travel information" msgstr "找到你所有的旅程信息" #. Translators: The keywords from the desktop file. #: data/de.schmidhuberj.DieBahn.desktop.in.in:12 msgid "train;railway;journey;planner;timetables;" msgstr "火车;铁路;旅程;计划;时刻表;" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:35 msgid "" "Railway lets you look up travel information across networks and borders " "without having to navigate through different websites. Due to the adaptive " "design, it is suitable to plan your trip in advance or mobile on the go:" msgstr "" "铁路App让你无需访问大量网站的同时在不同地区的运输网络中搜索旅程计划。因为我们" "自适应的设计,它非常适合用来在移动设备上计划旅程:" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:43 msgid "View your tripsʼ details including platforms and delays" msgstr "查看你的旅程信息,包括站台信息和延误信息" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:47 msgid "Bookmark current and future trips as well as frequent search" msgstr "保存当前和未来的旅程,还有经常搜索的旅程" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:51 msgid "Make use of advance search options like filtering by mode of transport" msgstr "利用高级搜索,比如乘坐车辆的种类" #. Translators: Part of the description of the application in the metainfo. #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:56 msgid "" "And all that for networks from all around the world, but mostly from Europe." msgstr "还有来自世界各地的大量运输网络,当然主要是来自欧洲的。" #. Translators: Subtitle of the screenshot in the metainfo #: data/de.schmidhuberj.DieBahn.metainfo.xml.in.in:346 msgid "Application Overview" msgstr "应用概览" #: data/resources/ui/date_time_picker.blp:11 msgid "Departure" msgstr "出发" #: data/resources/ui/date_time_picker.blp:16 msgid "Arrival" msgstr "到达" #: data/resources/ui/date_time_picker.blp:34 msgid "Input date" msgstr "输入日期" #: data/resources/ui/date_time_picker.blp:42 msgid "Date" msgstr "日期" #: data/resources/ui/date_time_picker.blp:78 msgid "Input time" msgstr "输入时间" #: data/resources/ui/date_time_picker.blp:87 msgid "Time" msgstr "时间" #: data/resources/ui/date_time_picker.blp:142 src/gui/date_time_picker.rs:119 msgid "Now" msgstr "现在" #: data/resources/ui/journey_detail_page.blp:57 msgid "Total Travel Time" msgstr "总旅程时长" #: data/resources/ui/journey_detail_page.blp:71 msgid "Trip Segments" msgstr "旅程构成" #: data/resources/ui/journey_detail_page.blp:85 msgid "Choose a Trip" msgstr "选择一个旅程" #: data/resources/ui/journeys_page.blp:95 msgid "Search for Trips" msgstr "搜索旅程" #: data/resources/ui/leg_item.blp:129 msgid "Show Stops" msgstr "显示停站" #: data/resources/ui/leg_item.blp:132 msgid "Show Intermediate Stops" msgstr "显示中停站" #: data/resources/ui/leg_item.blp:181 data/resources/ui/leg_item.blp:189 msgid "Show Announcements" msgstr "显示公告" #: data/resources/ui/leg_item.blp:204 msgid "Announcements" msgstr "公告" #: data/resources/ui/leg_item.blp:231 msgid "Stops" msgstr "停站" #: data/resources/ui/preferences_dialog.blp:8 #: data/resources/ui/shortcuts_dialog.blp:25 msgid "General" msgstr "总览" #: data/resources/ui/preferences_dialog.blp:13 msgid "Automatically Remove Old Bookmarks" msgstr "自动移除旧的保存旅程" #: data/resources/ui/preferences_dialog.blp:14 msgid "Past trips are kept only for a period of time" msgstr "过时的旅程只会被保存一段时间" #: data/resources/ui/preferences_dialog.blp:19 msgid "Preservation Time For Trips" msgstr "为旅程预留的时间" #: data/resources/ui/preferences_dialog.blp:20 msgid "For how long to retain trips after arrival" msgstr "到达后还需要保存旅程多久" #: data/resources/ui/provider_popover.blp:18 msgid "Search Networks…" msgstr "搜寻网络…" #: data/resources/ui/refresh_button.blp:20 msgid "Refresh Trip" msgstr "刷新旅程" #: data/resources/ui/search_options_button.blp:5 msgid "More search options" msgstr "更多搜索选项" #: data/resources/ui/search_options_button.blp:16 msgid "Refine Advanced Search Options" msgstr "优化高级搜索选项" #: data/resources/ui/search_options_button.blp:30 msgid "More Options" msgstr "更多选项" #: data/resources/ui/search_options_dialog.blp:10 msgid "Discount Card" msgstr "打折卡" #: data/resources/ui/search_options_dialog.blp:14 msgid "Class" msgstr "等级" #: data/resources/ui/search_options_dialog.blp:22 msgid "First Class" msgstr "一等座" #: data/resources/ui/search_options_dialog.blp:27 msgid "Second Class" msgstr "二等座" #: data/resources/ui/search_options_dialog.blp:33 #: src/gui/search_options_button.rs:194 msgid "Bike Accessible" msgstr "可以携带自行车" #: data/resources/ui/search_options_dialog.blp:38 msgid "Minimum Transfer Time" msgstr "最少的换乘时间" #: data/resources/ui/search_options_dialog.blp:43 msgid "Direct Connections Only" msgstr "只选择直达" #: data/resources/ui/search_options_dialog.blp:48 msgid "Modes of Transport" msgstr "车辆种类" #: data/resources/ui/search_options_dialog.blp:60 #, fuzzy msgid "Mainline Train" msgstr "主线列车" #: data/resources/ui/search_options_dialog.blp:65 msgid "Regional Train" msgstr "区域铁路" #: data/resources/ui/search_options_dialog.blp:70 msgid "S-Bahn Train" msgstr "市郊铁路" #: data/resources/ui/search_options_dialog.blp:75 msgid "Bus" msgstr "公交车" #: data/resources/ui/search_options_dialog.blp:80 msgid "Ferry" msgstr "轮渡" #: data/resources/ui/search_options_dialog.blp:85 msgid "Subway" msgstr "地铁" #: data/resources/ui/search_options_dialog.blp:90 msgid "Tram" msgstr "电车" #: data/resources/ui/search_options_dialog.blp:95 msgid "Cablecar" msgstr "有轨电车" #: data/resources/ui/search_options_dialog.blp:100 msgid "Taxi" msgstr "出租" #: data/resources/ui/search_page.blp:31 msgid "From" msgstr "从" #: data/resources/ui/search_page.blp:38 msgid "To" msgstr "到" #: data/resources/ui/search_page.blp:51 data/resources/ui/search_page.blp:72 #: data/resources/ui/window.blp:44 msgid "Search" msgstr "搜索" #: data/resources/ui/search_page.blp:89 msgid "Bookmarked Trips" msgstr "已保存的旅程" #: data/resources/ui/search_page.blp:104 msgid "Bookmarked Searches" msgstr "已保存的搜索" #: data/resources/ui/shortcuts_dialog.blp:6 msgid "Application" msgstr "应用" #: data/resources/ui/shortcuts_dialog.blp:10 msgid "Bookmark Search" msgstr "搜索已保存内容" #: data/resources/ui/shortcuts_dialog.blp:15 msgid "Bookmark Trip" msgstr "保存旅程" #: data/resources/ui/shortcuts_dialog.blp:20 msgid "Reload Trip" msgstr "重载旅程" #: data/resources/ui/shortcuts_dialog.blp:29 msgid "Quit" msgstr "退出" #: data/resources/ui/shortcuts_dialog.blp:34 msgid "Show Shortcuts" msgstr "显示快捷方式" #: data/resources/ui/shortcuts_dialog.blp:39 msgid "Show Preferences" msgstr "显示偏好设置" #: data/resources/ui/shortcuts_dialog.blp:44 msgid "Open Menu" msgstr "打开菜单" #: data/resources/ui/station_entry.blp:13 msgid "Swap Start and Destination" msgstr "交换出发和到达" #: data/resources/ui/window.blp:55 data/resources/ui/window.blp:62 msgid "Select Network" msgstr "选择交通网络" #: data/resources/ui/window.blp:85 msgid "Main Menu" msgstr "主菜单" #: data/resources/ui/window.blp:104 msgid "Connections" msgstr "路线" #: data/resources/ui/window.blp:117 msgid "Bookmark This Search" msgstr "保存这个搜索" #: data/resources/ui/window.blp:131 msgid "Trip Details" msgstr "旅程详情" #: data/resources/ui/window.blp:140 msgid "Refresh This Trip" msgstr "刷新这个旅程" #: data/resources/ui/window.blp:153 msgid "Bookmark This Trip" msgstr "保存这个旅程" #: data/resources/ui/window.blp:166 msgid "Watch this Trip" msgstr "监视这个旅程" #: data/resources/ui/window.blp:199 msgid "Preferences" msgstr "偏好设置" #: data/resources/ui/window.blp:204 msgid "Keyboard Shortcuts" msgstr "键盘快捷键" #: data/resources/ui/window.blp:209 msgid "_About Railway" msgstr "_关于铁路" #: src/gui/indicator_icons.rs:135 msgid "High Load" msgstr "拥挤" #: src/gui/indicator_icons.rs:142 msgid "Very High Load" msgstr "非常拥挤" #: src/gui/indicator_icons.rs:149 msgid "Exceptionally High Load" msgstr "极其拥挤" #: src/gui/indicator_icons.rs:165 msgid "On Time" msgstr "正点" #: src/gui/indicator_icons.rs:172 msgid "Minor Delays" msgstr "少量延误" #: src/gui/indicator_icons.rs:179 msgid "Delayed" msgstr "延误" #: src/gui/indicator_icons.rs:186 msgid "Very Delayed" msgstr "严重延误" #: src/gui/indicator_icons.rs:193 msgid "Extremely Delayed" msgstr "极为严重延误" #: src/gui/indicator_icons.rs:209 msgid "Platform Changes" msgstr "站台更换" #: src/gui/indicator_icons.rs:228 msgid "Connection Not Possible" msgstr "此路线已不可能实现" #: src/gui/indicator_icons.rs:246 msgid "Cancelled" msgstr "取消" #: src/gui/stores/journey_store.rs:173 msgid "A bookmarked trip ended recently." msgstr "一个保存的旅程最近结束了。" #: src/gui/stores/journey_store.rs:185 msgid "Always _Delete" msgstr "总是 _删除" #: src/gui/search_page.rs:124 msgid "Start and destination are missing" msgstr "出发地和目的地缺失" #: src/gui/search_page.rs:125 msgid "Start is missing" msgstr "出发地缺失" #: src/gui/search_page.rs:126 msgid "Destination is missing" msgstr "目的地缺失" #: src/gui/search_page.rs:127 msgid "Search ongoing" msgstr "正在搜索" #. Translators: Do not translate the strings in {}. #: src/gui/transition.rs:93 msgid "Arrive at {destination}." msgstr "到达 {destination}。" #: src/gui/transition.rs:225 msgid "Walk {walk} Wait {wait}" msgstr "走 {walk} 等 {wait}" #: src/gui/transition.rs:229 msgid "Transfer Time {}" msgstr "换乘时间 {}" #: src/gui/transition.rs:231 msgid "Walk {}" msgstr "走 {}" #: src/gui/transition.rs:232 msgid "Transfer" msgstr "换乘" #. Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #. Translators: you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:74 src/gui/search_options_dialog.rs:245 msgid "{} min" msgstr "{} 分" #. Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:82 msgid "%_H h %_M min" msgstr "%_H 小时 %_M 分" #: src/gui/utility.rs:93 msgid " %_d day %_H h %_M min" msgid_plural "%_d days %_H h %_M min" msgstr[0] "%_d 天 %_H 小时 %_M 分" #. Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:104 msgid "{} min." msgstr "{} 分." #. Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number #: src/gui/utility.rs:108 msgid "{} hrs." msgstr "{} 小时." #. Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units #: src/gui/utility.rs:117 msgid "%-H hrs. %-M min." msgstr "%-H 小时. %-M 分." #: src/gui/utility.rs:129 msgid "%-d day %-H hrs. %-M min." msgid_plural "%-d days %-H hrs. %-M min." msgstr[0] "%-d 天 %-H 小时. %-M 分." #. Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:139 msgid "%H:%M" msgstr "%H:%M" #: src/gui/utility.rs:145 src/gui/date_time_picker.rs:107 msgid "Today" msgstr "今天" #: src/gui/utility.rs:147 msgid "Tomorrow" msgstr "明天" #: src/gui/utility.rs:149 msgid "Yesterday" msgstr "昨天" #. Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:152 msgid "%a, %d. %B" msgstr "%a, %d. %B" #. Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers #: src/gui/utility.rs:155 msgid "%Y-%m-%d" msgstr "%Y-%m-%d" #: src/gui/preferences_dialog.rs:66 msgid "{} h" msgid_plural "{} h" msgstr[0] "{} 小时" #: src/gui/search_options_button.rs:75 msgid "None" msgstr "无" #: src/gui/search_options_button.rs:76 msgid "BahnCard 25, 1st class" msgstr "德国 BahnCard 25, 一等" #: src/gui/search_options_button.rs:77 msgid "BahnCard 25, 2nd class" msgstr "德国 BahnCard 25, 二等" #: src/gui/search_options_button.rs:78 msgid "BahnCard 50, 1st class" msgstr "德国 BahnCard 50, 一等" #: src/gui/search_options_button.rs:79 msgid "BahnCard 50, 2nd class" msgstr "德国 BahnCard 50, 二等" #: src/gui/search_options_button.rs:80 msgid "A – VORTEILScard (with RAILPLUS)" msgstr "奥地利 – VORTEILScard (含有 RAILPLUS)" #: src/gui/search_options_button.rs:81 msgid "CH – HalbtaxAbo (with RAILPLUS)" msgstr "瑞士 – HalbtaxAbo (含有 RAILPLUS)" #: src/gui/search_options_button.rs:82 msgid "CH – HalbtaxAbo (without RAILPLUS)" msgstr "瑞士 – HalbtaxAbo (没有 RAILPLUS)" #: src/gui/search_options_button.rs:85 msgid "NL – Voordeelurenabo (with RAILPLUS)" msgstr "荷兰 – Voordeelurenabo (含有 RAILPLUS)" #: src/gui/search_options_button.rs:89 msgid "NL – Voordeelurenabo (without RAILPLUS)" msgstr "荷兰 – Voordeelurenabo (没有 RAILPLUS)" #: src/gui/search_options_button.rs:91 msgid "SH-Card" msgstr "圣赫勒拿-Card" #: src/gui/search_options_button.rs:92 msgid "CH – General-Abonnement" msgstr "瑞士 – General-Abonnement" #: src/gui/search_options_button.rs:99 msgid "Unknown" msgstr "未知" #: src/gui/search_options_button.rs:141 msgid "1st class" msgstr "一等座" #: src/gui/search_options_button.rs:143 msgid "2nd class" msgstr "二等座" #: src/gui/search_options_button.rs:186 msgid "Regional Only" msgstr "只选择区域车" #: src/gui/search_options_button.rs:189 msgid "Selected Modes of Transport" msgstr "选择车辆类型" #: src/gui/search_options_button.rs:201 msgid "Direct Connection" msgstr "直达" #: src/gui/error.rs:17 msgid "Failed to fetch data. Are you connected to the internet?" msgstr "无法获取信息。你已经连上网络了吗?" #: src/gui/error.rs:20 msgid "Received an error. Please share feedback." msgstr "这里有一个错误。请反馈给我们。" #: src/gui/error.rs:21 src/gui/error.rs:25 msgid "More Information" msgstr "更多详情" #: src/gui/error.rs:24 msgid "An unknown issue occured. Please share feedback." msgstr "发生了一个未知的错误。请反馈给我们。" #: src/gui/error.rs:42 msgid "Error" msgstr "错误" #: src/gui/error.rs:46 msgid "_Close" msgstr "_关闭" #. How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). #. For a full list of supported identifiers, see #: src/gui/date_time_picker.rs:111 #, c-format msgid "%a %b %d" msgstr "%a %b %d" #: src/gui/journey_list_item.rs:52 msgid "{} change" msgid_plural "{} changes" msgstr[0] "{} 换乘" #. Translators: changes_text is the plural-aware string "{} change" already #: src/gui/journey_list_item.rs:56 msgid "From {departure} to {arrival} in {travel_time} with {changes_text}" msgstr "从 {departure} 到 {arrival} 需要 {travel_time} 并 {changes_text}" #. Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. #: src/gui/leg_item.rs:73 msgid "{train} in the direction of {destination}" msgstr "{train} 是去往 {destination} 方向的" #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:90 msgid "Depart {start} from platform {platform} at {departure}." msgstr "离开 {start} 于 {platform} 站台在 {departure}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:94 msgid "Depart {start} at {departure}." msgstr "离开 {start} 在 {departure}." #: src/gui/leg_item.rs:101 msgid "Arrive at {destination} on platform {platform} at {arrival}." msgstr "到达 {destination} 于 {platform} 站台在 {arrival}." #. Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. #: src/gui/leg_item.rs:106 msgid "Arrive at {destination} at {arrival}." msgstr "到达 {destination} 在 {arrival}." #: src/gui/leg_item.rs:153 msgid "{} Stop" msgid_plural "{} Stops" msgstr[0] "{} 站" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:67 msgid "{stop} at {arrival} on platform {platform}" msgstr "{stop} 在 {arrival} 于 {platform} 站台" #. Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. #: src/gui/intermediate_location_item.rs:70 msgid "{stop} at {arrival}" msgstr "{stop} 在 {arrival}" #. Translators: Text that will be announced by the screen reader when a suggestion was selected. #: src/gui/station_entry.rs:189 msgid "Suggestion {} selected" msgstr "建议 {} 已选择" #. Translators: Text that will be announced by the screen reader when no selection was selected. #: src/gui/station_entry.rs:194 msgid "No suggestion selected" msgstr "没有建议被选择" #: src/gui/station_entry.rs:420 msgid "one suggestion, not selected" msgid_plural "{n} suggestions, none selected" msgstr[0] "{n} 个建议, 没有任何一个被选中" #. translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") #: src/gui/window.rs:193 msgid "translator-credits" msgstr "benhaotang " #: src/gui/window.rs:196 msgid "Source Translation Supported by" msgstr "源翻译语言来自" #. Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. #: src/gui/frequency_label.rs:91 msgid "every ~{}" msgstr "每 ~{}" #. Translators: How to format the currency "Euro". Do not translate in {}. #: src/backend/price.rs:68 msgid "€{amount}" msgstr "€{amount}" #. Translators: How to format the currency "Dollar (US)". Do not translate in {}. #: src/backend/price.rs:74 msgid "${amount}" msgstr "${amount}" #. Translators: How to format unknown currency "currency". Do not translate in {}. #: src/backend/price.rs:81 msgid "{currency} {amount}" msgstr "{currency} {amount}" #. Translators: The country, see https://en.wikipedia.org/wiki/Germany #: src/backend/client.rs:29 src/backend/client.rs:80 src/backend/client.rs:87 #: src/backend/client.rs:108 src/backend/client.rs:131 #: src/backend/client.rs:139 src/backend/client.rs:167 #: src/backend/client.rs:174 src/backend/client.rs:195 #: src/backend/client.rs:196 src/backend/client.rs:217 #: src/backend/client.rs:232 src/backend/client.rs:239 #: src/backend/client.rs:253 src/backend/client.rs:267 #: src/backend/client.rs:274 src/backend/client.rs:281 msgid "Germany" msgstr "德国" #: src/backend/client.rs:36 src/backend/client.rs:57 src/backend/client.rs:64 msgid "North America" msgstr "北美" #: src/backend/client.rs:43 src/backend/client.rs:50 src/backend/client.rs:94 #: src/backend/client.rs:115 src/backend/client.rs:160 #: src/backend/client.rs:181 src/backend/client.rs:188 #: src/backend/client.rs:305 msgid "Europe" msgstr "欧洲" #. Translators: The country, see https://en.wikipedia.org/wiki/Austria #: src/backend/client.rs:101 src/backend/client.rs:146 #: src/backend/client.rs:153 src/backend/client.rs:203 #: src/backend/client.rs:210 src/backend/client.rs:224 #: src/backend/client.rs:225 src/backend/client.rs:246 #: src/backend/client.rs:260 src/backend/client.rs:288 #: src/backend/client.rs:295 msgid "Austria" msgstr "奥地利" #. Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. #: src/backend/client.rs:138 msgid "Schleswig-Holstein" msgstr "圣赫勒拿" #: src/backend/client.rs:311 msgid "Worldwide (beta)" msgstr "世界(测试)" #. Translators: Transitous is a service (transitous.org) which should not be translated. #: src/backend/client.rs:313 msgid "Using Transitous" msgstr "使用Transitous服务" #: src/backend/journey.rs:271 msgid "Start at {station} on platform {platform} at {time}" msgstr "{time} 从 {station} {platform} 站台出发" #: src/backend/journey.rs:274 msgid "Start at {station} at {time}" msgstr "{time} 从 {station} 出发" #: src/backend/journey.rs:280 msgid "Trip to {destination} will begin shortly" msgstr "{destination} 之旅即将开始" #: src/backend/journey.rs:309 #, fuzzy msgid "{time} transfer time to get to platform {platform}" msgstr "到达站台 {platform} 的换乘时间 {time}" #: src/backend/journey.rs:315 msgid "{time} transfer time" msgstr "换乘时间 {time}" #: src/backend/journey.rs:318 #, fuzzy msgid "Upcoming departure on platform {platform}" msgstr "{stop} 在 {arrival} 于 {platform} 站台" #: src/backend/journey.rs:325 msgid "Upcoming transfer at {station} soon" msgstr "" #: src/backend/journey.rs:335 #, fuzzy msgid "Arriving at {destination} soon" msgstr "到达 {destination}。" #: src/backend/journey.rs:377 msgid "{train} departure is delayed by {time}" msgstr "" #: src/backend/journey.rs:404 msgid "{train} arrival is delayed by {time}" msgstr "" #: src/backend/journey.rs:427 #, fuzzy msgid "{train} departing on platform {platform} today instead" msgstr "到达 {destination} 于 {platform} 站台在 {arrival}." #: src/backend/journey.rs:448 msgid "" "Warning: No longer possible to reach connecting {train} from {origin} to " "{destination}." msgstr "" #: src/backend/journey.rs:470 msgid "Warning: {train} from {origin} to {destination} was cancelled." msgstr "" #: src/backend/journey.rs:562 #, fuzzy msgid "Start at {next-origin} in {duration} on platform {next-platform}" msgstr "到达 {destination} 于 {platform} 站台在 {arrival}." #: src/backend/journey.rs:565 msgid "Start at {next-origin} in {duration}" msgstr "" #: src/backend/journey.rs:568 #, fuzzy msgid "Arriving at {current-destination} in {duration}" msgstr "到达 {destination} 在 {arrival}." #: src/backend/journey.rs:571 msgid "" "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:574 msgid "Change to {next-leg-name}, remaining: {duration}" msgstr "" #: src/backend/journey.rs:577 msgid "The trip’s destination has been reached" msgstr "" #: src/backend/leg.rs:130 msgid "Walk" msgstr "走" #~ msgid "High Speed Train" #~ msgstr "高铁" #~ msgid "Last refreshed {}" #~ msgstr "上次刷新 {}" railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/railway.doap000066400000000000000000000025251517666454200237700ustar00rootroot00000000000000 Railway Find all your travel information Rust GTK 4 Libadwaita Julian Schmidhuber Schmiddiii Markus Göllnitz mgoellnitz railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/000077500000000000000000000000001517666454200222365ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/backend/000077500000000000000000000000001517666454200236255ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/backend/client.rs000066400000000000000000000401451517666454200254550ustar00rootroot00000000000000use std::str::FromStr; use std::time::Duration; use gdk::glib::clone; use gdk::prelude::{ObjectExt, SettingsExt}; use gdk::subclass::prelude::ObjectSubclassIsExt; use gtk::glib::{self, Object}; use rcore::{JourneysOptions, LocationsOptions, RefreshJourneyOptions}; // Timeout in seconds. const TIMEOUT: u64 = 30; type ApiProvider = rapi::RailwayProvider; use crate::Error; use super::{Journey, JourneysResult, Place, Provider, TimeType}; fn providers() -> Vec { vec![ // Hafas // TODO: BVG, SNCB, SNCF, TPG Provider::new( "AVV", "AVV", Some("Aachener Verkehrsverbund"), &gettextrs::gettext("Germany"), true, ), Provider::new( "BART", "BART", Some("Bay Area Rapid Transit"), &gettextrs::gettext("North America"), true, ), Provider::new( "BLS", "BLS", Some("BLS AG"), &gettextrs::gettext("Europe"), true, ), Provider::new( "CFL", "CFL", Some("Société Nationale des Chemins de Fer Luxembourgeois"), &gettextrs::gettext("Europe"), true, ), // Provider::new( // "CMTA", // "CapMetro", // Some("Austin, Texas"), // &gettextrs::gettext("North America"), // true, // ), // Provider::new( // "DART", // "DART", // Some("Des Moines Area Rapid Transit"), // &gettextrs::gettext("North America"), // true, // ), // Always shows "no provider" // Provider::new( // "DB-Busradar-Nrw", // "DB Busradar NRW", // // Translators: The state in germany, see https://en.wikipedia.org/wiki/North_Rhine-Westphalia. // Some(&gettextrs::gettext("North Rhine-Westphalia")), // &gettextrs::gettext("Germany"), // true, // ), Provider::new( "DB", "DB", Some("Deutsche Bahn"), &gettextrs::gettext("Germany"), true, ), Provider::new( "VGI", "VGI", Some("Verkehrsgemeinschaft Region Ingolstadt"), &gettextrs::gettext("Germany"), true, ), Provider::new( "Irish-Rail", "Irish Rail", Some("Iarnród Éireann"), &gettextrs::gettext("Europe"), true, ), Provider::new( "IVB", "IVB", Some("Innsbrucker Verkehrsbetriebe"), &gettextrs::gettext("Austria"), true, ), Provider::new( "KVB", "KVB", Some("Kölner Verkehrs-Betriebe"), &gettextrs::gettext("Germany"), true, ), Provider::new( "Mobiliteit-Lu", "Mobiliteit", Some("Luxembourg"), &gettextrs::gettext("Europe"), true, ), // Migrated endpoint to EFA // Provider::new( // "mobil-nrw", // "mobil.nrw", // // Translators: The state in germany, see https://en.wikipedia.org/wiki/North_Rhine-Westphalia. // Some(&gettextrs::gettext("North Rhine-Westphalia")), // &gettextrs::gettext("Germany"), // true, // ), Provider::new( "NVV", "NVV", Some("Nordhessischer Verkehrsverbund"), &gettextrs::gettext("Germany"), true, ), Provider::new( "NahSH", "Nah.SH", // Translators: The state in germany, see https://en.wikipedia.org/wiki/Schleswig-Holstein. Some(&gettextrs::gettext("Schleswig-Holstein")), &gettextrs::gettext("Germany"), true, ), Provider::new( "ooevv", "OÖVV", Some("Oberösterreichischer Verkehrsverbund"), &gettextrs::gettext("Austria"), true, ), Provider::new( "OEBB", "ÖBB", Some("Österreichische Bundesbahnen"), &gettextrs::gettext("Austria"), true, ), // Provider::new( // "PKP", // "PKP", // Some("Polskie Koleje Państwowe"), // &gettextrs::gettext("Europe"), // true, // ), Provider::new( "RMV", "RMV", Some("Rhein-Main-Verkehrsverbund"), &gettextrs::gettext("Germany"), true, ), Provider::new( "RSAG", "RSAG", Some("Rostocker Straßenbahn AG"), &gettextrs::gettext("Germany"), true, ), Provider::new( "Rejseplanen", "Rejseplanen", Some("Denmark"), &gettextrs::gettext("Europe"), true, ), Provider::new( "Resrobot", "Resrobot", Some("Sweden"), &gettextrs::gettext("Europe"), true, ), Provider::new( "SBahn-Muenchen", "S-Bahn München", // Translators: The country, see https://en.wikipedia.org/wiki/Germany Some(&gettextrs::gettext("Germany")), &gettextrs::gettext("Germany"), true, ), Provider::new( "Verbundlinie", "Verbundlinie", Some("Steirischer Verkehrsverbund"), &gettextrs::gettext("Austria"), true, ), Provider::new( "SVV", "SVV", Some("Salzburger Verkehrsverbund"), &gettextrs::gettext("Austria"), true, ), Provider::new( "saarvv", "saarVV", Some("Saarfahrplan/VGS Saarland"), &gettextrs::gettext("Germany"), true, ), Provider::new( "Salzburg", "Salzburg", // Translators: The country, see https://en.wikipedia.org/wiki/Austria Some(&gettextrs::gettext("Austria")), &gettextrs::gettext("Austria"), true, ), Provider::new( "VBB", "VBB", Some("Berlin & Brandenburg public transport"), &gettextrs::gettext("Germany"), true, ), Provider::new( "VBN", "VBN", Some("Verkehrsverbund Bremen/Niedersachsen"), &gettextrs::gettext("Germany"), true, ), Provider::new( "VKG", "VKG/VVK", Some("Kärntner Linien/Verkehrsverbund Kärnten"), &gettextrs::gettext("Austria"), true, ), Provider::new( "VMT", "VMT", Some("Verkehrsverbund Mittelthüringen"), &gettextrs::gettext("Germany"), true, ), Provider::new( "VOR", "VOR", Some("Verkehrsverbund Ost-Region"), &gettextrs::gettext("Austria"), true, ), Provider::new( "VOS", "VOS", Some("Verkehrsgemeinschaft Osnabrück"), &gettextrs::gettext("Germany"), true, ), // Provider::new( // "VRN", // "VRN", // Some("Verkehrsverbund Rhein-Neckar"), // &gettextrs::gettext("Germany"), // true, // ), Provider::new( "VSN", "VSN", Some("Verkehrsverbund Süd-Niedersachsen"), &gettextrs::gettext("Germany"), true, ), Provider::new( "VVT", "VVT", Some("Verkehrsverbund Tirol"), &gettextrs::gettext("Austria"), true, ), Provider::new( "VVV", "VVV", Some("Verkehrsverbund Vorarlberg"), &gettextrs::gettext("Austria"), true, ), // Provider::new("ZVV", "ZVV", Some("Zürich public transport"), &gettextrs::gettext("Europe"), true), // Search.ch Provider::new( "search-ch", "SBB", Some("Switzerland"), &gettextrs::gettext("Europe"), true, ), // Transitous Provider::new( "transitous", &gettextrs::gettext("Worldwide (beta)"), // Translators: Transitous is a service (transitous.org) which should not be translated. Some(&gettextrs::gettext("Using Transitous")), "", true, ), ] } gtk::glib::wrapper! { pub struct Client(ObjectSubclass); } impl std::default::Default for Client { fn default() -> Self { Self::new() } } impl Client { pub fn new() -> Client { let s: Self = Object::builder().build(); let settings = &s.imp().settings; let profile_name = settings.string("search-provider"); settings.connect_changed( Some("search-provider"), clone!( #[weak] s, move |settings, _| { s.set_profile(settings.string("search-provider")); } ), ); s.set_profile(profile_name); s } pub fn set_profile>(&self, profile_name: S) { log::info!( "The hafas client was changed to: {}.", profile_name.as_ref() ); let mut write = self .imp() .internal .write() .expect("Profile to be writeable"); *write = Some(rapi::RailwayProvider::new( rapi::RailwayProviderType::from_str(profile_name.as_ref()) .unwrap_or(rapi::RailwayProviderType::Db), rcore::ReqwestRequesterBuilder::default(), )); self.emit_by_name::<()>("provider-changed", &[]); } fn internal(&self) -> ApiProvider { self.imp().internal() } pub fn current_provider(&self) -> Option { let value = self.imp().settings.string("search-provider"); providers().into_iter().find(|p| p.id() == value) } } impl Client { pub async fn locations( &self, opts: LocationsOptions, ) -> Result, Error> { use rcore::Provider; let client = self.internal(); Ok(tspawn!(async move { tokio::time::timeout(Duration::from_secs(TIMEOUT), client.locations(opts)) .await .map(|r| r.map_err(Error::from)) .unwrap_or(Err(Error::Timeout)) }) .await .expect("Failed to join tokio")? .into_iter() .map(Place::new)) } pub async fn journeys( &self, from: Place, to: Place, time_type: TimeType, opts: JourneysOptions, ) -> Result { use rcore::Provider; let client = self.internal(); let from_place = from.place(); let to_place = to.place(); let requested_time = match time_type { TimeType::Departure => opts.departure, TimeType::Arrival => opts.arrival, }; Ok(JourneysResult::new( tspawn!(async move { tokio::time::timeout( Duration::from_secs(TIMEOUT), client.journeys(from_place, to_place, opts), ) .await .map(|r| r.map_err(Error::from)) .unwrap_or(Err(Error::Timeout)) }) .await .expect("Failed to join tokio")?, from, to, requested_time, time_type, self.clone(), )) } pub async fn refresh_journey( &self, journey: &Journey, opts: RefreshJourneyOptions, ) -> Result { use rcore::Provider; let client = self.internal(); let journey = journey.journey(); Ok(self.get_journey( tspawn!(async move { tokio::time::timeout( Duration::from_secs(TIMEOUT), client.refresh_journey(&journey, opts), ) .await .map(|r| r.map_err(Error::from)) .unwrap_or(Err(Error::Timeout)) }) .await .expect("Failed to join tokio")?, )) } pub fn get_journey(&self, journey: rcore::Journey) -> Journey { let mut cache = self.imp().journey_cache.borrow_mut(); if let Some(cached) = cache.get(&journey.id).and_then(|r| r.upgrade()) { cached.update(journey); cached } else { let id = journey.id.clone(); let object = Journey::new(journey, self); cache.insert(id, object.downgrade()); object } } } mod imp { use gdk::gio::{ListModel, ListStore}; use gdk::glib::subclass::Signal; use gdk::glib::{Properties, WeakRef}; use gdk::prelude::ObjectExt; use gdk::subclass::prelude::DerivedObjectProperties; use gdk::subclass::prelude::{ObjectImpl, ObjectSubclass}; use gtk::gio::Settings; use gtk::glib; use once_cell::sync::Lazy; use std::cell::RefCell; use std::collections::HashMap; use std::marker::PhantomData; use std::sync::RwLock; use crate::backend::Journey; use crate::config; #[derive(Properties)] #[properties(wrapper_type = super::Client)] pub struct Client { pub(super) internal: RwLock>, pub(super) journey_cache: RefCell>>, #[property(get = Self::providers)] providers: PhantomData, pub(super) settings: Settings, } impl Default for Client { fn default() -> Self { Self { internal: Default::default(), journey_cache: Default::default(), providers: Default::default(), settings: Settings::new(config::BASE_ID), } } } impl Client { pub(super) fn internal(&self) -> super::ApiProvider { self.internal .read() .expect("Failed to read internal client") .as_ref() .expect("Client internal not yet set") .clone() } fn providers(&self) -> ListModel { let list = ListStore::new::(); list.extend_from_slice(&super::providers()); list.into() } } #[glib::object_subclass] impl ObjectSubclass for Client { const NAME: &'static str = "DBClient"; type Type = super::Client; } #[glib::derived_properties] impl ObjectImpl for Client { fn signals() -> &'static [Signal] { static SIGNALS: Lazy> = Lazy::new(|| -> Vec { vec![Signal::builder("provider-changed").build()] }); SIGNALS.as_ref() } } } #[cfg(test)] mod test { #[test] fn provider_list_complete() { use std::collections::HashSet; let supported: HashSet<_> = rapi::RailwayProviderType::variants() .iter() .map(|p| p.to_string().to_lowercase().replace(['-', '_'], "")) .collect(); let used: HashSet<_> = super::providers() .into_iter() .map(|p| p.id().to_lowercase().replace(['-', '_'], "")) .collect(); let extra: HashSet<_> = used.difference(&supported).collect(); let missing: HashSet<_> = supported.difference(&used).collect(); if !(extra.is_empty() && missing.is_empty()) { println!("Extra Providers: {:#?}", extra); println!("Missing Providers: {:#?}", missing); panic!("Mismatched used and available providers"); } } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/backend/discount_card.rs000066400000000000000000000017721517666454200270230ustar00rootroot00000000000000use gdk::glib::Object; gtk::glib::wrapper! { pub struct DiscountCard(ObjectSubclass); } impl DiscountCard { pub fn new(id: &str) -> DiscountCard { Object::builder::().property("id", id).build() } } mod imp { use std::cell::RefCell; use gtk::glib; use gdk::{ glib::Properties, prelude::ObjectExt, subclass::prelude::{DerivedObjectProperties, ObjectImpl, ObjectSubclass}, }; #[derive(Default, Properties)] #[properties(wrapper_type = super::DiscountCard)] pub struct DiscountCard { #[property(get, set)] #[property(name = "name", type = String, get = |s: &Self| gettextrs::gettext(s.id.borrow().as_str()))] pub(super) id: RefCell, } #[glib::object_subclass] impl ObjectSubclass for DiscountCard { const NAME: &'static str = "DBDiscountCard"; type Type = super::DiscountCard; } #[glib::derived_properties] impl ObjectImpl for DiscountCard {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/backend/frequency.rs000066400000000000000000000017051517666454200261770ustar00rootroot00000000000000use std::cell::RefCell; use gdk::glib::Object; use gdk::subclass::prelude::ObjectSubclassIsExt; gtk::glib::wrapper! { pub struct Frequency(ObjectSubclass); } impl Frequency { pub fn new(frequency: rcore::Frequency) -> Self { let s: Self = Object::builder().build(); s.imp().frequency.swap(&RefCell::new(Some(frequency))); s } pub fn frequency(&self) -> Option { self.imp().frequency.borrow().clone() } } mod imp { use gtk::glib; use std::cell::RefCell; use gdk::{glib::subclass::object::ObjectImpl, subclass::prelude::ObjectSubclass}; #[derive(Default)] pub struct Frequency { pub(super) frequency: RefCell>, } #[glib::object_subclass] impl ObjectSubclass for Frequency { const NAME: &'static str = "DBFrequency"; type Type = super::Frequency; } impl ObjectImpl for Frequency {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/backend/intermediate_location.rs000066400000000000000000000153421517666454200305420ustar00rootroot00000000000000use std::cell::RefCell; use gdk::glib::Object; use gdk::subclass::prelude::ObjectSubclassIsExt; gtk::glib::wrapper! { pub struct IntermediateLocation(ObjectSubclass); } impl IntermediateLocation { pub fn new(intermediate_location: rcore::IntermediateLocation) -> Self { let s: Self = Object::builder().build(); s.imp() .intermediate_location .swap(&RefCell::new(Some(intermediate_location))); s } } mod imp { use chrono::Local; use gtk::glib; use std::cell::RefCell; use gdk::{ glib::Properties, prelude::ObjectExt, subclass::prelude::{DerivedObjectProperties, ObjectImpl, ObjectSubclass}, }; use crate::backend::Place; #[derive(Default, Properties)] #[properties(wrapper_type = super::IntermediateLocation)] pub struct IntermediateLocation { #[property(name = "place", type = Place, get = Self::place)] #[property(name = "departure", type = Option, get = Self::departure)] #[property(name = "arrival", type = Option, get = Self::arrival)] #[property(name = "planned-departure", type = Option, get = Self::planned_departure)] #[property(name = "planned-arrival", type = Option, get = Self::planned_arrival)] #[property(name = "departure-platform", type = Option, get = Self::departure_platform)] #[property(name = "arrival-platform", type = Option, get = Self::arrival_platform)] #[property(name = "planned-departure-platform", type = Option, get = Self::planned_departure_platform)] #[property(name = "planned-arrival-platform", type = Option, get = Self::planned_arrival_platform)] #[property(name = "is-stop", type = bool, get = Self::is_stop)] pub(super) intermediate_location: RefCell>, } #[glib::object_subclass] impl ObjectSubclass for IntermediateLocation { const NAME: &'static str = "DBIntermediateLocation"; type Type = super::IntermediateLocation; } impl IntermediateLocation { fn place(&self) -> Place { self.intermediate_location .borrow() .as_ref() .map(|o| { Place::new(match o { rcore::IntermediateLocation::Stop(s) => s.place.clone(), rcore::IntermediateLocation::Railway(r) => r.clone(), }) }) .expect("IntermediateLocation to be set to query the place") } fn departure(&self) -> Option { self.intermediate_location .borrow() .as_ref() .and_then(|o| match o { rcore::IntermediateLocation::Stop(s) => Some(s), rcore::IntermediateLocation::Railway(_) => None, }) .and_then(|o| { o.departure .map(|o| o.with_timezone(&Local).format("%H:%M").to_string()) }) } fn arrival(&self) -> Option { self.intermediate_location .borrow() .as_ref() .and_then(|o| match o { rcore::IntermediateLocation::Stop(s) => Some(s), rcore::IntermediateLocation::Railway(_) => None, }) .and_then(|o| { o.arrival .map(|o| o.with_timezone(&Local).format("%H:%M").to_string()) }) } fn planned_departure(&self) -> Option { self.intermediate_location .borrow() .as_ref() .and_then(|o| match o { rcore::IntermediateLocation::Stop(s) => Some(s), rcore::IntermediateLocation::Railway(_) => None, }) .and_then(|o| { o.planned_departure .map(|o| o.with_timezone(&Local).format("%H:%M").to_string()) }) } fn planned_arrival(&self) -> Option { self.intermediate_location .borrow() .as_ref() .and_then(|o| match o { rcore::IntermediateLocation::Stop(s) => Some(s), rcore::IntermediateLocation::Railway(_) => None, }) .and_then(|o| { o.planned_arrival .map(|o| o.with_timezone(&Local).format("%H:%M").to_string()) }) } fn departure_platform(&self) -> Option { self.intermediate_location .borrow() .as_ref() .and_then(|o| match o { rcore::IntermediateLocation::Stop(s) => Some(s), rcore::IntermediateLocation::Railway(_) => None, }) .and_then(|o| o.departure_platform.clone()) } fn arrival_platform(&self) -> Option { self.intermediate_location .borrow() .as_ref() .and_then(|o| match o { rcore::IntermediateLocation::Stop(s) => Some(s), rcore::IntermediateLocation::Railway(_) => None, }) .and_then(|o| o.arrival_platform.clone()) } fn planned_departure_platform(&self) -> Option { self.intermediate_location .borrow() .as_ref() .and_then(|o| match o { rcore::IntermediateLocation::Stop(s) => Some(s), rcore::IntermediateLocation::Railway(_) => None, }) .and_then(|o| o.planned_departure_platform.clone()) } fn planned_arrival_platform(&self) -> Option { self.intermediate_location .borrow() .as_ref() .and_then(|o| match o { rcore::IntermediateLocation::Stop(s) => Some(s), rcore::IntermediateLocation::Railway(_) => None, }) .and_then(|o| o.planned_arrival_platform.clone()) } fn is_stop(&self) -> bool { self.intermediate_location .borrow() .as_ref() .map(|o| match o { rcore::IntermediateLocation::Stop(_) => true, rcore::IntermediateLocation::Railway(_) => false, }) .unwrap_or_default() } } #[glib::derived_properties] impl ObjectImpl for IntermediateLocation {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/backend/journey.rs000066400000000000000000000770421517666454200257000ustar00rootroot00000000000000use std::cell::{Ref, RefCell}; use std::collections::{HashMap, HashSet}; use chrono::{DateTime, Datelike, Duration, Local}; use chrono_tz::Tz; use gdk::gio::{Application, Notification}; use gdk::glib::{BoxedAnyObject, Object, clone}; use gdk::prelude::{ApplicationExt, ObjectExt}; use gdk::subclass::prelude::{ObjectImpl, ObjectSubclassIsExt}; use rcore::RefreshJourneyOptions; use serde::{Deserialize, Serialize}; use crate::Error; use crate::gui::utility::Utility; use super::{Client, Leg, Place}; gtk::glib::wrapper! { pub struct Journey(ObjectSubclass); } impl Journey { pub fn new(journey: rcore::Journey, client: &Client) -> Self { let s: Self = Object::builder().property("client", client).build(); s.imp().journey.swap(&RefCell::new(Some(journey))); s } pub fn journey(&self) -> rcore::Journey { self.imp() .journey .borrow() .as_ref() .expect("Journey has not yet been set up") .clone() } pub fn update(&self, journey: rcore::Journey) { *self.imp().journey.borrow_mut() = Some(journey); for prop in imp::Journey::properties() { self.notify_by_pspec(prop); } } pub fn day_timestamp(&self) -> u32 { self.property::("first-leg") .leg() .departure .map(|d| d.ordinal()) .unwrap_or_default() } pub fn departure_day(&self) -> String { self.property::("first-leg") .leg() .departure .map(|d| Utility::format_date_human(d.with_timezone(&Local).date_naive())) .unwrap_or_default() } pub fn id(&self) -> String { self.journey().id.clone() } pub async fn refresh(&self) -> Result<(), Error> { log::debug!("Refreshing journey {}", self.id()); self.set_refresh_in_progress(true); let result = self .property::("client") .refresh_journey( self, RefreshJourneyOptions { stopovers: true, language: Some(Utility::language_code()), ..Default::default() }, ) .await; self.set_refresh_in_progress(false); if result.is_ok() { self.update_last_refreshed(); self.emit_by_name::<()>("updated", &[]); } result.map(|_| ()) } fn update_last_refreshed(&self) { *self.imp().last_refreshed.borrow_mut() = Local::now(); self.notify("last-refreshed"); } fn last_refreshed_time(&self) -> DateTime { *self.imp().last_refreshed.borrow() } fn should_refresh(&self) -> bool { let current_event = self.property::("current-event"); let current_event: Ref = current_event.borrow(); let Some(duration_next_event) = current_event .time_of_next_action() .map(|t| t.with_timezone(&Local) - Local::now()) .filter(|duration_next_event| duration_next_event >= &Duration::zero()) else { return false; }; let time_since_last_refreshed = Local::now().signed_duration_since(self.last_refreshed_time()); (duration_next_event < Duration::days(1) && time_since_last_refreshed > Duration::hours(1)) || (duration_next_event < Duration::hours(1) && time_since_last_refreshed > Duration::minutes(15)) || (duration_next_event < Duration::minutes(15) && time_since_last_refreshed > Duration::minutes(5)) || (duration_next_event < Duration::minutes(5) && time_since_last_refreshed > Duration::minutes(1)) } pub fn next_background_tasks_in(&self) -> Option { let current_event = self.property::("current-event"); let current_event: Ref = current_event.borrow(); current_event .time_of_next_action() .map(|t| t.with_timezone(&Local) - Local::now()) .filter(|duration_next_event| duration_next_event >= &Duration::zero()) .map(|duration_next_event| { if duration_next_event < Duration::minutes(10) { Duration::minutes(1) } else if duration_next_event < Duration::minutes(30) { Duration::minutes(5) } else if duration_next_event < Duration::hours(2) || matches!(*current_event, Event::InLeg(_, _)) { Duration::minutes(15) } else if duration_next_event < Duration::days(2) { Duration::hours(1) } else { Duration::days(1) } }) } pub fn background_tasks(&self) { log::debug!("Running background task on journey {}", self.id()); gspawn!(clone!( #[strong(rename_to = s)] self, async move { if s.should_refresh() { // Ignore errors refreshing. // XXX: Show them maybe? let _ = s.refresh().await; } let now = Local::now(); *s.imp().current_event.borrow_mut() = Some(s.event_at_time(&now)); *s.imp().alerts.borrow_mut() = s.compute_alerts(&now); s.notify("current-event"); s.notify("alerts"); s.potentially_notify(); } )); } pub fn event_at_time(&self, time: &DateTime) -> Event { let journey = self.imp().journey.borrow(); let legs = &journey.as_ref().expect("Journey to be set").legs; for (i, leg) in legs.iter().enumerate() { if leg.departure.is_some_and(|d| time < &d) { if i == 0 { return Event::BeforeJourney(Leg::new(leg.clone())); } else { return Event::TransitionTo(Leg::new(leg.clone())); } } else if leg.arrival.is_some_and(|a| time < &a) && !leg.walking { return Event::InLeg( Leg::new(leg.clone()), legs.iter() .skip(i + 1) .find(|l| !l.walking) .map(|l| Leg::new(l.clone())), ); } } Event::AfterJourney } fn compute_alerts(&self, time: &DateTime) -> Vec { let mut alerts = vec![]; let journey = self.imp().journey.borrow(); let legs = &journey.as_ref().expect("Journey to be set").legs; for leg in legs { // Don't alert about walking. if leg.walking { continue; } // Only add an alert for future legs if leg.departure.is_some_and(|d| time < &d) { if leg.cancelled { alerts.push(Alert::LegCancelled(Leg::new(leg.clone()))); continue; } if !leg.reachable { alerts.push(Alert::LegUnreachable(Leg::new(leg.clone()))); continue; } if leg.departure != leg.planned_departure { alerts.push(Alert::DepartureDelayed(Leg::new(leg.clone()))) } if leg.departure_platform != leg.planned_departure_platform { alerts.push(Alert::DeparturePlatformChange(Leg::new(leg.clone()))) } if leg.arrival != leg.planned_arrival { alerts.push(Alert::ArrivalDelayed(Leg::new(leg.clone()))) } } if leg.arrival.is_some_and(|a| time < &a) && leg.arrival != leg.planned_arrival { alerts.push(Alert::ArrivalDelayed(Leg::new(leg.clone()))) } } alerts } pub fn potentially_notify(&self) { let mut notify_status = self.imp().notify_status.borrow_mut(); let app = Application::default().expect("Application to be active"); let current_event = self.property::("current-event"); let current_event: Ref = current_event.borrow(); let duration_next_event = current_event .time_of_next_action() .map(|t| t.with_timezone(&Local) - Local::now()) .filter(|duration_next_event| duration_next_event >= &Duration::zero()); let notification = match &*current_event { // TODO: Settings for durations Event::BeforeJourney(l) if duration_next_event.is_some_and(|d| d < Duration::hours(1)) && !notify_status.beginning_of_journey => { notify_status.beginning_of_journey = true; let origin = l.property::("origin").property::("name"); let destination = self .property::("last-leg") .property::("destination") .property::("name"); let platform = l.property::>("departure-platform"); let time = l.property::("departure"); let body = if let Some(platform) = platform { gettextrs::gettext("Start at {station} on platform {platform} at {time}") .replace("{platform}", &platform) } else { gettextrs::gettext("Start at {station} at {time}") } .replace("{station}", &origin) .replace("{time}", &time); let notification = Notification::new( &gettextrs::gettext("Trip to {destination} will begin shortly") .replace("{destination}", &destination), ); notification.set_body(Some(&body)); Some(notification) } Event::InLeg(l_current, l_next) if duration_next_event.is_some_and(|d| d < Duration::minutes(5)) && !notify_status .in_leg_soon_transition .contains(&l_current.leg().id()) => { notify_status .in_leg_soon_transition .insert(l_current.leg().id()); if let Some(l_next) = l_next { let station = l_current .property::("destination") .property::("name"); let platform = l_next.property::>("departure-platform"); let duration = l_next .leg() .departure .and_then(|d| l_current.leg().arrival.map(|a| d - a)) .map(Utility::format_duration_inline); let body = match (platform, duration) { (Some(platform), Some(duration)) => Some( gettextrs::gettext( "{time} transfer time to get to platform {platform}", ) .replace("{time}", &duration) .replace("{platform}", &platform), ), (None, Some(duration)) => Some( gettextrs::gettext("{time} transfer time").replace("{time}", &duration), ), (Some(platform), _) => Some( gettextrs::gettext("Upcoming departure on platform {platform}") .replace("{platform}", &platform), ), _ => None, }; let notification = Notification::new( &gettextrs::gettext("Upcoming transfer at {station} soon") .replace("{station}", &station), ); notification.set_body(body.as_deref()); Some(notification) } else { let destination = l_current .property::("destination") .property::("name"); Some(Notification::new( &gettextrs::gettext("Arriving at {destination} soon") .replace("{destination}", &destination), )) } } _ => None, }; if let Some(notification) = notification { app.send_notification( Some(&format!("railway-journey-current-event-{}", self.id())), ¬ification, ); } let alerts = self.alerts(); let alerts: Ref> = alerts.borrow(); for alert in &*alerts { match alert { Alert::DepartureDelayed(leg_obj) => { let leg = leg_obj.leg(); let Some(delay) = leg .departure .and_then(|d| leg.planned_departure.map(|p| d - p)) else { log::warn!("Departure delayed, but cannot compute the delay. Ignoring"); continue; }; let notified_delay = notify_status .departure_delays .get(&leg.id()) .copied() .unwrap_or_default(); if delay - Duration::minutes(notified_delay) >= Duration::minutes(5) { notify_status .departure_delays .insert(leg.id(), delay.num_minutes()); app.send_notification( Some(&format!("railway-leg-departure-delayed-{}", leg.id())), &Notification::new( &gettextrs::gettext("{train} departure is delayed by {time}") .replace("{train}", &leg_obj.property::("name")) .replace("{time}", &Utility::format_duration_inline(delay)), ), ); } } Alert::ArrivalDelayed(leg_obj) => { let leg = leg_obj.leg(); let Some(delay) = leg.arrival.and_then(|d| leg.planned_arrival.map(|p| d - p)) else { log::warn!("Arrival delayed, but cannot compute the delay. Ignoring"); continue; }; let notified_delay = notify_status .arrival_delays .get(&leg.id()) .copied() .unwrap_or_default(); if delay - Duration::minutes(notified_delay) >= Duration::minutes(5) { notify_status .arrival_delays .insert(leg.id(), delay.num_minutes()); app.send_notification( Some(&format!("railway-leg-arrival-delayed-{}", leg.id())), &Notification::new( &gettextrs::gettext("{train} arrival is delayed by {time}") .replace("{train}", &leg_obj.property::("name")) .replace("{time}", &Utility::format_duration_inline(delay)), ), ); } } Alert::DeparturePlatformChange(leg_obj) => { let leg = leg_obj.leg(); let notified_platform = notify_status.departure_platform_changes.get(&leg.id()); let platform = leg_obj.departure_platform(); if let Some(platform) = platform && notified_platform.is_none_or(|p| *p != platform) { notify_status .departure_platform_changes .insert(leg.id(), platform.clone()); app.send_notification( Some(&format!( "railway-leg-departure-platform-changed-{}", leg.id() )), &Notification::new( &gettextrs::gettext( "{train} departing on platform {platform} today instead", ) .replace("{train}", &leg_obj.property::("name")) .replace("{platform}", &platform), ), ); } } Alert::LegUnreachable(leg_obj) => { let leg = leg_obj.leg(); let notified = notify_status.unreachable.contains(&leg.id()); if !notified { notify_status.unreachable.insert(leg.id()); app.send_notification( Some(&format!( "railway-leg-unreachable-{}", leg.id() )), &Notification::new( &gettextrs::gettext( "Warning: No longer possible to reach connecting {train} from {origin} to {destination}.", ) .replace("{train}", &leg_obj.property::("name")) .replace("{origin}", &leg_obj.property::("origin").property::("name")) .replace("{destination}", &leg_obj.property::("destination").property::("name")) ), ); } } Alert::LegCancelled(leg_obj) => { let leg = leg_obj.leg(); let notified = notify_status.cancelled.contains(&leg.id()); if !notified { notify_status.cancelled.insert(leg.id()); app.send_notification( Some(&format!( "railway-leg-cancelled-{}", leg.id() )), &Notification::new( &gettextrs::gettext( "Warning: {train} from {origin} to {destination} was cancelled.", ) .replace("{train}", &leg_obj.property::("name")) .replace("{origin}", &leg_obj.property::("origin").property::("name")) .replace("{destination}", &leg_obj.property::("destination").property::("name")) ), ); } } } } } pub fn set_notify_status(&self, status: NotifyStatus) { *self.imp().notify_status.borrow_mut() = status; } pub fn notify_status(&self) -> NotifyStatus { (*self.imp().notify_status.borrow()).clone() } } #[derive(Debug, PartialEq, Eq, Clone)] pub enum Event { BeforeJourney(Leg), InLeg(Leg, Option), TransitionTo(Leg), AfterJourney, } #[derive(Debug, PartialEq, Eq, Clone)] pub enum Alert { DepartureDelayed(Leg), ArrivalDelayed(Leg), DeparturePlatformChange(Leg), LegUnreachable(Leg), LegCancelled(Leg), } impl Event { pub fn current_leg(&self) -> Option<&Leg> { match self { Event::InLeg(l, _) => Some(l), _ => None, } } pub fn next_leg(&self) -> Option<&Leg> { match self { Event::BeforeJourney(l) => Some(l), Event::InLeg(_, l) => l.as_ref(), Event::TransitionTo(l) => Some(l), _ => None, } } pub fn time_of_next_action(&self) -> Option> { match self { Event::BeforeJourney(l) => l.leg().departure, Event::InLeg(l, _) => l.leg().arrival, Event::TransitionTo(l) => l.leg().departure, _ => None, } } pub fn format_at_time(&self, time: DateTime) -> String { let current_leg = self.current_leg(); let next_leg = self.next_leg(); let time_of_next_action = self.time_of_next_action(); let duration = time_of_next_action .map(|t| t.with_timezone(&Local) - time) .map(Utility::format_duration_tabular); let next_leg_name = next_leg.map(|l| l.property::("name")); let next_platform = next_leg.and_then(|l| l.property::>("departure-platform")); let next_origin = next_leg.map(|l| l.property::("origin").property::("name")); let current_destination = current_leg.map(|l| { l.property::("destination") .property::("name") }); match ( self, &duration, &next_leg_name, &next_platform, &next_origin, ¤t_destination, ) { (Event::BeforeJourney(_), Some(_), _, Some(_), Some(_), _) => gettextrs::gettext( "Start at {next-origin} in {duration} on platform {next-platform}", ), (Event::BeforeJourney(_), Some(_), _, None, Some(_), _) => { gettextrs::gettext("Start at {next-origin} in {duration}") } (Event::InLeg(_, _), Some(_), _, _, _, Some(_)) => { gettextrs::gettext("Arriving at {current-destination} in {duration}") } (Event::TransitionTo(_), Some(_), Some(_), Some(_), _, _) => gettextrs::gettext( "Change to {next-leg-name} on platform {next-platform}, remaining: {duration}", ), (Event::TransitionTo(_), Some(_), Some(_), None, _, _) => { gettextrs::gettext("Change to {next-leg-name}, remaining: {duration}") } (Event::AfterJourney, _, _, _, _, _) => { gettextrs::gettext("The trip’s destination has been reached") } // The remaining cases should never happen _ => "".to_string(), } .replace("{duration}", &duration.unwrap_or_default()) .replace("{next-leg-name}", &next_leg_name.unwrap_or_default()) .replace("{next-platform}", &next_platform.unwrap_or_default()) .replace("{next-origin}", &next_origin.unwrap_or_default()) .replace( "{current-destination}", ¤t_destination.unwrap_or_default(), ) } } #[derive(Serialize, Deserialize, Default, Debug, Clone)] pub struct NotifyStatus { beginning_of_journey: bool, in_leg_soon_transition: HashSet, unreachable: HashSet, cancelled: HashSet, departure_delays: HashMap, arrival_delays: HashMap, departure_platform_changes: HashMap, } mod imp { use chrono::{DateTime, Local}; use gtk::glib; use once_cell::sync::Lazy; use std::cell::{Cell, RefCell}; use crate::{backend::Client, gui::utility::Utility}; use gdk::{ glib::{BoxedAnyObject, Properties, subclass::Signal}, prelude::ObjectExt, subclass::prelude::{ DerivedObjectProperties, ObjectImpl, ObjectSubclass, ObjectSubclassExt, }, }; use crate::backend::{LateFactor, Leg, LoadFactor, Price}; use super::{Alert, Event, NotifyStatus}; #[derive(Properties)] #[properties(wrapper_type = super::Journey)] pub struct Journey { #[property(name = "price", type = Option, get = Self::price)] #[property(name = "first-leg", type = Option, get = Self::first_leg)] #[property(name = "last-leg", type = Option, get = Self::last_leg)] #[property(name = "total-time", type = String, get = Self::total_time)] #[property(name = "transitions", type = u32, get = Self::transitions)] #[property(name = "types", type = String, get = Self::types)] #[property(name = "load-factor", type = LoadFactor, get = Self::load_factor, builder(LoadFactor::default()))] #[property(name = "late-factor", type = LateFactor, get = Self::late_factor, builder(LateFactor::default()))] #[property(name = "change-platform", type = bool, get = Self::change_platform)] #[property(name = "is-unreachable", type = bool, get = Self::is_unreachable)] #[property(name = "is-cancelled", type = bool, get = Self::is_cancelled)] pub(super) journey: RefCell>, #[property(name = "current-event", type = BoxedAnyObject, get = Self::current_event)] pub(super) current_event: RefCell>, #[property(name = "alerts", type = BoxedAnyObject, get = Self::alerts)] pub(super) alerts: RefCell>, pub(super) notify_status: RefCell, #[property(type = String, get = |s: &Self| Utility::format_time_human(&s.last_refreshed.borrow().time()))] pub(super) last_refreshed: RefCell>, #[property(get, set)] refresh_in_progress: Cell, #[property(get, set)] pub(super) client: RefCell>, } #[glib::object_subclass] impl ObjectSubclass for Journey { const NAME: &'static str = "DBJourney"; type Type = super::Journey; fn new() -> Self { Self { journey: RefCell::default(), current_event: Default::default(), alerts: Default::default(), notify_status: Default::default(), refresh_in_progress: Default::default(), last_refreshed: RefCell::new(Local::now()), client: Default::default(), } } } impl Journey { fn price(&self) -> Option { self.journey .borrow() .as_ref() .and_then(|o| o.price.as_ref()) .map(|p| Price::new(p.clone())) } fn first_leg(&self) -> Option { self.journey .borrow() .as_ref() .and_then(|o| o.legs.first()) .map(|o| Leg::new(o.clone())) } fn last_leg(&self) -> Option { self.journey .borrow() .as_ref() .and_then(|o| o.legs.last()) .map(|o| Leg::new(o.clone())) } fn total_time(&self) -> String { let journey_borrow = self.journey.borrow(); let journey = journey_borrow.as_ref(); let leg_first = journey.and_then(|o| o.legs.first()); let leg_last = journey.and_then(|o| o.legs.last()); let departure = leg_first.and_then(|o| o.departure); let arrival = leg_last.and_then(|o| o.arrival); if let (Some(arrival), Some(departure)) = (arrival, departure) { Utility::format_duration_tabular(arrival - departure) } else { "".to_string() } } fn transitions(&self) -> u32 { self.journey .borrow() .as_ref() .map(|o| { o.legs .iter() .filter(|leg| !leg.walking) .collect::>() .len() .saturating_sub(1) as u32 }) .unwrap_or_default() } fn types(&self) -> String { self.journey .borrow() .as_ref() .map(|o| { o.legs .iter() .filter_map(|l| { l.line.as_ref().map(|l| { l.product_name .clone() .unwrap_or_else(|| l.product.name.to_string()) }) }) .collect::>() .join(" • ") }) .unwrap_or_default() } fn load_factor(&self) -> LoadFactor { self.journey .borrow() .as_ref() .and_then(|o| o.legs.iter().map(|l| LoadFactor::from(l.load_factor)).max()) .unwrap_or_default() } fn late_factor(&self) -> LateFactor { self.journey .borrow() .as_ref() .and_then(|o| { o.legs .iter() .map(|l| { std::cmp::max( match (l.arrival, l.planned_arrival) { (Some(real), Some(planned)) => LateFactor::from(real - planned), _ => LateFactor::default(), }, match (l.departure, l.planned_departure) { (Some(real), Some(planned)) => LateFactor::from(real - planned), _ => LateFactor::default(), }, ) }) .max() }) .unwrap_or_default() } fn change_platform(&self) -> bool { self.journey .borrow() .as_ref() .map(|o| { o.legs.iter().any(|l| { l.departure_platform != l.planned_departure_platform || l.arrival_platform != l.planned_arrival_platform }) }) .unwrap_or_default() } fn is_unreachable(&self) -> bool { self.journey .borrow() .as_ref() .map(|o| o.legs.iter().any(|l| !l.reachable)) .unwrap_or_default() } fn is_cancelled(&self) -> bool { self.journey .borrow() .as_ref() .map(|o| o.legs.iter().any(|l| l.cancelled)) .unwrap_or_default() } fn current_event(&self) -> BoxedAnyObject { let mut event = self.current_event.borrow_mut(); if event.is_none() { *event = Some(self.obj().event_at_time(&Local::now())); } let event = event.clone().unwrap(); BoxedAnyObject::new(event) } fn alerts(&self) -> BoxedAnyObject { let alerts = self.alerts.borrow(); BoxedAnyObject::new(alerts.clone()) } } #[glib::derived_properties] impl ObjectImpl for Journey { fn signals() -> &'static [Signal] { static SIGNALS: Lazy> = Lazy::new(|| vec![Signal::builder("updated").build()]); SIGNALS.as_ref() } } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/backend/journeys_result.rs000066400000000000000000000177611517666454200274630ustar00rootroot00000000000000use std::collections::HashSet; use chrono::DateTime; use chrono_tz::Tz; use gdk::prelude::{Cast, ListModelExt}; use gdk::subclass::prelude::ObjectSubclassIsExt; use gdk::{gio, glib::Object}; use gtk::glib; use super::{Client, Journey, Place}; #[derive(Debug, Copy, Clone, PartialEq, Eq, glib::Enum, Default)] #[enum_type(name = "DBTimeType")] pub enum TimeType { Arrival, #[default] Departure, } gtk::glib::wrapper! { pub struct JourneysResult(ObjectSubclass) @implements gio::ListModel, gtk::SectionModel, gtk::SelectionModel; } impl JourneysResult { pub fn new( journeys_response: rcore::JourneysResponse, source: Place, destination: Place, requested_time: Option>, time_type: TimeType, client: Client, ) -> Self { let s: Self = Object::builder() .property("source", source) .property("destination", destination) .property("earlier-ref", journeys_response.earlier_ref) .property("later-ref", journeys_response.later_ref) .property("time-type", time_type) .build(); let mut to_insert: Vec<_> = journeys_response .journeys .into_iter() .map(|j| client.get_journey(j)) .collect(); let insert_len = to_insert.len(); s.imp().journeys.borrow_mut().append(&mut to_insert); s.imp().requested_time.replace(requested_time); s.items_changed(0, 0, insert_len.try_into().unwrap_or_default()); s } pub fn journeys(&self) -> Vec { self.imp().journeys.borrow().clone() } pub fn merge_prepend(&self, other: &Self) { let current_ids = self.current_ids(); let mut to_insert = other.journeys(); // Don't insert duplicate journey IDs. to_insert.retain(|j| !current_ids.contains(&j.id())); let insert_len = to_insert.len(); let mut journeys = self.imp().journeys.borrow_mut(); journeys.splice(0..0, to_insert); self.set_earlier_ref(other.earlier_ref()); drop(journeys); self.items_changed(0, 0, insert_len.try_into().unwrap_or_default()); } pub fn merge_append(&self, other: &Self) { let current_ids = self.current_ids(); let mut to_insert = other.journeys(); // Don't insert duplicate journey IDs. to_insert.retain(|j| !current_ids.contains(&j.id())); let mut journeys = self.imp().journeys.borrow_mut(); let prev_length = journeys.len(); let insert_len = to_insert.len(); journeys.extend(to_insert); self.set_later_ref(other.later_ref()); drop(journeys); self.items_changed( prev_length.try_into().unwrap_or_default(), 0, insert_len.try_into().unwrap_or_default(), ); } pub fn requested_time(&self) -> Option> { *self.imp().requested_time.borrow() } fn current_ids(&self) -> HashSet { self.imp() .journeys .borrow() .iter() .map(|j| j.id()) .collect() } fn items_changed(&self, position: u32, removed: u32, added: u32) { self.upcast_ref::() .items_changed(position, removed, added); } } mod imp { use chrono::DateTime; use chrono_tz::Tz; use gdk::gio; use gdk::glib::subclass::types::ObjectSubclassExt; use gdk::prelude::{Cast, StaticType}; use gtk::glib; use gtk::prelude::SelectionModelExt; use gtk::subclass::section_model::SectionModelImpl; use gtk::subclass::selection_model::SelectionModelImpl; use std::cell::RefCell; use gdk::subclass::prelude::{DerivedObjectProperties, ListModelImpl}; use gdk::{ glib::Properties, prelude::ObjectExt, subclass::prelude::{ObjectImpl, ObjectSubclass}, }; use crate::backend::{Journey, Place}; use super::TimeType; #[derive(Default, Properties)] #[properties(wrapper_type = super::JourneysResult)] pub struct JourneysResult { pub(super) journeys: RefCell>, #[property(get, set, construct_only)] source: RefCell>, #[property(get, set, construct_only)] destination: RefCell>, #[property(get, set, nullable)] earlier_ref: RefCell>, #[property(get, set, nullable)] later_ref: RefCell>, #[property(get, set = Self::set_selected, nullable)] selected: RefCell>, pub(super) requested_time: RefCell>>, #[property(get, set, construct_only, builder(TimeType::Departure))] time_type: RefCell, } impl JourneysResult { fn set_selected(&self, selected: Option) { self.selected.replace(selected); // Don't know where exactly it changed; emit that it changed everywhere. self.obj() .selection_changed(0, self.journeys.borrow().len() as u32); } } #[glib::object_subclass] impl ObjectSubclass for JourneysResult { const NAME: &'static str = "DBJourneysResult"; type Type = super::JourneysResult; type Interfaces = (gio::ListModel, gtk::SectionModel, gtk::SelectionModel); } #[glib::derived_properties] impl ObjectImpl for JourneysResult {} impl ListModelImpl for JourneysResult { fn item_type(&self) -> glib::Type { Journey::static_type() } fn n_items(&self) -> u32 { self.journeys.borrow().len().try_into().unwrap_or_default() } fn item(&self, position: u32) -> Option { let list = self.journeys.borrow(); list.get(position as usize) .map(|o| o.clone().upcast::()) } } impl SectionModelImpl for JourneysResult { fn section(&self, pos: u32) -> (u32, u32) { let list = self.journeys.borrow(); // As per the doc: // > If the position is larger than the number of items, a single range from n_items to G_MAXUINT will be returned. if pos >= TryInto::::try_into(list.len()).unwrap_or_default() { return (list.len().try_into().unwrap_or_default(), u32::MAX); } // Unwrap should never happen due to previous check. let day = list .get::(pos.try_into().unwrap_or_default()) .map(|t: &Journey| t.day_timestamp()) .unwrap_or_default(); let first_in = list.partition_point(|t| t.day_timestamp() < day); let first_out = list.partition_point(|t| t.day_timestamp() < day + 1); ( first_in.try_into().unwrap_or_default(), first_out.try_into().unwrap_or_default(), ) } } impl SelectionModelImpl for JourneysResult { fn is_selected(&self, position: u32) -> bool { let list = self.journeys.borrow(); let selection = self.selected.borrow(); // Compare by ID. list.get(position as usize) .is_some_and(|j| Some(j.id()) == selection.as_ref().map(|j| j.id())) } fn selection_in_range(&self, position: u32, n_items: u32) -> gtk::Bitset { let result = gtk::Bitset::new_range(position, n_items); let list = self.journeys.borrow(); let selection = self.selected.borrow(); let index: Option = list .iter() .position(|j| Some(j.id()) == selection.as_ref().map(|j| j.id())) .and_then(|v| v.try_into().ok()); if let Some(index) = index && position <= index && index < position + n_items { result.add(position); } result } } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/backend/late_factor.rs000066400000000000000000000032031517666454200264540ustar00rootroot00000000000000use std::cmp::Ordering; use chrono::Duration; use gdk::glib; #[derive(Debug, Hash, Eq, PartialEq, Clone, Copy, glib::Enum, Default)] #[repr(u32)] #[enum_type(name = "DBLateFactor")] pub enum LateFactor { #[default] OnTime, // 0 minutes LittleLate, // 1 - 4 minutes Late, // 5 - 14 minutes VeryLate, // 15 - 59 minutes ExtremelyLate, // 1+ hours } impl From for LateFactor { fn from(value: Duration) -> Self { let minutes = value.num_minutes(); if minutes <= 0 { Self::OnTime } else if minutes < 5 { Self::LittleLate } else if minutes < 15 { Self::Late } else if minutes < 60 { Self::VeryLate } else { Self::ExtremelyLate } } } impl Ord for LateFactor { fn cmp(&self, other: &Self) -> Ordering { match (self, other) { (v1, v2) if v1 == v2 => Ordering::Equal, (Self::OnTime, _) => Ordering::Less, (_, Self::OnTime) => Ordering::Greater, (Self::LittleLate, _) => Ordering::Less, (_, Self::LittleLate) => Ordering::Greater, (Self::Late, _) => Ordering::Less, (_, Self::Late) => Ordering::Greater, (Self::VeryLate, _) => Ordering::Less, (_, Self::VeryLate) => Ordering::Greater, // Not sure why this is required. Probably the compiler cannot figure out the first case. (_, _) => Ordering::Equal, } } } impl PartialOrd for LateFactor { fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/backend/leg.rs000066400000000000000000000172151517666454200247500ustar00rootroot00000000000000use std::cell::RefCell; use gdk::glib::Object; use gdk::subclass::prelude::ObjectSubclassIsExt; gtk::glib::wrapper! { pub struct Leg(ObjectSubclass); } impl Leg { pub fn new(leg: rcore::Leg) -> Self { let s: Self = Object::builder::().build(); s.imp().leg.swap(&RefCell::new(Some(leg))); s } pub fn leg(&self) -> rcore::Leg { self.imp() .leg .borrow() .clone() .expect("Leg has not yet been set up") } } mod imp { use chrono::Local; use gtk::glib; use std::cell::RefCell; use gdk::{ glib::Properties, prelude::ObjectExt, subclass::prelude::{ DerivedObjectProperties, ObjectImpl, ObjectSubclass, ObjectSubclassExt, }, }; use crate::backend::{Frequency, LateFactor, LoadFactor, Place}; #[derive(Default, Properties)] #[properties(wrapper_type = super::Leg)] pub struct Leg { #[property(name = "direction", type = String, get = Self::direction)] #[property(name = "name", type = String, get = Self::name)] #[property(name = "departure", type = Option, get = Self::departure)] #[property(name = "arrival", type = Option, get = Self::arrival)] #[property(name = "planned-departure", type = Option, get = Self::planned_departure)] #[property(name = "planned-arrival", type = Option, get = Self::planned_arrival)] #[property(name = "departure-platform", type = Option, get = Self::departure_platform)] #[property(name = "arrival-platform", type = Option, get = Self::arrival_platform)] #[property(name = "planned-departure-platform", type = Option, get = Self::planned_departure_platform)] #[property(name = "planned-arrival-platform", type = Option, get = Self::planned_arrival_platform)] #[property(name = "origin", type = Option, get = Self::origin)] #[property(name = "destination", type = Option, get = Self::destination)] #[property(name = "load-factor", type = LoadFactor, get = Self::load_factor, builder(LoadFactor::default()))] #[property(name = "late-factor", type = LateFactor, get = Self::late_factor, builder(LateFactor::default()))] #[property(name = "frequency", type = Option, get = Self::frequency)] #[property(name = "change-platform", type = bool, get = Self::change_platform)] #[property(name = "is-unreachable", type = bool, get = Self::is_unreachable)] #[property(name = "is-cancelled", type = bool, get = Self::is_cancelled)] pub(super) leg: RefCell>, } impl Leg { fn direction(&self) -> String { self.leg .borrow() .as_ref() .and_then(|o| o.direction.clone()) .unwrap_or( self.obj() .destination() .map(|d| d.name()) .unwrap_or_default(), ) } fn name(&self) -> String { self.leg .borrow() .as_ref() .and_then(|o| o.line.clone()) .and_then(|o| o.name.clone()) .unwrap_or(gettextrs::gettext("Walk")) } fn departure(&self) -> Option { self.leg .borrow() .as_ref() .and_then(|o| o.departure) .map(|d| d.with_timezone(&Local).format("%H:%M").to_string()) } fn arrival(&self) -> Option { self.leg .borrow() .as_ref() .and_then(|o| o.arrival) .map(|d| d.with_timezone(&Local).format("%H:%M").to_string()) } fn planned_departure(&self) -> Option { self.leg .borrow() .as_ref() .and_then(|o| o.planned_departure) .map(|d| d.with_timezone(&Local).format("%H:%M").to_string()) } fn planned_arrival(&self) -> Option { self.leg .borrow() .as_ref() .and_then(|o| o.planned_arrival) .map(|d| d.with_timezone(&Local).format("%H:%M").to_string()) } fn departure_platform(&self) -> Option { self.leg .borrow() .as_ref() .and_then(|o| o.departure_platform.clone()) } fn arrival_platform(&self) -> Option { self.leg .borrow() .as_ref() .and_then(|o| o.arrival_platform.clone()) } fn planned_departure_platform(&self) -> Option { self.leg .borrow() .as_ref() .and_then(|o| o.planned_departure_platform.clone()) } fn planned_arrival_platform(&self) -> Option { self.leg .borrow() .as_ref() .and_then(|o| o.planned_arrival_platform.clone()) } fn origin(&self) -> Option { self.leg .borrow() .as_ref() .map(|o| Place::new(o.origin.clone())) } fn destination(&self) -> Option { self.leg .borrow() .as_ref() .map(|o| Place::new(o.destination.clone())) } fn load_factor(&self) -> LoadFactor { self.leg .borrow() .as_ref() .map(|o| LoadFactor::from(o.load_factor)) .unwrap_or_default() } fn late_factor(&self) -> LateFactor { self.leg .borrow() .as_ref() .map(|o| { std::cmp::max( match (o.arrival, o.planned_arrival) { (Some(real), Some(planned)) => LateFactor::from(real - planned), _ => LateFactor::default(), }, match (o.departure, o.planned_departure) { (Some(real), Some(planned)) => LateFactor::from(real - planned), _ => LateFactor::default(), }, ) }) .unwrap_or_default() } fn frequency(&self) -> Option { self.leg .borrow() .as_ref() .and_then(|o| o.frequency.clone()) .map(Frequency::new) } fn change_platform(&self) -> bool { self.leg .borrow() .as_ref() .map(|o| { o.departure_platform != o.planned_departure_platform || o.arrival_platform != o.planned_arrival_platform }) .unwrap_or_default() } fn is_unreachable(&self) -> bool { self.leg .borrow() .as_ref() .map(|o| !o.reachable) .unwrap_or_default() } fn is_cancelled(&self) -> bool { self.leg .borrow() .as_ref() .map(|o| o.cancelled) .unwrap_or_default() } } #[glib::object_subclass] impl ObjectSubclass for Leg { const NAME: &'static str = "DBLeg"; type Type = super::Leg; } #[glib::derived_properties] impl ObjectImpl for Leg {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/backend/load_factor.rs000066400000000000000000000031051517666454200264470ustar00rootroot00000000000000use std::cmp::Ordering; use gdk::glib; #[derive(Debug, Hash, Eq, PartialEq, Clone, Copy, glib::Enum, Default)] #[repr(u32)] #[enum_type(name = "DBLoadFactor")] pub enum LoadFactor { #[default] Unknown, LowToMedium, High, VeryHigh, ExceptionallyHigh, } impl From> for LoadFactor { fn from(value: Option) -> Self { match value { Some(rcore::LoadFactor::LowToMedium) => Self::LowToMedium, Some(rcore::LoadFactor::High) => Self::High, Some(rcore::LoadFactor::VeryHigh) => Self::VeryHigh, Some(rcore::LoadFactor::ExceptionallyHigh) => Self::ExceptionallyHigh, None => Self::Unknown, } } } impl Ord for LoadFactor { fn cmp(&self, other: &Self) -> Ordering { match (self, other) { (v1, v2) if v1 == v2 => Ordering::Equal, (Self::Unknown, _) => Ordering::Less, (_, Self::Unknown) => Ordering::Greater, (Self::LowToMedium, _) => Ordering::Less, (_, Self::LowToMedium) => Ordering::Greater, (Self::High, _) => Ordering::Less, (_, Self::High) => Ordering::Greater, (Self::VeryHigh, _) => Ordering::Less, (_, Self::VeryHigh) => Ordering::Greater, // Not sure why this is required. Probably the compiler cannot figure out the first case. (_, _) => Ordering::Equal, } } } impl PartialOrd for LoadFactor { fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/backend/mod.rs000066400000000000000000000014241517666454200247530ustar00rootroot00000000000000mod client; mod discount_card; mod frequency; mod intermediate_location; mod journey; mod journeys_result; mod late_factor; mod leg; mod load_factor; mod place; mod price; mod provider; mod remark; mod request_limiter; mod station; mod timer; pub use client::Client; pub use discount_card::DiscountCard; pub use frequency::Frequency; pub use intermediate_location::IntermediateLocation; pub use journey::Event; pub use journey::Journey; pub use journey::NotifyStatus; pub use journeys_result::JourneysResult; pub use journeys_result::TimeType; pub use late_factor::LateFactor; pub use leg::Leg; pub use load_factor::LoadFactor; pub use place::Place; pub use price::Price; pub use provider::Provider; pub use remark::Remark; pub use request_limiter::RequestLimiter; pub use timer::Timer; railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/backend/place.rs000066400000000000000000000045321517666454200252630ustar00rootroot00000000000000use std::cell::RefCell; use gdk::glib::Object; use gdk::subclass::prelude::ObjectSubclassIsExt; gtk::glib::wrapper! { pub struct Place(ObjectSubclass); } impl Place { pub fn new(place: rcore::Place) -> Self { let s: Self = Object::builder().build(); s.imp().place.swap(&RefCell::new(Some(place))); s } pub fn place(&self) -> rcore::Place { self.imp() .place .borrow() .clone() .expect("Station not yet set up") } } mod imp { use gtk::glib; use std::cell::RefCell; use gdk::{ glib::Properties, prelude::ObjectExt, subclass::prelude::{DerivedObjectProperties, ObjectImpl, ObjectSubclass}, }; #[derive(Default, Properties)] #[properties(wrapper_type = super::Place)] pub struct Place { #[property(name = "name", type = String, get = Self::name)] #[property(name = "id", type = Option, get = Self::id)] pub(super) place: RefCell>, } #[glib::object_subclass] impl ObjectSubclass for Place { const NAME: &'static str = "DBPlace"; type Type = super::Place; } impl Place { fn name(&self) -> String { match self.place.borrow().as_ref() { Some(rcore::Place::Station(s)) => s.name.as_ref().unwrap_or(&s.id).to_owned(), Some(rcore::Place::Location(l)) => match l { rcore::Location::Address { address, .. } => address.to_owned(), rcore::Location::Point { name, id, .. } => name .as_ref() .unwrap_or_else(|| id.as_ref().expect("Either name of id for point set")) .to_owned(), }, _ => unimplemented!(), } } fn id(&self) -> Option { match self.place.borrow().as_ref() { Some(rcore::Place::Station(s)) => Some(s.id.to_owned()), Some(rcore::Place::Location(l)) => match l { rcore::Location::Address { .. } => None::, rcore::Location::Point { id, .. } => id.to_owned(), }, _ => unimplemented!(), } } } #[glib::derived_properties] impl ObjectImpl for Place {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/backend/price.rs000066400000000000000000000046131517666454200253010ustar00rootroot00000000000000use std::cell::RefCell; use gdk::glib::Object; use gdk::subclass::prelude::ObjectSubclassIsExt; gtk::glib::wrapper! { pub struct Price(ObjectSubclass); } impl Price { pub fn new(price: rcore::Price) -> Self { let s: Self = Object::builder().build(); s.imp().price.swap(&RefCell::new(Some(price))); s } pub fn price(&self) -> rcore::Price { self.imp() .price .borrow() .clone() .expect("Station not yet set up") } } mod imp { use gtk::glib; use std::cell::RefCell; use gdk::{ glib::Properties, prelude::ObjectExt, subclass::prelude::{DerivedObjectProperties, ObjectImpl, ObjectSubclass}, }; #[derive(Default, Properties)] #[properties(wrapper_type = super::Price)] pub struct Price { #[property(name="formatted", type=String, get=Self::formatted)] pub(super) price: RefCell>, } #[glib::object_subclass] impl ObjectSubclass for Price { const NAME: &'static str = "DBPrice"; type Type = super::Price; } impl Price { fn formatted(&self) -> String { let price = self.price.borrow(); let price = price .as_ref() .expect("Price to have a value to be formatted"); match price.currency.as_str() { "EUR" => { // Translators: How to format the currency "Euro". Do not translate in {}. gettextrs::gettext("€{amount}") .replace("{amount}", &format!("{:.2}", price.amount)) } "USD" => { // Translators: How to format the currency "Dollar (US)". Do not translate in {}. gettextrs::gettext("${amount}") .replace("{amount}", &format!("{:.2}", price.amount)) } // XXX: Add other currencies here s => { // Translators: How to format unknown currency "currency". Do not translate in {}. gettextrs::gettext("{currency} {amount}") .replace("{amount}", &format!("{:.2}", price.amount)) .replace("{currency}", s) } } } } #[glib::derived_properties] impl ObjectImpl for Price {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/backend/provider.rs000066400000000000000000000032361517666454200260310ustar00rootroot00000000000000use gdk::glib::Object; gtk::glib::wrapper! { pub struct Provider(ObjectSubclass); } impl Provider { pub fn new( id: &'static str, short_name: &str, name: Option<&str>, regional_group: &str, has_icon: bool, ) -> Provider { let icon_name = if has_icon { id.to_lowercase() } else { crate::config::APP_ID.to_string() }; Object::builder::() .property("id", id) .property("short-name", short_name) .property("name", name) .property("icon-name", &icon_name) .property("regional-group", regional_group) .build() } } mod imp { use gtk::glib; use std::cell::RefCell; use gdk::{ glib::Properties, prelude::ObjectExt, subclass::prelude::{DerivedObjectProperties, ObjectImpl, ObjectSubclass}, }; #[derive(Default, Properties)] #[properties(wrapper_type = super::Provider)] pub struct Provider { #[property(get, set, construct_only)] id: RefCell, #[property(get, set, construct_only)] short_name: RefCell, #[property(get, set, construct_only)] name: RefCell>, #[property(get, set, construct_only)] icon_name: RefCell, #[property(get, set, construct_only)] regional_group: RefCell, } #[glib::object_subclass] impl ObjectSubclass for Provider { const NAME: &'static str = "DBProvider"; type Type = super::Provider; } #[glib::derived_properties] impl ObjectImpl for Provider {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/backend/remark.rs000066400000000000000000000041521517666454200254560ustar00rootroot00000000000000use std::cell::RefCell; use gdk::glib::Object; use gdk::subclass::prelude::ObjectSubclassIsExt; use rcore::RemarkAssociation; gtk::glib::wrapper! { pub struct Remark(ObjectSubclass); } impl Remark { pub fn new(remark: rcore::Remark) -> Self { let s: Self = Object::builder().build(); s.imp().remark.swap(&RefCell::new(Some(remark))); s } } fn association_to_icon(association: &RemarkAssociation) -> &'static str { match association { RemarkAssociation::Bike => "cycling-symbolic", RemarkAssociation::Accessibility => "wheelchair-symbolic", RemarkAssociation::Ticket => "ticket-symbolic", RemarkAssociation::Power => "power-symbolic", RemarkAssociation::AirConditioning => "thermometer-symbolic", RemarkAssociation::WiFi => "network-wireless-signal-excellent-symbolic", RemarkAssociation::OnlySecondClass => "ticket-second-class-symbolic", _ => "dialog-information-symbolic", } } mod imp { use gtk::glib; use std::cell::RefCell; use gdk::{ glib::Properties, prelude::ObjectExt, subclass::prelude::{DerivedObjectProperties, ObjectImpl, ObjectSubclass}, }; #[derive(Default, Properties)] #[properties(wrapper_type = super::Remark)] pub struct Remark { #[property(name = "text", type = String, get = |s: &Self| s.remark.borrow().as_ref().expect("Remark to be set to query text property").text.clone())] #[property(name = "code", type = String, get = |s: &Self| s.remark.borrow().as_ref().expect("Remark to be set to query code property").code.clone())] #[property(name = "icon-name", type = String, get = |s: &Self| s.remark.borrow().as_ref().map(|r| super::association_to_icon(&r.association).to_owned()).expect("Remark to be set to query icon-name property"))] pub(super) remark: RefCell>, } #[glib::object_subclass] impl ObjectSubclass for Remark { const NAME: &'static str = "DBRemark"; type Type = super::Remark; } #[glib::derived_properties] impl ObjectImpl for Remark {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/backend/request_limiter.rs000066400000000000000000000064351517666454200274200ustar00rootroot00000000000000use std::{ sync::{ Arc, Mutex, atomic::{AtomicBool, Ordering}, }, time::{Duration, Instant}, }; use gdk::glib; /// Limit a request based on a timeout. #[derive(Debug, Clone)] pub struct RequestLimiter { value: Arc>>, locked_until: Arc>, timeout: Duration, pending_request: Arc, } impl RequestLimiter { /// Create the limiter with the given timeout. pub fn new(timeout: Duration) -> Self { log::trace!( "Initializing request limiter with {} milliseconds.", timeout.as_millis() ); Self { value: Arc::new(Mutex::new(None)), locked_until: Arc::new(Mutex::new(Instant::now())), timeout, pending_request: Arc::new(AtomicBool::new(false)), } } /// Create a request for the data. /// /// If a request is allowed to go through, the data that should be requested will be returned. Note that this may not be the data given, e.g. when there were other requests in the meantime which overwrote the value. /// If there is no pending request, this will directly allow the request and block other requests for the timeout. /// If the store is already locked, but no request is pending, the thread will sleep until it is allowed to request and then return. /// If the store is already locked and there is a pending request, it will instantly return `None`. pub async fn request(&self, value: T) -> Option { let to_sleep = { let mut stored = self.value.lock().expect("poisoned value lock"); let direct = stored.is_none(); *stored = Some(value); let mut locked = self.locked_until.lock().expect("poisoned time lock"); let now = Instant::now(); if direct && *locked < now { // No previous request. Can directly pass. *locked = now + self.timeout; log::trace!( "Previous request already finished and no data left. Locking for {} milliseconds.", self.timeout.as_millis() ); Some(Duration::ZERO) } else if self.pending_request.load(Ordering::SeqCst) { // Already pending. Return. log::trace!("There is already a request pending. Cancelling request."); None } else { // Still locked, but no pending requests. Timeout. log::trace!( "It is still locked, but no pending request. Becoming pending thread. Sleeping for {} milliseconds.", (*locked - now).as_millis() ); Some(*locked - now) } // Drop all the locks. }?; if !to_sleep.is_zero() { self.pending_request.store(true, Ordering::SeqCst); glib::timeout_future(to_sleep).await; let mut locked = self.locked_until.lock().expect("poisoned time lock"); let now = Instant::now(); *locked = now + self.timeout; self.pending_request.store(false, Ordering::SeqCst); } // Return the stored value, leaving none. self.value.lock().expect("poisoned value lock").take() } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/backend/station.rs000066400000000000000000000022011517666454200256470ustar00rootroot00000000000000use std::cell::RefCell; use gdk::glib::Object; use gdk::subclass::prelude::ObjectSubclassIsExt; gtk::glib::wrapper! { pub struct Station(ObjectSubclass); } impl Station { pub fn new(stop: rcore::Station) -> Self { let s: Self = Object::builder().build(); s.imp().station.swap(&RefCell::new(Some(stop))); s } } mod imp { use gtk::glib; use std::cell::RefCell; use gdk::{ glib::Properties, prelude::ObjectExt, subclass::prelude::{DerivedObjectProperties, ObjectImpl, ObjectSubclass}, }; #[derive(Default, Properties)] #[properties(wrapper_type = super::Station)] pub struct Stop { #[property(name = "name", type = String, get = |s: &Self| s.station.borrow().as_ref().and_then(|o| o.name.clone()).expect("Station to be set to query the name property"))] pub(super) station: RefCell>, } #[glib::object_subclass] impl ObjectSubclass for Stop { const NAME: &'static str = "DBStation"; type Type = super::Station; } #[glib::derived_properties] impl ObjectImpl for Stop {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/backend/timer.rs000066400000000000000000000061231517666454200253150ustar00rootroot00000000000000use std::time::Duration; use gdk::{ glib::{self, Object, clone}, subclass::prelude::ObjectSubclassIsExt, }; use super::Journey; gtk::glib::wrapper! { pub struct Timer(ObjectSubclass); } impl Default for Timer { fn default() -> Self { Object::builder().build() } } impl Timer { pub fn register_background(&self, journey: Journey) { let journey_id = journey.id(); let handle = gspawn!(clone!( #[strong(rename_to = s)] self, async move { loop { let Some(sleep) = journey .next_background_tasks_in() .and_then(|sleep| sleep.to_std().ok()) else { s.imp() .background_handles .borrow_mut() .remove(&journey.id()); break; }; glib::timeout_future(sleep).await; // Don't do background tasks if already in minutely batch. if !s.has_in_minutely(journey.id()) { journey.background_tasks(); } } } )); self.imp() .background_handles .borrow_mut() .insert(journey_id, handle); } pub fn unregister_background(&self, journey: Journey) { if let Some(handle) = self .imp() .background_handles .borrow_mut() .remove(&journey.id()) { handle.abort(); } } pub fn has_in_minutely(&self, journey_id: String) -> bool { self.imp() .minutely_handles .borrow() .get(&journey_id) .is_some() } pub fn register_minutely(&self, journey: Journey) { let journey_id = journey.id(); let handle = gspawn!(async move { loop { glib::timeout_future(Duration::from_secs(60)).await; journey.background_tasks(); } }); self.imp() .minutely_handles .borrow_mut() .insert(journey_id, handle); } pub fn unregister_minutely(&self, journey: Journey) { if let Some(handle) = self .imp() .minutely_handles .borrow_mut() .remove(&journey.id()) { handle.abort(); } } } mod imp { use std::cell::RefCell; use std::collections::HashMap; use gdk::glib::subclass::types::ObjectSubclass; use gdk::glib::{self, JoinHandle}; use gdk::subclass::prelude::ObjectImpl; #[derive(Default)] pub struct Timer { pub(super) background_handles: RefCell>>, pub(super) minutely_handles: RefCell>>, } #[glib::object_subclass] impl ObjectSubclass for Timer { const NAME: &'static str = "DBTimer"; type Type = super::Timer; } impl ObjectImpl for Timer {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/config.rs.in000066400000000000000000000005701517666454200244600ustar00rootroot00000000000000pub const APP_ID: &str = @APP_ID@; pub const BASE_ID: &str = @BASE_ID@; pub const RESOURCES_PATH: &str = @RESOURCES_PATH@; pub const GETTEXT_PACKAGE: &str = @GETTEXT_PACKAGE@; pub const LOCALEDIR: &str = @LOCALEDIR@; pub const PROFILE: &str = @PROFILE@; pub const RESOURCES_BYTES: &[u8] = include_bytes!(concat!( @BUILD_DIR@, "/data/resources/resources.gresource" )); railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/error.rs000066400000000000000000000021611517666454200237350ustar00rootroot00000000000000#[derive(Debug)] pub enum Error { Hafas(rcore::Error, Box>), Timeout, NotImplemented, } impl std::error::Error for Error {} impl std::fmt::Display for Error { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Error::Hafas(e) => write!(f, "Backend error: {e}"), Error::Timeout => write!(f, "Timed Out"), Error::NotImplemented => write!(f, "Not implemented by this provider"), } } } impl From> for Error { fn from(e: rcore::Error) -> Self { match e { rcore::Error::Request(r) => Self::Hafas(rcore::Error::Request( Box::new(r) as Box )), rcore::Error::Provider(r) => Self::Hafas(rcore::Error::Provider( Box::new(r) as Box )), rcore::Error::NotImplemented => Self::NotImplemented, } } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/000077500000000000000000000000001517666454200230225ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/alt_label.rs000066400000000000000000000111561517666454200253130ustar00rootroot00000000000000gtk::glib::wrapper! { pub struct AltLabel(ObjectSubclass) @extends gtk::Box, gtk::Widget, @implements gtk::gio::ActionGroup, gtk::gio::ActionMap, gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget; } pub mod imp { use std::cell::RefCell; use std::marker::PhantomData; use gdk::glib::Properties; use gdk::glib::clone; use glib::subclass::InitializingObject; use gtk::CompositeTemplate; use gtk::glib; use gtk::prelude::*; use gtk::subclass::prelude::*; use crate::gui::utility::Utility; #[derive(CompositeTemplate, Default, Properties)] #[properties(wrapper_type = super::AltLabel)] #[template(resource = "/ui/alt_label.ui")] pub struct AltLabel { #[template_child] label_main: TemplateChild, #[template_child] label_alt: TemplateChild, #[property(get, set)] main: RefCell>, #[property(get, set)] alt: RefCell>, #[property(name = "is-different", get = Self::is_different)] _is_different: PhantomData, } impl AltLabel { fn is_different(&self) -> bool { let main = self.main.borrow(); let alt = self.alt.borrow(); main.is_some() && alt.is_some() && main.as_ref() != alt.as_ref() } fn connect_equal(&self, obj: &super::AltLabel) { obj.connect_notify_local( Some("main"), clone!( #[strong(rename_to = label_main)] self.label_main, #[strong(rename_to = label_alt)] self.label_alt, move |obj, _| { let main = obj.property::>("main"); let alt = obj.property::>("alt"); if main == alt { label_main.add_css_class("main-label-on-time"); label_alt.add_css_class("alt-label-on-time"); label_main.remove_css_class("main-label-late"); label_alt.remove_css_class("alt-label-late"); } else { label_main.add_css_class("main-label-late"); label_alt.add_css_class("alt-label-late"); label_main.remove_css_class("main-label-on-time"); label_alt.remove_css_class("alt-label-on-time"); } obj.notify("is-different"); } ), ); obj.connect_notify_local( Some("alt"), clone!( #[strong(rename_to = label_main)] self.label_main, #[strong(rename_to = label_alt)] self.label_alt, move |obj, _| { let main = obj.property::>("main"); let alt = obj.property::>("alt"); if main == alt { label_main.add_css_class("main-label-on-time"); label_alt.add_css_class("alt-label-on-time"); label_main.remove_css_class("main-label-late"); label_alt.remove_css_class("alt-label-late"); } else { label_main.add_css_class("main-label-late"); label_alt.add_css_class("alt-label-late"); label_main.remove_css_class("main-label-on-time"); label_alt.remove_css_class("alt-label-on-time"); } obj.notify("is-different"); } ), ); } } #[glib::object_subclass] impl ObjectSubclass for AltLabel { const NAME: &'static str = "DBAltLabel"; type Type = super::AltLabel; type ParentType = gtk::Box; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); Utility::bind_template_callbacks(klass); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[glib::derived_properties] impl ObjectImpl for AltLabel { fn constructed(&self) { self.parent_constructed(); self.connect_equal(&self.obj()); } } impl WidgetImpl for AltLabel {} impl BoxImpl for AltLabel {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/date_time_picker.rs000066400000000000000000000213441517666454200266640ustar00rootroot00000000000000use chrono::DateTime; use chrono::Local; use gdk::subclass::prelude::ObjectSubclassIsExt; use crate::backend::TimeType; gtk::glib::wrapper! { pub struct DateTimePicker(ObjectSubclass) @extends gtk::Box, gtk::Widget, @implements gtk::gio::ActionGroup, gtk::gio::ActionMap, gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget; } impl DateTimePicker { pub fn get(&self) -> DateTime { self.imp().get() } pub fn time_type(&self) -> TimeType { match self.imp().toggle_group_time_type.active_name().as_deref() { Some("departure") => TimeType::Departure, Some("arrival") => TimeType::Arrival, _ => unimplemented!(), } } } pub mod imp { use std::cell::Cell; use chrono::DateTime; use chrono::Datelike; use chrono::Local; use chrono::NaiveDate; use chrono::TimeZone; use chrono::Timelike; use gdk::glib::Properties; use gdk::glib::clone; use gdk::glib::subclass::InitializingObject; use gdk::prelude::*; use gtk::CompositeTemplate; use gtk::glib; use gtk::prelude::PopoverExt; use gtk::subclass::prelude::*; use gtk::template_callbacks; use libadwaita::prelude::ActionRowExt; use libadwaita::prelude::EditableExt; use libadwaita::prelude::ToggleButtonExt; use crate::gui::utility::Utility; #[derive(CompositeTemplate, Default, Properties)] #[template(resource = "/ui/date_time_picker.ui")] #[properties(wrapper_type = super::DateTimePicker)] pub struct DateTimePicker { #[template_child] pick_cal: TemplateChild, #[template_child] pick_hour: TemplateChild, #[template_child] pick_minute: TemplateChild, #[template_child] btn_input_time: TemplateChild, #[template_child] btn_input_date: TemplateChild, #[template_child] popover_time: TemplateChild, #[template_child] popover_date: TemplateChild, #[template_child] pub(super) toggle_group_time_type: TemplateChild, #[property(get, set)] now: Cell, } #[template_callbacks] impl DateTimePicker { pub(super) fn get(&self) -> DateTime { let obj = self.obj(); if obj.now() { Local::now() } else { let cal_date = self.pick_cal.date(); let year = cal_date.year(); let month = cal_date.month() as u32; let day = cal_date.day_of_month() as u32; let hour = self.pick_hour.value().floor() as u32; let minute = self.pick_minute.value().floor() as u32; let naive = NaiveDate::from_ymd_opt(year, month, day) .unwrap_or_default() .and_hms_opt(hour, minute, 0) .unwrap_or_default(); Local.from_local_datetime(&naive).unwrap() } } fn update_date_label(&self) { let date = self.get().date_naive(); if date == Local::now().date_naive() { self.btn_input_date .set_subtitle(&gettextrs::gettext("Today")); } else { // How to format a date with time. Should probably be similar to %a %b %d (meaning print day of the week (short), month of the year (short), day from 01-31). // For a full list of supported identifiers, see let format = gettextrs::gettext("%a %b %d"); self.btn_input_date .set_subtitle(&date.format(&format).to_string()) } } fn update_time_label(&self) { if self.obj().now() { self.btn_input_time.set_subtitle(&gettextrs::gettext("Now")); } else { let hour = self.pick_hour.value().floor() as u32; let minute = self.pick_minute.value().floor() as u32; // TODO: Internationalization self.btn_input_time .set_subtitle(&format!("{hour:02}:{minute:02}")) } } fn connect_btn_input_time_label(&self) { let obj = self.obj(); self.pick_hour.connect_value_changed(clone!( #[weak] obj, move |_| { obj.set_now(false); obj.imp().update_time_label(); } )); self.pick_minute.connect_value_changed(clone!( #[weak] obj, move |_| { obj.set_now(false); obj.imp().update_time_label(); } )); } fn connect_expander_date_subtitle(&self) { let obj = self.obj(); self.pick_cal.connect_day_selected(clone!( #[weak] obj, move |_| { obj.set_now(false); obj.imp().update_date_label(); } )); } #[template_callback] fn handle_spinner_output_two_digit(&self, s: gtk::SpinButton) -> bool { s.set_text(&format!("{:02}", s.value())); true } #[template_callback] fn handle_time_popover_open(&self) { let obj = self.obj(); let was_now = obj.now(); let time = self.get(); self.pick_hour.set_value(time.hour() as f64); self.pick_minute.set_value((time.minute() / 5 * 5) as f64); // Reset the old `now` as it will be changed by `set_value`. obj.set_now(was_now); } #[template_callback] fn handle_date_popover_open(&self) { let obj = self.obj(); let was_now = obj.now(); let time = self.get(); self.pick_cal.set_day(time.day().try_into().unwrap_or(1)); // chrono months are 01 - 12, while glib months are 00 - 11. self.pick_cal .set_month(time.month().try_into().unwrap_or(1) - 1); self.pick_cal.set_year(time.year()); // Reset the old `now` as it will be changed by `set_value`. obj.set_now(was_now); } #[template_callback] fn handle_toggle_now(&self, button: gtk::ToggleButton) { self.obj().set_now(button.is_active()); self.handle_date_popover_open(); self.handle_time_popover_open(); self.update_date_label(); self.update_time_label(); } } #[glib::object_subclass] impl ObjectSubclass for DateTimePicker { const NAME: &'static str = "DBDateTimePicker"; type Type = super::DateTimePicker; type ParentType = gtk::Box; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); Self::bind_template_callbacks(klass); Utility::bind_template_callbacks(klass); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[glib::derived_properties] impl ObjectImpl for DateTimePicker { fn constructed(&self) { let obj = self.obj(); self.parent_constructed(); self.connect_expander_date_subtitle(); self.connect_btn_input_time_label(); obj.connect_now_notify(clone!( #[weak(rename_to = s)] self, move |_| { s.update_date_label(); s.update_time_label(); } )); obj.set_now(true); self.handle_date_popover_open(); self.handle_time_popover_open(); self.update_date_label(); self.update_time_label(); // Now will be unset has `handle_*` will be set to new values. obj.set_now(true); let popover_date = self.popover_date.get(); self.btn_input_date.connect_activated(clone!( #[weak] popover_date, move |_| { popover_date.popup(); } )); let popover_time = self.popover_time.get(); self.btn_input_time.connect_activated(clone!( #[weak] popover_time, move |_| { popover_time.popup(); } )); } } impl WidgetImpl for DateTimePicker {} impl BoxImpl for DateTimePicker {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/error.rs000066400000000000000000000043101517666454200245170ustar00rootroot00000000000000use crate::Error; use gdk::{ gio::{SimpleAction, SimpleActionGroup}, glib::clone, prelude::{ActionMapExt, Cast}, }; use gettextrs::gettext; use gtk::{Window, prelude::WidgetExt}; use libadwaita::{ AlertDialog, Toast, ToastOverlay, prelude::AdwDialogExt, prelude::AlertDialogExt, }; pub fn error_to_toast(overlay: &ToastOverlay, err: Error) { log::error!("Displaying error: {err}"); let toast = match &err { Error::Hafas(rcore::Error::Request(_)) => Toast::new(&gettext( "Failed to fetch data. Are you connected to the internet?", )), Error::Hafas(rcore::Error::Provider(_)) => Toast::builder() .title(gettext("Received an error. Please share feedback.")) .button_label(gettext("More Information")) .build(), _ => Toast::builder() .title(gettext("An unknown issue occured. Please share feedback.")) .button_label(gettext("More Information")) .build(), }; let msg = match err { Error::Hafas(rcore::Error::Request(_)) => None, Error::Hafas(e) => Some(format!("{e}")), _ => Some(format!("{err}")), }; if let Some(msg) = msg { let action_more_info = SimpleAction::new("more-info", None); action_more_info.connect_activate(clone!( #[strong] overlay, move |_, _| { let dialog = AlertDialog::builder() .heading(gettext("Error")) .body(&msg) .default_response("close") .build(); dialog.add_response("close", &gettextrs::gettext("_Close")); dialog.present(Some( &overlay .root() .expect("Overlay to have a root.") .downcast::() .expect("Root of overlay to be a Window."), )); } )); toast.set_action_name(Some("toast.more-info")); let actions = SimpleActionGroup::new(); overlay.insert_action_group("toast", Some(&actions)); actions.add_action(&action_more_info); } overlay.add_toast(toast); } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/frequency_label.rs000066400000000000000000000047421517666454200265370ustar00rootroot00000000000000gtk::glib::wrapper! { pub struct FrequencyLabel(ObjectSubclass) @extends libadwaita::Bin, gtk::Widget, @implements gtk::gio::ActionGroup, gtk::gio::ActionMap, gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget; } pub mod imp { use std::cell::RefCell; use gdk::glib::Properties; use glib::subclass::InitializingObject; use gtk::CompositeTemplate; use gtk::glib; use libadwaita::prelude::*; use libadwaita::subclass::prelude::*; use crate::backend::Frequency; use crate::gui::utility::Utility; #[derive(CompositeTemplate, Default, Properties)] #[properties(wrapper_type = super::FrequencyLabel)] #[template(resource = "/ui/frequency_label.ui")] pub struct FrequencyLabel { #[property(get, set = Self::set_frequency)] #[property(name = "label", type = Option, get = Self::label)] frequency: RefCell>, } impl FrequencyLabel { fn set_frequency(&self, frequency: Option) { let obj = self.obj(); obj.set_visible(frequency.is_some()); self.frequency.replace(frequency); obj.notify("label"); } fn label(&self) -> Option { self.frequency .borrow() .as_ref() .and_then(Frequency::frequency) .and_then(|f| match (f.minimum, f.maximum) { (Some(min), Some(max)) => Some((min + max) / 2), (Some(d), _) | (_, Some(d)) => Some(d), _ => None, }) .map(Utility::format_duration_inline) // Translators: Formatting of frequency of trains. The {} will already contain the duration format (most likely min). E.g. `every ~10 min`. .map(|x| gettextrs::gettext("every ~{}").replace("{}", &x)) } } #[glib::object_subclass] impl ObjectSubclass for FrequencyLabel { const NAME: &'static str = "DBFrequencyLabel"; type Type = super::FrequencyLabel; type ParentType = libadwaita::Bin; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[glib::derived_properties] impl ObjectImpl for FrequencyLabel {} impl WidgetImpl for FrequencyLabel {} impl BinImpl for FrequencyLabel {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/indicator_icons.rs000066400000000000000000000166721517666454200265530ustar00rootroot00000000000000gtk::glib::wrapper! { pub struct IndicatorIcons(ObjectSubclass) @extends gtk::Box, gtk::Widget, @implements gtk::gio::ActionGroup, gtk::gio::ActionMap, gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget; } pub mod imp { use gdk::glib::Properties; use glib::subclass::InitializingObject; use gtk::CompositeTemplate; use gtk::accessible::Property; use gtk::glib; use gtk::prelude::AccessibleExtManual; use gtk::prelude::ObjectExt; use gtk::subclass::prelude::*; use libadwaita::prelude::WidgetExt; use crate::backend::LateFactor; use crate::backend::LoadFactor; #[derive(CompositeTemplate, Default, Properties)] #[properties(wrapper_type = super::IndicatorIcons)] #[template(resource = "/ui/indicator_icons.ui")] pub struct IndicatorIcons { #[template_child] #[property(name = "load-factor", type = LoadFactor, set = Self::set_load_factor, builder(LoadFactor::default()))] pub(super) img_load_factor: TemplateChild, #[template_child] #[property(name = "late-factor", type = LateFactor, set = Self::set_late_factor, builder(LateFactor::default()))] pub(super) img_late_factor: TemplateChild, #[template_child] #[property(name = "change-platform", type = bool, set = Self::set_change_platform)] pub(super) img_change_platform: TemplateChild, #[template_child] #[property(name = "is-unreachable", type = bool, set = Self::set_unreachable)] pub(super) img_unreachable: TemplateChild, #[template_child] #[property(name = "is-cancelled", type = bool, set = Self::set_cancelled)] pub(super) img_cancelled: TemplateChild, } impl IndicatorIcons { fn set_load_factor(&self, obj: LoadFactor) { let img = &self.img_load_factor; match obj { LoadFactor::Unknown => self.set_icon(img, false, "", "", &["load-unknown"]), LoadFactor::LowToMedium => { self.set_icon(img, false, "", "", &["load-low-to-medium"]) } LoadFactor::High => self.set_icon( img, true, "train-load-high-symbolic", &gettextrs::gettext("High Load"), &["load-high"], ), LoadFactor::VeryHigh => self.set_icon( img, true, "train-load-veryhigh-symbolic", &gettextrs::gettext("Very High Load"), &["load-very-high"], ), LoadFactor::ExceptionallyHigh => self.set_icon( img, true, "train-load-extreme-symbolic", &gettextrs::gettext("Exceptionally High Load"), &["load-exceptionally-high"], ), } } fn set_late_factor(&self, obj: LateFactor) { let img = &self.img_late_factor; match obj { LateFactor::OnTime => self.set_icon( img, false, "", &gettextrs::gettext("On Time"), &["late-on-time"], ), LateFactor::LittleLate => self.set_icon( img, true, "delay-small-symbolic", &gettextrs::gettext("Minor Delays"), &["late-little-late"], ), LateFactor::Late => self.set_icon( img, true, "delay-small-symbolic", &gettextrs::gettext("Delayed"), &["late-late"], ), LateFactor::VeryLate => self.set_icon( img, true, "delay-long-small-symbolic", &gettextrs::gettext("Very Delayed"), &["late-very-late"], ), LateFactor::ExtremelyLate => self.set_icon( img, true, "delay-extreme-small-symbolic", &gettextrs::gettext("Extremely Delayed"), &["late-extremely-late"], ), } } fn set_change_platform(&self, obj: bool) { let img = &self.img_change_platform; self.set_icon( img, obj, "change-symbolic", &if obj { gettextrs::gettext("Platform Changes") } else { "".to_string() }, if obj { &["change-platform"] } else { &[] }, ); } fn set_unreachable(&self, obj: bool) { let img = &self.img_unreachable; self.set_icon( img, // Do not show if cancelled. obj && !self.img_cancelled.get_visible(), "dialog-warning-symbolic", &if obj { gettextrs::gettext("Connection Not Possible") } else { "".to_string() }, if obj { &["unreachable"] } else { &[] }, ); } fn set_cancelled(&self, obj: bool) { let img = &self.img_cancelled; self.set_icon( img, obj, "dialog-error-symbolic", &if obj { gettextrs::gettext("Cancelled") } else { "".to_string() }, if obj { &["cancelled"] } else { &[] }, ); if obj { self.img_unreachable.set_visible(false); } } fn images(&self) -> Vec { vec![ self.img_load_factor.get(), self.img_late_factor.get(), self.img_change_platform.get(), self.img_unreachable.get(), self.img_cancelled.get(), ] } fn recompute_visible(&self) { self.obj() .set_visible(self.images().iter().any(|i| i.get_visible())); } fn set_icon( &self, img: >k::Image, visible: bool, icon_name: &str, tooltip: &str, css_classes: &[&str], ) { img.set_visible(visible); img.set_icon_name(Some(icon_name)); img.set_css_classes(css_classes); img.set_tooltip_text(Some(tooltip)); img.update_property(&[Property::Description(tooltip)]); self.recompute_visible(); } } #[glib::object_subclass] impl ObjectSubclass for IndicatorIcons { const NAME: &'static str = "DBIndicatorIcons"; type Type = super::IndicatorIcons; type ParentType = gtk::Box; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[glib::derived_properties] impl ObjectImpl for IndicatorIcons {} impl WidgetImpl for IndicatorIcons {} impl BoxImpl for IndicatorIcons {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/intermediate_location_item.rs000066400000000000000000000116541517666454200307570ustar00rootroot00000000000000use std::borrow::Borrow; use gdk::{glib::Object, prelude::Cast, subclass::prelude::ObjectSubclassIsExt}; use gtk::Widget; use crate::backend::IntermediateLocation; gtk::glib::wrapper! { pub struct IntermediateLocationItem(ObjectSubclass) @extends gtk::Box, gtk::Widget, @implements gtk::gio::ActionGroup, gtk::gio::ActionMap, gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget; } impl IntermediateLocationItem { pub fn new(intermediate_location: &IntermediateLocation) -> Self { Object::builder::() .property("intermediate-location", intermediate_location) .build() } pub(crate) fn arrival_label(&self) -> Widget { let obj = self.imp(); obj.alt_label_arrival .borrow() .dynamic_cast_ref::() .expect("AltLabel to be a Widget") .clone() } } pub mod imp { use std::cell::RefCell; use gdk::glib::Properties; use glib::subclass::InitializingObject; use gtk::CompositeTemplate; use gtk::DirectionType; use gtk::glib; use gtk::prelude::*; use gtk::subclass::prelude::*; use crate::backend::IntermediateLocation; use crate::backend::Place; use crate::gui::alt_label::AltLabel; use crate::gui::utility::Utility; #[derive(CompositeTemplate, Default, Properties)] #[properties(wrapper_type = super::IntermediateLocationItem)] #[template(resource = "/ui/intermediate_location_item.ui")] pub struct IntermediateLocationItem { #[template_child] pub(super) alt_label_arrival: TemplateChild, #[property(get, set)] intermediate_location: RefCell>, } impl IntermediateLocationItem { fn format_intermediate_location_description( stop: &str, arrival: &Option, platform: &Option, ) -> String { // Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. let format_full = gettextrs::gettext("{stop} at {arrival} on platform {platform}"); // Translators: The formatting of the intermediate_locations's description for screen readers. Do not translate the strings in {}. let format_no_platform = gettextrs::gettext("{stop} at {arrival}"); match (arrival, platform) { (Some(arrival), Some(platform)) => format_full .replace("{stop}", stop) .replace("{arrival}", arrival) .replace("{platform}", platform), (Some(arrival), None) => format_no_platform .replace("{stop}", stop) .replace("{arrival}", arrival), (_, _) => stop.to_string(), } } } #[glib::object_subclass] impl ObjectSubclass for IntermediateLocationItem { const NAME: &'static str = "DBIntermediateLocationItem"; type Type = super::IntermediateLocationItem; type ParentType = gtk::Box; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); WidgetClassExt::set_css_name(klass, "IntermediateLocationItem"); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[glib::derived_properties] impl ObjectImpl for IntermediateLocationItem { fn constructed(&self) { self.parent_constructed(); self.obj().connect_notify_local( Some("intermediate-location"), |intermediate_location_item, _| { let intermediate_location = intermediate_location_item .property::("intermediate_location"); let stop = intermediate_location.property::("place"); intermediate_location_item.update_property(&[ gtk::accessible::Property::Label( &IntermediateLocationItem::format_intermediate_location_description( &stop.name(), &intermediate_location .arrival() .or(intermediate_location.planned_arrival()), &intermediate_location .arrival_platform() .or(intermediate_location.planned_arrival_platform()), ), ), ]); }, ); } } impl WidgetImpl for IntermediateLocationItem { fn focus(&self, direction: DirectionType) -> bool { Utility::move_focus_within_container(self, direction) } } impl BoxImpl for IntermediateLocationItem {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/journey_detail_page.rs000066400000000000000000000321141517666454200274020ustar00rootroot00000000000000use gdk::subclass::prelude::ObjectSubclassIsExt; gtk::glib::wrapper! { pub struct JourneyDetailPage(ObjectSubclass) @extends gtk::Box, gtk::Widget, @implements gtk::gio::ActionGroup, gtk::gio::ActionMap, gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget; } impl JourneyDetailPage { pub fn reload(&self) { self.imp().reload(self); } } pub mod imp { use std::cell::Cell; use std::cell::RefCell; use chrono::Local; use gdk::glib::BoxedAnyObject; use gdk::glib::JoinHandle; use gdk::glib::MainContext; use gdk::glib::Properties; use gdk::glib::clone; use gdk::glib::signal::SignalHandlerId; use glib::subclass::InitializingObject; use gtk::CompositeTemplate; use gtk::glib; use gtk::prelude::*; use gtk::subclass::prelude::*; use gtk::template_callbacks; use chrono::Duration; use crate::backend::Client; use crate::backend::Event; use crate::backend::Journey; use crate::backend::Leg; use crate::backend::Place; use crate::backend::Timer; use crate::gui::leg_item::LegItem; use crate::gui::transition::Transition; use crate::gui::utility::Utility; use crate::gui::window::Window; #[derive(CompositeTemplate, Default, Properties)] #[properties(wrapper_type = super::JourneyDetailPage)] #[template(resource = "/ui/journey_detail_page.ui")] pub struct JourneyDetailPage { #[template_child] box_legs: TemplateChild, #[template_child] label_last_refreshed: TemplateChild, #[property(get, set = Self::set_show_live_box)] show_live_box: Cell, #[property(get, set = Self::set_journey, nullable)] journey: RefCell>, journey_update_signal_id: Cell>, load_handle: RefCell>>, #[property(get, set)] pub(super) timer: RefCell, #[property(get, set)] client: RefCell>, } impl JourneyDetailPage { fn set_show_live_box(&self, obj: bool) { if let Some(journey) = self.obj().journey() { if obj { self.timer.borrow().register_minutely(journey) } else { self.timer.borrow().unregister_minutely(journey) } } self.show_live_box.replace(obj); } fn set_journey(&self, obj: Option) { if let Some(old) = self.journey.borrow().as_ref() { self.timer.borrow().unregister_minutely(old.clone()); if let Some(id) = self.journey_update_signal_id.take() { old.disconnect(id); } } // Different journeys can be identified by different refresh tokens. let redo = obj.as_ref().map(|j| j.id()) != self.journey.borrow().as_ref().map(|j| j.id()); self.journey.replace(obj.clone()); self.schedule_setup(redo); if let Some(obj) = obj { self.journey_update_signal_id .replace(Some(obj.connect_local( "updated", true, clone!( #[weak(rename_to = s)] self, #[upgrade_or_default] move |_| { s.schedule_setup(false); None } ), ))); if self.obj().show_live_box() { self.timer.borrow().register_minutely(obj); } } } pub(super) fn reload(&self, obj: &super::JourneyDetailPage) { let main_context = MainContext::default(); let window = self.obj().root().and_downcast::().expect( "search page must be mapped and realised when a template callback is called", ); main_context.spawn_local(clone!( #[strong] obj, #[strong] window, async move { let journey = obj.journey(); if let Some(journey) = journey && let Err(e) = journey.refresh().await { window.display_error_toast(e); } } )); } } #[template_callbacks] impl JourneyDetailPage { #[template_callback(function)] fn format_source_destination(source: &str, destination: &str) -> String { format!("{source} → {destination}") } #[template_callback(function)] fn format_last_refreshed(last_refreshed: Option<&str>) -> Option { last_refreshed.map(|s| format!("Last refreshed {}", s)) } #[template_callback(function)] fn live_banner_title(event: Option) -> Option { let binding = event.as_ref().map(|e| e.borrow()); let event: Option<&Event> = binding.as_deref(); event.map(|e| e.format_at_time(Local::now())) } async fn setup(&self, redo: bool) { enum SetupStep { Add(gtk::Widget), Remove(gtk::Widget), } // Plan setup steps. let mut steps = Vec::new(); let mut current_child = self.box_legs.first_child(); // Clear box_legs if journey has completely changed (i.e. completely new journey with different legs). if redo { while let Some(child) = current_child { current_child = child.next_sibling(); steps.push(SetupStep::Remove(child)); } } let legs = self .journey .borrow() .as_ref() .map(|j| j.journey().legs) .unwrap_or_default(); // Fill box_legs let mut i = 0; while i < legs.len() { let mut walking_time: Option = None; let is_start = i == 0; let i_start = i; let mut to = &legs[i]; while to.walking { walking_time = Some( walking_time.unwrap_or(Duration::zero()) + to.arrival.map_or(Duration::zero(), |arrival| { arrival - to.departure.unwrap_or(arrival) }), ); i += 1; if i < legs.len() { to = &legs[i]; } else { break; } } let is_end = i == legs.len(); let waiting_time: Option = if !is_start && !is_end { let from = &legs[i - 1]; if let Some(departure) = to.departure && let Some(arrival) = from.arrival { Some(departure - arrival) } else { None } } else { None }; if walking_time.is_some() || !is_start { let final_station = if is_end { Some(Place::new(to.destination.clone())) } else { None }; let has_walk = walking_time.is_some() || (!is_end && to.origin != legs[i_start].origin); if let Some(child) = ¤t_child { if let Some(transition) = child.dynamic_cast_ref::() { // There is already a transition in the correct place. transition.setup( &walking_time, &waiting_time, has_walk, is_start || is_end, &final_station, ) } else { // There is something there, but it is no transition. Clear the box from here to the end and insert a new transition. while let Some(c) = current_child { current_child = c.next_sibling(); steps.push(SetupStep::Remove(c)) } steps.push(SetupStep::Add( Transition::new( &walking_time, &waiting_time, has_walk, is_start || is_end, &final_station, ) .upcast(), )); } } else { // There is no child left, append a new transition. steps.push(SetupStep::Add( Transition::new( &walking_time, &waiting_time, has_walk, is_start || is_end, &final_station, ) .upcast(), )); } current_child = current_child.and_then(|c| c.next_sibling()); } // Even though we are in glib runtime now, `yield_now` is runtime-agnostic and also seems to work with glib. tokio::task::yield_now().await; if !is_end { if let Some(child) = ¤t_child { if let Some(leg_item) = child.dynamic_cast_ref::() { // There is already a leg item in the correct place. leg_item.set_leg(Leg::new(legs[i].clone())); } else { // There is something there, but it is no leg item. Clear the box from here to the end and insert a new transition. while let Some(c) = current_child { current_child = c.next_sibling(); // self.box_legs.remove(&c); steps.push(SetupStep::Remove(c)); } steps.push(SetupStep::Add( LegItem::new(&Leg::new(legs[i].clone())).upcast(), )); } } else { // There is no child left, append a new leg item. steps.push(SetupStep::Add( LegItem::new(&Leg::new(legs[i].clone())).upcast(), )); } current_child = current_child.and_then(|c| c.next_sibling()); } i += 1; } // Remove the remaining children. while let Some(c) = current_child { current_child = c.next_sibling(); steps.push(SetupStep::Remove(c)); } // Execute setup steps for step in steps { match step { SetupStep::Add(w) => self.box_legs.append(&w), SetupStep::Remove(w) => self.box_legs.remove(&w), } } } fn schedule_setup(&self, redo: bool) { // Ensure the load is not called twice at the same time by aborting the old one if needed. if let Some(handle) = self.load_handle.take() { handle.abort(); } let o = self.obj().clone(); let handle = gspawn!( async move { o.imp().setup(redo).await }, glib::Priority::LOW ); self.load_handle.replace(Some(handle)); } } #[glib::object_subclass] impl ObjectSubclass for JourneyDetailPage { const NAME: &'static str = "DBJourneyDetailPage"; type Type = super::JourneyDetailPage; type ParentType = gtk::Box; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); Self::bind_template_callbacks(klass); Utility::bind_template_callbacks(klass); crate::backend::Leg::ensure_type(); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[glib::derived_properties] impl ObjectImpl for JourneyDetailPage {} impl WidgetImpl for JourneyDetailPage {} impl BoxImpl for JourneyDetailPage {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/journey_list_item.rs000066400000000000000000000116211517666454200271350ustar00rootroot00000000000000use crate::backend::Journey; use crate::backend::Leg; use crate::gui::indicator_icons::IndicatorIcons; use gdk::glib::Object; use gdk::glib::subclass::prelude::ObjectSubclassIsExt; use gtk::prelude::ObjectExt; use std::borrow::Borrow; gtk::glib::wrapper! { pub struct JourneyListItem(ObjectSubclass) @extends gtk::Box, gtk::Widget, @implements gtk::gio::ActionGroup, gtk::gio::ActionMap, gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget; } impl JourneyListItem { pub fn new() -> Self { Object::builder().build() } pub fn get_destination_box(&self) -> gtk::Box { self.imp().destination_box.borrow().get().clone() } pub fn get_indicators(&self) -> IndicatorIcons { self.imp().indicators.borrow().get().clone() } pub fn format_trip_description(&self) -> String { let journey: Journey = self .imp() .journey .borrow() .as_ref() .expect("trip description formatting only works for an already set trip") .clone(); let first_leg = journey.property::("first-leg"); let last_leg = journey.property::("last-leg"); let changes = journey.property::("transitions"); let departure = first_leg .property::>("departure") .or(first_leg.property::>("planned-departure")) .unwrap_or("".to_string()); let arrival = last_leg .property::>("arrival") .or(last_leg.property::>("planned-arrival")) .unwrap_or("".to_string()); let travel_time = journey.property::("total-time"); let changes_text = gettextrs::ngettext("{} change", "{} changes", changes) .replace("{}", &changes.to_string()); // Translators: changes_text is the plural-aware string "{} change" already gettextrs::gettext("From {departure} to {arrival} in {travel_time} with {changes_text}") .replace("{departure}", &departure) .replace("{arrival}", &arrival) .replace("{travel_time}", &travel_time) .replace("{changes_text}", &changes_text) .to_string() } } impl Default for JourneyListItem { fn default() -> Self { Self::new() } } pub mod imp { use std::cell::RefCell; use std::marker::PhantomData; use gdk::glib::Properties; use glib::subclass::InitializingObject; use gtk::CompositeTemplate; use gtk::glib; use gtk::prelude::*; use gtk::subclass::prelude::*; use crate::backend::Journey; use crate::gui::indicator_icons::IndicatorIcons; use crate::gui::utility::Utility; #[derive(CompositeTemplate, Default, Properties)] #[properties(wrapper_type = super::JourneyListItem)] #[template(resource = "/ui/journey_list_item.ui")] pub struct JourneyListItem { #[template_child] pub(super) destination_box: TemplateChild, #[template_child] from_time: TemplateChild, #[template_child] to_time: TemplateChild, #[template_child] pub(super) indicators: TemplateChild, #[property(get, set = Self::set_journey, nullable)] pub(super) journey: RefCell>, #[property(set = Self::set_compact)] compact: PhantomData, } impl JourneyListItem { fn set_compact(&self, compact: bool) { let (orientation, spacing) = if compact { (gtk::Orientation::Vertical, 0) } else { (gtk::Orientation::Horizontal, 6) }; self.from_time.set_orientation(orientation); self.from_time.set_spacing(spacing); self.to_time.set_orientation(orientation); self.to_time.set_spacing(spacing); } fn set_journey(&self, obj: Option) { if obj .as_ref() .is_some_and(|j| j.is_unreachable() || j.is_cancelled()) { self.obj().add_css_class("dim-label"); } else { self.obj().remove_css_class("dim-label"); } self.journey.replace(obj); } } #[glib::object_subclass] impl ObjectSubclass for JourneyListItem { const NAME: &'static str = "DBJourneyListItem"; type Type = super::JourneyListItem; type ParentType = gtk::Box; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); Utility::bind_template_callbacks(klass); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[glib::derived_properties] impl ObjectImpl for JourneyListItem {} impl WidgetImpl for JourneyListItem {} impl BoxImpl for JourneyListItem {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/journey_store_item.rs000066400000000000000000000030741517666454200273210ustar00rootroot00000000000000use gdk::glib::Object; use crate::backend::Journey; gtk::glib::wrapper! { pub struct JourneyStoreItem(ObjectSubclass) @extends gtk::Box, gtk::Widget, @implements gtk::gio::ActionGroup, gtk::gio::ActionMap, gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget; } impl JourneyStoreItem { pub fn new(journey: Journey) -> Self { Object::builder().property("journey", &journey).build() } } pub mod imp { use std::cell::RefCell; use gdk::glib::Properties; use glib::subclass::InitializingObject; use gtk::CompositeTemplate; use gtk::glib; use gtk::prelude::*; use gtk::subclass::prelude::*; use crate::backend::Journey; #[derive(CompositeTemplate, Default, Properties)] #[properties(wrapper_type = super::JourneyStoreItem)] #[template(resource = "/ui/journey_store_item.ui")] pub struct JourneyStoreItem { #[property(get, set)] journey: RefCell>, } #[glib::object_subclass] impl ObjectSubclass for JourneyStoreItem { const NAME: &'static str = "DBJourneyStoreItem"; type Type = super::JourneyStoreItem; type ParentType = gtk::Box; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[glib::derived_properties] impl ObjectImpl for JourneyStoreItem {} impl WidgetImpl for JourneyStoreItem {} impl BoxImpl for JourneyStoreItem {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/journeys_page.rs000066400000000000000000000437201517666454200262500ustar00rootroot00000000000000use std::time::Duration; use gdk::{ glib::{self, clone}, subclass::prelude::ObjectSubclassIsExt, }; use gtk::prelude::AdjustmentExt; gtk::glib::wrapper! { pub struct JourneysPage(ObjectSubclass) @extends gtk::Box, gtk::Widget, @implements gtk::gio::ActionGroup, gtk::gio::ActionMap, gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget; } impl JourneysPage { fn is_auto_scroll(&self) -> bool { self.auto_scroll() } fn scroll_down(&self) { if self.is_auto_scroll() { gspawn!(clone!( #[weak(rename_to = s)] self, async move { // Need to sleep a little to make sure the scrolled window saw the changed // child. glib::timeout_future(Duration::from_millis(50)).await; let adjustment = s.imp().scrolled_window.vadjustment(); adjustment.set_value(adjustment.upper()); } )); } } fn scroll_up(&self) { if self.is_auto_scroll() { gspawn!(clone!( #[weak(rename_to = s)] self, async move { // Need to sleep a little to make sure the scrolled window saw the changed // child. glib::timeout_future(Duration::from_millis(50)).await; let adjustment = s.imp().scrolled_window.vadjustment(); adjustment.set_value(adjustment.lower()); } )); } } } pub mod imp { use std::cell::Cell; use std::cell::RefCell; use chrono::Duration; use gdk::gio::Settings; use gdk::glib::MainContext; use gdk::glib::Properties; use gdk::glib::clone; use gdk::glib::subclass::Signal; use glib::subclass::InitializingObject; use gtk::CompositeTemplate; use gtk::ListItem; use gtk::PositionType; use gtk::SignalListItemFactory; use gtk::Widget; use gtk::glib; use gtk::prelude::*; use gtk::subclass::prelude::*; use once_cell::sync::Lazy; use rcore::JourneysOptions; use rcore::LoyaltyCard; use rcore::TariffClass; use rcore::TransferOptions; use crate::backend::Client; use crate::backend::Journey; use crate::backend::JourneysResult; use crate::backend::TimeType; use crate::config; use crate::gui::journey_list_item::JourneyListItem; use crate::gui::time_divider::TimeDivider; use crate::gui::utility::Utility; use crate::gui::window::Window; #[derive(CompositeTemplate, Properties)] #[properties(wrapper_type = super::JourneysPage)] #[template(resource = "/ui/journeys_page.ui")] pub struct JourneysPage { #[template_child] pub(super) scrolled_window: TemplateChild, #[template_child] list_journeys: TemplateChild, destination_alignment_group: gtk::SizeGroup, #[property(get, set)] journeys_result: RefCell>, settings: Settings, #[property(get, set)] client: RefCell>, #[property(name = "loading-earlier", get, set)] loading_earlier: Cell, #[property(name = "loading-later", get, set)] loading_later: Cell, #[property(get, set)] auto_scroll: Cell, #[property(get, set)] compact: Cell, #[property(get, set)] scrolled_up: Cell, } impl Default for JourneysPage { fn default() -> Self { Self { scrolled_window: Default::default(), list_journeys: Default::default(), destination_alignment_group: gtk::SizeGroup::new(gtk::SizeGroupMode::Horizontal), journeys_result: Default::default(), settings: Settings::new(config::BASE_ID), client: Default::default(), loading_earlier: Default::default(), loading_later: Default::default(), auto_scroll: Cell::new(true), compact: Cell::new(false), scrolled_up: Cell::new(false), } } } #[gtk::template_callbacks] impl JourneysPage { /// Every time when the page is not yet filled with the journeys, load more. fn connect_initial_loading(&self) { let obj = self.obj(); self.scrolled_window.vadjustment().connect_changed(clone!( #[weak] obj, move |adj| { // This means the page is not yet filled. if adj.upper() <= adj.page_size() { // Do not scroll for the initial loading. obj.set_auto_scroll(false); if obj .journeys_result() .expect("JourneysPage to have a JourneysResult when loading") .time_type() == TimeType::Departure { obj.imp().handle_later() } else { obj.imp().handle_earlier() } } else { // Scroll if the page is already filled and more is manually requested. obj.set_auto_scroll(true); } } )); } #[template_callback] fn handle_edge_reached(&self, position: PositionType) { match position { PositionType::Top => self.handle_earlier(), PositionType::Bottom => self.handle_later(), _ => (), } } #[template_callback] fn handle_earlier(&self) { let obj = self.obj(); // Skip if already loading. if obj.loading_earlier() { return; } obj.set_loading_earlier(true); if self.auto_scroll.get() && !self.scrolled_up.get() { obj.set_scrolled_up(true); } let main_context = MainContext::default(); let window = self.obj().root().and_downcast::().expect( "search page must be mapped and realised when a template callback is called", ); main_context.spawn_local(clone!( #[strong] obj, #[strong(rename_to = settings)] self.settings, #[strong] window, async move { let Some(journeys_result) = obj.journeys_result() else { return; }; let client = obj.client().expect("Client of JourneysPage to be set up"); let result_journeys_result = client .journeys( journeys_result.source().expect("Journey to have a source"), journeys_result .destination() .expect("Journey to have a destination"), journeys_result.time_type(), JourneysOptions { earlier_than: journeys_result.earlier_ref(), language: Some(Utility::language_code()), stopovers: true, loyalty_card: LoyaltyCard::from_id( settings .enum_("bahncard") .try_into() .expect("Failed to convert setting `bahncard` to u8"), ), bike_friendly: settings.boolean("bike-accessible"), transfers: if settings.boolean("direct-only") { TransferOptions::Limited(0) } else { TransferOptions::Unlimited }, // Value clamped in the settings; default should never happen. transfer_time: Duration::try_minutes( settings.int("transfer-time").into(), ) .unwrap_or_default(), tariff_class: if settings.boolean("first-class") { TariffClass::First } else { TariffClass::Second }, products: Utility::products_selection_from_setting(&settings), ..Default::default() }, ) .await; if let Ok(result_journeys_result) = result_journeys_result { journeys_result.merge_prepend(&result_journeys_result) } else { window.display_error_toast( result_journeys_result.expect_err("Error to be present"), ); } obj.set_loading_earlier(false); obj.scroll_up(); } )); } #[template_callback] fn handle_later(&self) { let obj = self.obj(); // Skip if already loading. if obj.loading_later() { return; } obj.set_loading_later(true); let main_context = MainContext::default(); let window = self.obj().root().and_downcast::().expect( "search page must be mapped and realised when a template callback is called", ); main_context.spawn_local(clone!( #[strong] obj, #[strong(rename_to = settings)] self.settings, #[strong] window, async move { let journeys_result = obj.property::("journeys-result"); let result_journeys_result = obj .property::("client") .journeys( journeys_result.source().expect("Journey to have a source"), journeys_result .destination() .expect("Journey to have a destination"), journeys_result.time_type(), JourneysOptions { later_than: journeys_result.later_ref(), language: Some(Utility::language_code()), stopovers: true, loyalty_card: LoyaltyCard::from_id( settings .enum_("bahncard") .try_into() .expect("Failed to convert setting `bahncard` to u8"), ), bike_friendly: settings.boolean("bike-accessible"), transfers: if settings.boolean("direct-only") { TransferOptions::Limited(0) } else { TransferOptions::Unlimited }, // Value clamped in the settings; default should never happen. transfer_time: Duration::try_minutes( settings.int("transfer-time").into(), ) .unwrap_or_default(), tariff_class: if settings.boolean("first-class") { TariffClass::First } else { TariffClass::Second }, products: Utility::products_selection_from_setting(&settings), ..Default::default() }, ) .await; if let Ok(result_journeys_result) = result_journeys_result { journeys_result.merge_append(&result_journeys_result); } else { window.display_error_toast( result_journeys_result.expect_err("Error to be present"), ); } obj.set_loading_later(false); obj.scroll_down(); } )); } fn setup_model(&self, obj: &super::JourneysPage) { let factory = SignalListItemFactory::new(); factory.connect_setup(clone!( #[weak] obj, #[weak(rename_to = size_group)] self.destination_alignment_group, move |_, list_item| { let journey_item = JourneyListItem::new(); let list_item = list_item .downcast_ref::() .expect("The factory item to be a `ListItem`"); list_item.set_child(Some(&journey_item)); list_item.property_expression("item").bind( &journey_item, "journey", Widget::NONE, ); obj.property_expression("compact") .bind(&journey_item, "compact", Widget::NONE); size_group.add_widget(&journey_item.get_destination_box()); journey_item.connect_parent_notify(|journey_item| { if let Some(parent) = journey_item.property::>("parent") { parent.update_relation(&[gtk::accessible::Relation::DescribedBy(&[ journey_item.get_indicators().upcast_ref(), ])]); } }); } )); factory.connect_bind(|_, list_item| { let list_item = list_item .downcast_ref::() .expect("The factory item to be a `ListItem`"); let journey_item = list_item .child() .expect("The ListItem to have a child") .downcast_ref::() .expect("The ListItem's child to be a `JourneyListItem`") .clone(); list_item.set_accessible_label(&journey_item.format_trip_description()); }); let header_factory = SignalListItemFactory::new(); header_factory.connect_setup(clone!( #[weak] obj, move |_, object| { let widget = TimeDivider::default(); let header_item = object.downcast_ref::().unwrap(); header_item.set_child(Some(&widget)); header_item.bind_property("item", &widget, "item").build(); header_item.bind_property("start", &widget, "start").build(); obj.bind_property("scrolled-up", &widget, "initial") .invert_boolean() .sync_create() .build(); obj.bind_property("journeys-result", &widget, "journeys-result") .sync_create() .build(); } )); self.list_journeys.set_factory(Some(&factory)); self.list_journeys.set_header_factory(Some(&header_factory)); self.list_journeys.set_single_click_activate(true); self.list_journeys.connect_activate(clone!( #[strong] obj, move |list_view, position| { let model = list_view.model().expect("The model has to exist."); let journey_object = model .item(position) .expect("The item has to exist.") .downcast::() .expect("The item has to be an `Journey`."); obj.emit_by_name::<()>("select", &[&journey_object]); } )); } } #[glib::object_subclass] impl ObjectSubclass for JourneysPage { const NAME: &'static str = "DBJourneysPage"; type Type = super::JourneysPage; type ParentType = gtk::Box; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); Self::bind_template_callbacks(klass); Utility::bind_template_callbacks(klass); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[glib::derived_properties] impl ObjectImpl for JourneysPage { fn constructed(&self) { self.parent_constructed(); self.setup_model(&self.obj()); self.connect_initial_loading(); } fn signals() -> &'static [Signal] { static SIGNALS: Lazy> = Lazy::new(|| { vec![ Signal::builder("select") .param_types([Journey::static_type()]) .build(), ] }); SIGNALS.as_ref() } } impl WidgetImpl for JourneysPage {} impl BoxImpl for JourneysPage {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/leg_item.rs000066400000000000000000000262071517666454200251640ustar00rootroot00000000000000use gdk::glib::Object; use crate::backend::Leg; gtk::glib::wrapper! { pub struct LegItem(ObjectSubclass) @extends gtk::Box, gtk::Widget, @implements gtk::gio::ActionGroup, gtk::gio::ActionMap, gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget; } impl LegItem { pub fn new(leg: &Leg) -> Self { Object::builder().property("leg", leg).build() } } pub mod imp { use std::cell::RefCell; use gdk::glib::JoinHandle; use gdk::glib::Properties; use glib::subclass::InitializingObject; use gtk::CompositeTemplate; use gtk::DirectionType; use gtk::glib; use gtk::prelude::*; use gtk::subclass::prelude::*; use crate::backend::IntermediateLocation; use crate::backend::Leg; use crate::backend::Place; use crate::backend::Remark; use crate::gui::intermediate_location_item::IntermediateLocationItem; use crate::gui::remark_item::RemarkItem; use crate::gui::utility::Utility; #[derive(CompositeTemplate, Default, Properties)] #[properties(wrapper_type = super::LegItem)] #[template(resource = "/ui/leg_item.ui")] pub struct LegItem { #[template_child] box_intermediate_locations: TemplateChild, #[template_child] box_remarks: TemplateChild, #[template_child] reveal_stopovers: TemplateChild, #[template_child] label_num_stopovers: TemplateChild, #[template_child] stopover_button: TemplateChild, #[template_child] remarks_button: TemplateChild, #[template_child] size_group: TemplateChild, #[property(get, set = Self::set_leg)] leg: RefCell>, load_handle: RefCell>>, } #[gtk::template_callbacks] impl LegItem { #[template_callback(function)] fn format_train_direction(train: &str, destination: &str) -> String { // Translators: The formatting of the train going into what direction, i.e. "ICE 123 to Musterberg". Do not translate the strings in {}. let format = gettextrs::gettext("{train} in the direction of {destination}"); format .replace("{train}", train) .replace("{destination}", destination) } fn format_trip_segment_description( start: &str, departure: &str, platform_start: &Option, destination: &str, arrival: &str, platform_destination: &Option, ) -> String { let format_departure = match platform_start { Some(_) => { // Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. gettextrs::gettext("Depart {start} from platform {platform} at {departure}.") } None => { // Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. gettextrs::gettext("Depart {start} at {departure}.") } }; let format_arrival = match platform_destination { Some(_) => { // Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. gettextrs::gettext( "Arrive at {destination} on platform {platform} at {arrival}.", ) } None => { // Translators: Formatting for the segment's comprehensive description for screen readers. Do not translate the strings in {}. gettextrs::gettext("Arrive at {destination} at {arrival}.") } }; format!( "{} {}", format_departure .replace("{start}", start) .replace("{departure}", departure) // uses fact that None format does not include "{platform}" .replace( "{platform}", platform_start.as_ref().unwrap_or(&"".to_string()) ), format_arrival .replace("{destination}", destination) .replace("{arrival}", arrival) // uses fact that None format does not include "{platform}" .replace( "{platform}", platform_destination.as_ref().unwrap_or(&"".to_string()) ) ) } fn setup_sync(&self) { let (n_stopovers, n_intermediate_locations, remarks) = { let obj = self.leg.borrow(); let (n_stopovers, n_intermediate_locations) = obj .as_ref() .map(|j| j.leg().intermediate_locations) .map(|s| { ( s.iter() .filter(|l| matches!(l, rcore::IntermediateLocation::Stop(_))) .count() .saturating_sub(2), s.len().saturating_sub(2), ) }) .unwrap_or_default(); let remarks = obj.as_ref().map(|j| j.leg().remarks).unwrap_or_default(); (n_stopovers, n_intermediate_locations, remarks) }; if n_intermediate_locations > 0 { self.stopover_button.set_visible(true); let num_stopovers_fmt = gettextrs::ngettext("{} Stop", "{} Stops", n_stopovers.try_into().unwrap()); let num_stopovers_str = num_stopovers_fmt.replace("{}", &n_stopovers.to_string()); self.label_num_stopovers.set_label(&num_stopovers_str); } else { self.stopover_button.set_visible(false); } // Clear box_remarks while let Some(child) = self.box_remarks.first_child() { self.box_remarks.remove(&child); } // Fill box_remarks self.remarks_button.set_visible(!remarks.is_empty()); for remark in remarks { self.box_remarks .append(&RemarkItem::new(&Remark::new(remark.clone()))); } } async fn setup_async(&self) { let stopovers = { let obj = self.leg.borrow(); let mut stopovers = obj .as_ref() .map(|j| j.leg().intermediate_locations) .unwrap_or_default(); // Remove start and end. These are already shown as origin and destination. if !stopovers.is_empty() { stopovers.pop(); } if !stopovers.is_empty() { stopovers.remove(0); } stopovers }; let size_group = &self.size_group; let load_stopovers_async = !self.reveal_stopovers.is_child_revealed(); let mut current_child = self.box_intermediate_locations.first_child(); let mut i = 0; // Fill box_legs while i < stopovers.len() { if load_stopovers_async { // Even though we are in glib runtime now, `yield_now` is runtime-agnostic and also seems to work with glib. tokio::task::yield_now().await; } let stopover = IntermediateLocation::new(stopovers[i].clone()); // Check if current child can be reused. if let Some(child) = current_child.and_downcast_ref::() { child.set_intermediate_location(&stopover); } else { let widget = IntermediateLocationItem::new(&stopover); self.box_intermediate_locations.append(&widget); size_group.add_widget(&widget.arrival_label()); } current_child = current_child.and_then(|c| c.next_sibling()); i += 1; } while let Some(c) = current_child { current_child = c.next_sibling(); self.box_intermediate_locations.remove(&c); } } fn set_leg(&self, obj: Leg) { self.leg.replace(Some(obj)); // Ensure the load is not called twice at the same time by aborting the old one if needed. if let Some(handle) = self.load_handle.replace(None) { handle.abort(); } let o = self.obj().clone(); // First, setup sync UI which can change the layout. o.imp().setup_sync(); // Afterwards, asynchronously add information which will not change the layout. let handle = gspawn!( async move { o.imp().setup_async().await }, glib::Priority::LOW ); self.load_handle.replace(Some(handle)); } } #[glib::object_subclass] impl ObjectSubclass for LegItem { const NAME: &'static str = "DBLegItem"; type Type = super::LegItem; type ParentType = gtk::Box; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); Self::bind_template_callbacks(klass); Utility::bind_template_callbacks(klass); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[glib::derived_properties] impl ObjectImpl for LegItem { fn constructed(&self) { self.parent_constructed(); self.obj().connect_notify_local(Some("leg"), |leg_item, _| { let leg = leg_item.property::("leg"); let origin = leg.property::("origin"); let destination = leg.property::("destination"); leg_item.update_property(&[gtk::accessible::Property::Description( &LegItem::format_trip_segment_description( &origin.name(), &leg.departure() .or(leg.planned_departure()) .unwrap_or("".to_string()), &leg.departure_platform() .or(leg.planned_departure_platform()), &destination.name(), &leg.arrival() .or(leg.planned_arrival()) .unwrap_or("".to_string()), &leg.arrival_platform().or(leg.planned_departure_platform()), ), )]); }); } } impl WidgetImpl for LegItem { fn focus(&self, direction: DirectionType) -> bool { Utility::move_focus_within_container(self, direction) } } impl BoxImpl for LegItem {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/mod.rs000066400000000000000000000010431517666454200241450ustar00rootroot00000000000000mod alt_label; mod date_time_picker; mod error; mod frequency_label; mod indicator_icons; mod intermediate_location_item; mod journey_detail_page; mod journey_list_item; mod journey_store_item; mod journeys_page; mod leg_item; mod place_list_item; mod preferences_dialog; mod provider_list_item; mod provider_popover; mod refresh_button; mod remark_item; mod search_options_button; mod search_options_dialog; mod search_page; mod search_store_item; mod station_entry; mod stores; mod time_divider; mod transition; pub mod utility; pub mod window; railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/place_list_item.rs000066400000000000000000000042451517666454200265320ustar00rootroot00000000000000use gdk::glib::Object; gtk::glib::wrapper! { pub struct PlaceListItem(ObjectSubclass) @extends gtk::Box, gtk::Widget, @implements gtk::gio::ActionGroup, gtk::gio::ActionMap, gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget; } impl PlaceListItem { pub fn new() -> Self { Object::builder().build() } } impl Default for PlaceListItem { fn default() -> Self { Self::new() } } pub mod imp { use std::cell::RefCell; use gdk::glib::Properties; use gdk::glib::prelude::ObjectExt; use gdk::glib::subclass::Signal; use glib::subclass::InitializingObject; use gtk::CompositeTemplate; use gtk::glib; use gtk::subclass::prelude::*; use once_cell::sync::Lazy; use crate::backend::Place; use crate::gui::utility::Utility; #[derive(CompositeTemplate, Default, Properties)] #[template(resource = "/ui/place_list_item.ui")] #[properties(wrapper_type = super::PlaceListItem)] pub struct PlaceListItem { #[property(get, set)] place: RefCell>, } #[gtk::template_callbacks] impl PlaceListItem { #[template_callback] fn handle_pressed(&self) { self.obj().emit_by_name::<()>("pressed", &[]); } } #[glib::object_subclass] impl ObjectSubclass for PlaceListItem { const NAME: &'static str = "DBPlaceListItem"; type Type = super::PlaceListItem; type ParentType = gtk::Box; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); Self::bind_template_callbacks(klass); Utility::bind_template_callbacks(klass); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[glib::derived_properties] impl ObjectImpl for PlaceListItem { fn signals() -> &'static [Signal] { static SIGNALS: Lazy> = Lazy::new(|| -> Vec { vec![Signal::builder("pressed").build()] }); SIGNALS.as_ref() } } impl WidgetImpl for PlaceListItem {} impl BoxImpl for PlaceListItem {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/preferences_dialog.rs000066400000000000000000000066241517666454200272200ustar00rootroot00000000000000use gdk::glib::Object; gtk::glib::wrapper! { pub struct PreferencesDialog(ObjectSubclass) @extends libadwaita::PreferencesDialog, libadwaita::Dialog, gtk::Widget, @implements gtk::gio::ActionGroup, gtk::gio::ActionMap, gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Native, gtk::Root, gtk::ShortcutManager; } impl Default for PreferencesDialog { fn default() -> Self { Self::new() } } impl PreferencesDialog { pub fn new() -> Self { Object::builder().build() } } pub mod imp { use crate::config; use gdk::gio::Settings; use gdk::gio::SettingsBindFlags; use glib::subclass::InitializingObject; use gtk::CompositeTemplate; use gtk::glib; use gtk::prelude::*; use gtk::subclass::prelude::*; use libadwaita::subclass::prelude::AdwDialogImpl; use libadwaita::subclass::prelude::PreferencesDialogImpl; #[derive(CompositeTemplate)] #[template(resource = "/ui/preferences_dialog.ui")] pub struct PreferencesDialog { #[template_child] switch_delete_old: TemplateChild, #[template_child] spin_deletion_time: TemplateChild, settings: Settings, } #[gtk::template_callbacks] impl PreferencesDialog { fn init_settings(&self) { self.settings .bind("delete-old", &self.switch_delete_old.get(), "active") .flags(SettingsBindFlags::DEFAULT) .build(); self.settings .bind("delete-old", &self.spin_deletion_time.get(), "sensitive") .flags(SettingsBindFlags::DEFAULT) .build(); self.settings .bind("deletion-time", &self.spin_deletion_time.get(), "value") .flags(SettingsBindFlags::NO_SENSITIVITY) .build(); } #[template_callback] fn handle_deletion_time_output(&self, s: libadwaita::SpinRow) -> bool { // Translators: duration in hours, standalone in preferences, you might want to use a narrow no-breaking space (U+202F) in front of units s.set_text( &gettextrs::ngettext("{} h", "{} h", s.value() as u32) .replace("{}", &s.value().to_string()), ); true } } #[glib::object_subclass] impl ObjectSubclass for PreferencesDialog { const NAME: &'static str = "DBPreferencesDialog"; type Type = super::PreferencesDialog; type ParentType = libadwaita::PreferencesDialog; fn new() -> Self { Self { settings: Settings::new(config::BASE_ID), switch_delete_old: TemplateChild::default(), spin_deletion_time: TemplateChild::default(), } } fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); Self::bind_template_callbacks(klass); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } impl ObjectImpl for PreferencesDialog { fn constructed(&self) { self.parent_constructed(); self.init_settings(); } } impl WidgetImpl for PreferencesDialog {} impl PreferencesDialogImpl for PreferencesDialog {} impl AdwDialogImpl for PreferencesDialog {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/provider_list_item.rs000066400000000000000000000032621517666454200272760ustar00rootroot00000000000000use gdk::glib::Object; gtk::glib::wrapper! { pub struct ProviderListItem(ObjectSubclass) @extends gtk::Box, gtk::Widget, @implements gtk::gio::ActionGroup, gtk::gio::ActionMap, gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget; } impl ProviderListItem { pub fn new() -> Self { Object::builder().build() } } impl Default for ProviderListItem { fn default() -> Self { Self::new() } } pub mod imp { use std::cell::RefCell; use gdk::glib::Properties; use glib::subclass::InitializingObject; use gtk::CompositeTemplate; use gtk::glib; use gtk::prelude::ObjectExt; use gtk::subclass::prelude::*; use crate::backend::Provider; use crate::gui::utility::Utility; #[derive(CompositeTemplate, Default, Properties)] #[properties(wrapper_type = super::ProviderListItem)] #[template(resource = "/ui/provider_list_item.ui")] pub struct ProviderListItem { #[property(get, set)] provider: RefCell>, } #[glib::object_subclass] impl ObjectSubclass for ProviderListItem { const NAME: &'static str = "DBProviderListItem"; type Type = super::ProviderListItem; type ParentType = gtk::Box; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); Utility::bind_template_callbacks(klass); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[glib::derived_properties] impl ObjectImpl for ProviderListItem {} impl WidgetImpl for ProviderListItem {} impl BoxImpl for ProviderListItem {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/provider_popover.rs000066400000000000000000000226351517666454200270040ustar00rootroot00000000000000gtk::glib::wrapper! { pub struct ProviderPopover(ObjectSubclass) @extends gtk::Popover, gtk::Widget, @implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Native, gtk::ShortcutManager; } pub mod imp { use std::cell::RefCell; use gdk::gio::Settings; use gdk::glib::Properties; use gdk::glib::clone; use glib::subclass::InitializingObject; use gtk::AnyFilter; use gtk::CompositeTemplate; use gtk::Expression; use gtk::FilterListModel; use gtk::ListItem; use gtk::PropertyExpression; use gtk::SignalListItemFactory; use gtk::Widget; use gtk::glib; use gtk::prelude::*; use gtk::subclass::prelude::*; use crate::backend::Client; use crate::backend::Provider; use crate::config; use crate::gui::provider_list_item::ProviderListItem; use crate::gui::utility::Utility; #[derive(CompositeTemplate, Properties)] #[properties(wrapper_type = super::ProviderPopover)] #[template(resource = "/ui/provider_popover.ui")] pub struct ProviderPopover { #[template_child] list_providers: TemplateChild, #[template_child] entry_search: TemplateChild, #[property(get, set = Self::set_current_selection, nullable)] current_selection: RefCell>, settings: Settings, #[property(get, set = Self::set_client, nullable)] client: RefCell>, } impl Default for ProviderPopover { fn default() -> Self { Self { list_providers: Default::default(), entry_search: Default::default(), settings: Settings::new(config::BASE_ID), current_selection: RefCell::new(None), client: Default::default(), } } } #[gtk::template_callbacks] impl ProviderPopover { fn set_current_selection(&self, obj: Option) { if let Some(selection_model) = self.list_providers.model() { let selection_model = selection_model .downcast_ref::() .expect( "selection model of the provider selection has to be a single selection", ); let position = selection_model .iter::() .position(|entry| { let entry_provider = entry .ok() .and_then(|object| object.downcast::().ok()); match (entry_provider, obj.clone()) { (Some(a), Some(b)) => a.id() == b.id(), (_, _) => false, } }) .map(|position| position as u32) .unwrap_or(gtk::INVALID_LIST_POSITION); selection_model.set_selected(position); if let Some(item) = selection_model.selected_item() { let provider = item .downcast_ref::() .expect("selection has to be for a provider"); self.settings .set_string("search-provider", &provider.id()) .expect("Failed to set setting `search-provider`"); } } self.current_selection.replace(obj); } fn set_client(&self, obj: Option) { self.client.replace(obj.clone()); if let Some(obj) = &obj { self.setup_model(&self.obj()); self.obj().set_current_selection(obj.current_provider()); } } fn setup_model(&self, obj: &super::ProviderPopover) { let model = self .obj() .client() .expect("Client to be set up in ProviderPopover") .providers(); let filter_short = gtk::StringFilter::new(Some(PropertyExpression::new( Provider::static_type(), None::, "short-name", ))); let filter_long = gtk::StringFilter::new(Some(PropertyExpression::new( Provider::static_type(), None::, "name", ))); self.entry_search .bind_property("text", &filter_short, "search") .build(); self.entry_search .bind_property("text", &filter_long, "search") .build(); let filter = AnyFilter::new(); filter.append(filter_short); filter.append(filter_long); let filter_model = FilterListModel::new(Some(model), Some(filter)); let section_model = gtk::SortListModel::builder() .model(&filter_model) .incremental(true) .section_sorter(>k::StringSorter::new(Some(gtk::PropertyExpression::new( Provider::static_type(), None::, "regional-group", )))) .sorter(>k::StringSorter::new(Some(gtk::PropertyExpression::new( Provider::static_type(), None::, "name", )))) .build(); let selection_model = gtk::SingleSelection::builder() .autoselect(false) .model(§ion_model) .build(); self.list_providers.get().set_model(Some(&selection_model)); let factory = SignalListItemFactory::new(); factory.connect_setup(move |_, list_item| { let provider_item = ProviderListItem::new(); let list_item = list_item .downcast_ref::() .expect("The factory item to be a `ListItem`"); list_item.set_child(Some(&provider_item)); list_item.property_expression("item").bind( &provider_item, "provider", Widget::NONE, ); }); self.list_providers.set_factory(Some(&factory)); let header_factory = SignalListItemFactory::new(); header_factory.connect_bind(move |_, list_item| { if let Some(list_item) = list_item.downcast_ref::() { let label = list_item .item() .and_then(|object| object.downcast::().ok()) .map(|provider| provider.property::("regional-group")) .filter(|string| !string.is_empty()) .as_deref() .map(|label| { gtk::Label::builder() .label(label) .xalign(0.0) .css_classes(["provider-region", "dim-label"]) .build() }); list_item.set_child(label.as_ref()); } }); self.list_providers .set_header_factory(Some(&header_factory)); selection_model .bind_property("selected-item", self.obj().as_ref(), "current-selection") .sync_create() .build(); selection_model.connect_selected_item_notify(clone!( #[strong] obj, move |_| { obj.popdown(); } )); } } #[glib::object_subclass] impl ObjectSubclass for ProviderPopover { const NAME: &'static str = "DBProviderPopover"; type Type = super::ProviderPopover; type ParentType = gtk::Popover; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); Self::bind_template_callbacks(klass); Utility::bind_template_callbacks(klass); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[glib::derived_properties] impl ObjectImpl for ProviderPopover { fn constructed(&self) { let obj = self.obj(); self.parent_constructed(); self.entry_search.set_key_capture_widget(Some(obj.as_ref())); let escape_controller = gtk::EventControllerKey::new(); escape_controller.connect_key_pressed(clone!( #[weak(rename_to = popover)] obj, #[upgrade_or] glib::Propagation::Proceed, move |_, key, _, _| { if key == gdk::Key::Escape { popover.popdown(); } glib::Propagation::Proceed } )); self.entry_search.add_controller(escape_controller); let entry_search = self.entry_search.get(); obj.connect_closed(clone!( #[weak] entry_search, move |_| { entry_search.set_text(""); } )); } } impl WidgetImpl for ProviderPopover {} impl PopoverImpl for ProviderPopover {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/refresh_button.rs000066400000000000000000000051501517666454200264220ustar00rootroot00000000000000// Stack not subclassable, therefore have the stack as a child of the widget. gtk::glib::wrapper! { pub struct RefreshButton(ObjectSubclass) @extends libadwaita::Bin, gtk::Widget, @implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget; } pub mod imp { use std::marker::PhantomData; use gdk::glib::Properties; use gdk::glib::subclass::InitializingObject; use gdk::glib::subclass::Signal; use gtk::CompositeTemplate; use gtk::glib; use gtk::prelude::*; use gtk::subclass::prelude::*; use gtk::template_callbacks; use libadwaita::subclass::prelude::BinImpl; use once_cell::sync::Lazy; #[derive(CompositeTemplate, Default, Properties)] #[properties(wrapper_type = super::RefreshButton)] #[template(resource = "/ui/refresh_button.ui")] pub struct RefreshButton { #[template_child] stack: TemplateChild, #[template_child] page_button: TemplateChild, #[template_child] page_spinner: TemplateChild, #[property(set = Self::set_refreshing)] refreshing: PhantomData, } #[template_callbacks] impl RefreshButton { #[template_callback] fn handle_refresh_clicked(&self) { self.obj().emit_by_name::<()>("clicked", &[]); } fn set_refreshing(&self, refreshing: bool) { if refreshing { self.stack.set_visible_child(&self.page_spinner.child()); } else { self.stack.set_visible_child(&self.page_button.child()); } } } #[glib::object_subclass] impl ObjectSubclass for RefreshButton { const NAME: &'static str = "DBRefreshButton"; type Type = super::RefreshButton; type ParentType = libadwaita::Bin; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); Self::bind_template_callbacks(klass); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[glib::derived_properties] impl ObjectImpl for RefreshButton { fn constructed(&self) { self.parent_constructed(); self.stack.set_visible_child(&self.page_button.child()); } fn signals() -> &'static [Signal] { static SIGNALS: Lazy> = Lazy::new(|| vec![Signal::builder("clicked").build()]); SIGNALS.as_ref() } } impl BinImpl for RefreshButton {} impl WidgetImpl for RefreshButton {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/remark_item.rs000066400000000000000000000034101517666454200256650ustar00rootroot00000000000000use gdk::glib::Object; use crate::backend::Remark; gtk::glib::wrapper! { pub struct RemarkItem(ObjectSubclass) @extends gtk::Box, gtk::Widget, @implements gtk::gio::ActionGroup, gtk::gio::ActionMap, gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget; } impl RemarkItem { pub fn new(remark: &Remark) -> Self { Object::builder::().property("remark", remark).build() } } pub mod imp { use std::cell::RefCell; use gdk::glib::Properties; use glib::subclass::InitializingObject; use gtk::CompositeTemplate; use gtk::DirectionType; use gtk::glib; use gtk::prelude::*; use gtk::subclass::prelude::*; use crate::backend::Remark; use crate::gui::utility::Utility; #[derive(CompositeTemplate, Default, Properties)] #[properties(wrapper_type = super::RemarkItem)] #[template(resource = "/ui/remark_item.ui")] pub struct RemarkItem { #[property(get, set)] remark: RefCell>, } #[glib::object_subclass] impl ObjectSubclass for RemarkItem { const NAME: &'static str = "DBRemarkItem"; type Type = super::RemarkItem; type ParentType = gtk::Box; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); WidgetClassExt::set_css_name(klass, "AnnouncementItem"); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[glib::derived_properties] impl ObjectImpl for RemarkItem {} impl WidgetImpl for RemarkItem { fn focus(&self, direction: DirectionType) -> bool { Utility::move_focus_within_container(self, direction) } } impl BoxImpl for RemarkItem {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/search_options_button.rs000066400000000000000000000164341517666454200300130ustar00rootroot00000000000000gtk::glib::wrapper! { pub struct SearchOptionsButton(ObjectSubclass) @extends gtk::Button, gtk::Widget, @implements gtk::gio::ActionGroup, gtk::gio::ActionMap, gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Actionable; } pub mod imp { use std::collections::HashMap; use std::marker::PhantomData; use gdk::gio::Settings; use gdk::glib::Properties; use gdk::glib::clone; use glib::subclass::InitializingObject; use gtk::CompositeTemplate; use gtk::glib; use gtk::prelude::*; use gtk::subclass::prelude::*; use libadwaita::prelude::AdwDialogExt; use crate::config; use crate::gui::search_options_dialog::SearchOptionsDialog; #[derive(CompositeTemplate, Properties)] #[properties(wrapper_type = super::SearchOptionsButton)] #[template(resource = "/ui/search_options_button.ui")] pub struct SearchOptionsButton { settings: Settings, #[property(get = Self::extra_label)] extra_label: PhantomData, } impl Default for SearchOptionsButton { fn default() -> Self { Self { settings: Settings::new(config::BASE_ID), extra_label: Default::default(), } } } #[glib::object_subclass] impl ObjectSubclass for SearchOptionsButton { const NAME: &'static str = "DBSearchOptionsButton"; type Type = super::SearchOptionsButton; type ParentType = gtk::Button; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); Self::bind_template_callbacks(klass); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[gtk::template_callbacks] impl SearchOptionsButton { fn extra_label(&self) -> String { let first_class = self.settings.boolean("first-class"); let first_class_string = if first_class { Some(gettextrs::gettext("1st class")) } else { Some(gettextrs::gettext("2nd class")) }; let bahncard = self.settings.enum_("bahncard"); let bahncard_string = if bahncard == 0 { None } else { Some( Self::bahncard( bahncard .try_into() .expect("bahncard enum to fit into usize"), ) .to_string(), ) }; let include_national_express = self.settings.boolean("include-national-express"); let include_regional = self.settings.boolean("include-regional"); let include_suburban = self.settings.boolean("include-suburban"); let include_bus = self.settings.boolean("include-bus"); let include_ferry = self.settings.boolean("include-ferry"); let include_subway = self.settings.boolean("include-subway"); let include_tram = self.settings.boolean("include-tram"); let include_cablecar = self.settings.boolean("include-cablecar"); let include_taxi = self.settings.boolean("include-taxi"); let regional = [ include_regional, include_suburban, include_bus, include_ferry, include_subway, include_tram, include_cablecar, include_taxi, ]; let ic = [include_national_express]; let types_string = if regional.iter().all(|b| *b) && ic.iter().all(|b| *b) { None } else if regional.iter().all(|b| *b) && ic.iter().all(|b| !*b) { Some(gettextrs::gettext("Regional Only")) // TODO: Germany specific, only display for networks there } else { Some(gettextrs::gettext("Selected Modes of Transport")) }; let bike_accessible = self.settings.boolean("bike-accessible"); let bike_accessible_string = if bike_accessible { Some(gettextrs::gettext("Bike Accessible")) } else { None }; let direct_only = self.settings.boolean("direct-only"); let direct_only_string = if direct_only { Some(gettextrs::gettext("Direct Connection")) } else { None }; [ first_class_string, bahncard_string, types_string, bike_accessible_string, direct_only_string, ] .into_iter() .flatten() .reduce(|s1, s2| format!("{s1}\u{00A0}\u{00B7} {s2}")) // non-breaking space and centered dot. .expect("Extra Label to have at least one setting set (first or second class)") } fn window(&self) -> crate::gui::window::Window { self.obj() .root() .expect("`SearchPage` to have a root") .dynamic_cast::() .expect("Root of `SearchPage` to be a `Window`.") } #[template_callback] fn handle_clicked(&self, _: gtk::Button) { let settings = SearchOptionsDialog::new(); settings.present(Some(&self.window())); } fn bahncards() -> HashMap { HashMap::from([ (0, gettextrs::gettext("None")), (1, gettextrs::gettext("BahnCard 25, 1st class")), (2, gettextrs::gettext("BahnCard 25, 2nd class")), (3, gettextrs::gettext("BahnCard 50, 1st class")), (4, gettextrs::gettext("BahnCard 50, 2nd class")), (9, gettextrs::gettext("A – VORTEILScard (with RAILPLUS)")), (10, gettextrs::gettext("CH – HalbtaxAbo (with RAILPLUS)")), (11, gettextrs::gettext("CH – HalbtaxAbo (without RAILPLUS)")), ( 12, gettextrs::gettext("NL – Voordeelurenabo (with RAILPLUS)"), ), ( 13, gettextrs::gettext("NL – Voordeelurenabo (without RAILPLUS)"), ), (14, gettextrs::gettext("SH-Card")), (15, gettextrs::gettext("CH – General-Abonnement")), ]) } fn bahncard(number: usize) -> String { Self::bahncards() .get(&number) .unwrap_or(&gettextrs::gettext("Unknown")) .clone() } } #[glib::derived_properties] impl ObjectImpl for SearchOptionsButton { fn constructed(&self) { self.parent_constructed(); let obj = self.obj(); // XXX: Maybe only listen for interesting things? self.settings.connect_changed( None, clone!( #[weak] obj, move |_, _| { obj.notify("extra-label"); } ), ); } } impl WidgetImpl for SearchOptionsButton {} impl ButtonImpl for SearchOptionsButton {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/search_options_dialog.rs000066400000000000000000000262011517666454200277300ustar00rootroot00000000000000use gdk::glib::Object; gtk::glib::wrapper! { pub struct SearchOptionsDialog(ObjectSubclass) @extends libadwaita::PreferencesDialog, libadwaita::Dialog, gtk::Widget, @implements gtk::gio::ActionGroup, gtk::gio::ActionMap, gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Native, gtk::Root, gtk::ShortcutManager; } impl Default for SearchOptionsDialog { fn default() -> Self { Self::new() } } impl SearchOptionsDialog { pub fn new() -> Self { Object::builder().build() } } pub mod imp { use crate::backend::DiscountCard; use crate::config; use gdk::gio::Settings; use gdk::gio::SettingsBindFlags; use gdk::glib::clone; use glib::subclass::InitializingObject; use gtk::CompositeTemplate; use gtk::Expression; use gtk::PropertyExpression; use gtk::glib; use gtk::prelude::*; use gtk::subclass::prelude::*; use libadwaita::prelude::ComboRowExt; use libadwaita::subclass::prelude::AdwDialogImpl; use libadwaita::subclass::prelude::PreferencesDialogImpl; #[derive(CompositeTemplate)] #[template(resource = "/ui/search_options_dialog.ui")] pub struct SearchOptionsDialog { #[template_child] dropdown_bahncard: TemplateChild, #[template_child] toggle_group_class: TemplateChild, #[template_child] switch_bike_accessible: TemplateChild, #[template_child] spin_transfer_time: TemplateChild, #[template_child] switch_direct_only: TemplateChild, #[template_child] toggle_national_express: TemplateChild, #[template_child] toggle_regional: TemplateChild, #[template_child] toggle_suburban: TemplateChild, #[template_child] toggle_bus: TemplateChild, #[template_child] toggle_ferry: TemplateChild, #[template_child] toggle_subway: TemplateChild, #[template_child] toggle_tram: TemplateChild, #[template_child] toggle_cablecar: TemplateChild, #[template_child] toggle_taxi: TemplateChild, settings: Settings, } #[gtk::template_callbacks] impl SearchOptionsDialog { fn init_settings(&self) { if self.settings.boolean("first-class") { self.toggle_group_class.set_active_name(Some("first")); } else { self.toggle_group_class.set_active_name(Some("second")); } let model_bahncard = gdk::gio::ListStore::new::(); if let Some(settings_schema) = self.settings.settings_schema() { let bahncard_range = settings_schema.key("bahncard").range(); assert!(bahncard_range.is_container()); assert_eq!( bahncard_range.child_value(0).get::().expect(""), "enum" ); for card_id in bahncard_range .child_value(1) .as_variant() .expect("bahncard's enum's values to be boxed") .array_iter_str() .expect("bahncard's enum's values to be of string type") { model_bahncard.append(&DiscountCard::new(card_id)) } } self.dropdown_bahncard .get() .set_model(Some(&model_bahncard)); self.dropdown_bahncard .set_expression(Some(PropertyExpression::new( DiscountCard::static_type(), None::, "name", ))); self.settings .bind("bahncard", &self.dropdown_bahncard.get(), "selected") .mapping(clone!( #[weak] model_bahncard, #[upgrade_or_panic] move |variant, value_type| { assert_eq!(value_type, glib::types::Type::U32); variant.str().map(|card_id| { let position = model_bahncard.iter::().position(|entry| { card_id == entry .expect("our model to only contain GObjects") .downcast::() .expect("our model to only contain DiscountCards") .id() }); assert!(position.is_some()); (position.unwrap() as u32).to_value() }) } )) .set_mapping(clone!( #[weak] model_bahncard, #[upgrade_or_panic] move |value, variant_type| { assert_eq!(variant_type.as_str(), "s"); match value.get::() { Ok(position) => glib::variant::Variant::parse( Some(&variant_type), &format!( "'{}'", model_bahncard .item(position) .and_downcast::()? .id() ), ) .ok(), _ => None, } } )) .flags(SettingsBindFlags::DEFAULT) .build(); self.settings .bind( "bike-accessible", &self.switch_bike_accessible.get(), "active", ) .flags(SettingsBindFlags::DEFAULT) .build(); self.settings .bind("transfer-time", &self.spin_transfer_time.get(), "value") .flags(SettingsBindFlags::DEFAULT) .build(); self.settings .bind("direct-only", &self.switch_direct_only.get(), "active") .flags(SettingsBindFlags::DEFAULT) .build(); self.settings .bind( "include-national-express", &self.toggle_national_express.get(), "active", ) .flags(SettingsBindFlags::DEFAULT) .build(); self.settings .bind("include-regional", &self.toggle_regional.get(), "active") .flags(SettingsBindFlags::DEFAULT) .build(); self.settings .bind("include-suburban", &self.toggle_suburban.get(), "active") .flags(SettingsBindFlags::DEFAULT) .build(); self.settings .bind("include-bus", &self.toggle_bus.get(), "active") .flags(SettingsBindFlags::DEFAULT) .build(); self.settings .bind("include-ferry", &self.toggle_ferry.get(), "active") .flags(SettingsBindFlags::DEFAULT) .build(); self.settings .bind("include-subway", &self.toggle_subway.get(), "active") .flags(SettingsBindFlags::DEFAULT) .build(); self.settings .bind("include-tram", &self.toggle_tram.get(), "active") .flags(SettingsBindFlags::DEFAULT) .build(); self.settings .bind("include-subway", &self.toggle_subway.get(), "active") .flags(SettingsBindFlags::DEFAULT) .build(); self.settings .bind("include-tram", &self.toggle_tram.get(), "active") .flags(SettingsBindFlags::DEFAULT) .build(); self.settings .bind("include-cablecar", &self.toggle_cablecar.get(), "active") .flags(SettingsBindFlags::DEFAULT) .build(); self.settings .bind("include-taxi", &self.toggle_taxi.get(), "active") .flags(SettingsBindFlags::DEFAULT) .build(); } #[template_callback] fn handle_first_class(&self) { let first = self.toggle_group_class.active_name().unwrap() == "first"; self.settings .set_boolean("first-class", first) .expect("Failed to set first-class value"); } #[template_callback] fn handle_transfer_time_output(&self, s: libadwaita::SpinRow) -> bool { // Translators: you might want to use a narrow no-breaking space (U+202F) in front of units s.set_text(&gettextrs::gettext("{} min").replace("{}", &s.value().to_string())); true } } #[glib::object_subclass] impl ObjectSubclass for SearchOptionsDialog { const NAME: &'static str = "DBSearchOptionsDialog"; type Type = super::SearchOptionsDialog; type ParentType = libadwaita::PreferencesDialog; fn new() -> Self { Self { settings: Settings::new(config::BASE_ID), dropdown_bahncard: TemplateChild::default(), switch_bike_accessible: TemplateChild::default(), spin_transfer_time: TemplateChild::default(), switch_direct_only: TemplateChild::default(), toggle_group_class: TemplateChild::default(), toggle_national_express: TemplateChild::default(), toggle_regional: TemplateChild::default(), toggle_suburban: TemplateChild::default(), toggle_bus: TemplateChild::default(), toggle_ferry: TemplateChild::default(), toggle_subway: TemplateChild::default(), toggle_tram: TemplateChild::default(), toggle_cablecar: TemplateChild::default(), toggle_taxi: TemplateChild::default(), } } fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); Self::bind_template_callbacks(klass); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } impl ObjectImpl for SearchOptionsDialog { fn constructed(&self) { self.parent_constructed(); self.init_settings(); } } impl WidgetImpl for SearchOptionsDialog {} impl PreferencesDialogImpl for SearchOptionsDialog {} impl AdwDialogImpl for SearchOptionsDialog {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/search_page.rs000066400000000000000000000350621517666454200256370ustar00rootroot00000000000000use gdk::subclass::prelude::ObjectSubclassIsExt; use crate::backend::Journey; gtk::glib::wrapper! { pub struct SearchPage(ObjectSubclass) @extends gtk::Box, gtk::Widget, @implements gtk::gio::ActionGroup, gtk::gio::ActionMap, gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget; } impl SearchPage { pub fn add_journey_store(&self, journey: Journey) { self.imp().add_journey_store(journey); } pub fn remove_journey_store(&self, journey: Journey) { self.imp().remove_journey_store(journey); } pub fn add_search_store(&self, origin: String, destination: String) { self.imp().add_search_store(origin, destination); } pub fn remove_search_store(&self, origin: String, destination: String) { self.imp().remove_search_store(origin, destination); } } pub mod imp { use chrono::Duration; use gdk::gio::Settings; use gdk::glib::MainContext; use gdk::glib::Properties; use gdk::glib::clone; use gdk::glib::subclass::Signal; use glib::subclass::InitializingObject; use gtk::CompositeTemplate; use gtk::ListBoxRow; use gtk::glib; use gtk::prelude::*; use gtk::subclass::prelude::*; use once_cell::sync::Lazy; use rcore::JourneysOptions; use rcore::LoyaltyCard; use rcore::TariffClass; use rcore::TransferOptions; use std::cell::Cell; use std::cell::RefCell; use crate::backend::Client; use crate::backend::Journey; use crate::backend::JourneysResult; use crate::backend::Place; use crate::backend::TimeType; use crate::config; use crate::gui::date_time_picker::DateTimePicker; use crate::gui::journey_store_item::JourneyStoreItem; use crate::gui::search_store_item::SearchStoreItem; use crate::gui::station_entry::StationEntry; use crate::gui::utility::Utility; use crate::gui::window::Window; #[derive(CompositeTemplate, Properties)] #[properties(wrapper_type = super::SearchPage)] #[template(resource = "/ui/search_page.ui")] pub struct SearchPage { #[template_child] in_from: TemplateChild, #[template_child] in_to: TemplateChild, #[template_child] pick_date_time: TemplateChild, #[template_child] btn_search: TemplateChild, #[template_child] stack_search_btn: TemplateChild, #[template_child] box_journeys: TemplateChild, #[template_child] box_searches: TemplateChild, settings: Settings, #[property(get, set)] client: RefCell>, #[property(get, set)] search_when_ready: Cell, #[property(get, set)] searching: Cell, } #[gtk::template_callbacks] impl SearchPage { #[template_callback] fn handle_journeys_row_activated(&self, row: ListBoxRow) { self.obj().emit_by_name::<()>( "details", &[&row .first_child() .expect("Activated row to have a child") .property::("journey")], ); } #[template_callback] fn handle_searches_row_activated(&self, row: ListBoxRow) { let search = &row.first_child().expect("Activated row to have a child"); self.in_from.set_input(search.property::("origin")); self.in_to .set_input(search.property::("destination")); self.obj().set_search_when_ready(true); } fn update_search_button(&self) { let from_set = self.in_from.property::("set"); let to_set = self.in_to.property::("set"); let searching = self.searching.get(); let tooltip = match (from_set, to_set, searching) { (false, false, _) => Some(gettextrs::gettext("Start and destination are missing")), (false, true, _) => Some(gettextrs::gettext("Start is missing")), (true, false, _) => Some(gettextrs::gettext("Destination is missing")), (true, true, true) => Some(gettextrs::gettext("Search ongoing")), (_, _, _) => None, }; self.btn_search.set_tooltip_text(tooltip.as_deref()); if self.obj().searching() { self.stack_search_btn.set_visible_child_name("spinner"); } else { self.stack_search_btn.set_visible_child_name("label"); } } fn setup_search_when_ready(&self) { let obj = self.obj(); self.btn_search.connect_sensitive_notify(clone!( #[weak] obj, move |_| { let s = obj.imp(); if s.btn_search.is_sensitive() && obj.search_when_ready() { s.handle_search(); } // XXX: Not the best place to unset search when ready. It would be better to do that when the station entry changed manually, but that will not work as it also changes when directly set. obj.set_search_when_ready(false); } )); } pub(super) fn add_journey_store(&self, journey: Journey) { let item = JourneyStoreItem::new(journey); self.box_journeys.append(&item); self.box_journeys.set_visible(true); } pub(super) fn remove_journey_store(&self, journey: Journey) { let mut child = self.box_journeys.first_child(); while let Some(c) = child { if c.first_child() .expect("ListBoxRow to have a JourneyStoreItem child") .property::("journey") .journey() == journey.journey() { self.box_journeys.remove(&c); } child = c.next_sibling(); } if self.box_journeys.first_child().is_none() { self.box_journeys.set_visible(false); } } pub(super) fn add_search_store(&self, origin: String, destination: String) { let item = SearchStoreItem::new(origin, destination); self.box_searches.append(&item); self.box_searches.set_visible(true); } pub(super) fn remove_search_store(&self, origin: String, destination: String) { let mut child = self.box_searches.first_child(); while let Some(c) = child { let s = c.first_child().expect("ListBoxRow to have a child"); if s.property::>("origin") == Some(origin.clone()) && s.property::>("destination") == Some(destination.clone()) { self.box_searches.remove(&c); } child = c.next_sibling(); } if self.box_searches.first_child().is_none() { self.box_searches.set_visible(false); } } #[template_callback] fn handle_swap(&self) { let from = self.in_from.input(); let to = self.in_to.input(); self.in_from.set_input(to); self.in_to.set_input(from); } #[template_callback] fn handle_search(&self) { let obj = self.obj(); let from = self.in_from.property::("place"); let to = self.in_to.property::("place"); let time = self .pick_date_time .get() .get() .with_timezone(&chrono_tz::UTC); let time_type = self.pick_date_time.time_type(); let main_context = MainContext::default(); let window = self.obj().root().and_downcast::().expect( "search page must be mapped and realised when a template callback is called", ); main_context.spawn_local(clone!( #[strong] from, #[strong] to, #[strong] obj, #[strong(rename_to = settings)] self.settings, #[strong] window, async move { obj.set_searching(true); let journeys = obj .property::("client") .journeys( from, to, time_type, JourneysOptions { departure: if time_type == TimeType::Departure { Some(time) } else { None }, arrival: if time_type == TimeType::Arrival { Some(time) } else { None }, language: Some(Utility::language_code()), stopovers: true, loyalty_card: LoyaltyCard::from_id( settings .enum_("bahncard") .try_into() .expect("Failed to convert setting `bahncard` to u8"), ), bike_friendly: settings.boolean("bike-accessible"), transfers: if settings.boolean("direct-only") { TransferOptions::Limited(0) } else { TransferOptions::Unlimited }, // Value clamped in the settings; default should never happen. transfer_time: Duration::try_minutes( settings.int("transfer-time").into(), ) .unwrap_or_default(), tariff_class: if settings.boolean("first-class") { TariffClass::First } else { TariffClass::Second }, products: Utility::products_selection_from_setting(&settings), ..Default::default() }, ) .await; obj.set_searching(false); if journeys.is_err() { window.display_error_toast(journeys.err().unwrap()); return; } obj.emit_by_name::<()>("search", &[&journeys.expect("Failed to get journeys")]); } )); } } #[glib::object_subclass] impl ObjectSubclass for SearchPage { const NAME: &'static str = "DBSearchPage"; type Type = super::SearchPage; type ParentType = gtk::Box; fn new() -> Self { Self { settings: Settings::new(config::BASE_ID), in_from: Default::default(), in_to: Default::default(), pick_date_time: Default::default(), btn_search: Default::default(), stack_search_btn: Default::default(), box_journeys: Default::default(), box_searches: Default::default(), client: Default::default(), search_when_ready: Default::default(), searching: Default::default(), } } fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); Self::bind_template_callbacks(klass); Utility::bind_template_callbacks(klass); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[glib::derived_properties] impl ObjectImpl for SearchPage { fn constructed(&self) { self.parent_constructed(); self.setup_search_when_ready(); self.in_from .set_input(self.settings.string("search-from").to_string()); self.in_to .set_input(self.settings.string("search-to").to_string()); self.update_search_button(); self.in_from.connect_notify_local( Some("set"), clone!( #[weak(rename_to = search_page)] self, move |_, _| { search_page.update_search_button(); } ), ); self.in_to.connect_notify_local( Some("set"), clone!( #[weak(rename_to = search_page)] self, move |_, _| { search_page.update_search_button(); } ), ); self.obj().connect_notify_local( Some("searching"), clone!( #[weak(rename_to = search_page)] self, move |_, _| { search_page.update_search_button(); } ), ); } fn signals() -> &'static [Signal] { static SIGNALS: Lazy> = Lazy::new(|| { vec![ Signal::builder("search") .param_types([JourneysResult::static_type()]) .build(), Signal::builder("details") .param_types([Journey::static_type()]) .build(), ] }); SIGNALS.as_ref() } } impl WidgetImpl for SearchPage { fn unmap(&self) { self.parent_unmap(); self.settings .set_string("search-from", &self.in_from.input()) .expect("Failed to save search-from"); self.settings .set_string("search-to", &self.in_to.input()) .expect("Failed to save search-to"); } } impl BoxImpl for SearchPage {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/search_store_item.rs000066400000000000000000000032401517666454200270660ustar00rootroot00000000000000use gdk::glib::Object; gtk::glib::wrapper! { pub struct SearchStoreItem(ObjectSubclass) @extends gtk::Box, gtk::Widget, @implements gtk::gio::ActionGroup, gtk::gio::ActionMap, gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget; } impl SearchStoreItem { pub fn new(origin: String, destination: String) -> Self { Object::builder::() .property("origin", &origin) .property("destination", &destination) .build() } } pub mod imp { use std::cell::RefCell; use gdk::glib::Properties; use glib::subclass::InitializingObject; use gtk::CompositeTemplate; use gtk::glib; use gtk::prelude::*; use gtk::subclass::prelude::*; #[derive(CompositeTemplate, Default, Properties)] #[properties(wrapper_type = super::SearchStoreItem)] #[template(resource = "/ui/search_store_item.ui")] pub struct SearchStoreItem { #[property(get, set)] origin: RefCell>, #[property(get, set)] destination: RefCell>, } #[glib::object_subclass] impl ObjectSubclass for SearchStoreItem { const NAME: &'static str = "DBSearchStoreItem"; type Type = super::SearchStoreItem; type ParentType = gtk::Box; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[glib::derived_properties] impl ObjectImpl for SearchStoreItem {} impl WidgetImpl for SearchStoreItem {} impl BoxImpl for SearchStoreItem {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/station_entry.rs000066400000000000000000000426451517666454200263050ustar00rootroot00000000000000use libadwaita::prelude::EditableExt; use crate::backend::Place; gtk::glib::wrapper! { pub struct StationEntry(ObjectSubclass) @extends libadwaita::EntryRow, libadwaita::PreferencesRow, gtk::ListBoxRow, gtk::Widget, @implements gtk::Accessible, gtk::Actionable, gtk::Buildable, gtk::ConstraintTarget, gtk::Editable; } impl StationEntry { pub fn set_input(&self, input: String) { self.set_text(&input); self.set_place(None::); } pub fn input(&self) -> String { self.text().to_string() } } pub mod imp { use std::cell::{Cell, RefCell}; use std::time::Duration; use gdk::glib::subclass::{InitializingObject, Signal}; use gdk::glib::{MainContext, Properties}; use gdk::glib::{Propagation, clone}; use gdk::prelude::ObjectExt; use gdk::{Key, ModifierType, gio}; use gtk::subclass::prelude::*; use gtk::{CompositeTemplate, Popover}; use gtk::{ INVALID_LIST_POSITION, ListItem, ListScrollFlags, SignalListItemFactory, SingleSelection, Widget, prelude::*, }; use gtk::{gio::ListStore, glib}; use libadwaita::subclass::prelude::{EntryRowImpl, PreferencesRowImpl}; use once_cell::sync::Lazy; use rcore::LocationsOptions; use crate::backend::{Client, Place, RequestLimiter}; use crate::gui::place_list_item::PlaceListItem; const REQUEST_DURATION: Duration = Duration::from_secs(1); const MIN_REQUEST_LEN: usize = 3; #[derive(CompositeTemplate, Properties)] #[template(resource = "/ui/station_entry.ui")] #[properties(wrapper_type=super::StationEntry)] pub struct StationEntry { #[template_child] popover: TemplateChild, #[template_child] list_completions: TemplateChild, #[property(get)] pub(super) completions: RefCell, selection: RefCell, #[property(get, set = Self::set_client, nullable)] client: RefCell>, #[property(get, set = Self::set_place, nullable)] #[property(name = "set", type = bool, get = |s: &Self| s.place.borrow().is_some())] place: RefCell>, #[property(get, set)] title: RefCell, request_limiter: RequestLimiter, #[property(get, set)] show_swap_button: Cell, } impl Default for StationEntry { fn default() -> Self { StationEntry { popover: Default::default(), list_completions: Default::default(), completions: RefCell::new(ListStore::new::()), selection: RefCell::new(SingleSelection::builder().autoselect(false).build()), client: Default::default(), place: Default::default(), title: Default::default(), show_swap_button: Default::default(), request_limiter: RequestLimiter::new(REQUEST_DURATION), } } } #[gtk::template_callbacks] impl StationEntry { fn set_client(&self, client: Option) { let obj = self.obj(); if let Some(client) = &client { client.connect_local( "provider-changed", true, clone!( #[weak] obj, #[upgrade_or_default] move |_| { log::trace!( "Station-entry got provider change from hafas_client. Resetting" ); obj.set_place(None::); obj.imp().on_changed(); None } ), ); } self.client.replace(client); } fn set_place(&self, place: Option) { self.place.replace(place.clone()); if let Some(place) = &place { let obj = self.obj(); // When something is selected, set the text of the input and clear all completion suggestions. let name = place.name(); if obj.text() != name { obj.set_text(&name); obj.set_position(-1); } self.completions.borrow().remove_all(); } } #[template_callback] fn handle_swapped_clicked(&self) { self.obj().emit_by_name::<()>("swap", &[]); } #[template_callback] fn handle_activated(&self) { if let Some(selected) = self .selection .borrow() .selected_item() .and_downcast::() { self.obj().set_place(Some(&selected)); } } #[template_callback] fn handle_completion_activate(&self, pos: u32) { if let Some(selected) = self.completions.borrow().item(pos).and_downcast::() { self.obj().set_place(Some(&selected)) } } // Adapted from . #[template_callback] fn handle_key_pressed(&self, key: Key, _: u32, modifier: ModifierType) -> Propagation { let obj = self.obj(); if modifier.intersects( gdk::ModifierType::SHIFT_MASK .union(gdk::ModifierType::ALT_MASK) .union(gdk::ModifierType::CONTROL_MASK), ) { return Propagation::Proceed; } if key != gdk::Key::Up && key != gdk::Key::KP_Up && key != gdk::Key::Down && key != gdk::Key::KP_Down { return Propagation::Proceed; } let selection = self.selection.borrow(); let model = self.completions.borrow(); let selected = selection.selected(); let selected = if selected == INVALID_LIST_POSITION { None } else { Some(selected) }; let matches = model.n_items(); if matches == 0 { return Propagation::Stop; } let new_selected = match (selected, key) { (None, gdk::Key::Up) | (None, gdk::Key::KP_Up) => Some(matches - 1), (Some(0), gdk::Key::Up) | (Some(0), gdk::Key::KP_Up) => None, (Some(s), gdk::Key::Up) | (Some(s), gdk::Key::KP_Up) => Some(s - 1), (None, gdk::Key::Down) | (None, gdk::Key::KP_Down) => Some(0), (Some(s), gdk::Key::Down) | (Some(s), gdk::Key::KP_Down) if s == matches - 1 => { None } (Some(s), gdk::Key::Down) | (Some(s), gdk::Key::KP_Down) => Some(s + 1), _ => { // All other cases should be impossible. log::error!( "Station entry keyboard selection match incomplete. This should be impossible." ); None } }; if let Some(new_selected_item_name) = new_selected .and_then(|i| model.item(i)) .and_downcast_ref::() .map(|p| p.name()) { // Translators: Text that will be announced by the screen reader when a suggestion was selected. let format = gettextrs::gettext("Suggestion {} selected") .replace("{}", &new_selected_item_name); obj.announce(&format, gtk::AccessibleAnnouncementPriority::Low); } else { // Translators: Text that will be announced by the screen reader when no selection was selected. let format = gettextrs::gettext("No suggestion selected"); obj.announce(&format, gtk::AccessibleAnnouncementPriority::Low); } selection.set_selected(new_selected.unwrap_or(INVALID_LIST_POSITION)); self.list_completions.scroll_to( new_selected.unwrap_or_default(), ListScrollFlags::NONE, None, ); Propagation::Stop } fn try_fill_exact_match(&self, search: &str) -> bool { let exact = self .completions .borrow() .into_iter() .flatten() .flat_map(|p| p.dynamic_cast::().ok()) .find(|p| p.name() == search); self.obj().set_place(exact.as_ref()); exact.is_some() } fn on_changed(&self) { let obj = self.obj(); let completions = &self.completions; let request_limiter = &self.request_limiter; let main_context = MainContext::default(); main_context.spawn_local(clone!( #[strong] obj, #[strong] completions, #[strong] request_limiter, async move { let entry = &obj; let text = entry.text().to_string(); if text.len() < MIN_REQUEST_LEN { obj.set_place(None::); return; } // Try fill any exact match if available. If it could be filled, don't request. if obj.imp().try_fill_exact_match(&text) { return; } let request = request_limiter.request(text).await; if let Some(request) = request { let client = obj.client().expect("Client to be set up in StationEntry"); let places = client .locations(LocationsOptions { query: request.clone(), ..Default::default() }) .await; // XXX: Handle error case. if let Ok(places) = places { let places = places .into_iter() .filter(|p| p.id().is_some()) .collect::>(); log::trace!("Got results back. Filling up completions."); let exact = places.iter().find(|p| p.name() == request); let completions = completions.borrow(); if exact.is_some() { obj.set_place(exact); completions.remove_all(); } else { completions.splice(0, completions.n_items(), &places); } drop(completions); } else { log::error!("Error requesting places: {}", places.err().unwrap()); } } else { log::trace!("No request needed"); } } )); } fn connect_changed(&self, obj: &super::StationEntry) { self.obj().connect_changed(clone!( #[strong] obj, move |_entry| { obj.imp().on_changed(); } )); self.on_changed(); } fn update_popover_visible(&self) { // Position the popover at the bottom-left of the entry. self.popover.set_pointing_to(Some(&gdk::Rectangle::new( self.popover.width_request() / 2, // Half the width of the popover. self.obj().height(), // The height of the entry 0, 0, ))); self.popover.set_visible( self.completions.borrow().n_items() != 0 && self.obj().has_css_class("focused") && self.place.borrow().is_none(), ); self.popover.set_width_request(self.obj().width()); } fn setup_model(&self) { let obj = self.obj(); let model = &self.completions.borrow(); let model: &gio::ListModel = model .dynamic_cast_ref() .expect("ListStore to be a ListModel"); let selection = self.selection.borrow(); selection.set_model(Some(model)); self.list_completions .get() .set_model(Some(&selection.clone())); let factory = SignalListItemFactory::new(); factory.connect_setup(clone!( #[weak] obj, move |_, list_item| { let place_item = PlaceListItem::new(); let list_item = list_item .downcast_ref::() .expect("The factory item to be a `ListItem`"); list_item.set_child(Some(&place_item)); list_item .property_expression("item") .bind(&place_item, "place", Widget::NONE); place_item.connect_local( "pressed", false, clone!( #[weak] obj, #[weak] place_item, #[upgrade_or_default] move |_| { obj.set_place(place_item.place().as_ref()); None } ), ); } )); self.list_completions.set_factory(Some(&factory)); } // Libadwaita has an `document-edit-symbolic. This does not fit in this use case. // Upstream does not want to introduce a feature for this. See . fn hide_edit_icon(&self) { let mut child = self.obj().first_child(); while let Some(c) = child { if c.has_css_class("edit-icon") { c.set_visible(false); c.unparent(); break; } else if c.has_css_class("header") || c.has_css_class("editable-area") { child = c.first_child(); } else { child = c.next_sibling(); } } } } #[glib::object_subclass] impl ObjectSubclass for StationEntry { const NAME: &'static str = "DBStationEntry"; type Type = super::StationEntry; type ParentType = libadwaita::EntryRow; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); Self::bind_template_callbacks(klass); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[glib::derived_properties] impl ObjectImpl for StationEntry { fn constructed(&self) { let obj = self.obj(); self.parent_constructed(); self.popover.set_parent(obj.as_ref()); self.connect_changed(&obj); self.setup_model(); self.hide_edit_icon(); self.completions.borrow().connect_notify_local( Some("n-items"), clone!( #[strong] obj, move |list, _| { obj.imp().update_popover_visible(); let n = list.n_items(); if n > 0 { // Translators: Text that will be announced by the screen reader when suggestions changed in the station entry. let format = gettextrs::ngettext( "one suggestion, not selected", "{n} suggestions, none selected", n, ) .replace("{n}", &n.to_string()); obj.announce(&format, gtk::AccessibleAnnouncementPriority::Low); } } ), ); self.obj().connect_css_classes_notify(clone!( #[strong] obj, move |_| { // Update when e.g. focus changed. obj.imp().update_popover_visible(); } )); obj.connect_notify_local(Some("place"), |obj, _| { obj.notify("set"); obj.imp().update_popover_visible(); }); } fn signals() -> &'static [Signal] { static SIGNALS: Lazy> = Lazy::new(|| -> Vec { vec![Signal::builder("swap").build()] }); SIGNALS.as_ref() } } impl WidgetImpl for StationEntry {} impl ListBoxRowImpl for StationEntry {} impl PreferencesRowImpl for StationEntry {} impl EntryRowImpl for StationEntry {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/stores/000077500000000000000000000000001517666454200243415ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/stores/journey_store.rs000066400000000000000000000301541517666454200276210ustar00rootroot00000000000000use std::collections::HashMap; use gdk::prelude::ObjectExt; use gdk::subclass::prelude::ObjectSubclassIsExt; use serde::{Deserialize, Serialize}; use crate::backend::{Journey, NotifyStatus}; use crate::gui::window::Window; #[derive(PartialEq)] enum StoreMode { Toggle, Add, Remove, } #[derive(Serialize, Deserialize, Debug, Default)] struct StorageData { journeys: Vec, watched: HashMap, } gtk::glib::wrapper! { pub struct JourneysStore(ObjectSubclass); } impl JourneysStore { pub fn store(&self, journey: Journey) { self.imp().store(journey, StoreMode::Toggle); } pub fn contains(&self, journey: &Journey) -> bool { self.imp().contains(journey) } pub fn toggle_watch(&self, journey: &Journey) { self.imp().toggle_watch(journey); } pub fn is_watched>(&self, journey_id: S) -> bool { self.imp().is_watched(journey_id) } pub fn flush(&self) { self.imp().flush(); } pub fn setup(&self, window: Window) { self.imp().client.replace(Some(window.property("client"))); self.imp().window.replace(Some(window)); self.imp().load(); } pub fn reload(&self) { self.imp().load(); } } pub mod imp { use std::{ cell::RefCell, collections::{HashMap, HashSet}, fs::OpenOptions, io::{Seek, SeekFrom}, path::PathBuf, }; use chrono::{Duration, Local}; use gtk::glib; use gtk::glib::clone; use gtk::pango; use gdk::{ gio::Settings, glib::{Properties, subclass::Signal}, prelude::{ObjectExt, SettingsExt, StaticType}, subclass::prelude::{ DerivedObjectProperties, ObjectImpl, ObjectImplExt, ObjectSubclass, ObjectSubclassExt, }, }; use once_cell::sync::Lazy; use crate::gui::window::Window; use crate::{ backend::{Client, Journey, Timer}, config, gui::stores::{journey_store::StoreMode, migrate_journey_store::import_old_store}, }; use super::StorageData; #[derive(Properties)] #[properties(wrapper_type = super::JourneysStore)] pub struct JourneysStore { path: PathBuf, pub(super) watched: RefCell>, pub(super) stored: RefCell>, pub(super) window: RefCell>, pub(super) client: RefCell>, #[property(get, set)] pub(super) timer: RefCell, settings: Settings, } impl JourneysStore { pub(super) fn load(&self) { log::debug!("Loading JourneyStore"); let binding = self.client.borrow(); let client = binding.as_ref().expect("Client to be set up"); let mut file = OpenOptions::new() .write(true) .read(true) .create(true) .truncate(false) .open(&self.path) .expect("Failed to open journey_store.json file"); let mut some_deletable = false; let data: StorageData = serde_json::from_reader(&file) .or_else(|_| { let _ = file.seek(SeekFrom::Start(0)); let journeys: Vec = serde_json::from_reader(&file)?; Ok::<_, serde_json::Error>(StorageData { journeys, watched: HashMap::new(), }) }) // Note: The migration will be removed once it is decided it will not be needed anymore. .or_else(|_| { // Seek back file such that the same will be read again. let _ = file.seek(SeekFrom::Start(0)); Ok::<_, serde_json::Error>(StorageData { journeys: import_old_store(file)?, watched: HashMap::new(), }) }) .unwrap_or_default(); for journey in data.journeys.into_iter().rev() { // Note: We limit the deletion time in the settings; the conversion to Duration should never fail. let deletion_time = Duration::try_hours(self.settings.int("deletion-time").into()) .unwrap_or_default(); let could_be_deleted = journey .legs .last() .and_then(|l| l.arrival.or(l.planned_arrival)) .map(|arrival| arrival + deletion_time < Local::now()) .unwrap_or(true); if could_be_deleted { if self.settings.boolean("delete-old") { self.settings .set_boolean("bookmark-purge-suggested", true) .expect("setting bookmark-purge-suggested must exist as a boolean"); self.store(client.get_journey(journey), StoreMode::Remove); continue; } else if !self.settings.boolean("bookmark-purge-suggested") { some_deletable = true; } } let journey = client.get_journey(journey); self.store(journey.clone(), StoreMode::Add); if let Some(notify_status) = data.watched.get(&journey.id()) { journey.set_notify_status(notify_status.clone()); self.toggle_watch(&journey); } } if some_deletable { let toast = libadwaita::Toast::builder() .custom_title( >k::Label::builder() .label(gettextrs::gettext("A bookmarked trip ended recently.")) .wrap(true) .lines(2) /* * follows libadwaita's default title widget: * */ .ellipsize(pango::EllipsizeMode::End) .xalign(0.0) .css_classes(vec!["heading"]) .build(), ) .button_label(gettextrs::gettext("Always _Delete")) .timeout(0) .build(); toast.connect_button_clicked(clone!( #[strong(rename_to = settings)] self.settings, move |_| { settings .set_boolean("delete-old", true) .expect("setting delete-old must exist as a boolean"); } )); toast.connect_dismissed(clone!( #[strong(rename_to = settings)] self.settings, move |_| { settings .set_boolean("bookmark-purge-suggested", true) .expect("setting bookmark-purge-suggested must exist as a boolean"); } )); self.window .borrow() .as_ref() .expect("JourneyStore needs an associated window") .display_custom_toast(toast); } } } impl Default for JourneysStore { fn default() -> Self { let mut path = gtk::glib::user_data_dir(); path.push("diebahn"); if !path.exists() { std::fs::create_dir_all(&path).expect("could not create user data dir"); } path.push("journeys_store.json"); Self { path, stored: RefCell::new(vec![]), watched: Default::default(), window: RefCell::new(None), client: RefCell::new(None), timer: Default::default(), settings: Settings::new(config::BASE_ID), } } } #[glib::object_subclass] impl ObjectSubclass for JourneysStore { const NAME: &'static str = "DBJourneysStore"; type Type = super::JourneysStore; } impl JourneysStore { pub(super) fn flush(&self) { log::debug!("Flushing JourneyStore"); let mut watched = HashMap::new(); for journey in &*self.stored.borrow() { if self.is_watched(journey.id()) { watched.insert(journey.id(), journey.notify_status()); } } let journeys: Vec = self.stored.borrow().iter().map(|j| j.journey()).collect(); let data = StorageData { journeys, watched }; let file = OpenOptions::new() .write(true) .read(false) .truncate(true) .create(true) .append(false) .open(&self.path) .expect("Failed to open journey_store.json file"); serde_json::to_writer(file, &data).expect("Failed to write to file"); } pub(super) fn store(&self, journey: Journey, store_mode: StoreMode) { let mut stored = self.stored.borrow_mut(); if let Some(idx) = stored.iter().position(|j| j.id() == journey.id()) { if store_mode != StoreMode::Add { log::trace!("Removing Journey {:?}", journey.journey()); let s = stored.remove(idx); self.obj().emit_by_name::<()>("remove", &[&s]); let journey_id = s.id(); if self.is_watched(&journey_id) { self.toggle_watch(&s); } } } else if store_mode != StoreMode::Remove { log::trace!("Storing Journey {:?}", journey.journey()); self.obj().emit_by_name::<()>("add", &[&journey]); stored.insert(0, journey); } } pub(super) fn toggle_watch(&self, journey: &Journey) { let journey_id = journey.id(); let mut watched = self.watched.borrow_mut(); let timer = self.timer.borrow(); if watched.contains(&journey_id) { log::trace!("Removing Watch {:?}", journey_id); watched.remove(&journey_id); timer.unregister_background(journey.clone()); } else { log::trace!("Adding Watch {:?}", journey_id); watched.insert(journey_id); drop(watched); timer.register_background(journey.clone()); } } pub(super) fn contains(&self, journey: &Journey) -> bool { let stored = self.stored.borrow(); stored.iter().any(|j| j.id() == journey.id()) } pub(super) fn is_watched>(&self, journey_id: S) -> bool { let stored = self.watched.borrow(); stored.contains(journey_id.as_ref()) } } #[glib::derived_properties] impl ObjectImpl for JourneysStore { fn constructed(&self) { self.parent_constructed(); let store = self.obj(); self.settings.connect_changed( Some("delete-old"), clone!( #[weak] store, move |_, _| { store.reload(); } ), ); } fn signals() -> &'static [Signal] { static SIGNALS: Lazy> = Lazy::new(|| -> Vec { vec![ Signal::builder("add") .param_types([Journey::static_type()]) .build(), Signal::builder("remove") .param_types([Journey::static_type()]) .build(), ] }); SIGNALS.as_ref() } } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/stores/migrate_journey_store.rs000066400000000000000000000342031517666454200313300ustar00rootroot00000000000000//! Note: This file will be removed in the future after it is decided that most people will have migrated already. use std::fs::File; use chrono::FixedOffset; use chrono_tz::Tz; /// Try to import the journeys store in the old format, converting it to the new format. pub fn import_old_store(file: File) -> Result, serde_json::Error> { let old_journeys: Vec = serde_json::from_reader(file)?; let new_journeys = old_journeys.into_iter().map(convert_journey).collect(); Ok(new_journeys) } // Note: Not a perfect mapping; not sure how this can be improved. fn convert_time(t: chrono::DateTime) -> chrono::DateTime { t.with_timezone(&chrono_tz::Tz::UTC) } fn convert_journey(j: hafas_rs::Journey) -> rcore::Journey { rcore::Journey { id: j.refresh_token.unwrap_or_default(), legs: j.legs.into_iter().map(convert_leg).collect(), price: j.price.map(convert_price), } } fn convert_price(p: hafas_rs::Price) -> rcore::Price { rcore::Price { amount: p.amount, currency: p.currency, } } fn convert_leg(l: hafas_rs::Leg) -> rcore::Leg { rcore::Leg { origin: convert_place(l.origin), destination: convert_place(l.destination), departure: l.departure.map(convert_time), planned_departure: l.planned_departure.map(convert_time), arrival: l.arrival.map(convert_time), planned_arrival: l.planned_arrival.map(convert_time), reachable: l.reachable.unwrap_or_default(), trip_id: l.trip_id, line: l.line.map(convert_line), direction: l.direction, arrival_platform: l.arrival_platform, planned_arrival_platform: l.planned_arrival_platform, departure_platform: l.departure_platform, planned_departure_platform: l.planned_departure_platform, frequency: l.frequency.map(convert_frequency), cancelled: l.cancelled.unwrap_or_default(), intermediate_locations: l .stopovers .unwrap_or_default() .into_iter() .map(convert_stopover) .collect(), load_factor: l.load_factor.map(convert_load_factor), remarks: l .remarks .unwrap_or_default() .into_iter() .map(convert_remark) .collect(), walking: l.walking.unwrap_or_default(), transfer: l.transfer.unwrap_or_default(), distance: l.distance, } } fn convert_place(p: hafas_rs::Place) -> rcore::Place { match p { hafas_rs::Place::Stop(s) => rcore::Place::Station(rcore::Station { id: s.id, name: s.name, location: s.location.map(convert_location), products: s .products .unwrap_or_default() .into_iter() .map(convert_product) .collect(), }), hafas_rs::Place::Location(l) => rcore::Place::Location(convert_location(l)), } } fn convert_location(l: hafas_rs::Location) -> rcore::Location { match l { hafas_rs::Location::Address { address, latitude, longitude, } => rcore::Location::Address { address, latitude, longitude, }, hafas_rs::Location::Point { id, name, poi, latitude, longitude, } => rcore::Location::Point { id, name, poi, latitude, longitude, }, } } fn convert_product(p: hafas_rs::Product) -> rcore::Product { rcore::Product { mode: convert_mode(p.mode), name: p.name, short: p.short, } } fn convert_mode(m: hafas_rs::Mode) -> rcore::Mode { match m { hafas_rs::Mode::Train => rcore::Mode::RegionalTrain, // Note: Not a perfect mapping. hafas_rs::Mode::Bus => rcore::Mode::Bus, hafas_rs::Mode::Watercraft => rcore::Mode::Ferry, hafas_rs::Mode::Taxi => rcore::Mode::OnDemand, hafas_rs::Mode::Walking => rcore::Mode::Unknown, // Note: Not a perfect mapping. hafas_rs::Mode::Gondola => rcore::Mode::Tram, } } fn convert_line(l: hafas_rs::Line) -> rcore::Line { rcore::Line { name: l.name, fahrt_nr: l.fahrt_nr, mode: convert_mode(l.mode), product: convert_product(l.product), operator: l.operator.map(convert_operator), product_name: l.product_name, } } fn convert_operator(o: hafas_rs::Operator) -> rcore::Operator { rcore::Operator { id: o.id, name: o.name, } } fn convert_frequency(f: hafas_rs::Frequency) -> rcore::Frequency { rcore::Frequency { minimum: f.minimum, maximum: f.maximum, iterations: f.iterations, } } fn convert_stopover(s: hafas_rs::Stopover) -> rcore::IntermediateLocation { rcore::IntermediateLocation::Stop(rcore::Stop { place: convert_place(s.stop), departure: s.departure.map(convert_time), planned_departure: s.planned_departure.map(convert_time), arrival: s.arrival.map(convert_time), planned_arrival: s.planned_arrival.map(convert_time), arrival_platform: s.arrival_platform, planned_arrival_platform: s.planned_arrival_platform, departure_platform: s.departure_platform, planned_departure_platform: s.planned_departure_platform, cancelled: s.cancelled.unwrap_or_default(), remarks: s .remarks .unwrap_or_default() .into_iter() .map(convert_remark) .collect(), }) } fn convert_remark(r: hafas_rs::Remark) -> rcore::Remark { rcore::Remark { code: r.code, text: r.text, r#type: match r.r#type { hafas_rs::RemarkType::Hint => rcore::RemarkType::Hint, hafas_rs::RemarkType::Status => rcore::RemarkType::Hint, }, association: rcore::RemarkAssociation::Unknown, // Note: Not perfect. summary: r.summary, trip_id: r.trip_id, } } fn convert_load_factor(l: hafas_rs::LoadFactor) -> rcore::LoadFactor { match l { hafas_rs::LoadFactor::LowToMedium => rcore::LoadFactor::LowToMedium, hafas_rs::LoadFactor::High => rcore::LoadFactor::High, hafas_rs::LoadFactor::VeryHigh => rcore::LoadFactor::VeryHigh, hafas_rs::LoadFactor::ExceptionallyHigh => rcore::LoadFactor::ExceptionallyHigh, } } /// The types hafas_rs used previously. mod hafas_rs { pub(crate) mod duration { use chrono::Duration; use serde::{Deserialize, Deserializer, Serializer}; pub(crate) fn serialize(v: &Option, s: S) -> Result where S: Serializer, { if let Some(d) = v { s.serialize_some(&d.num_minutes()) } else { s.serialize_none() } } pub(crate) fn deserialize<'de, D>(d: D) -> Result, D::Error> where D: Deserializer<'de>, { let v = Option::::deserialize(d)?; #[allow(deprecated)] Ok(v.map(Duration::minutes)) } } use std::borrow::Cow; use chrono::DateTime; use chrono::Duration; use chrono::FixedOffset; use serde::{Deserialize, Serialize}; /* Types */ #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] pub enum Location { Address { address: String, latitude: f32, longitude: f32, }, Point { #[serde(skip_serializing_if = "Option::is_none")] id: Option, #[serde(skip_serializing_if = "Option::is_none")] name: Option, #[serde(skip_serializing_if = "Option::is_none")] poi: Option, latitude: f32, longitude: f32, }, } impl PartialEq for Location { fn eq(&self, other: &Self) -> bool { match (&self, other) { (Location::Address { address: a, .. }, Location::Address { address: b, .. }) => { a == b } (Location::Point { id: Some(a), .. }, Location::Point { id: Some(b), .. }) => { a == b } (_, _) => false, } } } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] #[serde(tag = "type")] #[serde(rename_all = "lowercase")] pub enum Place { Stop(Stop), Location(Location), } #[derive(Debug, Default, Clone, Serialize, Deserialize)] pub struct Stop { pub id: String, #[serde(skip_serializing_if = "Option::is_none")] pub name: Option, pub location: Option, #[serde(skip_serializing_if = "Option::is_none")] pub products: Option>, //station: Option, } impl PartialEq for Stop { fn eq(&self, other: &Self) -> bool { self.id == other.id } } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Product { pub id: Cow<'static, str>, pub mode: Mode, pub bitmasks: Cow<'static, [u16]>, pub name: Cow<'static, str>, pub short: Cow<'static, str>, // TODO: default? } #[derive(Serialize, Debug, Clone, Deserialize, PartialEq, Eq)] #[serde(rename_all = "lowercase")] pub enum Mode { Train, Bus, Watercraft, Taxi, Walking, Gondola, } #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "kebab-case")] pub enum LoadFactor { LowToMedium, High, VeryHigh, ExceptionallyHigh, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Line { pub name: Option, pub fahrt_nr: Option, pub mode: Mode, pub product: Product, pub operator: Option, pub product_name: Option, } #[derive(Debug, Serialize, Clone, Deserialize, PartialEq)] #[serde(rename_all = "camelCase")] pub struct Frequency { #[serde(with = "crate::gui::stores::migrate_journey_store::hafas_rs::duration")] pub minimum: Option, #[serde(with = "crate::gui::stores::migrate_journey_store::hafas_rs::duration")] pub maximum: Option, pub iterations: Option, } #[derive(Debug, Serialize, Clone, Deserialize, PartialEq)] #[serde(rename_all = "camelCase")] pub struct Leg { pub origin: Place, pub destination: Place, pub departure: Option>, pub planned_departure: Option>, pub departure_delay: Option, pub arrival: Option>, pub planned_arrival: Option>, pub arrival_delay: Option, #[serde(skip_serializing_if = "Option::is_none")] pub reachable: Option, pub trip_id: Option, pub line: Option, pub direction: Option, pub arrival_platform: Option, pub planned_arrival_platform: Option, pub departure_platform: Option, pub planned_departure_platform: Option, pub frequency: Option, #[serde(skip_serializing_if = "Option::is_none")] pub cancelled: Option, #[serde(skip_serializing_if = "Option::is_none")] pub stopovers: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub load_factor: Option, #[serde(skip_serializing_if = "Option::is_none")] pub remarks: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub walking: Option, #[serde(skip_serializing_if = "Option::is_none")] pub transfer: Option, #[serde(skip_serializing_if = "Option::is_none")] pub distance: Option, } #[derive(Debug, Serialize, Clone, Deserialize, PartialEq)] #[serde(rename_all = "camelCase")] pub struct Stopover { pub stop: Place, pub departure: Option>, pub planned_departure: Option>, pub departure_delay: Option, pub arrival: Option>, pub planned_arrival: Option>, pub arrival_delay: Option, pub arrival_platform: Option, pub planned_arrival_platform: Option, pub departure_platform: Option, pub planned_departure_platform: Option, #[serde(skip_serializing_if = "Option::is_none")] pub cancelled: Option, #[serde(skip_serializing_if = "Option::is_none")] pub remarks: Option>, } #[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] pub struct Price { pub amount: f64, pub currency: String, } #[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] #[serde(rename_all = "camelCase")] pub struct Journey { #[serde(skip_serializing_if = "Option::is_none")] pub refresh_token: Option, pub legs: Vec, pub price: Option, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] pub struct Operator { pub id: String, pub name: String, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "lowercase")] pub enum RemarkType { Hint, Status, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] pub struct Remark { pub code: String, pub text: String, pub r#type: RemarkType, #[serde(skip_serializing_if = "Option::is_none")] pub summary: Option, #[serde(skip_serializing_if = "Option::is_none")] pub trip_id: Option, } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/stores/mod.rs000066400000000000000000000001111517666454200254570ustar00rootroot00000000000000pub mod journey_store; pub mod search_store; mod migrate_journey_store; railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/stores/search_store.rs000066400000000000000000000111471517666454200273740ustar00rootroot00000000000000use gdk::subclass::prelude::ObjectSubclassIsExt; gtk::glib::wrapper! { pub struct SearchesStore(ObjectSubclass); } impl SearchesStore { // XXX: Store Place instead of String. pub fn store(&self, origin: String, destination: String) { self.imp().store(origin, destination); } pub fn contains>(&self, origin: S, destination: S) -> bool { self.imp().contains(origin, destination) } pub fn flush(&self) { self.imp().flush(); } pub fn setup(&self) { self.imp().load(); } } pub mod imp { use std::{cell::RefCell, fs::OpenOptions, path::PathBuf}; use gtk::glib; use gdk::{ glib::subclass::Signal, prelude::{ObjectExt, StaticType}, subclass::prelude::{ObjectImpl, ObjectSubclass, ObjectSubclassExt}, }; use once_cell::sync::Lazy; use serde::{Deserialize, Serialize}; pub struct SearchesStore { path: PathBuf, stored: RefCell>, } impl SearchesStore { pub(super) fn load(&self) { log::debug!("Loading SearchesStore"); let file = OpenOptions::new() .write(true) .read(true) .create(true) .truncate(false) .open(&self.path) .expect("Failed to open searches_store.json file"); let searches: Vec = serde_json::from_reader(file).unwrap_or_default(); for search in searches.into_iter().rev() { self.store(search.origin, search.destination); } } } impl Default for SearchesStore { fn default() -> Self { let mut path = gtk::glib::user_data_dir(); path.push("diebahn"); if !path.exists() { std::fs::create_dir_all(&path).expect("could not create user data dir"); } path.push("searches_store.json"); Self { path, stored: RefCell::new(vec![]), } } } #[glib::object_subclass] impl ObjectSubclass for SearchesStore { const NAME: &'static str = "DBSearchesStore"; type Type = super::SearchesStore; } impl SearchesStore { pub(super) fn flush(&self) { log::debug!("Flushing SearchesStore"); let searches = self.stored.borrow(); let file = OpenOptions::new() .write(true) .read(false) .truncate(true) .create(true) .append(false) .open(&self.path) .expect("Failed to open searches_store.json file"); serde_json::to_writer(file, &*searches).expect("Failed to write to file"); } pub(super) fn contains>(&self, origin: S, destination: S) -> bool { let search = Search { origin: origin.as_ref().to_owned(), destination: destination.as_ref().to_owned(), }; let stored = self.stored.borrow(); stored.iter().any(|s| s == &search) } pub(super) fn store(&self, origin: String, destination: String) { let search = Search { origin, destination, }; let mut stored = self.stored.borrow_mut(); if let Some(idx) = stored.iter().position(|j| j == &search) { log::trace!("Removing Search {search:?}"); let s = stored.remove(idx); self.obj() .emit_by_name::<()>("remove", &[&s.origin, &s.destination]); } else { log::trace!("Storing Search {search:?}"); self.obj() .emit_by_name::<()>("add", &[&search.origin, &search.destination]); stored.insert(0, search); } } } impl ObjectImpl for SearchesStore { fn signals() -> &'static [Signal] { static SIGNALS: Lazy> = Lazy::new(|| -> Vec { vec![ Signal::builder("add") .param_types([String::static_type(), String::static_type()]) .build(), Signal::builder("remove") .param_types([String::static_type(), String::static_type()]) .build(), ] }); SIGNALS.as_ref() } } #[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Clone)] struct Search { origin: String, destination: String, } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/time_divider.rs000066400000000000000000000063641517666454200260450ustar00rootroot00000000000000use gdk::glib::Object; use gtk::{CompositeTemplate, gdk, glib, prelude::*}; use libadwaita::subclass::prelude::*; glib::wrapper! { pub struct TimeDivider(ObjectSubclass) @extends gtk::Box, gtk::Widget, @implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget; } impl Default for TimeDivider { fn default() -> Self { Object::builder::().build() } } mod imp { use chrono::Local; use gdk::glib::Properties; use glib::subclass::InitializingObject; use gtk::subclass::box_::BoxImpl; use std::cell::Cell; use std::cell::RefCell; use std::marker::PhantomData; use crate::backend::Journey; use crate::backend::JourneysResult; use crate::gui::utility::Utility; use super::*; #[derive(Debug, Default, CompositeTemplate, Properties)] #[properties(wrapper_type = super::TimeDivider)] #[template(resource = "/ui/time_divider.ui")] pub struct TimeDivider { #[template_child] label_date: TemplateChild, #[property(name = "start", type = u32, set = Self::set_start)] is_start: Cell, #[property(name = "initial", set = Self::set_initial)] is_initial: Cell, #[property(name = "journeys-result", type = JourneysResult, set = Self::set_journeys_result)] journeys_result: RefCell>, #[property(name = "item", set = Self::set_item, nullable)] _item: PhantomData>, } impl TimeDivider { fn set_start(&self, v: u32) { self.is_start.replace(v == 0); self.update_visibility(); } fn set_initial(&self, v: bool) { self.is_initial.replace(v); self.update_visibility(); } fn set_journeys_result(&self, v: JourneysResult) { self.journeys_result.replace(Some(v)); self.update_visibility(); } fn set_item(&self, v: Option) { let formatted = v.map(|v| v.departure_day()).unwrap_or_default(); self.label_date.set_text(&formatted); self.update_visibility(); } fn update_visibility(&self) { let is_requested_day = self.label_date.text() == self .journeys_result .borrow() .as_ref() .and_then(|r| r.requested_time()) .map(|d| Utility::format_date_human(d.with_timezone(&Local).date_naive())) .unwrap_or_default(); let hide = self.is_start.get() && (!self.is_initial.get() || is_requested_day); self.obj().set_visible(!hide); } } #[glib::object_subclass] impl ObjectSubclass for TimeDivider { const NAME: &'static str = "DBTimeDivider"; type Type = super::TimeDivider; type ParentType = gtk::Box; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[glib::derived_properties] impl ObjectImpl for TimeDivider {} impl WidgetImpl for TimeDivider {} impl BoxImpl for TimeDivider {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/transition.rs000066400000000000000000000156531517666454200255740ustar00rootroot00000000000000use gdk::glib::Object; use crate::gui::utility::Utility; use crate::backend::Place; gtk::glib::wrapper! { pub struct Transition(ObjectSubclass) @extends gtk::Box, gtk::Widget, @implements gtk::gio::ActionGroup, gtk::gio::ActionMap, gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget; } impl Transition { pub fn new( walking_time: &Option, waiting_time: &Option, has_walk: bool, is_last_mile: bool, final_destination: &Option, ) -> Self { let s: Self = Object::builder().build(); s.setup( walking_time, waiting_time, has_walk, is_last_mile, final_destination, ); s } pub fn setup( &self, walking_time: &Option, waiting_time: &Option, has_walk: bool, is_last_mile: bool, final_destination: &Option, ) { let walking_time_label = walking_time.map(Utility::format_duration_inline); let final_destination_label = final_destination.as_ref().map(Place::name); let waiting_time_label = waiting_time.map(Utility::format_duration_inline); self.set_walking_time(walking_time_label); self.set_waiting_time(waiting_time_label); self.set_is_last_mile(is_last_mile); self.set_has_walk(has_walk); self.set_final_destination(final_destination_label); } } pub mod imp { use std::cell::Cell; use std::cell::RefCell; use std::marker::PhantomData; use crate::gui::utility::Utility; use gdk::glib::Properties; use gdk::glib::object::ObjectExt; use glib::subclass::InitializingObject; use gtk::CompositeTemplate; use gtk::DirectionType; use gtk::glib; use gtk::glib::clone; use gtk::prelude::*; use gtk::subclass::prelude::*; #[derive(CompositeTemplate, Default, Properties)] #[properties(wrapper_type = super::Transition)] #[template(resource = "/ui/transition.ui")] pub struct Transition { #[property(get, set = Self::set_walking_time, nullable)] walking_time: RefCell>, #[property(get, set = Self::set_waiting_time, nullable)] waiting_time: RefCell>, #[property(get, set = Self::set_is_last_mile)] is_last_mile: Cell, #[property(get, set = Self::set_has_walk)] has_walk: Cell, #[property(get, set = Self::set_final_destination, nullable)] final_destination: RefCell>, #[property(name = "icon", get = Self::icon)] _icon: PhantomData, #[property(name = "label", get = Self::label)] _label: PhantomData, #[template_child] destination_box: TemplateChild, #[template_child] destination_label: TemplateChild, } impl Transition { fn set_walking_time(&self, walking_time: Option) { self.walking_time.replace(walking_time); self.obj().notify_label(); } fn set_waiting_time(&self, waiting_time: Option) { self.waiting_time.replace(waiting_time); self.obj().notify_label(); } fn set_is_last_mile(&self, is_last_mile: bool) { self.is_last_mile.set(is_last_mile); self.obj().notify_icon(); } fn set_has_walk(&self, has_walk: bool) { self.has_walk.set(has_walk); self.obj().notify_icon(); } fn set_final_destination(&self, final_destination: Option) { self.destination_box .set_visible(final_destination.is_some()); self.destination_label .set_label(final_destination.as_deref().unwrap_or_default()); self.final_destination.replace(final_destination); } fn icon(&self) -> String { if !self.has_walk.get() && !self.is_last_mile.get() { "change-symbolic".to_owned() } else { "walking-symbolic".to_owned() } } fn label(&self) -> String { match ( self.walking_time.borrow().clone(), self.waiting_time.borrow().clone(), ) { (Some(walking), Some(waiting)) => gettextrs::gettext("Walk {walk} Wait {wait}") .replace("{walk}", &walking) .replace("{wait}", &waiting), (None, Some(waiting)) => { gettextrs::gettext("Transfer Time {}").replace("{}", &waiting) } (Some(walking), None) => gettextrs::gettext("Walk {}").replace("{}", &walking), (None, None) => gettextrs::gettext("Transfer"), } } fn format_transfer_description( transfer_description: &str, destination: &Option<&String>, ) -> String { // Translators: Do not translate the strings in {}. let format = gettextrs::gettext("Arrive at {destination}."); match destination { Some(destination) => format!( "{} {}", transfer_description, format.replace("{destination}", destination) ), None => transfer_description.to_string(), } } } #[glib::object_subclass] impl ObjectSubclass for Transition { const NAME: &'static str = "DBTransition"; type Type = super::Transition; type ParentType = gtk::Box; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); Utility::bind_template_callbacks(klass); WidgetClassExt::set_css_name(klass, "TransferItem"); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[glib::derived_properties] impl ObjectImpl for Transition { fn constructed(&self) { self.parent_constructed(); self.obj().connect_notify_local( None, clone!( #[weak(rename_to = transition)] self, move |obj, _| { obj.update_property(&[gtk::accessible::Property::Label( &Transition::format_transfer_description( &obj.property::("label"), &transition.final_destination.borrow().as_ref(), ), )]); } ), ); } } impl WidgetImpl for Transition { fn focus(&self, direction: DirectionType) -> bool { Utility::move_focus_within_container(self, direction) } } impl BoxImpl for Transition {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/utility.rs000066400000000000000000000257741517666454200251120ustar00rootroot00000000000000use std::collections::HashSet; use chrono::{Datelike, Days, Local}; use gdk::gio::Settings; use gdk::glib::{Object, Value}; use gdk::prelude::SettingsExt; use gtk::DirectionType; use gtk::Widget; use gtk::prelude::IsA; use gtk::prelude::WidgetExt; use gtk::subclass::prelude::ObjectSubclassExt; use gtk::subclass::prelude::WidgetImpl; use rcore::Mode; use rcore::ProductsSelection; pub struct Utility {} #[derive(PartialEq)] enum Direction { Forward, Backward, } #[derive(PartialEq)] enum ChildAccess { Skip, Include, Only, } #[gtk::template_callbacks(functions)] impl Utility { pub fn language_code() -> String { // Per documentation, the returned value always contains at least one element (`C`). This is therefore save. // APIs also don't seem to like language modifiers (e.g. `_US`) or `.UTF-8` at the end, strip this. gtk::glib::language_names()[0] .split(['_', '.']) .next() .unwrap() .to_owned() } #[template_callback] fn and(#[rest] values: &[Value]) -> bool { values .iter() .all(|v| v.get::().expect("Bool for an argument")) } #[template_callback] fn is_some(#[rest] values: &[Value]) -> bool { values .iter() .next() .expect("At least one argument has to exist") .get::>() .expect("Expected Option for arguments") .is_some() } #[template_callback] fn is_none(#[rest] values: &[Value]) -> bool { !Utility::is_some(values) } #[template_callback] fn not(value: bool) -> bool { !value } pub fn format_duration_tabular(duration: chrono::Duration) -> String { if duration.num_hours() == 0 { // Translators: duration in minutes, standalone or tabular setting, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number gettextrs::gettext("{} min").replace("{}", duration.num_minutes().to_string().as_str()) } else if duration.num_days() == 0 { (chrono::NaiveDate::from_ymd_opt(2022, 1, 1) .unwrap_or_default() .and_hms_opt(0, 0, 0) .unwrap_or_default() + duration) // Translators: duration format with hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units .format(&gettextrs::gettext("%_H h %_M min")) .to_string() } else { // Start one day before the new year, otherwise %_d would skip 2. (chrono::NaiveDate::from_ymd_opt(2021, 12, 31) .unwrap_or_default() .and_hms_opt(0, 0, 0) .unwrap_or_default() + duration) // Translators: duration format with days, hours and minutes, standalone or tabular setting, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units .format(&gettextrs::ngettext( " %_d day %_H h %_M min", "%_d days %_H h %_M min", duration.num_days().try_into().unwrap_or_default(), )) .to_string() } } pub fn format_duration_inline(duration: chrono::Duration) -> String { if duration.num_hours() < 2 { // Translators: duration in minutes, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number gettextrs::gettext("{} min.").replace("{}", duration.num_minutes().to_string().as_str()) } else if duration.num_days() == 0 { if duration.num_minutes() == 0 { // Translators: duration in hours, embedded in text, you might want to use a narrow no-breaking space (U+202F) in front of units, {} must not be translated as it will be replaced with an actual number gettextrs::gettext("{} hrs.") .replace("{}", duration.num_hours().to_string().as_str()) } else { (chrono::NaiveDate::from_ymd_opt(2022, 1, 1) .unwrap_or_default() .and_hms_opt(0, 0, 0) .unwrap_or_default() + duration) // Translators: duration format with hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units .format(&gettextrs::gettext("%-H hrs. %-M min.")) .to_string() } } else { // Start one day before the new year, otherwise %_d would skip 2. (chrono::NaiveDate::from_ymd_opt(2021, 12, 31) .unwrap_or_default() .and_hms_opt(0, 0, 0) .unwrap_or_default() + duration) // Translators: duration format with days, hours and minutes, embedded in text, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers, you might want to use a narrow no-breaking space (U+202F) in front of units .format(&gettextrs::ngettext( "%-d day %-H hrs. %-M min.", "%-d days %-H hrs. %-M min.", duration.num_days().try_into().unwrap_or_default(), )) .to_string() } } pub fn format_time_human(time: &chrono::NaiveTime) -> String { // Translators: formatting of time in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers time.format(&gettextrs::gettext("%H:%M")).to_string() } pub fn format_date_human(date: chrono::NaiveDate) -> String { let today = Local::now().date_naive(); if today == date { gettextrs::gettext("Today") } else if today + Days::new(1) == date { gettextrs::gettext("Tomorrow") } else if today - Days::new(1) == date { gettextrs::gettext("Yesterday") } else if today.year() == date.year() { // Translators: formatting of dates without year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers date.format(&gettextrs::gettext("%a, %d. %B")).to_string() } else { // Translators: formatting of dates with year in a human-readable fashion, see https://docs.rs/chrono/latest/chrono/format/strftime/index.html#specifiers date.format(&gettextrs::gettext("%Y-%m-%d")).to_string() } } pub fn move_focus_within_container>( widget: &(impl WidgetImpl + ObjectSubclassExt), direction: DirectionType, ) -> bool { /* if has child with focus and it keeps focus within, keep within this widget as well */ if let Some(focus_child) = widget.obj().focus_child() && focus_child.child_focus(direction) { return true; } let move_direction = match direction { DirectionType::TabBackward | DirectionType::Up | DirectionType::Left => { Direction::Backward } DirectionType::TabForward | DirectionType::Down | DirectionType::Right => { Direction::Forward } _ => { log::error!("Widget's focus implementation incomplete"); Direction::Forward } }; let child_access = match direction { DirectionType::TabBackward | DirectionType::TabForward => ChildAccess::Include, DirectionType::Up | DirectionType::Down => ChildAccess::Skip, DirectionType::Left | DirectionType::Right => ChildAccess::Only, _ => { log::error!("Widget's focus implementation incomplete"); ChildAccess::Include } }; match move_direction { Direction::Backward => { /* if this widget has focus, it is tabbing out */ if widget.obj().has_focus() { child_access == ChildAccess::Only } else { /* when tabbing in, start it children */ if child_access != ChildAccess::Skip && widget .obj() .last_child() .map(|child| child.child_focus(direction)) .unwrap_or(false) { return true; } /* when tabbing in and no child grabs focus, focus this widget */ widget.grab_focus() } } Direction::Forward => { /* when a child had focus and didn't keep it, it is tabbing out */ if widget.obj().focus_child().is_some() { child_access == ChildAccess::Only } else { /* if this widget had no focus, it is tabbing in */ if !widget.obj().has_focus() && widget.grab_focus() { true } else if child_access != ChildAccess::Skip { /* if this widget had focus, pass on to children, tabbing out otherwise */ widget .obj() .first_child() .map(|child| child.child_focus(direction)) .unwrap_or(false) } else { child_access == ChildAccess::Only } } } } } pub fn products_selection_from_setting(settings: &Settings) -> ProductsSelection { ProductsSelection::from( vec![ ( Mode::HighSpeedTrain, settings.boolean("include-national-express"), ), (Mode::RegionalTrain, settings.boolean("include-regional")), (Mode::SuburbanTrain, settings.boolean("include-suburban")), (Mode::Subway, settings.boolean("include-subway")), (Mode::Tram, settings.boolean("include-tram")), (Mode::Bus, settings.boolean("include-bus")), (Mode::Ferry, settings.boolean("include-ferry")), (Mode::Cablecar, settings.boolean("include-cablecar")), (Mode::OnDemand, settings.boolean("include-taxi")), ] .into_iter() .filter(|(_, b)| *b) .map(|(m, _)| m) .collect::>(), ) } } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/gui/window.rs000066400000000000000000000375041517666454200247100ustar00rootroot00000000000000use gdk::gio::Settings; use gdk::glib; use gdk::prelude::SettingsExt; use gdk::subclass::prelude::ObjectSubclassIsExt; use gtk::glib::Object; use gtk::prelude::{GtkApplicationExt, GtkWindowExt}; use crate::Error; use crate::config::BASE_ID; use crate::gui::error::error_to_toast; gtk::glib::wrapper! { pub struct Window(ObjectSubclass) @extends libadwaita::ApplicationWindow, gtk::ApplicationWindow, libadwaita::Window, gtk::Window, gtk::Widget, @implements gtk::gio::ActionGroup, gtk::gio::ActionMap, gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget, gtk::Native, gtk::Root, gtk::ShortcutManager; } impl Window { pub fn new(app: &libadwaita::Application) -> Self { app.set_accels_for_action("win.settings", &["comma"]); app.set_accels_for_action("window.close", &["w", "q"]); app.set_accels_for_action("journey-list.bookmark", &["s"]); app.set_accels_for_action("journey-details.bookmark", &["d"]); app.set_accels_for_action("journey-details.reload", &["r"]); Object::builder::() .property("application", app) .build() } fn save_window_size(&self) -> Result<(), glib::BoolError> { let settings = Settings::new(BASE_ID); let (width, height) = self.default_size(); settings.set_int("window-width", width)?; settings.set_int("window-height", height)?; settings.set_boolean("is-maximized", self.is_maximized())?; Ok(()) } fn load_window_size(&self) { let settings = Settings::new(BASE_ID); let width = settings.int("window-width"); let height = settings.int("window-height"); let is_maximized = settings.boolean("is-maximized"); self.set_default_size(width, height); if is_maximized { self.maximize(); } } pub fn display_error_toast(&self, err: Error) { let toast_overlay = self.imp().toast_overlay.get(); error_to_toast(&toast_overlay, err); } pub fn display_custom_toast(&self, toast: libadwaita::Toast) { let toast_overlay = self.imp().toast_overlay.get(); toast_overlay.add_toast(toast); } } pub mod imp { use std::cell::RefCell; use gdk::gio::ActionEntryBuilder; use gdk::gio::SimpleAction; use gdk::gio::SimpleActionGroup; use gdk::glib::ParamSpec; use gdk::glib::Properties; use glib::signal::Propagation; use glib::subclass::InitializingObject; use gtk::CompositeTemplate; use gtk::ToggleButton; use gtk::glib; use gtk::glib::clone; use gtk::prelude::*; use gtk::subclass::prelude::*; use libadwaita::prelude::AdwDialogExt; use libadwaita::subclass::prelude::AdwApplicationWindowImpl; use libadwaita::subclass::prelude::AdwWindowImpl; use crate::backend::Client; use crate::backend::DiscountCard; use crate::backend::Journey; use crate::backend::JourneysResult; use crate::backend::Place; use crate::backend::Timer; use crate::config; use crate::gui::alt_label::AltLabel; use crate::gui::date_time_picker::DateTimePicker; use crate::gui::frequency_label::FrequencyLabel; use crate::gui::indicator_icons::IndicatorIcons; use crate::gui::journey_detail_page::JourneyDetailPage; use crate::gui::journeys_page::JourneysPage; use crate::gui::preferences_dialog::PreferencesDialog; use crate::gui::provider_popover::ProviderPopover; use crate::gui::refresh_button::RefreshButton; use crate::gui::search_options_button::SearchOptionsButton; use crate::gui::search_page::SearchPage; use crate::gui::station_entry::StationEntry; use crate::gui::stores::journey_store::JourneysStore; use crate::gui::stores::search_store::SearchesStore; use crate::gui::utility::Utility; #[derive(CompositeTemplate, Default, Properties)] #[properties(wrapper_type = super::Window)] #[template(resource = "/ui/window.ui")] pub struct Window { #[template_child] search_view: TemplateChild, #[template_child] result_view: TemplateChild, #[template_child] search_page: TemplateChild, #[template_child] journeys_page: TemplateChild, #[template_child] journey_detail_page: TemplateChild, #[template_child] btn_bookmark_search: TemplateChild, #[template_child] btn_bookmark_journey: TemplateChild, #[template_child] btn_watch_journey: TemplateChild, #[template_child] store_journeys: TemplateChild, #[template_child] store_searches: TemplateChild, #[template_child] pub toast_overlay: TemplateChild, #[property(get)] client: RefCell, #[property(get)] timer: RefCell, } #[gtk::template_callbacks] impl Window { fn setup(&self) { self.store_journeys.setup(self.obj().clone()); self.store_searches.setup(); gtk::Window::set_default_icon_name(config::APP_ID); if config::PROFILE == "Devel" { self.obj().add_css_class("devel"); } self.obj().load_window_size(); } fn setup_actions(&self) { let obj = self.obj(); let action_settings = ActionEntryBuilder::new("settings") .activate(clone!( #[weak(rename_to = window)] obj, move |_, _, _| { let settings = PreferencesDialog::new(); settings.present(Some(&window)); } )) .build(); let action_about = ActionEntryBuilder::new("about") .activate(clone!( #[weak(rename_to = window)] obj, move |_, _, _| { let about_dialog = libadwaita::AboutDialog::from_appdata( &(config::RESOURCES_PATH.to_owned() + config::APP_ID + ".metainfo.xml"), Some(env!("CARGO_PKG_VERSION")), ); about_dialog.set_comments(env!("CARGO_PKG_DESCRIPTION")); about_dialog.set_developers( &(env!("CARGO_PKG_AUTHORS").split(':').collect::>()), ); about_dialog // translators: One per line: How you want to be credited as a, e.g. by the name you use, and optionally an email address ("Edgar Allan Poe ") .set_translator_credits(&gettextrs::gettext("translator-credits")); about_dialog.set_designers(&["Tobias Bernard"]); about_dialog.add_credit_section( Some(&gettextrs::gettext("Source Translation Supported by")), &["Sydney Sharpe"], ); about_dialog .add_link("GitLab", "https://gitlab.com/schmiddi-on-mobile/railway"); about_dialog.present(Some(&window)); } )) .build(); obj.add_action_entries([action_settings, action_about]); let action_journey_list_bookmark = SimpleAction::new("bookmark", None); action_journey_list_bookmark.connect_activate(clone!( #[weak(rename_to = s)] self, move |_, _| { s.handle_searches_store(); } )); let actions_journey_list = SimpleActionGroup::new(); obj.insert_action_group("journey-list", Some(&actions_journey_list)); actions_journey_list.add_action(&action_journey_list_bookmark); let action_journey_details_bookmark = SimpleAction::new("bookmark", None); action_journey_details_bookmark.connect_activate(clone!( #[weak(rename_to = s)] self, move |_, _| { s.handle_journey_store(); } )); let action_journey_details_reload = SimpleAction::new("reload", None); action_journey_details_reload.connect_activate(clone!( #[weak(rename_to = s)] self, move |_, _| { s.handle_journey_reload(); } )); let actions_journey_details = SimpleActionGroup::new(); obj.insert_action_group("journey-details", Some(&actions_journey_details)); actions_journey_details.add_action(&action_journey_details_bookmark); actions_journey_details.add_action(&action_journey_details_reload); } #[template_callback] fn handle_details(&self, journey: Journey) { self.journey_detail_page.set_journey(Some(&journey)); self.search_view.set_show_content(true); self.result_view.set_show_content(true); self.journey_detail_page.reload(); if let Some(journeys_result) = self.journeys_page.journeys_result() { journeys_result.set_selected(Some(journey)); } } #[template_callback] fn handle_search_page(&self, journeys_result: JourneysResult) { journeys_result.set_selected(self.journey_detail_page.journey()); self.journeys_page.set_journeys_result(journeys_result); self.search_view.set_show_content(true); self.result_view.set_show_content(false); } #[template_callback] fn handle_journey_reload(&self) { self.journey_detail_page.reload(); } #[template_callback] fn handle_journeys_page(&self, journey: Journey) { self.journey_detail_page.set_journey(Some(&journey)); self.search_view.set_show_content(true); self.result_view.set_show_content(true); if let Some(journeys_result) = self.journeys_page.journeys_result() { journeys_result.set_selected(Some(journey)); } } #[template_callback] fn handle_journey_store(&self) { if let Some(journey) = self.journey_detail_page.journey() { self.store_journeys.store(journey.clone()); self.btn_bookmark_journey .set_active(self.store_journeys.contains(&journey)); } } #[template_callback] fn handle_watch_journey_store(&self) { if let Some(journey) = self .journey_detail_page .property::>("journey") { self.store_journeys.toggle_watch(&journey); self.btn_watch_journey .set_active(self.store_journeys.is_watched(journey.id())); } } #[template_callback] fn handle_journey_store_add(&self, journey: Journey) { self.search_page.add_journey_store(journey); } #[template_callback] fn handle_journey_store_remove(&self, journey: Journey) { self.search_page.remove_journey_store(journey); } #[template_callback] fn has_journey_stored(&self, journey: Option) -> bool { if let Some(journey) = journey { self.store_journeys.contains(&journey) } else { false } } #[template_callback] fn has_journey_watched(&self, journey: Option) -> bool { journey.is_some_and(|j| self.store_journeys.is_watched(j.id())) } #[template_callback] fn has_search_stored(&self, source: Option, destination: Option) -> bool { if let (Some(source), Some(destination)) = (source.map(|p| p.name()), destination.map(|p| p.name())) { self.store_searches.contains(&source, &destination) } else { false } } #[template_callback] fn handle_searches_store(&self) { if let Some(journeys_result) = self .journeys_page .property::>("journeys-result") { let origin = journeys_result .source() .map(|p| p.name()) .unwrap_or_default(); let destination = journeys_result .destination() .map(|p| p.name()) .unwrap_or_default(); self.store_searches .store(origin.clone(), destination.clone()); self.btn_bookmark_search .set_active(self.store_searches.contains(origin, destination)); } } #[template_callback] fn handle_searches_store_add(&self, origin: String, destination: String) { self.search_page.add_search_store(origin, destination); } #[template_callback] fn handle_searches_store_remove(&self, origin: String, destination: String) { self.search_page.remove_search_store(origin, destination); } #[template_callback] fn handle_bookmark_button_icon(&self, _param: ParamSpec, button: ToggleButton) { if button.is_active() { button.set_icon_name("bookmark-toggled-symbolic"); } else { button.set_icon_name("bookmark-untoggled-symbolic"); } } #[template_callback] fn handle_watch_button_icon(&self, _param: ParamSpec, button: ToggleButton) { if button.is_active() { button.set_icon_name("bell-outline-symbolic"); } else { button.set_icon_name("bell-outline-none-symbolic"); } } } #[glib::object_subclass] impl ObjectSubclass for Window { const NAME: &'static str = "DBWindow"; type Type = super::Window; type ParentType = libadwaita::ApplicationWindow; fn class_init(klass: &mut Self::Class) { DiscountCard::ensure_type(); AltLabel::ensure_type(); ProviderPopover::ensure_type(); DateTimePicker::ensure_type(); StationEntry::ensure_type(); JourneysStore::ensure_type(); SearchesStore::ensure_type(); SearchOptionsButton::ensure_type(); IndicatorIcons::ensure_type(); RefreshButton::ensure_type(); FrequencyLabel::ensure_type(); Self::bind_template(klass); Self::bind_template_callbacks(klass); Utility::bind_template_callbacks(klass); } fn instance_init(obj: &InitializingObject) { obj.init_template(); } } #[glib::derived_properties] impl ObjectImpl for Window { fn constructed(&self) { self.parent_constructed(); self.setup_actions(); self.setup(); } } impl WidgetImpl for Window {} impl WindowImpl for Window { fn close_request(&self) -> Propagation { if let Err(err) = self.obj().save_window_size() { log::warn!("Failed to save window state, {}", &err); } self.store_journeys.get().flush(); self.store_searches.get().flush(); Propagation::Proceed } } impl ApplicationWindowImpl for Window {} impl AdwWindowImpl for Window {} impl AdwApplicationWindowImpl for Window {} } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/main.rs000066400000000000000000000041261517666454200235330ustar00rootroot00000000000000use gdk::prelude::{ApplicationExt, ApplicationExtManual, Cast}; use gtk::prelude::IsA; use gtk::prelude::{GtkApplicationExt, GtkWindowExt, WidgetExt}; use once_cell::sync::Lazy; #[macro_export] macro_rules! gspawn { ($future:expr) => {{ let ctx = gtk::glib::MainContext::default(); ctx.spawn_local($future) }}; ($future:expr, $priority:expr) => {{ let ctx = gtk::glib::MainContext::default(); ctx.spawn_local_with_priority($priority, $future) }}; } #[macro_export] macro_rules! tspawn { ($future:expr) => { $crate::TOKIO_RUNTIME.spawn($future) }; } mod backend; mod config; mod error; mod gui; use config::{APP_ID, GETTEXT_PACKAGE, LOCALEDIR, RESOURCES_BYTES, RESOURCES_PATH}; pub use error::Error; pub static TOKIO_RUNTIME: Lazy = Lazy::new(|| tokio::runtime::Runtime::new().unwrap()); fn init_resources() { let gbytes = gtk::glib::Bytes::from_static(RESOURCES_BYTES); let resource = gtk::gio::Resource::from_data(&gbytes).unwrap(); gtk::gio::resources_register(&resource); } fn init_icons>(display: &P) { let icon_theme = gtk::IconTheme::for_display(display); icon_theme.add_resource_path("/de/schmidhuberj/DieBahn/providers/"); } fn init_internationalization() -> Result<(), Box> { gettextrs::setlocale(gettextrs::LocaleCategory::LcAll, ""); gettextrs::bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR)?; gettextrs::textdomain(GETTEXT_PACKAGE)?; Ok(()) } fn main() { init_internationalization().expect("Failed to initialize internationalization"); env_logger::init(); init_resources(); let app = libadwaita::Application::builder() .application_id(APP_ID) .resource_base_path(RESOURCES_PATH) .build(); app.connect_activate(build_ui); app.run(); } fn build_ui(app: &libadwaita::Application) { let window = app.active_window().unwrap_or_else(|| { let window = crate::gui::window::Window::new(app); init_icons(&window.display()); window.upcast() }); window.present(); } railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/src/meson.build000066400000000000000000000032321517666454200244000ustar00rootroot00000000000000global_conf = configuration_data() global_conf.set_quoted('APP_ID', application_id) global_conf.set_quoted('BASE_ID', base_id) global_conf.set_quoted('RESOURCES_PATH', resources_path) global_conf.set_quoted('PKGDATADIR', pkgdatadir) global_conf.set_quoted('PROFILE', profile) global_conf.set_quoted('VERSION', version + version_suffix) global_conf.set_quoted('GETTEXT_PACKAGE', gettext_package) global_conf.set_quoted('LOCALEDIR', localedir) global_conf.set_quoted('BUILD_DIR', meson.project_build_root()) config = configure_file( input: 'config.rs.in', output: 'config.rs', configuration: global_conf ) run_command( 'cp', meson.project_build_root() / 'src' / 'config.rs', meson.project_source_root() / 'src' / 'config.rs', check: true ) cargo_options = [ '--manifest-path', meson.project_source_root() / 'Cargo.toml' ] cargo_options += [ '--target-dir', meson.project_build_root() / 'target' ] if get_option('profile') == 'default' cargo_options += [ '--release' ] rust_target = 'release' message('Building in release mode') else rust_target = 'debug' message('Building in debug mode') endif cargo_env = [ 'CARGO_HOME=' + meson.project_build_root() / 'cargo-home' ] cargo_build = custom_target( 'cargo-build', build_by_default: true, build_always_stale: true, output: meson.project_name(), console: true, install: true, install_dir: bindir, depends: resources, command: [ 'env', cargo_env, cargo, 'build', cargo_options, '&&', 'cp', 'target' / rust_target / meson.project_name(), '@OUTPUT@', ] ) test('cargo-test', find_program('env', required: true), args: [ cargo_env, 'cargo', 'test', cargo_options], timeout: 0) railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/subprojects/000077500000000000000000000000001517666454200240125ustar00rootroot00000000000000railway-2.10.0-9fec2a6ee5a59cbecd8bac6ace94b7d1912a09f5/subprojects/blueprint-compiler.wrap000066400000000000000000000002611517666454200305200ustar00rootroot00000000000000[wrap-git] directory = blueprint-compiler url = https://gitlab.gnome.org/jwestman/blueprint-compiler.git revision = head depth = 1 [provide] program_names = blueprint-compiler