diff --git a/.cargo/config.toml b/.cargo/config.toml index 15fd75d2a..88c43407a 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -9,4 +9,12 @@ # module's memory.fill/copy ops ("require bulk memory"). Native release binaries # stay stripped; only the wasm keeps its feature section. [target.wasm32-unknown-unknown] -rustflags = ['--cfg', 'getrandom_backend="wasm_js"', '-Cstrip=none'] +rustflags = [ + '--cfg', + 'getrandom_backend="wasm_js"', + '-Cstrip=none', + # The debug UI build has a substantially deeper view-construction stack + # than the optimized bundle. Keep modal construction from exhausting the + # WebAssembly stack while developing with `trunk serve`. + '-Clink-arg=-zstack-size=4194304', +] diff --git a/Cargo.toml b/Cargo.toml index 4e67408d6..0e814bb95 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -76,6 +76,7 @@ ureq = { version = "3", default-features = false, features = ["rustls", "platfor [target.'cfg(target_arch = "wasm32")'.dependencies] ocs_plugin_api = { path = "crates/ocs_plugin_api" } i18n-embed = { version = "0.16", features = ["web-sys-requester"] } +rust-embed = { version = "8", features = ["debug-embed"] } console_error_panic_hook = "0.1" log = "0.4" getrandom = { version = "0.3", features = ["wasm_js"] } diff --git a/locales/tr-TR/opencadstudio.ftl b/locales/tr-TR/opencadstudio.ftl index 813904b73..461dccf2f 100644 --- a/locales/tr-TR/opencadstudio.ftl +++ b/locales/tr-TR/opencadstudio.ftl @@ -82,7 +82,7 @@ modal-text-style-manager = Metin Stili Yöneticisi modal-multiline-style-manager = Çoklu Çizgi Stili Yöneticisi modal-table-style-manager = Tablo Stili Yöneticisi modal-multileader-style-manager = Çoklu Kılavuz Stili Yöneticisi -modal-dimension-style-manager = Ölçülendirme Stili Yöneticisi +modal-dimension-style-manager = Ölçü Stili Yöneticisi modal-default-application = Varsayılan Uygulama modal-save-warning = Kayıt Uyarısı modal-unable-save = Çizim Kaydedilemiyor @@ -241,8 +241,8 @@ catalog-align-applied-4b237394ff = ALIGN: uygulandı. catalog-annoallvisible-new-value-0-1-b40aa2f762 = ANNOALLVISIBLE Yeni değer [0/1]: catalog-annoallvisible-enter-0-or-1-28860bef7c = ANNOALLVISIBLE: 0 veya 1 girin. catalog-annoautoscale-new-value-4-4-bd2aa5942c = ANNOAUTOSCALE Yeni değer [-4..4]: -catalog-annoscale-new-annotation-scale-e-g-1-50-2-1-or-2a9523cf29 = ANNOSCALE Yeni ek açıklama ölçeği (ör. 1:50, 2:1 veya bir çarpan): -catalog-annoupdate-select-annotation-objects-first-3c7b6cc302 = ANNOUPDATE: önce ek açıklama nesnelerini seçin. +catalog-annoscale-new-annotation-scale-e-g-1-50-2-1-or-2a9523cf29 = ANNOSCALE Yeni açıklama ölçeği (ör. 1:50, 2:1 veya bir çarpan): +catalog-annoupdate-select-annotation-objects-first-3c7b6cc302 = ANNOUPDATE: önce açıklama nesnelerini seçin. catalog-annoupdate-updated-updated-object-s-8426986d33 = ANNOUPDATE: __ocs_fmt_0__ nesne güncellendi. catalog-api-incompatible-7aee4ab3d5 = API uyumsuz catalog-arc-specify-center-8ca5921878 = ARC Merkezi belirtin: @@ -327,7 +327,7 @@ catalog-active-a733b809d2 = Etkin catalog-active-ucs-named-c213f515c3 = Etkin UCS: __ocs_fmt_0__ | Adlandırılmış: __ocs_fmt_1__ catalog-active-ucs-no-named-ucss-defined-fede450e16 = Etkin UCS: __ocs_fmt_0__ | Adlandırılmış UCS tanımlanmamış. catalog-active-viewport-cb256416bf = Etkin Görünüm Alanı -catalog-active-dim-style-set-to-name-arg-223a582b1b = Etkin ölçülendirme stili "__ocs_fmt_0__" olarak ayarlandı. +catalog-active-dim-style-set-to-name-arg-223a582b1b = Etkin ölçü stili "__ocs_fmt_0__" olarak ayarlandı. catalog-add-61cc55aa04 = Ekle catalog-add-leader-89cc8c25ab = Kılavuz Ekle catalog-add-scale-0b67ea5641 = Ölçek Ekle @@ -335,7 +335,7 @@ catalog-add-selected-drawing-a-new-kind-on-layer-layer-3b3b470d3e = Seçileni Ek catalog-add-from-github-eeb16a4e4e = GitHub'dan Ekle catalog-add-leader-cee76facb8 = Kılavuz ekle catalog-add-repository-1b73cdafd0 = Depo ekle -catalog-added-annotation-scale-arg-40be971a98 = __ocs_fmt_0__ ek açıklama ölçeği eklendi. +catalog-added-annotation-scale-arg-40be971a98 = __ocs_fmt_0__ açıklama ölçeği eklendi. catalog-added-from-github-e1efdbf07b = GitHub'dan eklendi catalog-adjust-ab166bd5e8 = Ayarla catalog-adjust-colors-for-background-6b76eaf659 = Renkleri Arka Plana Göre Ayarla @@ -370,16 +370,16 @@ catalog-angular-decimals-dimadec-52810900b4 = Açısal ondalık basamaklar (DIMA catalog-angular-unit-dimaunit-fd4f07da8d = Açı birimi (DIMAUNIT) catalog-angular-zero-supp-dimazin-2a8d799e53 = Açısal sıfır gizleme (DIMAZIN) catalog-annotate-4f5f32d8fd = Açıklama -catalog-annotation-de3b78b641 = Ek Açıklama +catalog-annotation-de3b78b641 = Açıklama catalog-annotation-viewport-scale-click-to-change-1d574da062 = - Ek Açıklama / Görünüm Alanı Ölçeği + Açıklama / Görünüm Alanı Ölçeği Değiştirmek için tıklayın -catalog-annotation-object-scale-a6c5c4ebdc = Ek Açıklama Nesnesi Ölçeği -catalog-annotation-scale-b49ce65069 = Ek Açıklama Ölçeği -catalog-annotation-scaling-c4b9cb83e6 = Ek Açıklama Ölçeklendirme -catalog-annotation-scale-0400c101c7 = Ek açıklama ölçeği -catalog-annotation-scale-arg-129d46a1ed = Ek açıklama ölçeği: __ocs_fmt_0__ -catalog-annotation-scales-bb77e7eeb2 = Ek açıklama ölçekleri: __ocs_fmt_0__ +catalog-annotation-object-scale-a6c5c4ebdc = Açıklama Nesnesi Ölçeği +catalog-annotation-scale-b49ce65069 = Açıklama Ölçeği +catalog-annotation-scaling-c4b9cb83e6 = Açıklama Ölçeklendirme +catalog-annotation-scale-0400c101c7 = Açıklama ölçeği +catalog-annotation-scale-arg-129d46a1ed = Açıklama ölçeği: __ocs_fmt_0__ +catalog-annotation-scales-bb77e7eeb2 = Açıklama ölçekleri: __ocs_fmt_0__ catalog-annotative-142ac0bf83 = Açıklamalı catalog-annotative-scale-bc6ed32c2b = Açıklamalı ölçek catalog-apparent-intersection-ac8c738027 = Görünür Kesişim @@ -558,7 +558,7 @@ catalog-browse-install-and-manage-add-ons-select-one-t-1dd345d03e = Eklentilere catalog-browser-storage-73cbc39086 = Tarayıcı depolaması catalog-building-scene-caches-3518c9d139 = Sahne önbellekleri oluşturuluyor… catalog-bump-map-301f0ab5fb = Kabartma Haritası -catalog-by-annotation-scale-0aeb536ce3 = Ek açıklama ölçeğine göre +catalog-by-annotation-scale-0aeb536ce3 = Açıklama ölçeğine göre catalog-by-layer-3243a14fc9 = Katmana göre catalog-by-style-4697cfbbbf = Stile göre catalog-byblock-a5106d0575 = Bloğa Göre @@ -567,9 +567,9 @@ catalog-c-class-dffdc6893e = C++ Sınıfı catalog-cad-application-for-architecture-engineering-79b5234416 = Mimarlık ve mühendislik için CAD uygulaması catalog-cal-expression-e-g-2-3-4-9d91f1992e = CAL İfade (ör. (2+3)*4): catalog-cal-e-cdbdaffe27 = CAL: __ocs_fmt_0__ -catalog-cdimsty-new-current-dimension-style-name-58b33dc04d = CDIMSTY Yeni geçerli ölçülendirme stili adı: +catalog-cdimsty-new-current-dimension-style-name-58b33dc04d = CDIMSTY Yeni geçerli ölçü stili adı: catalog-cdimsty-cur-3ab23d8169 = CDIMSTY = "__ocs_fmt_0__" -catalog-cdimsty-dim-style-not-found-7a8e34b19d = CDIMSTY: '__ocs_fmt_0__' ölçülendirme stili bulunamadı. +catalog-cdimsty-dim-style-not-found-7a8e34b19d = CDIMSTY: '__ocs_fmt_0__' ölçü stili bulunamadı. catalog-celtscale-new-current-object-line-type-scale-51b0f73723 = CELTSCALE Geçerli nesnenin yeni çizgi tipi ölçeği: catalog-celtscale-v-4-e94357c81a = CELTSCALE = __ocs_fmt_0__ catalog-celtscale-set-to-v-4-c8e7366e0e = CELTSCALE __ocs_fmt_0__ olarak ayarlandı. @@ -637,7 +637,7 @@ catalog-cannot-break-at-this-vertex-1aa32e3298 = Bu köşede koparma yapılamaz. catalog-cannot-delete-a-style-that-is-current-or-in-us-3a1875aaa3 = Geçerli veya kullanımda olan bir stil silinemez. catalog-cannot-delete-the-model-layout-85e2dec7c2 = Model yerleşimi silinemez. catalog-cannot-delete-the-standard-style-5e8e1ebed5 = Standart stil silinemez. -catalog-cannot-delete-the-current-annotation-scale-arg-da42ffa6fc = Geçerli ek açıklama ölçeği (__ocs_fmt_0__) silinemez. +catalog-cannot-delete-the-current-annotation-scale-arg-da42ffa6fc = Geçerli açıklama ölçeği (__ocs_fmt_0__) silinemez. catalog-cannot-place-the-new-vertex-57e7843121 = Yeni köşe yerleştirilemedi. catalog-cannot-rename-the-model-layout-bea01e5f33 = Model yerleşimi yeniden adlandırılamaz. catalog-cannot-rename-the-standard-style-5032c604ba = Standart stil yeniden adlandırılamaz. @@ -764,8 +764,8 @@ catalog-cumulative-area-681dc8c91e = Toplam alan catalog-current-color-scheme-eda182ca9f = Geçerli Renk Düzeni catalog-current-mleader-style-c497757153 = Geçerli çoklu kılavuz stili: __ocs_fmt_0__ catalog-current-vertex-ce3b852389 = Geçerli Köşe -catalog-current-annotation-scale-name-0e39f02a1d = Geçerli ek açıklama ölçeği: __ocs_fmt_0__ -catalog-current-dim-style-set-to-5f21e60008 = Geçerli ölçülendirme stili '__ocs_fmt_0__' olarak ayarlandı. +catalog-current-annotation-scale-name-0e39f02a1d = Geçerli açıklama ölçeği: __ocs_fmt_0__ +catalog-current-dim-style-set-to-5f21e60008 = Geçerli ölçü stili '__ocs_fmt_0__' olarak ayarlandı. catalog-current-layer-49fc99fba9 = Geçerli katman catalog-current-layer-set-to-layer-aeb7d67b77 = Geçerli katman "__ocs_fmt_0__" olarak ayarlandı. catalog-current-linetype-set-to-nm-b01c9522cb = Geçerli çizgi tipi __ocs_fmt_0__ olarak ayarlandı. @@ -807,7 +807,7 @@ catalog-ddedit-select-text-entity-6ed9bd4ecd = DDEDIT Metin nesnesini seçin: catalog-ddedit-entity-type-not-supported-13365fcf30 = DDEDIT: nesne türü desteklenmiyor. catalog-ddedit-selected-entity-is-not-text-47dc088cb1 = DDEDIT: seçilen nesne metin değil. catalog-ddedit-text-updated-645c8ee112 = DDEDIT: metin güncellendi. -catalog-dimaligned-enter-dimension-text-blank-measured-b935817e82 = DIMALIGNED Ölçülendirme metnini girin (boş = ölçülen değer): +catalog-dimaligned-enter-dimension-text-blank-measured-b935817e82 = DIMALIGNED Ölçü metnini girin (boş = ölçülen değer): catalog-dimaligned-specify-dimension-line-location-tex-8fe04b6f1f = DIMALIGNED Ölçü çizgisinin konumunu belirtin [Metin/Açı]: catalog-dimaligned-specify-first-extension-line-origin-9c8fefa436 = DIMALIGNED Birinci uzatma çizgisinin başlangıcını belirtin: catalog-dimaligned-specify-second-extension-line-origi-0ae3b99267 = DIMALIGNED İkinci uzatma çizgisinin başlangıcını belirtin [Metin/Açı]: @@ -816,50 +816,50 @@ catalog-dimangular-specify-angle-vertex-726fb76514 = DIMANGULAR Açı köşesin catalog-dimangular-specify-dimension-arc-location-72b199bdbd = DIMANGULAR Ölçü yayının konumunu belirtin: catalog-dimangular-specify-first-extension-line-point-46ba17daf2 = DIMANGULAR Birinci uzatma çizgisi noktasını belirtin: catalog-dimangular-specify-second-extension-line-point-aa52d877e1 = DIMANGULAR İkinci uzatma çizgisi noktasını belirtin: -catalog-dimbaseline-no-base-dimension-found-place-a-di-1cff176e96 = DIMBASELINE Temel ölçülendirme bulunamadı. Önce bir ölçülendirme yerleştirin. +catalog-dimbaseline-no-base-dimension-found-place-a-di-1cff176e96 = DIMBASELINE Temel ölçü bulunamadı. Önce bir ölçü yerleştirin. catalog-dimbaseline-specify-a-second-extension-line-or-3a7a1972d5 = DIMBASELINE İkinci uzatma çizgisinin başlangıcını belirtin (çıkmak için Enter): -catalog-dimbreak-select-dimension-to-break-eaf5c80a17 = DIMBREAK Kesilecek ölçülendirmeyi seçin: +catalog-dimbreak-select-dimension-to-break-eaf5c80a17 = DIMBREAK Kesilecek ölçüyü seçin: catalog-dimbreak-select-object-to-break-at-or-enter-fo-28cc168fb4 = DIMBREAK Kesişme nesnesini seçin veya Otomatik için Enter'a basın: catalog-dimbreak-not-yet-implemented-nothing-changed-450aab8ffb = DIMBREAK: henüz uygulanmadı; hiçbir şey değişmedi. catalog-dimcenter-select-arc-or-circle-4d5ef84501 = DIMCENTER Yay veya daire seçin: -catalog-dimcontinue-no-base-dimension-found-place-a-di-e62826c01a = DIMCONTINUE Temel ölçülendirme bulunamadı. Önce bir ölçülendirme yerleştirin. +catalog-dimcontinue-no-base-dimension-found-place-a-di-e62826c01a = DIMCONTINUE Temel ölçü bulunamadı. Önce bir ölçü yerleştirin. catalog-dimcontinue-specify-a-second-extension-line-or-aa3592fea6 = DIMCONTINUE İkinci uzatma çizgisinin başlangıcını belirtin (çıkmak için Enter): -catalog-dimdiameter-enter-dimension-text-blank-measure-7c2bf653e6 = DIMDIAMETER Ölçülendirme metnini girin (boş = ölçülen değer): +catalog-dimdiameter-enter-dimension-text-blank-measure-7c2bf653e6 = DIMDIAMETER Ölçü metnini girin (boş = ölçülen değer): catalog-dimdiameter-specify-center-point-fef2747cf6 = DIMDIAMETER Merkez noktasını belirtin: catalog-dimdiameter-specify-dimension-line-location-te-d0f6e74a14 = DIMDIAMETER Ölçü çizgisinin konumunu belirtin [Metin/Açı]: catalog-dimdiameter-specify-point-on-circle-f44eb9caf3 = DIMDIAMETER Daire üzerindeki noktayı belirtin: catalog-dimdiameter-specify-text-angle-degrees-37884d6d9a = DIMDIAMETER Metin açısını belirtin (derece): catalog-dimedit-enter-text-override-blank-reset-to-mea-841d99b1d9 = DIMEDIT Metin geçersiz kılmasını girin (boş = ölçülen değere sıfırla): -catalog-dimedit-select-dimension-7995395d33 = DIMEDIT Ölçülendirmeyi seçin: -catalog-dimjogged-created-a-jogged-radius-dimension-a6f5bdcdd6 = DIMJOGGED: kırıklı yarıçap ölçülendirmesi oluşturuldu. +catalog-dimedit-select-dimension-7995395d33 = DIMEDIT Ölçüyü seçin: +catalog-dimjogged-created-a-jogged-radius-dimension-a6f5bdcdd6 = DIMJOGGED: kırıklı yarıçap ölçüsü oluşturuldu. catalog-dimjogged-invalid-radius-a60f074fd6 = DIMJOGGED: yarıçap geçersiz. catalog-dimjogged-select-an-arc-or-circle-first-4194661eda = DIMJOGGED: önce bir yay veya daire seçin. -catalog-dimjogline-select-linear-or-aligned-dimension-2e8257acb6 = DIMJOGLINE Doğrusal veya hizalı ölçülendirmeyi seçin: +catalog-dimjogline-select-linear-or-aligned-dimension-2e8257acb6 = DIMJOGLINE Doğrusal veya hizalı ölçüyü seçin: catalog-dimjogline-specify-jog-location-52d05c7ae5 = DIMJOGLINE Kırılma konumunu belirtin: catalog-dimjogline-not-yet-implemented-nothing-changed-84d7673b3f = DIMJOGLINE: henüz uygulanmadı; hiçbir şey değişmedi. -catalog-dimlinear-enter-dimension-text-blank-measured-d94ef88aca = DIMLINEAR Ölçülendirme metnini girin (boş = ölçülen değer): +catalog-dimlinear-enter-dimension-text-blank-measured-d94ef88aca = DIMLINEAR Ölçü metnini girin (boş = ölçülen değer): catalog-dimlinear-specify-dimension-line-location-text-30dc7c1172 = DIMLINEAR Ölçü çizgisinin konumunu belirtin [Metin/Açı]: catalog-dimlinear-specify-first-extension-line-origin-6951c1dfb2 = DIMLINEAR Birinci uzatma çizgisinin başlangıcını belirtin: catalog-dimlinear-specify-second-extension-line-origin-862f6dcfd5 = DIMLINEAR İkinci uzatma çizgisinin başlangıcını belirtin [Metin/Açı]: catalog-dimlinear-specify-text-angle-degrees-ff129116b5 = DIMLINEAR Metin açısını belirtin (derece): catalog-dimordinate-specify-feature-location-a0e5292697 = DIMORDINATE Unsur konumunu belirtin: catalog-dimordinate-specify-leader-endpoint-3fcfe6daee = DIMORDINATE Kılavuzun uç noktasını belirtin: -catalog-dimradius-enter-dimension-text-blank-measured-ef361c0467 = DIMRADIUS Ölçülendirme metnini girin (boş = ölçülen değer): +catalog-dimradius-enter-dimension-text-blank-measured-ef361c0467 = DIMRADIUS Ölçü metnini girin (boş = ölçülen değer): catalog-dimradius-specify-center-point-0b0d593a56 = DIMRADIUS Merkez noktasını belirtin: catalog-dimradius-specify-dimension-line-location-text-f7ed25e876 = DIMRADIUS Ölçü çizgisinin konumunu belirtin [Metin/Açı]: catalog-dimradius-specify-radius-point-bdccd7c452 = DIMRADIUS Yarıçap noktasını belirtin: catalog-dimradius-specify-text-angle-degrees-5874d74bdd = DIMRADIUS Metin açısını belirtin (derece): catalog-dimspace-enter-value-0-auto-79117af887 = DIMSPACE Değeri girin (0 = otomatik): -catalog-dimspace-select-base-dimension-fa80767f8c = DIMSPACE Temel ölçülendirmeyi seçin: -catalog-dimspace-select-dimension-to-space-count-selec-adab81857c = DIMSPACE Aralanacak ölçülendirmeleri seçin (__ocs_arg_count__ seçili, bitirmek için Enter): +catalog-dimspace-select-base-dimension-fa80767f8c = DIMSPACE Temel ölçüyü seçin: +catalog-dimspace-select-dimension-to-space-count-selec-adab81857c = DIMSPACE Aralanacak ölçüleri seçin (__ocs_arg_count__ seçili, bitirmek için Enter): catalog-dimspace-spacing-adjusted-98692774a0 = DIMSPACE Aralık ayarlandı. catalog-dimstyle-style-name-prop-val-3-bf381e6358 = DIMSTYLE: '__ocs_fmt_0__'.__ocs_fmt_1__ = __ocs_fmt_2__ catalog-dimstyle-already-exists-c67955b26d = DIMSTYLE: '__ocs_fmt_0__' zaten var. catalog-dimstyle-created-74e3e460bb = DIMSTYLE: '__ocs_fmt_0__' oluşturuldu. catalog-dimstyle-not-found-1ab3d059c8 = DIMSTYLE: '__ocs_fmt_0__' bulunamadı. catalog-dimstyle-unknown-property-try-dimtxt-dimasz-di-c2ebc985da = DIMSTYLE: bilinmeyen özellik '__ocs_fmt_0__'. Şunları deneyin: dimtxt dimasz dimdli dimexo dimexe dimgap dimscale dimlfac dimdle dimcen dimtsz -catalog-dimtedit-select-dimension-7ef36c0170 = DIMTEDIT Ölçülendirmeyi seçin: -catalog-dimtedit-specify-new-location-for-dimension-te-6bee003411 = DIMTEDIT Ölçülendirme metninin yeni konumunu belirtin: +catalog-dimtedit-select-dimension-7ef36c0170 = DIMTEDIT Ölçüyü seçin: +catalog-dimtedit-specify-new-location-for-dimension-te-6bee003411 = DIMTEDIT Ölçü metninin yeni konumunu belirtin: catalog-dist-specify-first-point-abb4cee817 = DIST Birinci noktayı belirtin: catalog-dist-specify-second-point-e42f95e8ba = DIST İkinci noktayı belirtin: catalog-divide-enter-number-of-segments-208bfda61d = DIVIDE Parça sayısını girin: @@ -947,15 +947,15 @@ catalog-dim-prefix-suffix-292596adb9 = Ölçü ön eki/son eki catalog-dim-roundoff-83c405eaf1 = Ölçü yuvarlaması catalog-dim-scale-linear-76dd804711 = Doğrusal ölçü ölçeği catalog-dim-scale-overall-0235888fbc = Genel ölçü ölçeği -catalog-dim-style-d4ca0c106a = Ölçülendirme stili +catalog-dim-style-d4ca0c106a = Ölçü stili catalog-dim-units-caca44bae1 = Ölçü birimleri -catalog-dimstyle-updated-b8805ce36a = Ölçülendirme stili '__ocs_fmt_0__' güncellendi. -catalog-dimstyles-fa58058521 = Ölçülendirme stilleri: __ocs_fmt_0__ -catalog-dimension-45e147abd9 = Ölçülendirme +catalog-dimstyle-updated-b8805ce36a = Ölçü stili '__ocs_fmt_0__' güncellendi. +catalog-dimstyles-fa58058521 = Ölçü stilleri: __ocs_fmt_0__ +catalog-dimension-45e147abd9 = Ölçü catalog-dimension-line-4f846d5367 = Ölçü Çizgisi -catalog-dimension-style-manager-8da5c27451 = Ölçülendirme Stili Yöneticisi -catalog-dimension-style-476c7516fc = Ölçülendirme stili -catalog-dimensions-9f4ca9ec08 = Ölçülendirmeler +catalog-dimension-style-manager-8da5c27451 = Ölçü Stili Yöneticisi +catalog-dimension-style-476c7516fc = Ölçü stili +catalog-dimensions-9f4ca9ec08 = Ölçüler catalog-direction-fd8e45bac7 = Yön catalog-direction-x-adcfcb99bf = X yönü catalog-direction-y-08b8ae9d80 = Y yönü @@ -1759,13 +1759,13 @@ catalog-new-vp-freeze-455fc2c299 = Yeni Görünüm Alanında Dondur catalog-new-layer-state-04bc7b92f0 = Yeni katman durumu catalog-new-name-9286270de2 = Yeni ad… catalog-no-816c52fd2b = Hayır -catalog-no-annotation-28ad397062 = Ek Açıklama Yok +catalog-no-annotation-28ad397062 = Açıklama Yok catalog-no-additional-plugins-are-available-f73e1b5a5d = Başka kullanılabilir eklenti yok. -catalog-no-annotation-scale-named-arg-bb686bfd9b = __ocs_fmt_0__ adlı ek açıklama ölçeği yok. -catalog-no-annotation-scales-defined-b4fd8ec21f = Tanımlı ek açıklama ölçeği yok. +catalog-no-annotation-scale-named-arg-bb686bfd9b = __ocs_fmt_0__ adlı açıklama ölçeği yok. +catalog-no-annotation-scales-defined-b4fd8ec21f = Tanımlı açıklama ölçeği yok. catalog-no-available-plugins-match-your-search-f2f3aaaa0b = Aramanızla eşleşen kullanılabilir eklenti yok. catalog-no-columns-0e2070822e = Sütun yok -catalog-no-dim-styles-defined-c964ae210a = Tanımlı ölçülendirme stili yok. +catalog-no-dim-styles-defined-c964ae210a = Tanımlı ölçü stili yok. catalog-no-drawing-open-use-new-or-open-first-8cf46e4b34 = Açık çizim yok — önce Yeni veya Aç komutunu kullanın. catalog-no-drawing-open-use-new-or-open-to-start-a-dra-5380e46d30 = Açık çizim yok. Bir çizim başlatmak için NEW veya OPEN komutunu kullanın. catalog-no-entities-selected-for-wblock-1efe3ce042 = WBLOCK için nesne seçilmedi. @@ -1815,7 +1815,7 @@ catalog-number-of-vertices-c51393ff99 = Köşe Sayısı catalog-number-of-turns-4406e773b3 = Sarım sayısı catalog-objectscale-added-the-active-scale-to-n-object-9d543c1a8a = OBJECTSCALE: Etkin ölçek __ocs_fmt_0__ nesneye eklendi. catalog-objectscale-select-objects-first-2aa65f03f0 = OBJECTSCALE: Önce nesneleri seçin. -catalog-objectscale-the-active-annotation-scale-is-una-3c2e83ceba = OBJECTSCALE: Etkin ek açıklama ölçeği kullanılamıyor. +catalog-objectscale-the-active-annotation-scale-is-una-3c2e83ceba = OBJECTSCALE: Etkin açıklama ölçeği kullanılamıyor. catalog-offset-select-object-to-offset-enter-to-finish-726b88527a = OFFSET Ofsetlenecek nesneyi seçin (bitirmek için Enter): catalog-offset-specify-offset-distance-or-through-d-85487ddd77 = OFFSET Ofset mesafesini belirtin veya [İçinden] <__ocs_arg_d__>: catalog-offset-n-click-side-or-multiple-distance-d-43fe77b625 = OFFSET__ocs_arg_n__ Tarafa tıklayın veya [Birden Çok] [mesafe __ocs_arg_d__]: @@ -2124,7 +2124,7 @@ catalog-proxy-id-4e940af19c = Vekil Kimliği catalog-purge-1eea3d5309 = Kullanılmayanları Temizle catalog-qdim-select-geometry-to-dimension-enter-when-d-249198d05f = QDIM Ölçülendirilecek geometriyi seçin (bitince Enter): catalog-qdim-specify-dimension-line-position-6b3787e07a = QDIM Ölçü çizgisinin konumunu belirtin: -catalog-qdim-made-dimensions-created-6ff6f8f4d6 = QDIM __ocs_fmt_0__ ölçülendirme oluşturuldu. +catalog-qdim-made-dimensions-created-6ff6f8f4d6 = QDIM __ocs_fmt_0__ ölçü oluşturuldu. catalog-qdim-endpoints-collapse-to-a-single-position-22c9fe56a5 = QDIM: Uç noktalar tek bir konumda çakışıyor. catalog-qdim-no-dimensionable-endpoints-in-the-selecti-38d1a15e34 = QDIM: Seçimde ölçülendirilebilir uç nokta yok. catalog-qselect-no-matching-entities-6c24edabc7 = QSELECT: Eşleşen nesne yok. @@ -2134,7 +2134,7 @@ catalog-quickprint-count-selected-enter-to-plot-or-kee-4ed52004ed = QUICKPRINT catalog-quickprint-select-objects-to-quick-print-6e2e9ec223 = QUICKPRINT Hızlı yazdırılacak nesneleri seçin: catalog-quadrant-acf7e389ea = Çeyrek Nokta catalog-quality-a60f2c7360 = Kalite -catalog-quick-dim-dc2bd54b73 = Hızlı Ölçülendirme +catalog-quick-dim-dc2bd54b73 = Hızlı Ölçü catalog-quick-properties-f5577c6884 = Hızlı Özellikler catalog-quick-properties-floating-panel-on-selection-269d47087f = Hızlı Özellikler Seçim yapıldığında yüzen paneli gösterir @@ -2219,7 +2219,7 @@ catalog-reload-failed-error-7389dff8c6 = Yeniden yükleme başarısız: __ocs_fm catalog-reload-from-disk-9dcbed4ac8 = Diskten Yeniden Yükle catalog-remote-text-db53debe40 = Uzak Metin catalog-remove-leader-ebeb181670 = Kılavuzu Kaldır -catalog-removed-annotation-scale-arg-8bdf2765e8 = __ocs_fmt_0__ ek açıklama ölçeği kaldırıldı. +catalog-removed-annotation-scale-arg-8bdf2765e8 = __ocs_fmt_0__ açıklama ölçeği kaldırıldı. catalog-rename-d3f4cb898f = Yeniden Adlandır catalog-renamed-old-new-29fd4a3a74 = '__ocs_fmt_0__', '__ocs_fmt_1__' olarak yeniden adlandırıldı. catalog-render-flags-0c96cd77eb = İşleme Bayrakları @@ -2447,7 +2447,7 @@ catalog-shortcut-key-not-found-b5ba5c0093 = '__ocs_fmt_0__' kısayolu bulunamad catalog-shortcut-key-removed-48379688e1 = '__ocs_fmt_0__' kısayolu kaldırıldı. catalog-shortcut-set-key-cmd-str-3b1565c74c = Kısayol ayarlandı: __ocs_fmt_0__ → __ocs_fmt_1__ catalog-show-d97d1ee339 = Göster -catalog-show-annotation-objects-ec78179009 = Ek Açıklama Nesnelerini Göster +catalog-show-annotation-objects-ec78179009 = Açıklama Nesnelerini Göster catalog-show-clipping-9dc7360082 = Kırpmayı Göster catalog-show-cropping-2af424a0ab = Kırpmayı Göster catalog-show-intensity-b932edce29 = Yoğunluğu Göster @@ -2570,8 +2570,8 @@ catalog-tcount-starting-number-enter-for-1-95f7ef0895 = TCOUNT Başlangıç num catalog-tcount-numbered-text-object-s-from-start-d743c19090 = TCOUNT: __ocs_fmt_0__ metin nesnesi __ocs_fmt_1__ değerinden başlayarak numaralandırıldı. catalog-tcount-select-single-line-text-first-07a50dfcfd = TCOUNT: Önce tek satırlı metin seçin. catalog-text-specify-insertion-point-0bf77ed049 = TEXT Ekleme noktasını belirtin: -catalog-textedit-select-an-annotation-object-or-undo-m-72df8e6fcd = TEXTEDIT Bir ek açıklama nesnesi seçin veya [Geri Alma Modu] <çıkış>: -catalog-textedit-select-an-annotation-object-or-undo-m-6ba7988682 = TEXTEDIT Bir ek açıklama nesnesi seçin veya [Geri Alma Modu]: +catalog-textedit-select-an-annotation-object-or-undo-m-72df8e6fcd = TEXTEDIT Bir açıklama nesnesi seçin veya [Geri Alma Modu] <çıkış>: +catalog-textedit-select-an-annotation-object-or-undo-m-6ba7988682 = TEXTEDIT Bir açıklama nesnesi seçin veya [Geri Alma Modu]: catalog-textedit-selected-entity-is-not-text-3b10406c2f = TEXTEDIT: Seçilen nesne metin değil. catalog-texteditmode-v-e5b25db0dc = TEXTEDITMODE = __ocs_fmt_0__ catalog-texteditmode-set-to-display-val-d65efe2518 = TEXTEDITMODE __ocs_fmt_0__ olarak ayarlandı @@ -2659,7 +2659,7 @@ catalog-text-to-find-48e8b7a630 = Bulunacak metin catalog-thaw-all-layers-9a291b1f90 = Tüm Katmanları Çöz catalog-the-file-is-open-or-being-used-by-another-appl-712fa7a1a4 = Dosya açık veya başka bir uygulama tarafından kullanılıyor. Dosyayı o uygulamada kapatıp yeniden deneyin ya da bu çizimi farklı bir adla kaydedin. catalog-the-selected-layer-state-is-no-longer-availabl-58149c88b4 = Seçilen katman durumu artık kullanılamıyor. -catalog-the-selected-object-does-not-support-annotatio-dc2b32c455 = Seçilen nesne ek açıklama ölçeklerini desteklemiyor. +catalog-the-selected-object-does-not-support-annotatio-dc2b32c455 = Seçilen nesne açıklama ölçeklerini desteklemiyor. catalog-theme-a797e30923 = Tema catalog-thickness-ad48f34186 = Kalınlık catalog-this-block-has-no-attributes-4d4ab3121c = Bu blokta öznitelik yok. @@ -2973,7 +2973,7 @@ catalog-viewcube-right-cd11a69b7d = SAĞ catalog-viewcube-top-03f5c8d677 = ÜST catalog-viewport-09e594a52b = Görünüm Alanı catalog-viewport-configuration-79f0f57a22 = Görünüm Alanı Yapılandırması -catalog-viewport-annotation-scale-sync-98aa56db01 = Görünüm Alanı Ek Açıklama Ölçeğini Eşitle +catalog-viewport-annotation-scale-sync-98aa56db01 = Görünüm Alanı Açıklama Ölçeğini Eşitle catalog-viewport-count-c1a155bba8 = Görünüm Alanı Sayısı catalog-viewport-tools-7c33d46572 = Görünüm Alanı Araçları catalog-viewport-could-not-be-added-e-571ac6c326 = Görünüm alanı eklenemedi: __ocs_fmt_0__ @@ -3081,7 +3081,7 @@ catalog-that-object-4bf9b84b9b = bu nesneyi catalog-those-objects-9f6843f9ae = bu nesneleri catalog-units-9176253183 = birimler catalog-cmd-cannot-create-folder-e-17af7a11a2 = __ocs_fmt_0__: Klasör oluşturulamıyor (__ocs_fmt_1__). -catalog-cmd-no-text-or-dimension-objects-f0c61e81e2 = __ocs_fmt_0__: Metin veya ölçülendirme nesnesi yok. +catalog-cmd-no-text-or-dimension-objects-f0c61e81e2 = __ocs_fmt_0__: Metin veya ölçü nesnesi yok. catalog-cmd-not-yet-implemented-d82cc44f94 = __ocs_fmt_0__: Henüz uygulanmadı. catalog-cmd-packaged-copied-file-s-into-735994359a = __ocs_fmt_0__: __ocs_fmt_1__ dosya __ocs_fmt_2__ içine paketlendi catalog-count-object-s-added-to-selection-7662378a13 = __ocs_fmt_0__ nesne seçime eklendi. diff --git a/src/i18n.rs b/src/i18n.rs index c3f50fbdd..554bf75e7 100644 --- a/src/i18n.rs +++ b/src/i18n.rs @@ -7,8 +7,8 @@ use i18n_embed::DesktopLanguageRequester; #[cfg(target_arch = "wasm32")] use i18n_embed::WebLanguageRequester; use rust_embed::RustEmbed; -use std::borrow::Cow; use serde::{Deserialize, Serialize}; +use std::borrow::Cow; use std::sync::OnceLock; #[path = "locale_catalog.rs"] @@ -69,11 +69,9 @@ impl Language { Language::ZhCn => vec!["zh-CN".parse().expect("valid locale")], } } -} -impl std::fmt::Display for Language { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let label = match self { + pub fn label(self) -> String { + match self { Language::System => crate::tr!("language-system"), Language::EnUs => crate::tr!("language-english"), Language::TrTr => crate::tr!("language-turkish"), @@ -83,16 +81,36 @@ impl std::fmt::Display for Language { Language::HiIn => crate::tr!("language-hindi"), Language::RuRu => crate::tr!("language-russian"), Language::ZhCn => crate::tr!("language-chinese-simplified"), - }; + } + } +} + +impl std::fmt::Display for Language { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let label = self.label(); f.write_str(&label) } } fn system_languages() -> Vec { #[cfg(target_arch = "wasm32")] - let requested = WebLanguageRequester::requested_languages(); + let mut requested = WebLanguageRequester::requested_languages(); #[cfg(not(target_arch = "wasm32"))] let requested = DesktopLanguageRequester::requested_languages(); + + // `navigator.languages` may be empty in privacy-restricted browser + // contexts. The singular preference is still exposed by mainstream + // browsers, so keep it as the first fallback before English. + #[cfg(target_arch = "wasm32")] + if requested.is_empty() { + if let Some(language) = web_sys::window() + .and_then(|window| window.navigator().language()) + .and_then(|language| language.parse().ok()) + { + requested.push(language); + } + } + requested } @@ -104,7 +122,17 @@ fn load_language( if requested.is_empty() { requested.push(loader.fallback_language().clone()); } - i18n_embed::select(loader, &Localizations, &requested).map(|_| ()) + let selected = i18n_embed::select(loader, &Localizations, &requested)?; + #[cfg(target_arch = "wasm32")] + if let Some(language) = selected.first() { + if let Some(root) = web_sys::window() + .and_then(|window| window.document()) + .and_then(|document| document.document_element()) + { + let _ = root.set_attribute("lang", &language.to_string()); + } + } + Ok(()) } pub fn loader() -> &'static FluentLanguageLoader { diff --git a/src/ui/modal.rs b/src/ui/modal.rs index 4b4beb0ab..90139a5d7 100644 --- a/src/ui/modal.rs +++ b/src/ui/modal.rs @@ -322,16 +322,7 @@ pub fn modal<'a>( // The first stack layer dictates its intrinsic size. Its top spacer reserves // room for the title, while the actual title bar and resize grip overlay it // without influencing the modal dimensions. - // Iced draws vertical scrollbars inside a scrollable's bounds. Reserve a - // shared end gutter at the modal boundary so a scrollbar cannot cover the - // last control column in Options or any other dialog. - let measured_content = container(sensor(content).on_resize(Message::ModalContentResized)) - .padding(Padding { - top: 0.0, - right: 12.0, - bottom: 0.0, - left: 0.0, - }); + let measured_content = sensor(content).on_resize(Message::ModalContentResized); let body_base = column![ Space::new().height(Length::Fixed(24.0)), measured_content, diff --git a/src/ui/window/options.rs b/src/ui/window/options.rs index 2c3b8f07c..04fbbf544 100644 --- a/src/ui/window/options.rs +++ b/src/ui/window/options.rs @@ -7,17 +7,14 @@ use iced::{Background, Border, Element, Theme}; use std::fmt; #[derive(Clone, Debug, PartialEq, Eq)] -struct ThemeChoice(String); +struct Labelled { + value: T, + label: String, +} -impl fmt::Display for ThemeChoice { +impl fmt::Display for Labelled { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - let label = match self.0.as_str() { - "Light" => crate::t!("Light"), - "Dark" => crate::t!("Dark"), - "Custom" => crate::t!("Custom"), - _ => std::borrow::Cow::Borrowed(self.0.as_str()), - }; - f.write_str(label.as_ref()) + f.write_str(&self.label) } } @@ -37,9 +34,32 @@ pub fn view_window<'a>( .iter() .map(ToString::to_string) .chain(std::iter::once("Custom".to_string())) - .map(ThemeChoice) + .map(|value| Labelled { + label: match value.as_str() { + "Light" => crate::t!("Light").into_owned(), + "Dark" => crate::t!("Dark").into_owned(), + "Custom" => crate::t!("Custom").into_owned(), + _ => value.clone(), + }, + value, + }) .collect::>(); - let selected_theme = Some(ThemeChoice(ui_theme.name.clone())); + let selected_theme = theme_options + .iter() + .find(|choice| choice.value == ui_theme.name) + .cloned(); + + let language_options = crate::i18n::Language::ALL + .into_iter() + .map(|value| Labelled { + label: value.label(), + value, + }) + .collect::>(); + let selected_language = language_options + .iter() + .find(|choice| choice.value == language) + .cloned(); let palette = ui_theme.palette.to_iced(); let colors = [ @@ -89,11 +109,11 @@ pub fn view_window<'a>( row![ text(crate::tr!("options-language-label")).size(12).width(150), iced::widget::pick_list( - Some(language), - crate::i18n::Language::ALL, - |value| value.to_string(), + selected_language, + language_options, + |choice| choice.label.clone(), ) - .on_select(Message::LanguageChanged) + .on_select(|choice| Message::LanguageChanged(choice.value)) .width(sizing.width), ] .spacing(12) @@ -125,9 +145,9 @@ pub fn view_window<'a>( iced::widget::pick_list( selected_theme, theme_options, - |value| value.to_string(), + |choice| choice.label.clone(), ) - .on_select(|choice| Message::OptionsThemeChanged(choice.0)) + .on_select(|choice| Message::OptionsThemeChanged(choice.value)) .width(sizing.width), ] .spacing(12) @@ -143,7 +163,9 @@ pub fn view_window<'a>( .width(sizing.width); let body = column![ - scrollable(content).height(sizing.height), + // Keep the scrollbar in its own lane instead of floating over the + // controls at the trailing edge of the Options content. + scrollable(content).spacing(8).height(sizing.height), Space::new().height(12), row![Space::new().width(sizing.width), close], ]