From 5e1e90dbe4cdbe356d5eb663d5b700109355cf55 Mon Sep 17 00:00:00 2001 From: ffalt Date: Fri, 8 May 2026 23:38:18 +0200 Subject: [PATCH 1/5] feat(build-modes): add "Solvable Easy" and "Solvable Expert" board fill generators --- .../choose-layout.component.html | 6 +- .../choose-layout.component.spec.ts | 6 +- .../choose-layout/choose-layout.component.ts | 11 +- .../game/game-component.component.html | 2 +- src/app/model/board.ts | 4 +- src/app/model/builder.ts | 19 +- src/app/model/builder/solvable-easy.ts | 8 + src/app/model/builder/solvable-expert.ts | 10 ++ src/app/model/builder/solvable.spec.ts | 166 ++++++++++++++++++ src/app/model/builder/solvable.ts | 65 ++++--- src/app/model/game.ts | 4 +- src/app/model/types.ts | 2 + src/assets/i18n/ar.json | 6 +- src/assets/i18n/bn.json | 6 +- src/assets/i18n/ca.json | 6 +- src/assets/i18n/cs.json | 6 +- src/assets/i18n/da.json | 6 +- src/assets/i18n/de.json | 6 +- src/assets/i18n/el.json | 6 +- src/assets/i18n/en.json | 6 +- src/assets/i18n/es.json | 6 +- src/assets/i18n/eu.json | 6 +- src/assets/i18n/fa.json | 6 +- src/assets/i18n/fi.json | 6 +- src/assets/i18n/fil.json | 6 +- src/assets/i18n/fr.json | 6 +- src/assets/i18n/hi.json | 6 +- src/assets/i18n/hu.json | 6 +- src/assets/i18n/id.json | 6 +- src/assets/i18n/it.json | 6 +- src/assets/i18n/ja.json | 6 +- src/assets/i18n/ko.json | 6 +- src/assets/i18n/ms.json | 6 +- src/assets/i18n/nl.json | 6 +- src/assets/i18n/no.json | 6 +- src/assets/i18n/pl.json | 6 +- src/assets/i18n/pt.json | 6 +- src/assets/i18n/ro.json | 6 +- src/assets/i18n/ru.json | 6 +- src/assets/i18n/sv.json | 6 +- src/assets/i18n/sw.json | 6 +- src/assets/i18n/ta.json | 6 +- src/assets/i18n/te.json | 6 +- src/assets/i18n/th.json | 6 +- src/assets/i18n/tr.json | 6 +- src/assets/i18n/uk.json | 6 +- src/assets/i18n/ur.json | 6 +- src/assets/i18n/vi.json | 6 +- src/assets/i18n/zh.json | 6 +- 49 files changed, 454 insertions(+), 71 deletions(-) create mode 100644 src/app/model/builder/solvable-easy.ts create mode 100644 src/app/model/builder/solvable-expert.ts create mode 100644 src/app/model/builder/solvable.spec.ts diff --git a/src/app/components/choose-layout/choose-layout.component.html b/src/app/components/choose-layout/choose-layout.component.html index 0578ff65..472794d6 100644 --- a/src/app/components/choose-layout/choose-layout.component.html +++ b/src/app/components/choose-layout/choose-layout.component.html @@ -2,15 +2,15 @@
- @for (m of buildModes; track m) { - + }
- @for (m of gameModes; track m) {
+@if (activeInfo()) { +
+
+ + @if (activeInfo() === 'generator') { +

{{ 'BOARD_GENERATOR' | translate }}

+ @for (m of buildModes; track m) { +
+ {{ m.id | translate }} + {{ m.id + '_DESC' | translate }} +
+ } + } + @if (activeInfo() === 'mode') { +

{{ 'GAME_MODE' | translate }}

+ @for (m of gameModes; track m) { +
+ {{ m.id | translate }} + @if (m.features.length > 0) { +
    + @for (f of m.features; track f) { +
  • {{ f.title + '_LONG' | translate }}
  • + } +
+ } @else { + {{ 'GAME_MODE_NO_HELPERS' | translate }} + } +
+ } + } +
+
+} diff --git a/src/app/components/choose-layout/choose-layout.component.scss b/src/app/components/choose-layout/choose-layout.component.scss index 7926b4d8..e1293471 100644 --- a/src/app/components/choose-layout/choose-layout.component.scss +++ b/src/app/components/choose-layout/choose-layout.component.scss @@ -8,6 +8,7 @@ display: flex; flex-direction: column; overflow: hidden; + position: relative; .choose-buttons { padding-top: 10px; @@ -25,8 +26,11 @@ flex: 1; label { - display: block; - margin-bottom: 2px; + padding: 1px 5px 5px; + display: flex; + align-items: center; + user-select: none; + gap: 4px; } select { @@ -34,16 +38,6 @@ } } - .mode { - max-width: 30%; - } - - @include mixins.respond-to-height(medium-down) { - .mode { - max-width: 50%; - } - } - @include mixins.respond-to-height(small-down) { padding-top: 4px; } @@ -65,7 +59,7 @@ align-items: unset; label { - font-size: 0.7em; + font-size: 0.9em; } .mode { @@ -77,5 +71,82 @@ } } } + + label.info-label { + cursor: pointer; + transition: color 0.15s; + + &:hover { + color: var(--text-highlight-color); + } + } + + .info-overlay { + position: fixed; + inset: 0; + background: rgb(0 0 0 / 40%); + z-index: 100; + display: flex; + align-items: center; + justify-content: center; + + .info-popup { + position: relative; + background: var(--dialog-background-color); + border: 1px solid var(--dialog-border-color); + border-radius: 12px; + padding: 1.2em 1.5em 1em; + max-width: 90%; + max-height: 90%; + overflow-y: auto; + box-shadow: var(--overlay-popup-shadow); + color: var(--main-content-text-color); + + h2 { + margin: 0 0 0.8em; + font-size: 1em; + color: var(--dialog-headline-color); + text-align: center; + } + + .close { + position: absolute; + top: 0.5em; + right: 0.6em; + cursor: pointer; + color: var(--close-color); + line-height: 1; + + &:hover { + color: var(--close-color-hover); + } + } + + .info-item { + padding: 0.5em 0; + border-bottom: 1px solid var(--dialog-border-color); + + &:last-child { + border-bottom: none; + padding-bottom: 0; + } + + strong { + display: block; + margin-bottom: 0.2em; + } + + span, ul { + color: var(--main-content-text-color-muted); + font-size: 0.85em; + } + + ul { + margin: 0; + padding-left: 1.2em; + } + } + } + } } diff --git a/src/app/components/choose-layout/choose-layout.component.ts b/src/app/components/choose-layout/choose-layout.component.ts index ab8046b4..39578284 100644 --- a/src/app/components/choose-layout/choose-layout.component.ts +++ b/src/app/components/choose-layout/choose-layout.component.ts @@ -1,4 +1,4 @@ -import { Component, inject, model, output } from '@angular/core'; +import { Component, inject, model, output, signal } from '@angular/core'; import { type BUILD_MODE_ID, BuilderModes, MODE_SOLVABLE, solvableModeForGameMode } from '../../model/builder'; import type { Layout } from '../../model/types'; import { LayoutService } from '../../service/layout.service'; @@ -6,6 +6,7 @@ import { LocalstorageService } from '../../service/localstorage.service'; import { type GAME_MODE_ID, GameModes } from '../../model/consts'; import { TranslatePipe } from '@ngx-translate/core'; import { LayoutListComponent } from '../layout-list/layout-list.component'; +import { IconInfoComponent } from '../icons/icon-info.component'; export interface StartEvent { layout: Layout; @@ -17,7 +18,7 @@ export interface StartEvent { selector: 'app-choose-layout', templateUrl: './choose-layout.component.html', styleUrls: ['./choose-layout.component.scss'], - imports: [LayoutListComponent, TranslatePipe] + imports: [LayoutListComponent, TranslatePipe, IconInfoComponent] }) export class ChooseLayoutComponent { readonly startEvent = output(); @@ -25,6 +26,7 @@ export class ChooseLayoutComponent { readonly buildMode = model(MODE_SOLVABLE); buildModes = BuilderModes; gameModes = GameModes; + activeInfo = signal<'generator' | 'mode' | null>(null); layoutService = inject(LayoutService); storage = inject(LocalstorageService); diff --git a/src/app/components/icons/icon-info.component.ts b/src/app/components/icons/icon-info.component.ts new file mode 100644 index 00000000..8647914d --- /dev/null +++ b/src/app/components/icons/icon-info.component.ts @@ -0,0 +1,8 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-icon-info', + template: ``, + styles: [`:host { display: contents; } svg { display: block; width: 1em; height: 1em; fill: currentColor; flex-shrink: 0; }`] +}) +export class IconInfoComponent {} diff --git a/src/app/model/builder/solvable-easy.ts b/src/app/model/builder/solvable-easy.ts index 05f39c8b..ad882624 100644 --- a/src/app/model/builder/solvable-easy.ts +++ b/src/app/model/builder/solvable-easy.ts @@ -1,6 +1,6 @@ import { SolvableBoardBuilderBase, type BreadthConstraint } from './solvable'; -// Easy solvable — always at least 4 open pairs (freestones.length >= 8) +// Easy solvable - always at least 4 open pairs (freestones.length >= 8) export class SolvableBoardBuilderEasy extends SolvableBoardBuilderBase { protected override breadthConstraint(): BreadthConstraint { return { min: 8, max: Infinity }; diff --git a/src/app/model/builder/solvable-expert.ts b/src/app/model/builder/solvable-expert.ts index 50a8e0dd..7e22ab06 100644 --- a/src/app/model/builder/solvable-expert.ts +++ b/src/app/model/builder/solvable-expert.ts @@ -1,6 +1,6 @@ import { SolvableBoardBuilderBase, type BreadthConstraint } from './solvable'; -// Expert solvable — at most 2 open pairs (freestones.length <= 4), more retries +// Expert solvable - at most 2 open pairs (freestones.length <= 4), more retries export class SolvableBoardBuilderExpert extends SolvableBoardBuilderBase { protected override maxRuns = 10_000; diff --git a/src/app/model/builder/solvable.spec.ts b/src/app/model/builder/solvable.spec.ts index ace8a1de..301b30c0 100644 --- a/src/app/model/builder/solvable.spec.ts +++ b/src/app/model/builder/solvable.spec.ts @@ -6,16 +6,16 @@ import type { Mapping } from '../types'; import { BuilderModes, MODE_SOLVABLE, MODE_SOLVABLE_EASY, MODE_SOLVABLE_EXPERT, solvableModeForGameMode } from '../builder'; import { GAME_MODE_EASY, GAME_MODE_EXPERT, GAME_MODE_STANDARD } from '../consts'; -// A flat 4-stone mapping — 2 pairs, no overlaps, no blocking +// A flat 4-stone mapping - 2 pairs, no overlaps, no blocking const MAPPING_4: Mapping = [[0, 0, 0], [0, 2, 0], [0, 4, 0], [0, 6, 0]]; -// A flat 8-stone mapping — 4 pairs, none blocking +// A flat 8-stone mapping - 4 pairs, none blocking const MAPPING_8: Mapping = [ [0, 0, 0], [0, 2, 0], [0, 4, 0], [0, 6, 0], [0, 8, 0], [0, 10, 0], [0, 12, 0], [0, 14, 0] ]; -// A flat 16-stone mapping — 8 pairs, none blocking +// A flat 16-stone mapping - 8 pairs, none blocking const MAPPING_16: Mapping = Array.from({ length: 16 }, (_, index) => [0, index * 2, 0] as [number, number, number]); describe('SolvableBoardBuilder (Standard)', () => { @@ -106,7 +106,7 @@ describe('SolvableBoardBuilderExpert', () => { it('should produce a valid board for a 16-stone mapping', () => { // 16 flat stones are all unblocked (freestones = 16 > 4), so constraint fails. - // Falls back to unconstrained — should still return valid board. + // Falls back to unconstrained - should still return valid board. const stones = builder.build(MAPPING_16, new Tiles(16)); expect(stones).toHaveLength(16); for (const stone of stones) { diff --git a/src/app/model/builder/solvable.ts b/src/app/model/builder/solvable.ts index f854a777..19865e6c 100644 --- a/src/app/model/builder/solvable.ts +++ b/src/app/model/builder/solvable.ts @@ -42,7 +42,7 @@ export abstract class SolvableBoardBuilderBase extends BuilderBase { return alternative; } - // Step 4: last resort — random fill, possibly unsolvable + // Step 4: last resort - random fill, possibly unsolvable const randomBoard = new RandomBoardBuilder(); return randomBoard.build(mapping, tiles); } @@ -146,6 +146,6 @@ export abstract class SolvableBoardBuilderBase extends BuilderBase { } } -// Standard solvable — no breadth constraint (original behaviour) +// Standard solvable - no breadth constraint (original behaviour) export class SolvableBoardBuilder extends SolvableBoardBuilderBase { } diff --git a/src/app/model/consts.ts b/src/app/model/consts.ts index b6917901..eaf432fb 100644 --- a/src/app/model/consts.ts +++ b/src/app/model/consts.ts @@ -20,7 +20,8 @@ export const GameModes = [ features: [ { title: 'SHUFFLE' }, { title: 'HINT' }, - { title: 'UNDO' } + { title: 'UNDO' }, + { title: 'RESCUE_SHUFFLE' } ] }, { diff --git a/src/app/model/rng.spec.ts b/src/app/model/rng.spec.ts index 99eb3192..abb0e2b3 100644 --- a/src/app/model/rng.spec.ts +++ b/src/app/model/rng.spec.ts @@ -92,7 +92,7 @@ describe('rng', () => { seedRNG('fixed'); const seeded = rng(); resetRNG(); - // generateLayoutSeed uses Math.random directly, not rng() — + // generateLayoutSeed uses Math.random directly, not rng() // so seeding has no effect on it seedRNG('fixed'); generateLayoutSeed(); diff --git a/src/app/model/rng.ts b/src/app/model/rng.ts index 29ebe5f1..a1cdf0de 100644 --- a/src/app/model/rng.ts +++ b/src/app/model/rng.ts @@ -10,7 +10,7 @@ export function mulberry32(seed: number): () => number { // eslint-disable-next-line unicorn/prefer-math-trunc let state = seed | 0; return () => { - // | 0 wraps to int32 — required by the mulberry32 algorithm, not mere truncation + // | 0 wraps to int32 - required by the mulberry32 algorithm, not mere truncation // eslint-disable-next-line unicorn/prefer-math-trunc state = (state + 0x6D_2B_79_F5) | 0; let t = Math.imul(state ^ (state >>> 15), 1 | state); diff --git a/src/assets/i18n/ar.json b/src/assets/i18n/ar.json index 9047874e..7320634e 100644 --- a/src/assets/i18n/ar.json +++ b/src/assets/i18n/ar.json @@ -58,14 +58,14 @@ "HELP": "مساعدة", "HELP_LONG": "إظهار / إخفاء هذا الحوار", "SETTINGS_LONG": "اضبط اللغة ومجموعات البلاط والألوان", - "MODE_SOLVABLE_DESC": "تعبئة مع إمكانية حل واحدة على الأقل", - "MODE_SOLVABLE_EASY_DESC": "تعبئة مع توفر 4 أزواج أو أكثر", - "MODE_SOLVABLE_EXPERT_DESC": "تعبئة مع توفر زوجين كحد أقصى", - "MODE_RANDOM_DESC": "ملء عشوائي تماماً، قد يكون غير قابل للحل", + "MODE_SOLVABLE_DESC": "مضمون بوجود حل واحد على الأقل", + "MODE_SOLVABLE_EASY_DESC": "صعوبة مخففة - أزواج كثيرة متاحة للمطابقة", + "MODE_SOLVABLE_EXPERT_DESC": "أزواج قليلة متاحة في وقت واحد - يتطلب تخطيطاً دقيقاً", + "MODE_RANDOM_DESC": "تخطيط عشوائي كامل - قد يكون غير قابل للحل", "SELECT_BOARD": "اختر اللوح", "BOARD_GENERATOR": "مولد اللوح", "START_SELECTED": "ابدأ المحددة", - "START_RANDOM": "ابدأ عشوائياً", + "START_RANDOM": "العب لوحاً عشوائياً", "TILESET": "فن البلاط", "BACKGROUND": "خلفية", "INFO": "معلومات", @@ -194,10 +194,13 @@ "t_e9": "إضافي 9", "SHUFFLE": "الخلط", "SHUFFLE_LONG": "خلط الحجارة في اللعبة", + "RESCUE_SHUFFLE": "الخلط للمتابعة", + "RESCUE_SHUFFLE_LONG": "الخلط إذا لم تعد هناك حركات متاحة", "GAME_MODE": "الوضع", "GAME_MODE_EASY": "سهل", "GAME_MODE_STANDARD": "معياري", "GAME_MODE_EXPERT": "خبير", + "GAME_MODE_NO_HELPERS": "بدون مساعدات - مهارة خالصة مطلوبة", "HOW_TO_PLAY": "كيفية اللعب", "HOW_GOAL": "الهدف هو إزالة جميع البلاط في أزواج مفتوحة من لوحة اللعبة.", "HOW_OPEN": "مفتوح", diff --git a/src/assets/i18n/bn.json b/src/assets/i18n/bn.json index b30d1fe5..8c71d4e7 100644 --- a/src/assets/i18n/bn.json +++ b/src/assets/i18n/bn.json @@ -58,14 +58,14 @@ "HELP": "সাহায্য", "HELP_LONG": "এই ডায়ালগ দেখান/লুকান", "SETTINGS_LONG": "ভাষা, টাইল সেট ও রং সামঞ্জস্য করুন", - "MODE_SOLVABLE_DESC": "অন্তত একটি সমাধানের সম্ভাবনা সহ পূরণ", - "MODE_SOLVABLE_EASY_DESC": "কমপক্ষে ৪টি জুড়ি উপলব্ধ সহ পূরণ", - "MODE_SOLVABLE_EXPERT_DESC": "সর্বাধিক ২টি জুড়ি উপলব্ধ সহ পূরণ", - "MODE_RANDOM_DESC": "সম্পূর্ণ এলোমেলো পূরণ, হয়তো সমাধানযোগ্য নয়", + "MODE_SOLVABLE_DESC": "নিশ্চিতভাবে কমপক্ষে একটি সমাধান আছে", + "MODE_SOLVABLE_EASY_DESC": "সহজ কঠিনতা - মেলানোর জন্য প্রচুর জুড়ি উপলব্ধ", + "MODE_SOLVABLE_EXPERT_DESC": "একসাথে খুব কম জুড়ি উপলব্ধ - সতর্ক পরিকল্পনা প্রয়োজন", + "MODE_RANDOM_DESC": "সম্পূর্ণ এলোমেলো বিন্যাস - সম্ভবত সমাধানযোগ্য নয়", "SELECT_BOARD": "বোর্ড নির্বাচন করুন", "BOARD_GENERATOR": "বোর্ড জেনারেটর", "START_SELECTED": "নির্বাচিত শুরু করুন", - "START_RANDOM": "এলোমেলো শুরু করুন", + "START_RANDOM": "এলোমেলো বোর্ড খেলুন", "TILESET": "টাইলসেট আর্ট", "BACKGROUND": "পটভূমি", "INFO": "তথ্য", @@ -194,10 +194,13 @@ "t_e9": "অতিরিক্ত ৯", "SHUFFLE": "এলোমেলো করুন", "SHUFFLE_LONG": "গেমের পাথরগুলো এলোমেলো করুন", + "RESCUE_SHUFFLE": "চালিয়ে যেতে এলোমেলো করুন", + "RESCUE_SHUFFLE_LONG": "আর কোনো চাল না থাকলে এলোমেলো করুন", "GAME_MODE": "মোড", "GAME_MODE_EASY": "সহজ", "GAME_MODE_STANDARD": "মানক", "GAME_MODE_EXPERT": "বিশেষজ্ঞ", + "GAME_MODE_NO_HELPERS": "কোনো সাহায্য নেই - বিশুদ্ধ দক্ষতা প্রয়োজন", "HOW_TO_PLAY": "কীভাবে খেলবেন", "HOW_GOAL": "লক্ষ্য হলো গেম বোর্ড থেকে মুক্ত জোড়ায় সব টাইল সরানো।", "HOW_OPEN": "মুক্ত", diff --git a/src/assets/i18n/ca.json b/src/assets/i18n/ca.json index af2b63b8..0c8b6e7d 100644 --- a/src/assets/i18n/ca.json +++ b/src/assets/i18n/ca.json @@ -58,14 +58,14 @@ "HELP": "Ajuda", "HELP_LONG": "Mostrar/amagar aquest diàleg", "SETTINGS_LONG": "Ajusta l'idioma, els conjunts de fitxes i els colors", - "MODE_SOLVABLE_DESC": "Un ompliment amb almenys una possibilitat de solució", - "MODE_SOLVABLE_EASY_DESC": "Un emplenament amb almenys 4 parelles disponibles", - "MODE_SOLVABLE_EXPERT_DESC": "Un emplenament amb com a màxim 2 parelles disponibles", - "MODE_RANDOM_DESC": "Un ompliment totalment aleatori, potser insoluble", + "MODE_SOLVABLE_DESC": "Garantit que té almenys una solució", + "MODE_SOLVABLE_EASY_DESC": "Dificultat relaxada - moltes parelles disponibles per combinar", + "MODE_SOLVABLE_EXPERT_DESC": "Poques parelles disponibles alhora - requereix planificació acurada", + "MODE_RANDOM_DESC": "Disposició completament aleatòria - possiblement insoluble", "SELECT_BOARD": "Selecciona el tauler", "BOARD_GENERATOR": "Generador de tauler", "START_SELECTED": "Comença seleccionar", - "START_RANDOM": "Comença aleatori", + "START_RANDOM": "Juga un tauler aleatori", "TILESET": "Art de fitxes", "BACKGROUND": "Fons", "INFO": "Informació", @@ -194,10 +194,13 @@ "t_e9": "Extra 9", "SHUFFLE": "Barallar", "SHUFFLE_LONG": "Baralla les pedres al joc", + "RESCUE_SHUFFLE": "Baralla per continuar", + "RESCUE_SHUFFLE_LONG": "Baralla si no hi ha més moviments", "GAME_MODE": "Mode", "GAME_MODE_EASY": "Fàcil", "GAME_MODE_STANDARD": "Estàndard", "GAME_MODE_EXPERT": "Expert", + "GAME_MODE_NO_HELPERS": "Sense ajudes - cal habilitat pura", "HOW_TO_PLAY": "Com jugar", "HOW_GOAL": "L'objectiu és eliminar totes les fitxes en parelles obertes del tauler de joc.", "HOW_OPEN": "Obrir", diff --git a/src/assets/i18n/cs.json b/src/assets/i18n/cs.json index f1bd7c82..5890086a 100644 --- a/src/assets/i18n/cs.json +++ b/src/assets/i18n/cs.json @@ -58,14 +58,14 @@ "HELP": "Pomoc", "HELP_LONG": "Zobrazit/skrýt tento dialog", "SETTINGS_LONG": "Upravte jazyk, sady dlaždic a barvy", - "MODE_SOLVABLE_DESC": "Vyplnění s alespoň jednou možností řešení", - "MODE_SOLVABLE_EASY_DESC": "Plnění s alespoň 4 dostupnými páry", - "MODE_SOLVABLE_EXPERT_DESC": "Plnění s nejvýše 2 dostupnými páry", - "MODE_RANDOM_DESC": "Zcela náhodné vyplnění, možná neřešitelné", + "MODE_SOLVABLE_DESC": "Zaručeně má alespoň jedno řešení", + "MODE_SOLVABLE_EASY_DESC": "Uvolněná obtížnost - k párování je k dispozici mnoho párů", + "MODE_SOLVABLE_EXPERT_DESC": "Najednou je k dispozici málo párů - vyžaduje pečlivé plánování", + "MODE_RANDOM_DESC": "Zcela náhodné rozmístění - možná neřešitelné", "SELECT_BOARD": "Vybrat desku", "BOARD_GENERATOR": "Generátor desek", "START_SELECTED": "Spustit vybrané", - "START_RANDOM": "Spustit náhodné", + "START_RANDOM": "Hrát náhodnou desku", "TILESET": "Umění dlaždic", "BACKGROUND": "Pozadí", "INFO": "Info", @@ -194,10 +194,13 @@ "t_e9": "Extra 9", "SHUFFLE": "Zamíchat", "SHUFFLE_LONG": "Zamíchat kameny ve hře", + "RESCUE_SHUFFLE": "Zamíchat pro pokračování", + "RESCUE_SHUFFLE_LONG": "Zamíchat, pokud nejsou žádné další tahy", "GAME_MODE": "Režim", "GAME_MODE_EASY": "Snadné", "GAME_MODE_STANDARD": "Standardní", "GAME_MODE_EXPERT": "Expert", + "GAME_MODE_NO_HELPERS": "Bez pomůcek - vyžaduje čistou dovednost", "HOW_TO_PLAY": "Jak hrát", "HOW_GOAL": "Cílem je odstranit ze hracího pole všechny dlaždice v otevřených párech.", "HOW_OPEN": "Otevřít", diff --git a/src/assets/i18n/da.json b/src/assets/i18n/da.json index 1cee3b35..62259ea8 100644 --- a/src/assets/i18n/da.json +++ b/src/assets/i18n/da.json @@ -58,14 +58,14 @@ "HELP": "Hjælp", "HELP_LONG": "Vis/skjul denne dialog", "SETTINGS_LONG": "Juster sprog, brikkesæt og farver", - "MODE_SOLVABLE_DESC": "En fyldning med mindst en løsningsmulighed", - "MODE_SOLVABLE_EASY_DESC": "En udfyldning med mindst 4 tilgængelige par", - "MODE_SOLVABLE_EXPERT_DESC": "En udfyldning med højst 2 tilgængelige par", - "MODE_RANDOM_DESC": "Fuldstændig tilfældig fyldning, måske uløselig", + "MODE_SOLVABLE_DESC": "Garanteret at have mindst én løsning", + "MODE_SOLVABLE_EASY_DESC": "Afslappet sværhedsgrad - masser af par tilgængelige til matchning", + "MODE_SOLVABLE_EXPERT_DESC": "Få par tilgængelige ad gangen - kræver omhyggelig planlægning", + "MODE_RANDOM_DESC": "Fuldstændig tilfældig layout - muligvis uløselig", "SELECT_BOARD": "Vælg bræt", "BOARD_GENERATOR": "Bræt generator", "START_SELECTED": "Start valgt", - "START_RANDOM": "Start tilfældig", + "START_RANDOM": "Spil tilfældig bræt", "TILESET": "Brikke kunst", "BACKGROUND": "Baggrund", "INFO": "Info", @@ -194,10 +194,13 @@ "t_e9": "Ekstra 9", "SHUFFLE": "Bland", "SHUFFLE_LONG": "Bland sten i spillet", + "RESCUE_SHUFFLE": "Bland for at fortsætte", + "RESCUE_SHUFFLE_LONG": "Bland hvis der ikke er flere træk", "GAME_MODE": "Tilstand", "GAME_MODE_EASY": "Let", "GAME_MODE_STANDARD": "Standard", "GAME_MODE_EXPERT": "Ekspert", + "GAME_MODE_NO_HELPERS": "Ingen hjælpemidler - ren dygtighed kræves", "HOW_TO_PLAY": "Sådan spiller du", "HOW_GOAL": "Målet er at fjerne alle brikker i åbne par fra spillebrættet.", "HOW_OPEN": "Åben", diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index 8f78593b..2fb9dc59 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -58,14 +58,14 @@ "HELP": "Hilfe", "HELP_LONG": "Diesen Dialog anzeigen/ausblenden", "SETTINGS_LONG": "Sprache, Steine und Farben anpassen", - "MODE_SOLVABLE_DESC": "Aufbau mit mindestens einer Lösung", - "MODE_SOLVABLE_EASY_DESC": "Aufbau mit mindestens 4 verfügbaren Paaren", - "MODE_SOLVABLE_EXPERT_DESC": "Aufbau mit höchstens 2 verfügbaren Paaren", - "MODE_RANDOM_DESC": "Zufälliger Aufbau, vielleicht unlösbar", + "MODE_SOLVABLE_DESC": "Garantiert lösbar mit mindestens einer Lösung", + "MODE_SOLVABLE_EASY_DESC": "Entspannte Schwierigkeit - viele Paare verfügbar", + "MODE_SOLVABLE_EXPERT_DESC": "Wenige Paare auf einmal verfügbar - erfordert sorgfältige Planung", + "MODE_RANDOM_DESC": "Vollständig zufälliger Aufbau - möglicherweise unlösbar", "SELECT_BOARD": "Spielbrett auswählen", "BOARD_GENERATOR": "Spielgenerator", "START_SELECTED": "Auswahl starten", - "START_RANDOM": "Zufälliges starten", + "START_RANDOM": "Zufälliges Spielfeld spielen", "TILESET": "Stein-Motive", "BACKGROUND": "Hintergrund", "INFO": "Info", @@ -194,10 +194,13 @@ "t_e9": "Extra 9", "SHUFFLE": "Mischen", "SHUFFLE_LONG": "Steine im Spiel mischen", + "RESCUE_SHUFFLE": "Mischen zum Weiterspielen", + "RESCUE_SHUFFLE_LONG": "Mischen wenn keine Züge mehr möglich sind", "GAME_MODE": "Modus", "GAME_MODE_EASY": "Einfach", "GAME_MODE_STANDARD": "Standard", "GAME_MODE_EXPERT": "Profi", + "GAME_MODE_NO_HELPERS": "Ohne Hilfsmittel - nur Können zählt", "HOW_TO_PLAY": "Spielanleitung", "HOW_GOAL": "Das Ziel ist es, alle Steine in offenen Paaren vom Spielbrett zu entfernen.", "HOW_OPEN": "Offen", diff --git a/src/assets/i18n/el.json b/src/assets/i18n/el.json index 084976fa..4f4b6982 100644 --- a/src/assets/i18n/el.json +++ b/src/assets/i18n/el.json @@ -58,14 +58,14 @@ "HELP": "Βοήθεια", "HELP_LONG": "Εμφάνιση / απόκρυψη αυτού του διαλόγου", "SETTINGS_LONG": "Προσαρμόστε τη γλώσσα, τα σετ πλακιδίων και τα χρώματα", - "MODE_SOLVABLE_DESC": "Ένα γέμισμα με τουλάχιστον μία δυνατότητα επίλυσης", - "MODE_SOLVABLE_EASY_DESC": "Πλήρωση με τουλάχιστον 4 ζεύγη διαθέσιμα", - "MODE_SOLVABLE_EXPERT_DESC": "Πλήρωση με το πολύ 2 ζεύγη διαθέσιμα", - "MODE_RANDOM_DESC": "Ένα εντελώς τυχαίο γέμισμα, ίσως άλυτο", + "MODE_SOLVABLE_DESC": "Εγγυημένα έχει τουλάχιστον μία λύση", + "MODE_SOLVABLE_EASY_DESC": "Χαλαρή δυσκολία - άφθονα ζεύγη διαθέσιμα για αντιστοίχιση", + "MODE_SOLVABLE_EXPERT_DESC": "Λίγα ζεύγη διαθέσιμα ταυτόχρονα - απαιτεί προσεκτικό σχεδιασμό", + "MODE_RANDOM_DESC": "Πλήρως τυχαία διάταξη - πιθανώς άλυτο", "SELECT_BOARD": "Επιλέξτε σανίδα", "BOARD_GENERATOR": "Γεννήτρια σανίδας", "START_SELECTED": "Ξεκίνημα επιλεγμένου", - "START_RANDOM": "Ξεκίνημα τυχαίου", + "START_RANDOM": "Παίξτε τυχαία σανίδα", "TILESET": "Τέχνη πλακιδίων", "BACKGROUND": "Φόντο", "INFO": "Πληροφορίες", @@ -194,10 +194,13 @@ "t_e9": "Επιπλέον 9", "SHUFFLE": "Ανακάτεψη", "SHUFFLE_LONG": "Ανακάτεψη πετρών στο παιχνίδι", + "RESCUE_SHUFFLE": "Ανακάτεψη για συνέχεια", + "RESCUE_SHUFFLE_LONG": "Ανακάτεψη αν δεν υπάρχουν άλλες κινήσεις", "GAME_MODE": "Κατάσταση λειτουργίας", "GAME_MODE_EASY": "Εύκολο", "GAME_MODE_STANDARD": "Τυπικό", "GAME_MODE_EXPERT": "Ειδικός", + "GAME_MODE_NO_HELPERS": "Χωρίς βοήθεια - απαιτείται καθαρή ικανότητα", "HOW_TO_PLAY": "Πώς να παίξετε", "HOW_GOAL": "Ο στόχος είναι να αφαιρεθούν όλα τα πλακάκια σε ανοιχτά ζεύγη από τη σανίδα παιχνιδιού.", "HOW_OPEN": "Ανοικτό", diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 4d85bb48..f09f41b7 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -8,7 +8,7 @@ "USE_NOW": "Use now", "FULLSCREEN": "Fullscreen", "HINT_LONG": "Show possible moves", - "UNDO_LONG": "Undo last move", + "UNDO_LONG": "Undo last moves", "RESTART_LONG": "Start a new game", "PAUSE_LONG": "Continue/Pause game", "MSG_CONTINUE_PAUSE": "Continue Game…", @@ -58,14 +58,15 @@ "HELP": "Help", "HELP_LONG": "Show/hide this dialog", "SETTINGS_LONG": "Adjust language, tile sets & colors", - "MODE_SOLVABLE_DESC": "A fill with at least one solving possibility", - "MODE_SOLVABLE_EASY_DESC": "A fill with 4 or more pairs available", - "MODE_SOLVABLE_EXPERT_DESC": "A fill with at most 2 pairs available", - "MODE_RANDOM_DESC": "A fully random fill, maybe unsolvable", + "MODE_SOLVABLE_DESC": "Guaranteed to have at least one solution", + "MODE_SOLVABLE_EASY_DESC": "Relaxed difficulty - plenty of pairs available to match", + "MODE_SOLVABLE_EXPERT_DESC": "Few pairs available at once - demands careful planning", + "MODE_RANDOM_DESC": "Fully random layout - possibly unsolvable", + "GAME_MODE_NO_HELPERS": "No helpers - pure skill required", "SELECT_BOARD": "Select Board", "BOARD_GENERATOR": "Board Generator", "START_SELECTED": "Start Selected", - "START_RANDOM": "Start Random", + "START_RANDOM": "Play Random Board", "TILESET": "Tileset Art", "BACKGROUND": "Background", "INFO": "Info", @@ -194,6 +195,8 @@ "t_e9": "Extra 9", "SHUFFLE": "Shuffle", "SHUFFLE_LONG": "Shuffle stones in the game", + "RESCUE_SHUFFLE": "Shuffle to Continue", + "RESCUE_SHUFFLE_LONG": "Shuffle if there are no more moves", "GAME_MODE": "Mode", "GAME_MODE_EASY": "Easy", "GAME_MODE_STANDARD": "Standard", diff --git a/src/assets/i18n/es.json b/src/assets/i18n/es.json index 24cc1f67..e4748deb 100644 --- a/src/assets/i18n/es.json +++ b/src/assets/i18n/es.json @@ -58,14 +58,14 @@ "HELP": "Ayuda", "HELP_LONG": "Mostrar/ocultar esta ventana", "SETTINGS_LONG": "Configurar idioma, conjunto de fichas y colores", - "MODE_SOLVABLE_DESC": "Un relleno con al menos una solución posible", - "MODE_SOLVABLE_EASY_DESC": "Un relleno con al menos 4 pares disponibles", - "MODE_SOLVABLE_EXPERT_DESC": "Un relleno con como máximo 2 pares disponibles", - "MODE_RANDOM_DESC": "Relleno totalmente aleatorio, quizás sin solución", + "MODE_SOLVABLE_DESC": "Garantizado que tiene al menos una solución", + "MODE_SOLVABLE_EASY_DESC": "Dificultad relajada - muchos pares disponibles para combinar", + "MODE_SOLVABLE_EXPERT_DESC": "Pocos pares disponibles a la vez - exige planificación cuidadosa", + "MODE_RANDOM_DESC": "Distribución completamente aleatoria - posiblemente sin solución", "SELECT_BOARD": "Seleccionar tablero", "BOARD_GENERATOR": "Generador de tablero", "START_SELECTED": "Iniciar seleccionado", - "START_RANDOM": "Iniciar aleatorio", + "START_RANDOM": "Jugar tablero aleatorio", "TILESET": "Diseño de las fichas", "BACKGROUND": "Fondo", "INFO": "Información", @@ -194,10 +194,13 @@ "t_e9": "Extra 9", "SHUFFLE": "Barajar", "SHUFFLE_LONG": "Barajar fichas en la partida", + "RESCUE_SHUFFLE": "Barajar para continuar", + "RESCUE_SHUFFLE_LONG": "Barajar si no hay más movimientos", "GAME_MODE": "Modo", "GAME_MODE_EASY": "Fácil", "GAME_MODE_STANDARD": "Normal", "GAME_MODE_EXPERT": "Experto", + "GAME_MODE_NO_HELPERS": "Sin ayudas - se requiere habilidad pura", "HOW_TO_PLAY": "Cómo jugar", "HOW_GOAL": "El objetivo es eliminar todos los pares de fichas abiertas del tablero de juego.", "HOW_OPEN": "Abierto", diff --git a/src/assets/i18n/eu.json b/src/assets/i18n/eu.json index 3d526352..5af9f2a8 100644 --- a/src/assets/i18n/eu.json +++ b/src/assets/i18n/eu.json @@ -58,14 +58,14 @@ "HELP": "Laguntza", "HELP_LONG": "Erakutsi/ezkutatu leiho hau", "SETTINGS_LONG": "Doitu hizkuntza, fitxa-sortak eta koloreak", - "MODE_SOLVABLE_DESC": "Gutxienez ebazteko aukera batekin bete", - "MODE_SOLVABLE_EASY_DESC": "Gutxienez 4 pare erabilgarri dituen bete", - "MODE_SOLVABLE_EXPERT_DESC": "Gehienez 2 pare erabilgarri dituen bete", - "MODE_RANDOM_DESC": "Erabateko ausaz osatu, nahiz eta ebatzi ezina izan", + "MODE_SOLVABLE_DESC": "Gutxienez irtenbide bat duela bermatuta", + "MODE_SOLVABLE_EASY_DESC": "Zailtasun erlaxatua - pare ugari eskuragarri", + "MODE_SOLVABLE_EXPERT_DESC": "Pare gutxi aldi berean eskuragarri - plangintza arretatsua eskatzen du", + "MODE_RANDOM_DESC": "Ausazko banaketa osoa - agian ebaztezinik", "SELECT_BOARD": "Aukeratu taula", "BOARD_GENERATOR": "Taula-sortzailea", "START_SELECTED": "Hasi hautatutakoa", - "START_RANDOM": "Hasi ausazkoa", + "START_RANDOM": "Jolastu ausazko taula", "TILESET": "Fitxa-sorten artea", "BACKGROUND": "Atzeko planoa", "INFO": "Infoa", @@ -194,10 +194,13 @@ "t_e9": "Estra 9", "SHUFFLE": "Nahastu", "SHUFFLE_LONG": "Nahastu taulako harriak", + "RESCUE_SHUFFLE": "Nahastu jarraitzeko", + "RESCUE_SHUFFLE_LONG": "Nahastu mugimendurik ez badago", "GAME_MODE": "Modua", "GAME_MODE_EASY": "Erraza", "GAME_MODE_STANDARD": "Arrunta", "GAME_MODE_EXPERT": "Aditua", + "GAME_MODE_NO_HELPERS": "Laguntzarik gabe - trebetasun hutsa behar da", "HOW_TO_PLAY": "Nola jokatu", "HOW_GOAL": "Helburua taulatik fitxa gutziak kentzea da, aske dauden fitxekin bikoteak osatuz.", "HOW_OPEN": "Ireki", diff --git a/src/assets/i18n/fa.json b/src/assets/i18n/fa.json index dc12502f..afb439d3 100644 --- a/src/assets/i18n/fa.json +++ b/src/assets/i18n/fa.json @@ -58,14 +58,14 @@ "HELP": "راهنما", "HELP_LONG": "نمایش/مخفی کردن این پنجره", "SETTINGS_LONG": "تنظیم زبان، مجموعه کاشی و رنگ‌ها", - "MODE_SOLVABLE_DESC": "پر کردن با حداقل یک راه‌حل", - "MODE_SOLVABLE_EASY_DESC": "پرشدن با حداقل ۴ جفت در دسترس", - "MODE_SOLVABLE_EXPERT_DESC": "پرشدن با حداکثر ۲ جفت در دسترس", - "MODE_RANDOM_DESC": "پر کردن کاملاً تصادفی، شاید غیرقابل حل", + "MODE_SOLVABLE_DESC": "تضمین شده دارای حداقل یک راه‌حل است", + "MODE_SOLVABLE_EASY_DESC": "سختی آسان‌گیرانه - جفت‌های فراوانی برای تطبیق در دسترس", + "MODE_SOLVABLE_EXPERT_DESC": "جفت‌های کمی به‌طور همزمان در دسترس - نیاز به برنامه‌ریزی دقیق", + "MODE_RANDOM_DESC": "چیدمان کاملاً تصادفی - احتمالاً غیرقابل حل", "SELECT_BOARD": "انتخاب صفحه", "BOARD_GENERATOR": "سازنده صفحه", "START_SELECTED": "شروع انتخابی", - "START_RANDOM": "شروع تصادفی", + "START_RANDOM": "بازی صفحه تصادفی", "TILESET": "هنر کاشی", "BACKGROUND": "پس‌زمینه", "INFO": "اطلاعات", @@ -194,10 +194,13 @@ "t_e9": "اضافی ۹", "SHUFFLE": "به‌هم‌ریختن", "SHUFFLE_LONG": "به‌هم ریختن سنگ‌ها در بازی", + "RESCUE_SHUFFLE": "به‌هم‌ریختن برای ادامه", + "RESCUE_SHUFFLE_LONG": "به‌هم ریختن اگر حرکتی نمانده باشد", "GAME_MODE": "حالت", "GAME_MODE_EASY": "آسان", "GAME_MODE_STANDARD": "استاندارد", "GAME_MODE_EXPERT": "حرفه‌ای", + "GAME_MODE_NO_HELPERS": "بدون کمک - مهارت خالص لازم است", "HOW_TO_PLAY": "نحوه بازی", "HOW_GOAL": "هدف حذف تمام کاشی‌ها به صورت جفت‌های باز از صفحه بازی است.", "HOW_OPEN": "باز", diff --git a/src/assets/i18n/fi.json b/src/assets/i18n/fi.json index c6ec76eb..90961918 100644 --- a/src/assets/i18n/fi.json +++ b/src/assets/i18n/fi.json @@ -58,14 +58,14 @@ "HELP": "Ohje", "HELP_LONG": "Näytä/piilota tämä dialogi", "SETTINGS_LONG": "Säädä kieltä, kivisetejä ja värejä", - "MODE_SOLVABLE_DESC": "Täyttö, jossa on vähintään yksi ratkaisumahdollisuus", - "MODE_SOLVABLE_EASY_DESC": "Täyttö, jossa vähintään 4 paria saatavilla", - "MODE_SOLVABLE_EXPERT_DESC": "Täyttö, jossa enintään 2 paria saatavilla", - "MODE_RANDOM_DESC": "Täysin satunnainen täyttö, ehkä ratkaisematon", + "MODE_SOLVABLE_DESC": "Taattu vähintään yksi ratkaisu", + "MODE_SOLVABLE_EASY_DESC": "Rento vaikeustaso - runsaasti pareja yhdistettäväksi", + "MODE_SOLVABLE_EXPERT_DESC": "Vähän pareja kerrallaan saatavilla - vaatii huolellista suunnittelua", + "MODE_RANDOM_DESC": "Täysin satunnainen asettelu - mahdollisesti ratkaisematon", "SELECT_BOARD": "Valitse lauta", "BOARD_GENERATOR": "Lautapelin luoja", "START_SELECTED": "Aloita valittu", - "START_RANDOM": "Aloita satunnainen", + "START_RANDOM": "Pelaa satunnainen lauta", "TILESET": "Kivitaiteen tyyli", "BACKGROUND": "Tausta", "INFO": "Tiedot", @@ -194,10 +194,13 @@ "t_e9": "Lisä 9", "SHUFFLE": "Sekoita", "SHUFFLE_LONG": "Sekoita kivet pelissä", + "RESCUE_SHUFFLE": "Sekoita jatkaaksesi", + "RESCUE_SHUFFLE_LONG": "Sekoita jos ei ole enää siirtoja", "GAME_MODE": "Tila", "GAME_MODE_EASY": "Helppo", "GAME_MODE_STANDARD": "Vakio", "GAME_MODE_EXPERT": "Asiantuntija", + "GAME_MODE_NO_HELPERS": "Ei apuvälineitä - vaaditaan puhdasta taitoa", "HOW_TO_PLAY": "Kuinka pelata", "HOW_GOAL": "Tavoitteena on poistaa kaikki kivet avoimissa pareissa pelilauta.", "HOW_OPEN": "Avoin", diff --git a/src/assets/i18n/fil.json b/src/assets/i18n/fil.json index 940d0cb4..6818dbec 100644 --- a/src/assets/i18n/fil.json +++ b/src/assets/i18n/fil.json @@ -58,14 +58,14 @@ "HELP": "Tulong", "HELP_LONG": "Ipakita/itago ang dialog na ito", "SETTINGS_LONG": "Ayusin ang wika, tile set at mga kulay", - "MODE_SOLVABLE_DESC": "Pagpuno na may kahit isang solusyon", - "MODE_SOLVABLE_EASY_DESC": "Pagpuno na may hindi bababa sa 4 na pares na available", - "MODE_SOLVABLE_EXPERT_DESC": "Pagpuno na may hindi hihigit sa 2 pares na available", - "MODE_RANDOM_DESC": "Ganap na random na pagpuno, maaaring hindi malulutas", + "MODE_SOLVABLE_DESC": "Garantisadong may kahit isang solusyon", + "MODE_SOLVABLE_EASY_DESC": "Nakakarelaks na kahirapan - maraming pares na available para itugma", + "MODE_SOLVABLE_EXPERT_DESC": "Kakaunting pares na available nang sabay - nangangailangan ng maingat na pagpaplano", + "MODE_RANDOM_DESC": "Ganap na random na layout - posibleng hindi malulutas", "SELECT_BOARD": "Pumili ng Board", "BOARD_GENERATOR": "Tagabuo ng Board", "START_SELECTED": "Simulan ang Napili", - "START_RANDOM": "Simulan ang Random", + "START_RANDOM": "Maglaro ng Random na Board", "TILESET": "Disenyo ng Tile", "BACKGROUND": "Background", "INFO": "Impormasyon", @@ -194,10 +194,13 @@ "t_e9": "Dagdag 9", "SHUFFLE": "Haluin", "SHUFFLE_LONG": "Haluin ang mga bato sa laro", + "RESCUE_SHUFFLE": "Haluin para Magpatuloy", + "RESCUE_SHUFFLE_LONG": "Haluin kung wala nang mga galaw", "GAME_MODE": "Mode", "GAME_MODE_EASY": "Madali", "GAME_MODE_STANDARD": "Karaniwan", "GAME_MODE_EXPERT": "Eksperto", + "GAME_MODE_NO_HELPERS": "Walang tulong - kailangan ng puro kasanayan", "HOW_TO_PLAY": "Paano maglaro", "HOW_GOAL": "Ang layunin ay alisin ang lahat ng tile sa mga bukas na pares mula sa board.", "HOW_OPEN": "Bukas", diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json index 57a8535e..ca69954b 100644 --- a/src/assets/i18n/fr.json +++ b/src/assets/i18n/fr.json @@ -58,14 +58,14 @@ "HELP": "Aide", "HELP_LONG": "Afficher/masquer cette aide", "SETTINGS_LONG": "Ajuster la langue, les tuiles et les couleurs", - "MODE_SOLVABLE_DESC": "Un remplissage avec au moins une solution possible", - "MODE_SOLVABLE_EASY_DESC": "Un remplissage avec au moins 4 paires disponibles", - "MODE_SOLVABLE_EXPERT_DESC": "Un remplissage avec au plus 2 paires disponibles", - "MODE_RANDOM_DESC": "Un remplissage totalement aléatoire, peut être impossible à résoudre", + "MODE_SOLVABLE_DESC": "Garanti d'avoir au moins une solution", + "MODE_SOLVABLE_EASY_DESC": "Difficulté détendue - de nombreuses paires disponibles à associer", + "MODE_SOLVABLE_EXPERT_DESC": "Peu de paires disponibles à la fois - exige une planification minutieuse", + "MODE_RANDOM_DESC": "Disposition entièrement aléatoire - peut être insoluble", "SELECT_BOARD": "Sélectionner un plateau", "BOARD_GENERATOR": "Générateur de plateau", "START_SELECTED": "Commencer la sélection", - "START_RANDOM": "Commencer aléatoirement", + "START_RANDOM": "Jouer un plateau aléatoire", "TILESET": "Style de tuiles", "BACKGROUND": "Arrière-plan", "INFO": "Info", @@ -194,10 +194,13 @@ "t_e9": "Extra 9", "SHUFFLE": "Mélanger", "SHUFFLE_LONG": "Mélanger les tuiles en jeu", + "RESCUE_SHUFFLE": "Mélanger pour continuer", + "RESCUE_SHUFFLE_LONG": "Mélanger s'il n'y a plus de mouvements", "GAME_MODE": "Mode", "GAME_MODE_EASY": "Facile", "GAME_MODE_STANDARD": "Standard", "GAME_MODE_EXPERT": "Expert", + "GAME_MODE_NO_HELPERS": "Sans aide - pure habileté requise", "HOW_TO_PLAY": "Comment jouer", "HOW_GOAL": "Le but est d'éliminer toutes les paires de tuiles libres du plateau de jeu.", "HOW_OPEN": "Libre", diff --git a/src/assets/i18n/hi.json b/src/assets/i18n/hi.json index 6bfb47ed..0848273c 100644 --- a/src/assets/i18n/hi.json +++ b/src/assets/i18n/hi.json @@ -58,14 +58,14 @@ "HELP": "सहायता", "HELP_LONG": "इस संवाद को दिखाएँ/छुपाएँ", "SETTINGS_LONG": "भाषा, पत्थर सेट और रंग समायोजित करें", - "MODE_SOLVABLE_DESC": "कम से कम एक समाधान की संभावना के साथ भरण", - "MODE_SOLVABLE_EASY_DESC": "कम से कम 4 जोड़े उपलब्ध वाला भरण", - "MODE_SOLVABLE_EXPERT_DESC": "अधिकतम 2 जोड़े उपलब्ध वाला भरण", - "MODE_RANDOM_DESC": "पूरी तरह यादृच्छिक भरण, शायद अघुलनशील", + "MODE_SOLVABLE_DESC": "कम से कम एक समाधान होने की गारंटी", + "MODE_SOLVABLE_EASY_DESC": "आसान कठिनाई - मिलान के लिए प्रचुर जोड़े उपलब्ध", + "MODE_SOLVABLE_EXPERT_DESC": "एक साथ कम जोड़े उपलब्ध - सावधानीपूर्ण योजना की मांग", + "MODE_RANDOM_DESC": "पूरी तरह यादृच्छिक लेआउट - संभवतः अघुलनशील", "SELECT_BOARD": "बोर्ड चुनें", "BOARD_GENERATOR": "बोर्ड जनरेटर", "START_SELECTED": "चयनित शुरू करें", - "START_RANDOM": "यादृच्छिक शुरू करें", + "START_RANDOM": "यादृच्छिक बोर्ड खेलें", "TILESET": "पत्थर कला", "BACKGROUND": "पृष्ठभूमि", "INFO": "जानकारी", @@ -194,10 +194,13 @@ "t_e9": "अतिरिक्त 9", "SHUFFLE": "फेरबदल", "SHUFFLE_LONG": "खेल में पत्थरों को फेरबदल करें", + "RESCUE_SHUFFLE": "जारी रखने के लिए फेरबदल", + "RESCUE_SHUFFLE_LONG": "फेरबदल करें यदि कोई और चाल नहीं है", "GAME_MODE": "तरीका", "GAME_MODE_EASY": "आसान", "GAME_MODE_STANDARD": "मानक", "GAME_MODE_EXPERT": "विशेषज्ञ", + "GAME_MODE_NO_HELPERS": "कोई सहायता नहीं - शुद्ध कौशल आवश्यक", "HOW_TO_PLAY": "कैसे खेलें", "HOW_GOAL": "लक्ष्य गेम बोर्ड से खुली जोड़ी में सभी पत्थरों को हटाना है।", "HOW_OPEN": "खुला", diff --git a/src/assets/i18n/hu.json b/src/assets/i18n/hu.json index fae51b6a..24945b59 100644 --- a/src/assets/i18n/hu.json +++ b/src/assets/i18n/hu.json @@ -58,14 +58,14 @@ "HELP": "Súgó", "HELP_LONG": "Párbeszédablak megjelenítése/elrejtése", "SETTINGS_LONG": "Nyelv, kőszetek és színek beállítása", - "MODE_SOLVABLE_DESC": "Kitöltés legalább egy megoldási lehetőséggel", - "MODE_SOLVABLE_EASY_DESC": "Kitöltés legalább 4 elérhető párral", - "MODE_SOLVABLE_EXPERT_DESC": "Kitöltés legfeljebb 2 elérhető párral", - "MODE_RANDOM_DESC": "Teljesen véletlenszerű kitöltés, amely lehet, hogy megoldhatatlan", + "MODE_SOLVABLE_DESC": "Garantáltan legalább egy megoldással rendelkezik", + "MODE_SOLVABLE_EASY_DESC": "Könnyed nehézség - rengeteg pár elérhető a párosításhoz", + "MODE_SOLVABLE_EXPERT_DESC": "Kevés pár elérhető egyszerre - gondos tervezést igényel", + "MODE_RANDOM_DESC": "Teljesen véletlenszerű elrendezés - esetleg megoldhatatlan", "SELECT_BOARD": "Tábla kiválasztása", "BOARD_GENERATOR": "Tábla generátor", "START_SELECTED": "Kiválasztott indítása", - "START_RANDOM": "Véletlen indítása", + "START_RANDOM": "Véletlenszerű tábla játszása", "TILESET": "Kőszett", "BACKGROUND": "Háttér", "INFO": "Információ", @@ -194,10 +194,13 @@ "t_e9": "Extra 9", "SHUFFLE": "Keverés", "SHUFFLE_LONG": "Kövek keverése a játékban", + "RESCUE_SHUFFLE": "Keverés a folytatáshoz", + "RESCUE_SHUFFLE_LONG": "Keverés ha nincs több lépés", "GAME_MODE": "Mód", "GAME_MODE_EASY": "Könnyű", "GAME_MODE_STANDARD": "Szabványos", "GAME_MODE_EXPERT": "Haladó", + "GAME_MODE_NO_HELPERS": "Nincs segítség - tiszta ügyességre van szükség", "HOW_TO_PLAY": "Hogyan kell játszani", "HOW_GOAL": "A cél az összes nyitott pár eltávolítása a játéktábláról.", "HOW_OPEN": "Nyitott", diff --git a/src/assets/i18n/id.json b/src/assets/i18n/id.json index 9b1ecb25..5c870cbc 100644 --- a/src/assets/i18n/id.json +++ b/src/assets/i18n/id.json @@ -58,14 +58,14 @@ "HELP": "Bantuan", "HELP_LONG": "Tampilkan/sembunyikan dialog ini", "SETTINGS_LONG": "Sesuaikan bahasa, set ubin & warna", - "MODE_SOLVABLE_DESC": "Pengisian dengan setidaknya satu kemungkinan solusi", - "MODE_SOLVABLE_EASY_DESC": "Pengisian dengan setidaknya 4 pasang tersedia", - "MODE_SOLVABLE_EXPERT_DESC": "Pengisian dengan paling banyak 2 pasang tersedia", - "MODE_RANDOM_DESC": "Pengisian acak total, mungkin tidak dapat dipecahkan", + "MODE_SOLVABLE_DESC": "Dijamin memiliki setidaknya satu solusi", + "MODE_SOLVABLE_EASY_DESC": "Tingkat kesulitan santai - banyak pasangan tersedia untuk dicocokkan", + "MODE_SOLVABLE_EXPERT_DESC": "Sedikit pasangan tersedia sekaligus - membutuhkan perencanaan cermat", + "MODE_RANDOM_DESC": "Tata letak sepenuhnya acak - mungkin tidak dapat diselesaikan", "SELECT_BOARD": "Pilih Papan", "BOARD_GENERATOR": "Generator Papan", "START_SELECTED": "Mulai Terpilih", - "START_RANDOM": "Mulai Acak", + "START_RANDOM": "Mainkan Papan Acak", "TILESET": "Seni Ubin", "BACKGROUND": "Latar Belakang", "INFO": "Info", @@ -194,10 +194,13 @@ "t_e9": "Ekstra 9", "SHUFFLE": "Acak", "SHUFFLE_LONG": "Acak batu dalam permainan", + "RESCUE_SHUFFLE": "Acak untuk Melanjutkan", + "RESCUE_SHUFFLE_LONG": "Acak jika tidak ada lagi gerakan", "GAME_MODE": "Mode", "GAME_MODE_EASY": "Mudah", "GAME_MODE_STANDARD": "Standar", "GAME_MODE_EXPERT": "Ahli", + "GAME_MODE_NO_HELPERS": "Tanpa bantuan - membutuhkan kemampuan murni", "HOW_TO_PLAY": "Cara bermain", "HOW_GOAL": "Tujuannya adalah menghapus semua ubin dalam pasangan terbuka dari papan permainan.", "HOW_OPEN": "Terbuka", diff --git a/src/assets/i18n/it.json b/src/assets/i18n/it.json index 60e98521..fd2c33bc 100644 --- a/src/assets/i18n/it.json +++ b/src/assets/i18n/it.json @@ -58,14 +58,14 @@ "HELP": "Aiuto", "HELP_LONG": "Mostra/nascondi questo dialogo", "SETTINGS_LONG": "Regola la lingua, i set di tessere e i colori", - "MODE_SOLVABLE_DESC": "Un riempimento con almeno una possibilità di soluzione", - "MODE_SOLVABLE_EASY_DESC": "Un riempimento con almeno 4 coppie disponibili", - "MODE_SOLVABLE_EXPERT_DESC": "Un riempimento con al massimo 2 coppie disponibili", - "MODE_RANDOM_DESC": "Un riempimento completamente casuale, forse irrisolvibile", + "MODE_SOLVABLE_DESC": "Garantito almeno una soluzione", + "MODE_SOLVABLE_EASY_DESC": "Difficoltà rilassata - molte coppie disponibili da abbinare", + "MODE_SOLVABLE_EXPERT_DESC": "Poche coppie disponibili alla volta - richiede una pianificazione attenta", + "MODE_RANDOM_DESC": "Disposizione completamente casuale - possibilmente irrisolvibile", "SELECT_BOARD": "Seleziona tavola", "BOARD_GENERATOR": "Generatore di tavola", "START_SELECTED": "Inizia selezionato", - "START_RANDOM": "Inizia casuale", + "START_RANDOM": "Gioca un tabellone casuale", "TILESET": "Arte tessera", "BACKGROUND": "Sfondo", "INFO": "Informazioni", @@ -194,10 +194,13 @@ "t_e9": "Extra 9", "SHUFFLE": "Mescola", "SHUFFLE_LONG": "Mescola le pietre nel gioco", + "RESCUE_SHUFFLE": "Mescola per continuare", + "RESCUE_SHUFFLE_LONG": "Mescola se non ci sono più mosse", "GAME_MODE": "Modalità", "GAME_MODE_EASY": "Facile", "GAME_MODE_STANDARD": "Standard", "GAME_MODE_EXPERT": "Esperto", + "GAME_MODE_NO_HELPERS": "Nessun aiuto - richiede abilità pura", "HOW_TO_PLAY": "Come giocare", "HOW_GOAL": "L'obiettivo è rimuovere tutte le tessere in coppie aperte dal tavolo di gioco.", "HOW_OPEN": "Aperto", diff --git a/src/assets/i18n/ja.json b/src/assets/i18n/ja.json index 2693a9a0..e4908f57 100644 --- a/src/assets/i18n/ja.json +++ b/src/assets/i18n/ja.json @@ -58,14 +58,14 @@ "HELP": "ヘルプ", "HELP_LONG": "このダイアログを表示/非表示", "SETTINGS_LONG": "言語、牌セット、色を調整", - "MODE_SOLVABLE_DESC": "少なくとも1つの解決可能性がある配置", - "MODE_SOLVABLE_EASY_DESC": "4組以上のペアが利用可能な配置", - "MODE_SOLVABLE_EXPERT_DESC": "最大2組のペアが利用可能な配置", - "MODE_RANDOM_DESC": "完全にランダムな配置(解決不能な場合もあります)", + "MODE_SOLVABLE_DESC": "少なくとも1つの解が保証されている", + "MODE_SOLVABLE_EASY_DESC": "気楽な難易度 - 多くのペアが利用可能", + "MODE_SOLVABLE_EXPERT_DESC": "一度に利用できるペアが少ない - 慎重な計画が必要", + "MODE_RANDOM_DESC": "完全ランダムな配置 - 解決不能な場合もあります", "SELECT_BOARD": "ボードを選択", "BOARD_GENERATOR": "ボードジェネレーター", "START_SELECTED": "選択を開始", - "START_RANDOM": "ランダムを開始", + "START_RANDOM": "ランダムボードをプレイ", "TILESET": "牌セット", "BACKGROUND": "背景", "INFO": "情報", @@ -194,10 +194,13 @@ "t_e9": "エキストラ9", "SHUFFLE": "シャッフル", "SHUFFLE_LONG": "ゲーム内の石をシャッフル", + "RESCUE_SHUFFLE": "続けるためにシャッフル", + "RESCUE_SHUFFLE_LONG": "手がなくなったらシャッフル", "GAME_MODE": "モード", "GAME_MODE_EASY": "簡単", "GAME_MODE_STANDARD": "標準", "GAME_MODE_EXPERT": "エキスパート", + "GAME_MODE_NO_HELPERS": "ヘルパーなし - 純粋なスキルが必要", "HOW_TO_PLAY": "遊び方", "HOW_GOAL": "目標は、オープンペアのすべての牌をゲームボードから取り除くことです。", "HOW_OPEN": "オープン", diff --git a/src/assets/i18n/ko.json b/src/assets/i18n/ko.json index fe632058..c46859ee 100644 --- a/src/assets/i18n/ko.json +++ b/src/assets/i18n/ko.json @@ -58,14 +58,14 @@ "HELP": "도움말", "HELP_LONG": "이 대화 상자 표시/숨기기", "SETTINGS_LONG": "언어, 타일 세트 및 색상 설정", - "MODE_SOLVABLE_DESC": "최소한 하나의 해결책이 있는 배치", - "MODE_SOLVABLE_EASY_DESC": "4개 이상의 쌍이 제공되는 배치", - "MODE_SOLVABLE_EXPERT_DESC": "최대 2개의 쌍이 제공되는 배치", - "MODE_RANDOM_DESC": "완전 무작위 배치, 풀 수 없을 수 있음", + "MODE_SOLVABLE_DESC": "최소 하나의 해결책이 보장됨", + "MODE_SOLVABLE_EASY_DESC": "여유로운 난이도 - 매칭할 쌍이 풍부하게 제공됨", + "MODE_SOLVABLE_EXPERT_DESC": "한 번에 가능한 쌍이 적음 - 신중한 계획 필요", + "MODE_RANDOM_DESC": "완전 무작위 배치 - 풀 수 없을 수도 있음", "SELECT_BOARD": "보드 선택", "BOARD_GENERATOR": "보드 생성기", "START_SELECTED": "선택한 것 시작", - "START_RANDOM": "무작위 시작", + "START_RANDOM": "무작위 보드 플레이", "TILESET": "타일 세트", "BACKGROUND": "배경", "INFO": "정보", @@ -194,10 +194,13 @@ "t_e9": "추가 9", "SHUFFLE": "섞기", "SHUFFLE_LONG": "게임의 타일 섞기", + "RESCUE_SHUFFLE": "계속하기 위해 섞기", + "RESCUE_SHUFFLE_LONG": "더 이상 이동이 없을 때 섞기", "GAME_MODE": "모드", "GAME_MODE_EASY": "쉬움", "GAME_MODE_STANDARD": "표준", "GAME_MODE_EXPERT": "전문가", + "GAME_MODE_NO_HELPERS": "도우미 없음 - 순수한 기술 필요", "HOW_TO_PLAY": "게임 방법", "HOW_GOAL": "목표는 게임 보드에서 모든 열린 짝의 타일을 제거하는 것입니다.", "HOW_OPEN": "열림", diff --git a/src/assets/i18n/ms.json b/src/assets/i18n/ms.json index f58db275..d178be0a 100644 --- a/src/assets/i18n/ms.json +++ b/src/assets/i18n/ms.json @@ -58,14 +58,14 @@ "HELP": "Bantuan", "HELP_LONG": "Tunjuk/sembunyikan dialog ini", "SETTINGS_LONG": "Laraskan bahasa, set jubin & warna", - "MODE_SOLVABLE_DESC": "Pengisian dengan sekurang-kurangnya satu kemungkinan penyelesaian", - "MODE_SOLVABLE_EASY_DESC": "Pengisian dengan sekurang-kurangnya 4 pasangan tersedia", - "MODE_SOLVABLE_EXPERT_DESC": "Pengisian dengan paling banyak 2 pasangan tersedia", - "MODE_RANDOM_DESC": "Pengisian rawak sepenuhnya, mungkin tidak boleh diselesaikan", + "MODE_SOLVABLE_DESC": "Dijamin mempunyai sekurang-kurangnya satu penyelesaian", + "MODE_SOLVABLE_EASY_DESC": "Kesukaran santai - banyak pasangan tersedia untuk dipadankan", + "MODE_SOLVABLE_EXPERT_DESC": "Sedikit pasangan tersedia sekaligus - memerlukan perancangan yang teliti", + "MODE_RANDOM_DESC": "Susun atur rawak sepenuhnya - mungkin tidak dapat diselesaikan", "SELECT_BOARD": "Pilih Papan", "BOARD_GENERATOR": "Penjana Papan", "START_SELECTED": "Mula Yang Dipilih", - "START_RANDOM": "Mula Rawak", + "START_RANDOM": "Main Papan Rawak", "TILESET": "Seni Jubin", "BACKGROUND": "Latar Belakang", "INFO": "Info", @@ -194,10 +194,13 @@ "t_e9": "Tambahan 9", "SHUFFLE": "Kocok", "SHUFFLE_LONG": "Kocok batu dalam permainan", + "RESCUE_SHUFFLE": "Kocok untuk Meneruskan", + "RESCUE_SHUFFLE_LONG": "Kocok jika tiada lagi gerakan", "GAME_MODE": "Mod", "GAME_MODE_EASY": "Mudah", "GAME_MODE_STANDARD": "Standard", "GAME_MODE_EXPERT": "Pakar", + "GAME_MODE_NO_HELPERS": "Tiada pembantu - kemahiran tulen diperlukan", "HOW_TO_PLAY": "Cara Bermain", "HOW_GOAL": "Matlamatnya adalah untuk membuang semua jubin secara berpasangan terbuka dari papan permainan.", "HOW_OPEN": "Terbuka", diff --git a/src/assets/i18n/nl.json b/src/assets/i18n/nl.json index b2533735..06343d85 100644 --- a/src/assets/i18n/nl.json +++ b/src/assets/i18n/nl.json @@ -58,14 +58,14 @@ "HELP": "Hulp", "HELP_LONG": "Toon/verberg dit dialoogvenster", "SETTINGS_LONG": "Taal, tegelsets en kleuren aanpassen", - "MODE_SOLVABLE_DESC": "Een legwijze met ten minste één oplossing", - "MODE_SOLVABLE_EASY_DESC": "Een vulling met minstens 4 paren beschikbaar", - "MODE_SOLVABLE_EXPERT_DESC": "Een vulling met maximaal 2 paren beschikbaar", - "MODE_RANDOM_DESC": "Een willekeurige legwijze, mogelijk zonder oplossing", + "MODE_SOLVABLE_DESC": "Gegarandeerd ten minste één oplossing", + "MODE_SOLVABLE_EASY_DESC": "Ontspannen moeilijkheidsgraad - voldoende paren beschikbaar om te matchen", + "MODE_SOLVABLE_EXPERT_DESC": "Weinig paren tegelijk beschikbaar - vereist zorgvuldige planning", + "MODE_RANDOM_DESC": "Volledig willekeurige indeling - mogelijk onoplosbaar", "SELECT_BOARD": "Kies een spelbord", "BOARD_GENERATOR": "Bordsamensteller", "START_SELECTED": "Gekozen bord neerleggen", - "START_RANDOM": "Willekeurig bord", + "START_RANDOM": "Speel willekeurig bord", "TILESET": "Steendecoraties", "BACKGROUND": "Achtergrond", "INFO": "Informatie", @@ -194,10 +194,13 @@ "t_e9": "Extra 9", "SHUFFLE": "Shuffle", "SHUFFLE_LONG": "Schud stenen in het spel", + "RESCUE_SHUFFLE": "Schudden om door te gaan", + "RESCUE_SHUFFLE_LONG": "Schudden als er geen zetten meer zijn", "GAME_MODE": "Modus", "GAME_MODE_EASY": "Eenvoudig", "GAME_MODE_STANDARD": "Standaard", "GAME_MODE_EXPERT": "Deskundige", + "GAME_MODE_NO_HELPERS": "Geen hulpmiddelen - puur vakmanschap vereist", "HOW_TO_PLAY": "Hoe te spelen", "HOW_GOAL": "Het doel is om alle tegels in open paren van het spelbord te verwijderen.", "HOW_OPEN": "Open", diff --git a/src/assets/i18n/no.json b/src/assets/i18n/no.json index a06c5d88..def45716 100644 --- a/src/assets/i18n/no.json +++ b/src/assets/i18n/no.json @@ -58,14 +58,14 @@ "HELP": "Hjelp", "HELP_LONG": "Vis/skjul denne dialogen", "SETTINGS_LONG": "Juster språk, steinsamlinger og farger", - "MODE_SOLVABLE_DESC": "En fylling med minst en løsingsmulighet", - "MODE_SOLVABLE_EASY_DESC": "En fylling med minst 4 tilgjengelige par", - "MODE_SOLVABLE_EXPERT_DESC": "En fylling med høyst 2 tilgjengelige par", - "MODE_RANDOM_DESC": "Helt tilfeldig fylling, kanskje uløselig", + "MODE_SOLVABLE_DESC": "Garantert å ha minst én løsning", + "MODE_SOLVABLE_EASY_DESC": "Avslappet vanskelighetsgrad - mange par tilgjengelig for matching", + "MODE_SOLVABLE_EXPERT_DESC": "Få par tilgjengelig om gangen - krever nøye planlegging", + "MODE_RANDOM_DESC": "Helt tilfeldig oppsett - muligens uløselig", "SELECT_BOARD": "Velg brett", "BOARD_GENERATOR": "Brett generator", "START_SELECTED": "Start valgt", - "START_RANDOM": "Start tilfeldig", + "START_RANDOM": "Spill tilfeldig brett", "TILESET": "Steinkunst", "BACKGROUND": "Bakgrunn", "INFO": "Info", @@ -194,10 +194,13 @@ "t_e9": "Ekstra 9", "SHUFFLE": "Bland", "SHUFFLE_LONG": "Bland steiner i spillet", + "RESCUE_SHUFFLE": "Bland for å fortsette", + "RESCUE_SHUFFLE_LONG": "Bland hvis det ikke er flere trekk", "GAME_MODE": "Modus", "GAME_MODE_EASY": "Lett", "GAME_MODE_STANDARD": "Standard", "GAME_MODE_EXPERT": "Ekspert", + "GAME_MODE_NO_HELPERS": "Ingen hjelpemidler - rent dyktighet kreves", "HOW_TO_PLAY": "Hvordan spille", "HOW_GOAL": "Målet er å fjerne alle steiner i åpne par fra spillebrettet.", "HOW_OPEN": "Åpen", diff --git a/src/assets/i18n/pl.json b/src/assets/i18n/pl.json index 77d477cb..fe06d1a5 100644 --- a/src/assets/i18n/pl.json +++ b/src/assets/i18n/pl.json @@ -58,14 +58,14 @@ "HELP": "Pomoc", "HELP_LONG": "Pokaż/ukryj to okno dialogowe", "SETTINGS_LONG": "Dostosuj język, zestawy kamieni i kolory", - "MODE_SOLVABLE_DESC": "Wypełnienie z co najmniej jedną możliwością rozwiązania", - "MODE_SOLVABLE_EASY_DESC": "Wypełnienie z co najmniej 4 dostępnymi parami", - "MODE_SOLVABLE_EXPERT_DESC": "Wypełnienie z co najwyżej 2 dostępnymi parami", - "MODE_RANDOM_DESC": "Całkowicie losowe wypełnienie, może być nierozwiązywalne", + "MODE_SOLVABLE_DESC": "Gwarantowane przynajmniej jedno rozwiązanie", + "MODE_SOLVABLE_EASY_DESC": "Zrelaksowany poziom trudności - wiele par dostępnych do dopasowania", + "MODE_SOLVABLE_EXPERT_DESC": "Mało par dostępnych naraz - wymaga starannego planowania", + "MODE_RANDOM_DESC": "Całkowicie losowe rozmieszczenie - może być nierozwiązywalne", "SELECT_BOARD": "Wybierz planszę", "BOARD_GENERATOR": "Generator plansz", "START_SELECTED": "Rozpocznij wybraną", - "START_RANDOM": "Rozpocznij losową", + "START_RANDOM": "Graj losową planszę", "TILESET": "Zestaw kamieni", "BACKGROUND": "Tło", "INFO": "Informacje", @@ -194,10 +194,13 @@ "t_e9": "Dodatkowy 9", "SHUFFLE": "Tasuj", "SHUFFLE_LONG": "Tasuj kamienie w grze", + "RESCUE_SHUFFLE": "Przetasuj aby kontynuować", + "RESCUE_SHUFFLE_LONG": "Przetasuj jeśli nie ma więcej ruchów", "GAME_MODE": "Tryb", "GAME_MODE_EASY": "Łatwy", "GAME_MODE_STANDARD": "Standardowy", "GAME_MODE_EXPERT": "Ekspert", + "GAME_MODE_NO_HELPERS": "Brak pomocy - wymagane czyste umiejętności", "HOW_TO_PLAY": "Jak grać", "HOW_GOAL": "Celem jest usunięcie z planszy wszystkich kamieni w otwartych parach.", "HOW_OPEN": "Otwarty", diff --git a/src/assets/i18n/pt.json b/src/assets/i18n/pt.json index 73396dc2..679b5fcd 100644 --- a/src/assets/i18n/pt.json +++ b/src/assets/i18n/pt.json @@ -58,14 +58,14 @@ "HELP": "Ajuda", "HELP_LONG": "Mostrar/ocultar esta caixa de diálogo", "SETTINGS_LONG": "Ajuste o idioma, conjuntos de blocos e cores", - "MODE_SOLVABLE_DESC": "Um preenchimento com pelo menos uma possibilidade de solução", - "MODE_SOLVABLE_EASY_DESC": "Um preenchimento com pelo menos 4 pares disponíveis", - "MODE_SOLVABLE_EXPERT_DESC": "Um preenchimento com no máximo 2 pares disponíveis", - "MODE_RANDOM_DESC": "Um preenchimento totalmente aleatório, talvez insolúvel", + "MODE_SOLVABLE_DESC": "Garantido ter pelo menos uma solução", + "MODE_SOLVABLE_EASY_DESC": "Dificuldade relaxada - muitos pares disponíveis para combinar", + "MODE_SOLVABLE_EXPERT_DESC": "Poucos pares disponíveis de uma vez - exige planejamento cuidadoso", + "MODE_RANDOM_DESC": "Layout completamente aleatório - possivelmente insolúvel", "SELECT_BOARD": "Selecione o tabuleiro", "BOARD_GENERATOR": "Gerador de placa", "START_SELECTED": "Jogar Selecionado", - "START_RANDOM": "Jogar Aleatório", + "START_RANDOM": "Jogar Tabuleiro Aleatório", "TILESET": "Peças", "BACKGROUND": "Papel de Parede", "INFO": "Informações", @@ -194,10 +194,13 @@ "t_e9": "Extra 9", "SHUFFLE": "Embaralhar", "SHUFFLE_LONG": "Embaralhe pedras neste jogo", + "RESCUE_SHUFFLE": "Embaralhar para Continuar", + "RESCUE_SHUFFLE_LONG": "Embaralhar se não houver mais movimentos", "GAME_MODE": "Modo", "GAME_MODE_EASY": "Fácil", "GAME_MODE_STANDARD": "Padrão", "GAME_MODE_EXPERT": "Especialista", + "GAME_MODE_NO_HELPERS": "Sem ajudas - requer habilidade pura", "HOW_TO_PLAY": "Como jogar", "HOW_GOAL": "O objetivo é remover todas as peças em pares abertos do tabuleiro de jogo.", "HOW_OPEN": "Abrir", diff --git a/src/assets/i18n/ro.json b/src/assets/i18n/ro.json index a09d767c..4316a137 100644 --- a/src/assets/i18n/ro.json +++ b/src/assets/i18n/ro.json @@ -58,14 +58,14 @@ "HELP": "Ajutor", "HELP_LONG": "Arată/ascunde acest dialog", "SETTINGS_LONG": "Ajustați limba, seturile de pietre și culorile", - "MODE_SOLVABLE_DESC": "O umplere cu cel puțin o posibilitate de rezolvare", - "MODE_SOLVABLE_EASY_DESC": "O umplutură cu cel puțin 4 perechi disponibile", - "MODE_SOLVABLE_EXPERT_DESC": "O umplutură cu cel mult 2 perechi disponibile", - "MODE_RANDOM_DESC": "O umplere complet aleatorie, poate nerezolvabilă", + "MODE_SOLVABLE_DESC": "Garantat că are cel puțin o soluție", + "MODE_SOLVABLE_EASY_DESC": "Dificultate relaxată - multe perechi disponibile pentru potrivire", + "MODE_SOLVABLE_EXPERT_DESC": "Puține perechi disponibile odată - necesită planificare atentă", + "MODE_RANDOM_DESC": "Aranjament complet aleatoriu - posibil nerezolvabil", "SELECT_BOARD": "Selectare Tablă", "BOARD_GENERATOR": "Generator de Tablă", "START_SELECTED": "Începe Selectat", - "START_RANDOM": "Începe Aleatoriu", + "START_RANDOM": "Joacă tablă aleatorie", "TILESET": "Arta setului de pietre", "BACKGROUND": "Fundal", "INFO": "Informații", @@ -194,10 +194,13 @@ "t_e9": "Extra 9", "SHUFFLE": "Amesteacă", "SHUFFLE_LONG": "Amesteacă pietrele în joc", + "RESCUE_SHUFFLE": "Amestecă pentru a continua", + "RESCUE_SHUFFLE_LONG": "Amestecă dacă nu mai sunt mutări", "GAME_MODE": "Mod", "GAME_MODE_EASY": "Ușor", "GAME_MODE_STANDARD": "Standard", "GAME_MODE_EXPERT": "Expert", + "GAME_MODE_NO_HELPERS": "Fără ajutoare - necesită pricepere pură", "HOW_TO_PLAY": "Cum să joci", "HOW_GOAL": "Scopul este să elimini toate pietrele în perechi deschise de pe tablă.", "HOW_OPEN": "Deschis", diff --git a/src/assets/i18n/ru.json b/src/assets/i18n/ru.json index 4eaa3a6c..1cde48b8 100644 --- a/src/assets/i18n/ru.json +++ b/src/assets/i18n/ru.json @@ -58,14 +58,14 @@ "HELP": "Помощь", "HELP_LONG": "Показать/скрыть этот диалог", "SETTINGS_LONG": "Настройка языка, наборов плиток и цветов", - "MODE_SOLVABLE_DESC": "Заливка с хотя бы одной возможностью решения", - "MODE_SOLVABLE_EASY_DESC": "Расстановка с не менее чем 4 доступными парами", - "MODE_SOLVABLE_EXPERT_DESC": "Расстановка с не более чем 2 доступными парами", - "MODE_RANDOM_DESC": "Полная случайная заливка, возможно, неразрешимая", + "MODE_SOLVABLE_DESC": "Гарантировано наличие хотя бы одного решения", + "MODE_SOLVABLE_EASY_DESC": "Расслабленная сложность - много пар для совпадения", + "MODE_SOLVABLE_EXPERT_DESC": "Мало пар доступно одновременно - требует тщательного планирования", + "MODE_RANDOM_DESC": "Полностью случайное расположение - возможно неразрешимое", "SELECT_BOARD": "Выбор карты", "BOARD_GENERATOR": "Генератор платы", "START_SELECTED": "Начать выбранное", - "START_RANDOM": "Начать случайное", + "START_RANDOM": "Сыграть случайную доску", "TILESET": "Внешний вид фишек", "BACKGROUND": "Фон", "INFO": "Информация", @@ -194,10 +194,13 @@ "t_e9": "Экстра 9", "SHUFFLE": "Перемешать", "SHUFFLE_LONG": "Перемешать камни в этой игре", + "RESCUE_SHUFFLE": "Перемешать для продолжения", + "RESCUE_SHUFFLE_LONG": "Перемешать если нет доступных ходов", "GAME_MODE": "Модус", "GAME_MODE_EASY": "Легко", "GAME_MODE_STANDARD": "Стандарт", "GAME_MODE_EXPERT": "Эксперт", + "GAME_MODE_NO_HELPERS": "Без помощников - требуется чистое мастерство", "HOW_TO_PLAY": "Как играть", "HOW_GOAL": "Цель состоит в том, чтобы удалить все плитки в открытых парах с игрового поля.", "HOW_OPEN": "Открытым", diff --git a/src/assets/i18n/sv.json b/src/assets/i18n/sv.json index 6c51c8ac..dddd3c00 100644 --- a/src/assets/i18n/sv.json +++ b/src/assets/i18n/sv.json @@ -58,14 +58,14 @@ "HELP": "Hjälp", "HELP_LONG": "Visa/dölj denna dialog", "SETTINGS_LONG": "Justera språk, stenset och färger", - "MODE_SOLVABLE_DESC": "En fyllning med minst en lösning", - "MODE_SOLVABLE_EASY_DESC": "En fyllning med minst 4 tillgängliga par", - "MODE_SOLVABLE_EXPERT_DESC": "En fyllning med högst 2 tillgängliga par", - "MODE_RANDOM_DESC": "En helt slumpmässig fyllning, möjligtvis olösbar", + "MODE_SOLVABLE_DESC": "Garanterat att ha minst en lösning", + "MODE_SOLVABLE_EASY_DESC": "Avslappnad svårighetsgrad - gott om par tillgängliga att matcha", + "MODE_SOLVABLE_EXPERT_DESC": "Få par tillgängliga åt gången - kräver noggrann planering", + "MODE_RANDOM_DESC": "Helt slumpmässig layout - möjligtvis olösbar", "SELECT_BOARD": "Välj spelbräde", "BOARD_GENERATOR": "Spelbräde generator", "START_SELECTED": "Starta valt", - "START_RANDOM": "Starta slumpmässigt", + "START_RANDOM": "Spela slumpmässigt bräde", "TILESET": "Stenset-konst", "BACKGROUND": "Bakgrund", "INFO": "Information", @@ -194,10 +194,13 @@ "t_e9": "Extra 9", "SHUFFLE": "Blanda", "SHUFFLE_LONG": "Blanda stenar i spelet", + "RESCUE_SHUFFLE": "Blanda för att fortsätta", + "RESCUE_SHUFFLE_LONG": "Blanda om det inte finns fler drag", "GAME_MODE": "Läge", "GAME_MODE_EASY": "Lätt", "GAME_MODE_STANDARD": "Standard", "GAME_MODE_EXPERT": "Expert", + "GAME_MODE_NO_HELPERS": "Inga hjälpmedel - ren skicklighet krävs", "HOW_TO_PLAY": "Hur man spelar", "HOW_GOAL": "Målet är att ta bort alla stenar i öppna par från spelbrädet.", "HOW_OPEN": "Öppen", diff --git a/src/assets/i18n/sw.json b/src/assets/i18n/sw.json index 0a136ca8..b9eb2867 100644 --- a/src/assets/i18n/sw.json +++ b/src/assets/i18n/sw.json @@ -58,14 +58,14 @@ "HELP": "Msaada", "HELP_LONG": "Onyesha/ficha dirisha hili", "SETTINGS_LONG": "Rekebisha lugha, seti za vigae na rangi", - "MODE_SOLVABLE_DESC": "Ujazaji na angalau uwezekano mmoja wa kutatua", - "MODE_SOLVABLE_EASY_DESC": "Ujazaji na angalau jozi 4 zinazopatikana", - "MODE_SOLVABLE_EXPERT_DESC": "Ujazaji na si zaidi ya jozi 2 zinazopatikana", - "MODE_RANDOM_DESC": "Kujazwa kwa nasibu kabisa, huenda isiweze kutatuliwa", + "MODE_SOLVABLE_DESC": "Imehakikishiwa kuwa na angalau suluhisho moja", + "MODE_SOLVABLE_EASY_DESC": "Ugumu wa burudani - jozi nyingi zinazopatikana kwa kulinganisha", + "MODE_SOLVABLE_EXPERT_DESC": "Jozi chache zinazopatikana kwa wakati mmoja - inahitaji mipango ya makini", + "MODE_RANDOM_DESC": "Mpangilio wa nasibu kabisa - huenda usiweze kutatuliwa", "SELECT_BOARD": "Chagua Ubao", "BOARD_GENERATOR": "Kizalishaji cha Ubao", "START_SELECTED": "Anza Uliochagua", - "START_RANDOM": "Anza kwa Nasibu", + "START_RANDOM": "Cheza Ubao wa Nasibu", "TILESET": "Sanaa ya Vigae", "BACKGROUND": "Mandhari ya Nyuma", "INFO": "Taarifa", @@ -194,10 +194,13 @@ "t_e9": "Ziada 9", "SHUFFLE": "Changanya", "SHUFFLE_LONG": "Changanya mawe katika mchezo", + "RESCUE_SHUFFLE": "Changanya ili Kuendelea", + "RESCUE_SHUFFLE_LONG": "Changanya kama hakuna hatua zaidi", "GAME_MODE": "Hali", "GAME_MODE_EASY": "Rahisi", "GAME_MODE_STANDARD": "Kawaida", "GAME_MODE_EXPERT": "Mtaalamu", + "GAME_MODE_NO_HELPERS": "Bila wasaidizi - unahitaji ujuzi safi", "HOW_TO_PLAY": "Jinsi ya kucheza", "HOW_GOAL": "Lengo ni kuondoa vigae vyote katika jozi zilizo wazi kutoka kwenye ubao wa mchezo.", "HOW_OPEN": "Wazi", diff --git a/src/assets/i18n/ta.json b/src/assets/i18n/ta.json index d4c525a4..0d5fc8cb 100644 --- a/src/assets/i18n/ta.json +++ b/src/assets/i18n/ta.json @@ -58,14 +58,14 @@ "HELP": "உதவி", "HELP_LONG": "இந்த உரையாடலைக் காட்டு/மறை", "SETTINGS_LONG": "மொழி, ஓடு தொகுப்புகள் மற்றும் வண்ணங்களை மாற்று", - "MODE_SOLVABLE_DESC": "குறைந்தது ஒரு தீர்வு சாத்தியமுள்ள நிரப்புதல்", - "MODE_SOLVABLE_EASY_DESC": "குறைந்தது 4 ஜோடிகள் கிடைக்கும் நிரப்பல்", - "MODE_SOLVABLE_EXPERT_DESC": "அதிகபட்சம் 2 ஜோடிகள் கிடைக்கும் நிரப்பல்", - "MODE_RANDOM_DESC": "முற்றிலும் சீரற்ற நிரப்புதல், தீர்க்க இயலாமல் இருக்கலாம்", + "MODE_SOLVABLE_DESC": "குறைந்தது ஒரு தீர்வு இருக்கும் என்று உறுதியாக உள்ளது", + "MODE_SOLVABLE_EASY_DESC": "தளர்வான கடினம் - பொருத்த நிறைய ஜோடிகள் உள்ளன", + "MODE_SOLVABLE_EXPERT_DESC": "ஒரே நேரத்தில் சில ஜோடிகள் மட்டுமே - கவனமான திட்டமிடல் தேவை", + "MODE_RANDOM_DESC": "முழுக்க சீரற்ற அமைப்பு - தீர்க்க இயலாமல் இருக்கலாம்", "SELECT_BOARD": "பலகையைத் தேர்ந்தெடு", "BOARD_GENERATOR": "பலகை உருவாக்கி", "START_SELECTED": "தேர்ந்தெடுத்ததைத் தொடங்கு", - "START_RANDOM": "சீரற்றதைத் தொடங்கு", + "START_RANDOM": "சீரற்ற பலகையை விளையாடு", "TILESET": "ஓடு தொகுப்பு கலை", "BACKGROUND": "பின்னணி", "INFO": "தகவல்", @@ -194,10 +194,13 @@ "t_e9": "கூடுதல் 9", "SHUFFLE": "கலக்கு", "SHUFFLE_LONG": "விளையாட்டில் கற்களைக் கலக்கு", + "RESCUE_SHUFFLE": "தொடர கலக்கு", + "RESCUE_SHUFFLE_LONG": "நகர்வுகள் இல்லாதபோது கலக்கு", "GAME_MODE": "முறை", "GAME_MODE_EASY": "எளிதானது", "GAME_MODE_STANDARD": "நிலையானது", "GAME_MODE_EXPERT": "நிபுணர்", + "GAME_MODE_NO_HELPERS": "உதவியில்லாமல் - தூய திறமை தேவை", "HOW_TO_PLAY": "விளையாடுவது எப்படி", "HOW_GOAL": "விளையாட்டுப் பலகையிலிருந்து திறந்த ஜோடிகளாக அனைத்து ஓடுகளையும் அகற்றுவதே குறிக்கோள்.", "HOW_OPEN": "திறந்த", diff --git a/src/assets/i18n/te.json b/src/assets/i18n/te.json index e67741a4..07320ed8 100644 --- a/src/assets/i18n/te.json +++ b/src/assets/i18n/te.json @@ -58,14 +58,14 @@ "HELP": "సహాయం", "HELP_LONG": "ఈ డైలాగ్ చూపించు/దాచు", "SETTINGS_LONG": "భాష, టైల్ సెట్లు & రంగులు సర్దుబాటు చేయండి", - "MODE_SOLVABLE_DESC": "కనీసం ఒక పరిష్కార అవకాశం ఉన్న నింపుదల", - "MODE_SOLVABLE_EASY_DESC": "కనీసం 4 జంటలు అందుబాటులో ఉండే నింపు", - "MODE_SOLVABLE_EXPERT_DESC": "గరిష్టంగా 2 జంటలు అందుబాటులో ఉండే నింపు", - "MODE_RANDOM_DESC": "పూర్తిగా యాదృచ్ఛిక నింపుదల, పరిష్కారం సాధ్యం కాకపోవచ్చు", + "MODE_SOLVABLE_DESC": "కనీసం ఒక పరిష్కారం ఉంటుందని హామీ", + "MODE_SOLVABLE_EASY_DESC": "సరళమైన కష్టం - మ్యాచ్ చేయడానికి చాలా జంటలు అందుబాటులో", + "MODE_SOLVABLE_EXPERT_DESC": "ఒకేసారి తక్కువ జంటలు అందుబాటులో - జాగ్రత్తగా ప్లాన్ చేయాలి", + "MODE_RANDOM_DESC": "పూర్తిగా యాదృచ్ఛిక అమరిక - పరిష్కారం సాధ్యం కాకపోవచ్చు", "SELECT_BOARD": "బోర్డ్ ఎంచుకోండి", "BOARD_GENERATOR": "బోర్డ్ జనరేటర్", "START_SELECTED": "ఎంచుకున్నది ప్రారంభించు", - "START_RANDOM": "యాదృచ్ఛికంగా ప్రారంభించు", + "START_RANDOM": "యాదృచ్ఛిక బోర్డ్ ఆడు", "TILESET": "టైల్‌సెట్ కళ", "BACKGROUND": "నేపథ్యం", "INFO": "సమాచారం", @@ -194,10 +194,13 @@ "t_e9": "అదనపు 9", "SHUFFLE": "కలపు", "SHUFFLE_LONG": "ఆటలోని రాళ్ళను కలపు", + "RESCUE_SHUFFLE": "కొనసాగించడానికి కలపు", + "RESCUE_SHUFFLE_LONG": "ఇంకా కదలికలు లేకపోతే కలపు", "GAME_MODE": "మోడ్", "GAME_MODE_EASY": "సులభం", "GAME_MODE_STANDARD": "ప్రామాణికం", "GAME_MODE_EXPERT": "నిపుణుడు", + "GAME_MODE_NO_HELPERS": "సహాయకులు లేరు - స్వచ్ఛమైన నైపుణ్యం అవసరం", "HOW_TO_PLAY": "ఎలా ఆడాలి", "HOW_GOAL": "ఆట బోర్డ్ నుండి అన్ని టైల్స్‌ను తెరిచిన జతలలో తొలగించడమే లక్ష్యం.", "HOW_OPEN": "తెరిచినది", diff --git a/src/assets/i18n/th.json b/src/assets/i18n/th.json index 8a5d6d2c..1dd9add4 100644 --- a/src/assets/i18n/th.json +++ b/src/assets/i18n/th.json @@ -58,14 +58,14 @@ "HELP": "ช่วยเหลือ", "HELP_LONG": "แสดง/ซ่อนหน้าต่างนี้", "SETTINGS_LONG": "ปรับภาษา ชุดไพ่ และสี", - "MODE_SOLVABLE_DESC": "การเติมที่มีวิธีแก้อย่างน้อยหนึ่งวิธี", - "MODE_SOLVABLE_EASY_DESC": "การเติมที่มีคู่ที่พร้อมใช้งานอย่างน้อย 4 คู่", - "MODE_SOLVABLE_EXPERT_DESC": "การเติมที่มีคู่ที่พร้อมใช้งานสูงสุด 2 คู่", - "MODE_RANDOM_DESC": "การเติมแบบสุ่มทั้งหมด อาจแก้ไม่ได้", + "MODE_SOLVABLE_DESC": "รับประกันว่ามีคำตอบอย่างน้อยหนึ่งวิธี", + "MODE_SOLVABLE_EASY_DESC": "ความยากระดับผ่อนคลาย - มีคู่มากมายให้จับคู่", + "MODE_SOLVABLE_EXPERT_DESC": "มีคู่น้อยในแต่ละครั้ง - ต้องวางแผนอย่างรอบคอบ", + "MODE_RANDOM_DESC": "การจัดเรียงแบบสุ่มทั้งหมด - อาจแก้ไม่ได้", "SELECT_BOARD": "เลือกกระดาน", "BOARD_GENERATOR": "ตัวสร้างกระดาน", "START_SELECTED": "เริ่มที่เลือก", - "START_RANDOM": "เริ่มแบบสุ่ม", + "START_RANDOM": "เล่นกระดานสุ่ม", "TILESET": "ชุดลายไพ่", "BACKGROUND": "พื้นหลัง", "INFO": "ข้อมูล", @@ -194,10 +194,13 @@ "t_e9": "พิเศษ 9", "SHUFFLE": "สับไพ่", "SHUFFLE_LONG": "สับไพ่ในเกม", + "RESCUE_SHUFFLE": "สับไพ่เพื่อเล่นต่อ", + "RESCUE_SHUFFLE_LONG": "สับไพ่หากไม่มีการเคลื่อนไหวอีกต่อไป", "GAME_MODE": "โหมด", "GAME_MODE_EASY": "ง่าย", "GAME_MODE_STANDARD": "มาตรฐาน", "GAME_MODE_EXPERT": "ผู้เชี่ยวชาญ", + "GAME_MODE_NO_HELPERS": "ไม่มีผู้ช่วย - ต้องใช้ทักษะล้วนๆ", "HOW_TO_PLAY": "วิธีเล่น", "HOW_GOAL": "เป้าหมายคือการนำไพ่ที่เปิดอยู่ออกเป็นคู่จากกระดานจนหมด", "HOW_OPEN": "เปิด", diff --git a/src/assets/i18n/tr.json b/src/assets/i18n/tr.json index b59305f2..e09d4611 100644 --- a/src/assets/i18n/tr.json +++ b/src/assets/i18n/tr.json @@ -58,14 +58,14 @@ "HELP": "Yardım", "HELP_LONG": "Bu iletişim kutusunu göster/gizle", "SETTINGS_LONG": "Dil, taş setleri ve renkleri ayarla", - "MODE_SOLVABLE_DESC": "En az bir çözüm olasılığı olan doldurma", - "MODE_SOLVABLE_EASY_DESC": "En az 4 çift mevcut olan dolgu", - "MODE_SOLVABLE_EXPERT_DESC": "En fazla 2 çift mevcut olan dolgu", - "MODE_RANDOM_DESC": "Tamamen rastgele doldurma, belki çözülemez", + "MODE_SOLVABLE_DESC": "En az bir çözümü olduğu garantidir", + "MODE_SOLVABLE_EASY_DESC": "Rahat zorluk - eşleştirmek için bolca çift mevcut", + "MODE_SOLVABLE_EXPERT_DESC": "Aynı anda az çift mevcut - dikkatli planlama gerektirir", + "MODE_RANDOM_DESC": "Tamamen rastgele düzen - çözülemez olabilir", "SELECT_BOARD": "Tabloyu Seç", "BOARD_GENERATOR": "Tablo Üreticisi", "START_SELECTED": "Seçileni Başlat", - "START_RANDOM": "Rastgeleyi Başlat", + "START_RANDOM": "Rastgele Tahtayı Oyna", "TILESET": "Taş Seti Sanatı", "BACKGROUND": "Arka Plan", "INFO": "Bilgi", @@ -194,10 +194,13 @@ "t_e9": "Ekstra 9", "SHUFFLE": "Karıştır", "SHUFFLE_LONG": "Oyundaki taşları karıştır", + "RESCUE_SHUFFLE": "Devam etmek için Karıştır", + "RESCUE_SHUFFLE_LONG": "Daha fazla hamle yoksa karıştır", "GAME_MODE": "Mod", "GAME_MODE_EASY": "Kolay", "GAME_MODE_STANDARD": "Standart", "GAME_MODE_EXPERT": "Uzman", + "GAME_MODE_NO_HELPERS": "Yardımcı yok - salt beceri gerektirir", "HOW_TO_PLAY": "Nasıl Oynanır", "HOW_GOAL": "Amaç, oyun tablosundan tüm açık çiftler taşları çıkarmaktır.", "HOW_OPEN": "Açık", diff --git a/src/assets/i18n/uk.json b/src/assets/i18n/uk.json index 53131ca1..5e5219b1 100644 --- a/src/assets/i18n/uk.json +++ b/src/assets/i18n/uk.json @@ -58,14 +58,14 @@ "HELP": "Довідка", "HELP_LONG": "Показати/приховати цей діалог", "SETTINGS_LONG": "Налаштуйте мову, набори каменів та кольори", - "MODE_SOLVABLE_DESC": "Заповнення з щонайменше однією можливістю розв'язання", - "MODE_SOLVABLE_EASY_DESC": "Заповнення з не менше 4 доступними парами", - "MODE_SOLVABLE_EXPERT_DESC": "Заповнення з не більше ніж 2 доступними парами", - "MODE_RANDOM_DESC": "Повністю випадкове заповнення, можливо нерозв'язуване", + "MODE_SOLVABLE_DESC": "Гарантовано має щонайменше одне рішення", + "MODE_SOLVABLE_EASY_DESC": "Розслаблений рівень складності - багато пар для з'єднання", + "MODE_SOLVABLE_EXPERT_DESC": "Мало пар одночасно - вимагає ретельного планування", + "MODE_RANDOM_DESC": "Повністю випадкове розташування - можливо нерозв'язуване", "SELECT_BOARD": "Вибрати дошку", "BOARD_GENERATOR": "Генератор дошки", "START_SELECTED": "Почати вибрану", - "START_RANDOM": "Почати випадкову", + "START_RANDOM": "Грати випадкову дошку", "TILESET": "Мистецтво набору каменів", "BACKGROUND": "Фон", "INFO": "Інформація", @@ -194,10 +194,13 @@ "t_e9": "Додатково 9", "SHUFFLE": "Перемішати", "SHUFFLE_LONG": "Перемішати камені в грі", + "RESCUE_SHUFFLE": "Перемішати для продовження", + "RESCUE_SHUFFLE_LONG": "Перемішати якщо немає доступних ходів", "GAME_MODE": "Режим", "GAME_MODE_EASY": "Легко", "GAME_MODE_STANDARD": "Стандарт", "GAME_MODE_EXPERT": "Експерт", + "GAME_MODE_NO_HELPERS": "Без помічників - потрібна чиста майстерність", "HOW_TO_PLAY": "Як грати", "HOW_GOAL": "Мета - видалити всі камені у відкритих парах з ігрової дошки.", "HOW_OPEN": "Відкрити", diff --git a/src/assets/i18n/ur.json b/src/assets/i18n/ur.json index d0e85e3a..360e3f7a 100644 --- a/src/assets/i18n/ur.json +++ b/src/assets/i18n/ur.json @@ -58,14 +58,14 @@ "HELP": "مدد", "HELP_LONG": "یہ ڈائیلاگ دکھائیں/چھپائیں", "SETTINGS_LONG": "زبان، ٹائل سیٹ اور رنگ ایڈجسٹ کریں", - "MODE_SOLVABLE_DESC": "کم از کم ایک حل کے ساتھ بھرائی", - "MODE_SOLVABLE_EASY_DESC": "کم از کم 4 جوڑے دستیاب والی ترتیب", - "MODE_SOLVABLE_EXPERT_DESC": "زیادہ سے زیادہ 2 جوڑے دستیاب والی ترتیب", - "MODE_RANDOM_DESC": "مکمل بے ترتیب بھرائی، شاید حل نہ ہو", + "MODE_SOLVABLE_DESC": "کم از کم ایک حل ہونے کی ضمانت", + "MODE_SOLVABLE_EASY_DESC": "آسان مشکل - ملانے کے لیے بہت سے جوڑے دستیاب", + "MODE_SOLVABLE_EXPERT_DESC": "ایک وقت میں کم جوڑے دستیاب - محتاط منصوبہ بندی کی ضرورت", + "MODE_RANDOM_DESC": "مکمل بے ترتیب ترتیب - شاید حل نہ ہو", "SELECT_BOARD": "بورڈ منتخب کریں", "BOARD_GENERATOR": "بورڈ جنریٹر", "START_SELECTED": "منتخب شروع کریں", - "START_RANDOM": "بے ترتیب شروع کریں", + "START_RANDOM": "بے ترتیب بورڈ کھیلیں", "TILESET": "ٹائل سیٹ آرٹ", "BACKGROUND": "پس منظر", "INFO": "معلومات", @@ -194,10 +194,13 @@ "t_e9": "اضافی 9", "SHUFFLE": "خلط ملط", "SHUFFLE_LONG": "گیم میں پتھر خلط ملط کریں", + "RESCUE_SHUFFLE": "جاری رکھنے کے لیے خلط ملط", + "RESCUE_SHUFFLE_LONG": "خلط ملط کریں اگر مزید حرکات نہ ہوں", "GAME_MODE": "موڈ", "GAME_MODE_EASY": "آسان", "GAME_MODE_STANDARD": "معیاری", "GAME_MODE_EXPERT": "ماہر", + "GAME_MODE_NO_HELPERS": "کوئی مددگار نہیں - خالص مہارت درکار ہے", "HOW_TO_PLAY": "کیسے کھیلیں", "HOW_GOAL": "مقصد گیم بورڈ سے کھلے جوڑوں میں تمام ٹائلیں ہٹانا ہے۔", "HOW_OPEN": "کھلی", diff --git a/src/assets/i18n/vi.json b/src/assets/i18n/vi.json index 8beff2e7..7bd6a143 100644 --- a/src/assets/i18n/vi.json +++ b/src/assets/i18n/vi.json @@ -58,14 +58,14 @@ "HELP": "Trợ Giúp", "HELP_LONG": "Hiển thị/ẩn hộp thoại này", "SETTINGS_LONG": "Điều chỉnh ngôn ngữ, bộ đá và màu sắc", - "MODE_SOLVABLE_DESC": "Một cách điền với ít nhất một khả năng giải", - "MODE_SOLVABLE_EASY_DESC": "Một cách điền với ít nhất 4 cặp sẵn có", - "MODE_SOLVABLE_EXPERT_DESC": "Một cách điền với tối đa 2 cặp sẵn có", - "MODE_RANDOM_DESC": "Một cách điền hoàn toàn ngẫu nhiên, có thể không thể giải", + "MODE_SOLVABLE_DESC": "Đảm bảo có ít nhất một lời giải", + "MODE_SOLVABLE_EASY_DESC": "Độ khó thoải mái - nhiều cặp sẵn có để ghép", + "MODE_SOLVABLE_EXPERT_DESC": "Ít cặp sẵn có cùng lúc - đòi hỏi lập kế hoạch cẩn thận", + "MODE_RANDOM_DESC": "Bố cục hoàn toàn ngẫu nhiên - có thể không thể giải", "SELECT_BOARD": "Chọn Bảng", "BOARD_GENERATOR": "Trình Tạo Bảng", "START_SELECTED": "Bắt Đầu Đã Chọn", - "START_RANDOM": "Bắt Đầu Ngẫu Nhiên", + "START_RANDOM": "Chơi Bảng Ngẫu Nhiên", "TILESET": "Nghệ Thuật Bộ Đá", "BACKGROUND": "Hình Nền", "INFO": "Thông Tin", @@ -194,10 +194,13 @@ "t_e9": "Thêm 9", "SHUFFLE": "Xáo Trộn", "SHUFFLE_LONG": "Xáo trộn đá trong trò chơi", + "RESCUE_SHUFFLE": "Xáo Trộn để Tiếp Tục", + "RESCUE_SHUFFLE_LONG": "Xáo trộn nếu không còn nước đi nào", "GAME_MODE": "Chế Độ", "GAME_MODE_EASY": "Dễ", "GAME_MODE_STANDARD": "Tiêu Chuẩn", "GAME_MODE_EXPERT": "Chuyên Gia", + "GAME_MODE_NO_HELPERS": "Không có trợ giúp - chỉ dựa vào kỹ năng thuần túy", "HOW_TO_PLAY": "Cách Chơi", "HOW_GOAL": "Mục tiêu là loại bỏ tất cả đá ở các cặp mở từ bảng trò chơi.", "HOW_OPEN": "Mở", diff --git a/src/assets/i18n/zh.json b/src/assets/i18n/zh.json index 256f2d63..f118f5bb 100644 --- a/src/assets/i18n/zh.json +++ b/src/assets/i18n/zh.json @@ -58,14 +58,14 @@ "HELP": "帮助", "HELP_LONG": "显示/隐藏此对话框", "SETTINGS_LONG": "调整语言、牌组和颜色", - "MODE_SOLVABLE_DESC": "至少有一种解法的填充", - "MODE_SOLVABLE_EASY_DESC": "有4对或更多配对可用的填充", - "MODE_SOLVABLE_EXPERT_DESC": "最多有2对配对可用的填充", - "MODE_RANDOM_DESC": "完全随机填充,可能无解", + "MODE_SOLVABLE_DESC": "保证至少有一种解法", + "MODE_SOLVABLE_EASY_DESC": "难度轻松 - 有大量配对可供匹配", + "MODE_SOLVABLE_EXPERT_DESC": "同时可用的配对很少 - 需要仔细规划", + "MODE_RANDOM_DESC": "完全随机布局 - 可能无解", "SELECT_BOARD": "选择牌局", "BOARD_GENERATOR": "牌局生成器", "START_SELECTED": "开始选中的", - "START_RANDOM": "开始随机的", + "START_RANDOM": "玩随机棋盘", "TILESET": "牌组", "BACKGROUND": "背景", "INFO": "信息", @@ -194,10 +194,13 @@ "t_e9": "额外9", "SHUFFLE": "洗牌", "SHUFFLE_LONG": "洗牌重新排列", + "RESCUE_SHUFFLE": "洗牌以继续", + "RESCUE_SHUFFLE_LONG": "如果没有更多移动则洗牌", "GAME_MODE": "游戏模式", "GAME_MODE_EASY": "简单", "GAME_MODE_STANDARD": "标准", "GAME_MODE_EXPERT": "专家", + "GAME_MODE_NO_HELPERS": "没有助手 - 需要纯粹的技能", "HOW_TO_PLAY": "如何游戏", "HOW_GOAL": "目标是将游戏板上所有开放的配对牌全部移除。", "HOW_OPEN": "开放", diff --git a/src/styles.scss b/src/styles.scss index 45f2c9d0..01d01fc0 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -609,7 +609,7 @@ p { } } - // Size classes — applied to the outer .overlay div, target .overlay-popup inside + // Size classes - applied to the outer .overlay div, target .overlay-popup inside &.overlay-size-large { .overlay-popup { @@ -682,7 +682,7 @@ p { } } - // Per-dialog variants — z-index and behavior only, no sizing + // Per-dialog variants - z-index and behavior only, no sizing &.overlay-info { z-index: 10010; From 9596c6d61fbc7a57827c7ac307a30fd69d5ea671 Mon Sep 17 00:00:00 2001 From: ffalt Date: Sat, 9 May 2026 11:32:22 +0200 Subject: [PATCH 4/5] feat(icons): replace legacy font-based icons with svg components --- README.md | 4 +- angular.json | 2 - .../choose-layout.component.html | 2 +- .../choose-layout/choose-layout.component.ts | 3 +- .../components/dialog/dialog.component.html | 4 +- src/app/components/dialog/dialog.component.ts | 4 +- .../game/game-component.component.html | 26 ++--- .../game/game-component.component.scss | 2 +- .../game/game-component.component.ts | 15 ++- src/app/components/help/help.component.html | 2 +- .../components/help/help.component.spec.ts | 13 ++- src/app/components/help/help.component.ts | 31 ++++-- src/app/components/icons/README.md | 41 +++++++ .../icons/icon-clear.component.html | 11 ++ .../components/icons/icon-clear.component.ts | 10 ++ .../icons/icon-close.component.html | 10 ++ .../components/icons/icon-close.component.ts | 10 ++ .../icons/icon-delete.component.html | 7 ++ .../components/icons/icon-delete.component.ts | 10 ++ .../components/icons/icon-down.component.html | 5 + .../components/icons/icon-down.component.ts | 10 ++ .../icons/icon-duplicate.component.html | 11 ++ .../icons/icon-duplicate.component.ts | 10 ++ .../icons/icon-execute.component.html | 7 ++ .../icons/icon-execute.component.ts | 10 ++ .../icons/icon-fullscreen.component.html | 7 ++ .../icons/icon-fullscreen.component.ts | 10 ++ .../components/icons/icon-hint.component.html | 12 +++ .../components/icons/icon-hint.component.ts | 10 ++ .../components/icons/icon-info.component.html | 1 + .../components/icons/icon-info.component.ts | 7 +- .../components/icons/icon-left.component.html | 5 + .../components/icons/icon-left.component.ts | 10 ++ .../icons/icon-list-add.component.html | 8 ++ .../icons/icon-list-add.component.ts | 10 ++ .../components/icons/icon-logo.component.html | 13 +++ .../components/icons/icon-logo.component.ts | 10 ++ .../components/icons/icon-menu.component.html | 9 ++ .../components/icons/icon-menu.component.ts | 10 ++ .../components/icons/icon-mute.component.html | 9 ++ .../components/icons/icon-mute.component.ts | 10 ++ .../components/icons/icon-ok.component.html | 6 ++ src/app/components/icons/icon-ok.component.ts | 10 ++ .../icons/icon-pause.component.html | 5 + .../components/icons/icon-pause.component.ts | 10 ++ .../icons/icon-restart.component.html | 9 ++ .../icons/icon-restart.component.ts | 10 ++ .../icons/icon-right.component.html | 5 + .../components/icons/icon-right.component.ts | 10 ++ .../icons/icon-settings.component.html | 13 +++ .../icons/icon-settings.component.ts | 10 ++ .../icons/icon-shuffle.component.html | 20 ++++ .../icons/icon-shuffle.component.ts | 10 ++ .../icons/icon-tilesinfo.component.html | 14 +++ .../icons/icon-tilesinfo.component.ts | 10 ++ .../components/icons/icon-undo.component.html | 7 ++ .../components/icons/icon-undo.component.ts | 10 ++ .../components/icons/icon-up.component.html | 5 + src/app/components/icons/icon-up.component.ts | 10 ++ .../layout-list/layout-list.component.html | 8 +- .../layout-list/layout-list.component.scss | 32 +++++- .../layout-list/layout-list.component.ts | 3 +- src/app/model/consts.spec.ts | 2 +- .../components/editor/editor.component.html | 8 +- .../components/editor/editor.component.scss | 10 ++ .../components/editor/editor.component.ts | 4 +- .../components/import/import.component.html | 2 +- .../components/import/import.component.ts | 3 +- .../components/layout/layout.component.html | 30 +++--- .../components/layout/layout.component.ts | 13 ++- .../components/manager/manager.component.html | 8 +- .../components/manager/manager.component.ts | 4 +- src/assets/i18n/ar.json | 2 +- src/assets/i18n/bn.json | 2 +- src/assets/i18n/ca.json | 2 +- src/assets/i18n/cs.json | 2 +- src/assets/i18n/da.json | 2 +- src/assets/i18n/de.json | 2 +- src/assets/i18n/el.json | 2 +- src/assets/i18n/en.json | 2 +- src/assets/i18n/es.json | 2 +- src/assets/i18n/eu.json | 2 +- src/assets/i18n/fa.json | 2 +- src/assets/i18n/fi.json | 2 +- src/assets/i18n/fil.json | 2 +- src/assets/i18n/fr.json | 2 +- src/assets/i18n/hi.json | 2 +- src/assets/i18n/hu.json | 2 +- src/assets/i18n/id.json | 2 +- src/assets/i18n/it.json | 2 +- src/assets/i18n/ja.json | 2 +- src/assets/i18n/ko.json | 2 +- src/assets/i18n/ms.json | 2 +- src/assets/i18n/nl.json | 2 +- src/assets/i18n/no.json | 2 +- src/assets/i18n/pl.json | 2 +- src/assets/i18n/pt.json | 2 +- src/assets/i18n/ro.json | 2 +- src/assets/i18n/ru.json | 2 +- src/assets/i18n/sv.json | 2 +- src/assets/i18n/sw.json | 2 +- src/assets/i18n/ta.json | 2 +- src/assets/i18n/te.json | 2 +- src/assets/i18n/th.json | 2 +- src/assets/i18n/tr.json | 2 +- src/assets/i18n/uk.json | 2 +- src/assets/i18n/ur.json | 2 +- src/assets/i18n/vi.json | 2 +- src/assets/i18n/zh.json | 2 +- src/fonts/README.md | 8 +- src/fonts/editor/LICENSE.txt | 30 ------ src/fonts/editor/config.json | 70 ------------ src/fonts/editor/css/editor.css | 72 ------------- src/fonts/editor/font/editor.eot | Bin 7752 -> 0 bytes src/fonts/editor/font/editor.svg | 30 ------ src/fonts/editor/font/editor.ttf | Bin 7592 -> 0 bytes src/fonts/editor/font/editor.woff | Bin 4596 -> 0 bytes src/fonts/editor/font/editor.woff2 | Bin 3836 -> 0 bytes src/fonts/fontello/LICENSE.txt | 48 --------- src/fonts/fontello/config.json | 102 ------------------ src/fonts/fontello/css/mah.css | 60 ----------- src/fonts/fontello/font/mah.eot | Bin 9924 -> 0 bytes src/fonts/fontello/font/mah.svg | 38 ------- src/fonts/fontello/font/mah.ttf | Bin 9776 -> 0 bytes src/fonts/fontello/font/mah.woff | Bin 6148 -> 0 bytes src/fonts/fontello/font/mah.woff2 | Bin 5168 -> 0 bytes src/styles.scss | 14 ++- 127 files changed, 672 insertions(+), 576 deletions(-) create mode 100644 src/app/components/icons/README.md create mode 100644 src/app/components/icons/icon-clear.component.html create mode 100644 src/app/components/icons/icon-clear.component.ts create mode 100644 src/app/components/icons/icon-close.component.html create mode 100644 src/app/components/icons/icon-close.component.ts create mode 100644 src/app/components/icons/icon-delete.component.html create mode 100644 src/app/components/icons/icon-delete.component.ts create mode 100644 src/app/components/icons/icon-down.component.html create mode 100644 src/app/components/icons/icon-down.component.ts create mode 100644 src/app/components/icons/icon-duplicate.component.html create mode 100644 src/app/components/icons/icon-duplicate.component.ts create mode 100644 src/app/components/icons/icon-execute.component.html create mode 100644 src/app/components/icons/icon-execute.component.ts create mode 100644 src/app/components/icons/icon-fullscreen.component.html create mode 100644 src/app/components/icons/icon-fullscreen.component.ts create mode 100644 src/app/components/icons/icon-hint.component.html create mode 100644 src/app/components/icons/icon-hint.component.ts create mode 100644 src/app/components/icons/icon-info.component.html create mode 100644 src/app/components/icons/icon-left.component.html create mode 100644 src/app/components/icons/icon-left.component.ts create mode 100644 src/app/components/icons/icon-list-add.component.html create mode 100644 src/app/components/icons/icon-list-add.component.ts create mode 100644 src/app/components/icons/icon-logo.component.html create mode 100644 src/app/components/icons/icon-logo.component.ts create mode 100644 src/app/components/icons/icon-menu.component.html create mode 100644 src/app/components/icons/icon-menu.component.ts create mode 100644 src/app/components/icons/icon-mute.component.html create mode 100644 src/app/components/icons/icon-mute.component.ts create mode 100644 src/app/components/icons/icon-ok.component.html create mode 100644 src/app/components/icons/icon-ok.component.ts create mode 100644 src/app/components/icons/icon-pause.component.html create mode 100644 src/app/components/icons/icon-pause.component.ts create mode 100644 src/app/components/icons/icon-restart.component.html create mode 100644 src/app/components/icons/icon-restart.component.ts create mode 100644 src/app/components/icons/icon-right.component.html create mode 100644 src/app/components/icons/icon-right.component.ts create mode 100644 src/app/components/icons/icon-settings.component.html create mode 100644 src/app/components/icons/icon-settings.component.ts create mode 100644 src/app/components/icons/icon-shuffle.component.html create mode 100644 src/app/components/icons/icon-shuffle.component.ts create mode 100644 src/app/components/icons/icon-tilesinfo.component.html create mode 100644 src/app/components/icons/icon-tilesinfo.component.ts create mode 100644 src/app/components/icons/icon-undo.component.html create mode 100644 src/app/components/icons/icon-undo.component.ts create mode 100644 src/app/components/icons/icon-up.component.html create mode 100644 src/app/components/icons/icon-up.component.ts delete mode 100644 src/fonts/editor/LICENSE.txt delete mode 100644 src/fonts/editor/config.json delete mode 100644 src/fonts/editor/css/editor.css delete mode 100644 src/fonts/editor/font/editor.eot delete mode 100644 src/fonts/editor/font/editor.svg delete mode 100644 src/fonts/editor/font/editor.ttf delete mode 100644 src/fonts/editor/font/editor.woff delete mode 100644 src/fonts/editor/font/editor.woff2 delete mode 100644 src/fonts/fontello/LICENSE.txt delete mode 100644 src/fonts/fontello/config.json delete mode 100644 src/fonts/fontello/css/mah.css delete mode 100644 src/fonts/fontello/font/mah.eot delete mode 100644 src/fonts/fontello/font/mah.svg delete mode 100644 src/fonts/fontello/font/mah.ttf delete mode 100644 src/fonts/fontello/font/mah.woff delete mode 100644 src/fonts/fontello/font/mah.woff2 diff --git a/README.md b/README.md index 9745bb52..f0ea9c5d 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ The original open-source Mahjong Solitaire game powering many Mahjong experience 🖼️ **Massive visual customization** - 8 image backgrounds, 375 pattern backgrounds, light/dark mode, 14 color themes -🏆 **3 difficulty levels** - from relaxed casual play to expert-level challenge +🏆 **Difficulty levels** - from relaxed casual play to expert-level challenge 💾 **Auto-save** - your game state and best times are saved locally in your browser, never to the cloud @@ -111,7 +111,7 @@ Most modern phones use `arm64`. Try these APK variants in order: ## 🙏 Acknowledgements -Mah's art is built on open-source creative work. See the credits for [artwork](src/assets/svg/README.md), [backgrounds](src/assets/img/README.md), [sounds](src/assets/sounds/README.md), and [fonts](src/fonts/README.md). +Mah's art is built on open-source creative work. See the credits for [artwork](src/assets/svg/README.md), [backgrounds](src/assets/img/README.md), [sounds](src/assets/sounds/README.md), [icons](src/app/components/icons/README.md) and [fonts](src/fonts/README.md). --- diff --git a/angular.json b/angular.json index 38899df2..ea562210 100644 --- a/angular.json +++ b/angular.json @@ -33,8 +33,6 @@ "src/assets" ], "styles": [ - "src/fonts/fontello/css/mah.css", - "src/fonts/editor/css/editor.css", "src/fonts/kulim-park/css/kulim-park.css", "src/styles.scss" ], diff --git a/src/app/components/choose-layout/choose-layout.component.html b/src/app/components/choose-layout/choose-layout.component.html index 0562af03..13ca9bd3 100644 --- a/src/app/components/choose-layout/choose-layout.component.html +++ b/src/app/components/choose-layout/choose-layout.component.html @@ -28,7 +28,7 @@ @if (activeInfo()) {
- + @if (activeInfo() === 'generator') {

{{ 'BOARD_GENERATOR' | translate }}

@for (m of buildModes; track m) { diff --git a/src/app/components/choose-layout/choose-layout.component.ts b/src/app/components/choose-layout/choose-layout.component.ts index 39578284..441c945f 100644 --- a/src/app/components/choose-layout/choose-layout.component.ts +++ b/src/app/components/choose-layout/choose-layout.component.ts @@ -7,6 +7,7 @@ import { type GAME_MODE_ID, GameModes } from '../../model/consts'; import { TranslatePipe } from '@ngx-translate/core'; import { LayoutListComponent } from '../layout-list/layout-list.component'; import { IconInfoComponent } from '../icons/icon-info.component'; +import { IconCloseComponent } from '../icons/icon-close.component'; export interface StartEvent { layout: Layout; @@ -18,7 +19,7 @@ export interface StartEvent { selector: 'app-choose-layout', templateUrl: './choose-layout.component.html', styleUrls: ['./choose-layout.component.scss'], - imports: [LayoutListComponent, TranslatePipe, IconInfoComponent] + imports: [LayoutListComponent, TranslatePipe, IconInfoComponent, IconCloseComponent] }) export class ChooseLayoutComponent { readonly startEvent = output(); diff --git a/src/app/components/dialog/dialog.component.html b/src/app/components/dialog/dialog.component.html index b8c49a5c..bf45fdf0 100644 --- a/src/app/components/dialog/dialog.component.html +++ b/src/app/components/dialog/dialog.component.html @@ -3,10 +3,10 @@
@if (title()) { -

{{ title() }}

+

{{ title() }}

} @if (!noCloseButton()) { - + }
diff --git a/src/app/components/dialog/dialog.component.ts b/src/app/components/dialog/dialog.component.ts index b6823785..00a43101 100644 --- a/src/app/components/dialog/dialog.component.ts +++ b/src/app/components/dialog/dialog.component.ts @@ -1,11 +1,13 @@ import { Component, input, model, output } from '@angular/core'; import { TranslatePipe } from '@ngx-translate/core'; +import { IconCloseComponent } from '../icons/icon-close.component'; +import { IconLogoComponent } from '../icons/icon-logo.component'; @Component({ selector: 'app-dialog', templateUrl: './dialog.component.html', styleUrls: ['./dialog.component.scss'], - imports: [TranslatePipe] + imports: [TranslatePipe, IconLogoComponent, IconCloseComponent] }) export class DialogComponent { readonly title = input(); diff --git a/src/app/components/game/game-component.component.html b/src/app/components/game/game-component.component.html index cd8ff74d..161dc74d 100644 --- a/src/app/components/game/game-component.component.html +++ b/src/app/components/game/game-component.component.html @@ -1,25 +1,25 @@
@@ -35,21 +35,21 @@
@@ -105,11 +105,11 @@
} diff --git a/src/app/components/game/game-component.component.scss b/src/app/components/game/game-component.component.scss index 8ad7d877..a363e82a 100644 --- a/src/app/components/game/game-component.component.scss +++ b/src/app/components/game/game-component.component.scss @@ -134,7 +134,7 @@ font-weight: 600; cursor: pointer; - .icon-logo { + app-icon-logo { color: red; } } diff --git a/src/app/components/game/game-component.component.ts b/src/app/components/game/game-component.component.ts index 7534ce0c..750cdfc8 100644 --- a/src/app/components/game/game-component.component.ts +++ b/src/app/components/game/game-component.component.ts @@ -17,6 +17,17 @@ import { BoardComponent } from '../board/board.component'; import { TutorialComponent } from '../tutorial/tutorial.component'; import { DurationPipe } from '../../pipes/duration.pipe'; import { GameModeEasyPipe, GameModeStandardPipe } from '../../pipes/game-mode.pipe'; +import { IconTilesinfoComponent } from '../icons/icon-tilesinfo.component'; +import { IconSettingsComponent } from '../icons/icon-settings.component'; +import { IconHintComponent } from '../icons/icon-hint.component'; +import { IconLogoComponent } from '../icons/icon-logo.component'; +import { IconRestartComponent } from '../icons/icon-restart.component'; +import { IconMenuComponent } from '../icons/icon-menu.component'; +import { IconPauseComponent } from '../icons/icon-pause.component'; +import { IconFullscreenComponent } from '../icons/icon-fullscreen.component'; +import { IconShuffleComponent } from '../icons/icon-shuffle.component'; +import { IconUndoComponent } from '../icons/icon-undo.component'; +import { IconMuteComponent } from '../icons/icon-mute.component'; interface DocumentExtended extends Document { fullScreen: boolean; @@ -66,7 +77,9 @@ function callFullscreenMethod( host: { '(document:keydown)': 'handleKeyDownEvent($event)' }, imports: [ BoardComponent, DurationPipe, GameModeStandardPipe, GameModeEasyPipe, - HelpComponent, TilesInfoComponent, SettingsComponent, ChooseLayoutComponent, TutorialComponent, TranslatePipe, DialogComponent + HelpComponent, TilesInfoComponent, SettingsComponent, ChooseLayoutComponent, TutorialComponent, TranslatePipe, DialogComponent, + IconTilesinfoComponent, IconSettingsComponent, IconHintComponent, IconLogoComponent, IconRestartComponent, + IconMenuComponent, IconPauseComponent, IconFullscreenComponent, IconShuffleComponent, IconUndoComponent, IconMuteComponent ] }) export class GameComponent { diff --git a/src/app/components/help/help.component.html b/src/app/components/help/help.component.html index c671a46b..9744609d 100644 --- a/src/app/components/help/help.component.html +++ b/src/app/components/help/help.component.html @@ -19,7 +19,7 @@ / {{ shortcut.altKey }} } - + {{ shortcut.name|translate }}
{{ (shortcut.name + '_LONG')|translate }} diff --git a/src/app/components/help/help.component.spec.ts b/src/app/components/help/help.component.spec.ts index ab460505..908b1dd8 100644 --- a/src/app/components/help/help.component.spec.ts +++ b/src/app/components/help/help.component.spec.ts @@ -35,7 +35,6 @@ describe('HelpComponent', () => { expect(component.shortcuts).toHaveLength(8); expect(component.shortcuts[0].key).toBe('T'); expect(component.shortcuts[0].name).toBe('HINT'); - expect(component.shortcuts[0].icon).toBe('icon-lightbulb'); }); it('should render the how to play section', () => { @@ -80,8 +79,8 @@ describe('HelpComponent', () => { const keyElement = firstShortcut.query(By.css('.key')); expect(keyElement.nativeElement.textContent).toBe('T'); - const iconElement = firstShortcut.query(By.css('i')); - expect(iconElement.nativeElement.className).toContain('icon-lightbulb'); + const iconElement = firstShortcut.query(By.css('app-icon-hint')); + expect(iconElement).toBeTruthy(); const nameElement = firstShortcut.query(By.css('.name')); expect(nameElement).toBeTruthy(); @@ -102,9 +101,13 @@ describe('HelpComponent', () => { const keyElement = shortcutElement.query(By.css('.key')); expect(keyElement.nativeElement.textContent).toBe(shortcut.key); - const iconElement = shortcutElement.query(By.css('i')); + const iconID = shortcut.icon.name.replace('Icon', '').replace('Component', '').toLowerCase(); + const iconName = `app-icon-${iconID}`; + const iconElement = shortcutElement.query(By.css(iconName)); + if (!iconElement) { + console.log(`Checking shortcut "${shortcut.name}" for icon "${iconName}"`); + } expect(iconElement).toBeTruthy(); - expect(iconElement.nativeElement.className).toContain(shortcut.icon); } }); diff --git a/src/app/components/help/help.component.ts b/src/app/components/help/help.component.ts index e8cd255f..b1bd7a0e 100644 --- a/src/app/components/help/help.component.ts +++ b/src/app/components/help/help.component.ts @@ -1,10 +1,19 @@ -import { Component, inject, output, type OnInit } from '@angular/core'; +import { Component, inject, output, type OnInit, type Type } from '@angular/core'; +import { NgComponentOutlet } from '@angular/common'; import { TranslatePipe, TranslateService } from '@ngx-translate/core'; import { clickExternalHref } from '../../model/external-links'; import { DurationPipe } from '../../pipes/duration.pipe'; import { LayoutService } from '../../service/layout.service'; import { LocalstorageService } from '../../service/localstorage.service'; import { log } from '../../model/log'; +import { IconTilesinfoComponent } from '../icons/icon-tilesinfo.component'; +import { IconSettingsComponent } from '../icons/icon-settings.component'; +import { IconHintComponent } from '../icons/icon-hint.component'; +import { IconLogoComponent } from '../icons/icon-logo.component'; +import { IconRestartComponent } from '../icons/icon-restart.component'; +import { IconPauseComponent } from '../icons/icon-pause.component'; +import { IconShuffleComponent } from '../icons/icon-shuffle.component'; +import { IconUndoComponent } from '../icons/icon-undo.component'; interface StatEntry { name: string; @@ -24,7 +33,7 @@ interface Stat { selector: 'app-help', templateUrl: './help.component.html', styleUrls: ['./help.component.scss'], - imports: [TranslatePipe, DurationPipe] + imports: [TranslatePipe, DurationPipe, NgComponentOutlet] }) export class HelpComponent implements OnInit { readonly showTutorial = output(); @@ -38,15 +47,15 @@ export class HelpComponent implements OnInit { private readonly storage = inject(LocalstorageService); private readonly translate = inject(TranslateService); - shortcuts: Array<{ icon: string; key: string; altKey?: string; name: string }> = [ - { icon: 'icon-lightbulb', key: 'T', name: 'HINT' }, - { icon: 'icon-spin1', key: 'M', name: 'SHUFFLE' }, - { icon: 'icon-undo', key: 'U', name: 'UNDO' }, - { icon: 'icon-loop', key: 'N', name: 'RESTART' }, - { icon: 'icon-pause', key: 'P', altKey: 'Space', name: 'PAUSE' }, - { icon: 'icon-calendar', key: 'I', name: 'INFO' }, - { icon: 'icon-cog', key: 'S', name: 'SETTINGS' }, - { icon: 'icon-logo', key: 'H', name: 'HELP' } + shortcuts: Array<{ icon: Type; key: string; altKey?: string; name: string }> = [ + { icon: IconHintComponent, key: 'T', name: 'HINT' }, + { icon: IconShuffleComponent, key: 'M', name: 'SHUFFLE' }, + { icon: IconUndoComponent, key: 'U', name: 'UNDO' }, + { icon: IconRestartComponent, key: 'N', name: 'RESTART' }, + { icon: IconPauseComponent, key: 'P', altKey: 'Space', name: 'PAUSE' }, + { icon: IconTilesinfoComponent, key: 'I', name: 'TILES_INFO' }, + { icon: IconSettingsComponent, key: 'S', name: 'SETTINGS' }, + { icon: IconLogoComponent, key: 'H', name: 'HELP' } ]; ngOnInit(): void { diff --git a/src/app/components/icons/README.md b/src/app/components/icons/README.md new file mode 100644 index 00000000..7b5c0aa6 --- /dev/null +++ b/src/app/components/icons/README.md @@ -0,0 +1,41 @@ +# Icons license info + +## Entypo + +Copyright (C) 2012 by Daniel Bruce + +Author: Daniel Bruce +License: SIL (http://scripts.sil.org/OFL) +Homepage: + +## Font Awesome + +Copyright (C) 2016 by Dave Gandy + +Author: Dave Gandy +License: SIL (http://scripts.sil.org/OFL) +Homepage: + +## Iconic + +Copyright (C) 2012 by P.J. Onori + +Author: P.J. Onori +License: SIL (http://scripts.sil.org/OFL) +Homepage: + +## Fontelico + +Copyright (C) 2012 by Fontello project + +Author: Crowdsourced, for Fontello project +License: SIL (http://scripts.sil.org/OFL) +Homepage: + +## Typicons + +(c) Stephen Hutchings 2012 + +Author: Stephen Hutchings +License: SIL (http://scripts.sil.org/OFL) +Homepage: http://typicons.com/ diff --git a/src/app/components/icons/icon-clear.component.html b/src/app/components/icons/icon-clear.component.html new file mode 100644 index 00000000..c7b7087a --- /dev/null +++ b/src/app/components/icons/icon-clear.component.html @@ -0,0 +1,11 @@ + diff --git a/src/app/components/icons/icon-clear.component.ts b/src/app/components/icons/icon-clear.component.ts new file mode 100644 index 00000000..2652f405 --- /dev/null +++ b/src/app/components/icons/icon-clear.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: 3df1557e2d6e84ec32bd47aee5bfdf59, css: cancel-alt, src: typicons +@Component({ + selector: 'app-icon-clear', + templateUrl: './icon-clear.component.html', + host: { class: 'icon' } +}) +export class IconClearComponent { +} diff --git a/src/app/components/icons/icon-close.component.html b/src/app/components/icons/icon-close.component.html new file mode 100644 index 00000000..4a21fc52 --- /dev/null +++ b/src/app/components/icons/icon-close.component.html @@ -0,0 +1,10 @@ + diff --git a/src/app/components/icons/icon-close.component.ts b/src/app/components/icons/icon-close.component.ts new file mode 100644 index 00000000..33c7153d --- /dev/null +++ b/src/app/components/icons/icon-close.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: 2e2dba0307a502a8507c1729084c7ab5, css: cancel-circled2, src: fontawesome +@Component({ + selector: 'app-icon-close', + templateUrl: './icon-close.component.html', + host: { class: 'icon' } +}) +export class IconCloseComponent { +} diff --git a/src/app/components/icons/icon-delete.component.html b/src/app/components/icons/icon-delete.component.html new file mode 100644 index 00000000..3115eb59 --- /dev/null +++ b/src/app/components/icons/icon-delete.component.html @@ -0,0 +1,7 @@ + diff --git a/src/app/components/icons/icon-delete.component.ts b/src/app/components/icons/icon-delete.component.ts new file mode 100644 index 00000000..5a35d195 --- /dev/null +++ b/src/app/components/icons/icon-delete.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: 2626e3a1bbcd90e45849af3b58a1d594, css: trash, src: entypo +@Component({ + selector: 'app-icon-delete', + templateUrl: './icon-delete.component.html', + host: { class: 'icon' } +}) +export class IconDeleteComponent { +} diff --git a/src/app/components/icons/icon-down.component.html b/src/app/components/icons/icon-down.component.html new file mode 100644 index 00000000..968d1343 --- /dev/null +++ b/src/app/components/icons/icon-down.component.html @@ -0,0 +1,5 @@ + diff --git a/src/app/components/icons/icon-down.component.ts b/src/app/components/icons/icon-down.component.ts new file mode 100644 index 00000000..14dbc15b --- /dev/null +++ b/src/app/components/icons/icon-down.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: c16a63e911bc47b46dc2a7129d2f0c46, css: down-small, src: typicons +@Component({ + selector: 'app-icon-down', + templateUrl: './icon-down.component.html', + host: { class: 'icon' } +}) +export class IconDownComponent { +} diff --git a/src/app/components/icons/icon-duplicate.component.html b/src/app/components/icons/icon-duplicate.component.html new file mode 100644 index 00000000..1659296b --- /dev/null +++ b/src/app/components/icons/icon-duplicate.component.html @@ -0,0 +1,11 @@ + diff --git a/src/app/components/icons/icon-duplicate.component.ts b/src/app/components/icons/icon-duplicate.component.ts new file mode 100644 index 00000000..a4cda7f5 --- /dev/null +++ b/src/app/components/icons/icon-duplicate.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: c8585e1e5b0467f28b70bce765d5840c, css: docs, src: fontawesome +@Component({ + selector: 'app-icon-duplicate', + templateUrl: './icon-duplicate.component.html', + host: { class: 'icon' } +}) +export class IconDuplicateComponent { +} diff --git a/src/app/components/icons/icon-execute.component.html b/src/app/components/icons/icon-execute.component.html new file mode 100644 index 00000000..230d2f9b --- /dev/null +++ b/src/app/components/icons/icon-execute.component.html @@ -0,0 +1,7 @@ + diff --git a/src/app/components/icons/icon-execute.component.ts b/src/app/components/icons/icon-execute.component.ts new file mode 100644 index 00000000..a87770d0 --- /dev/null +++ b/src/app/components/icons/icon-execute.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: 4b2321afcbe0505a70b80abd5c25e09b, css: paper-plane-empty, src: fontawesome +@Component({ + selector: 'app-icon-execute', + templateUrl: './icon-execute.component.html', + host: { class: 'icon' } +}) +export class IconExecuteComponent { +} diff --git a/src/app/components/icons/icon-fullscreen.component.html b/src/app/components/icons/icon-fullscreen.component.html new file mode 100644 index 00000000..bdc1ac97 --- /dev/null +++ b/src/app/components/icons/icon-fullscreen.component.html @@ -0,0 +1,7 @@ + diff --git a/src/app/components/icons/icon-fullscreen.component.ts b/src/app/components/icons/icon-fullscreen.component.ts new file mode 100644 index 00000000..445aab5b --- /dev/null +++ b/src/app/components/icons/icon-fullscreen.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: 776687efbdb973ebc67e049cc4c41b13, css: resize-full-alt, src: iconic +@Component({ + selector: 'app-icon-fullscreen', + templateUrl: './icon-fullscreen.component.html', + host: { class: 'icon' } +}) +export class IconFullscreenComponent { +} diff --git a/src/app/components/icons/icon-hint.component.html b/src/app/components/icons/icon-hint.component.html new file mode 100644 index 00000000..312f6634 --- /dev/null +++ b/src/app/components/icons/icon-hint.component.html @@ -0,0 +1,12 @@ + diff --git a/src/app/components/icons/icon-hint.component.ts b/src/app/components/icons/icon-hint.component.ts new file mode 100644 index 00000000..ed50ec63 --- /dev/null +++ b/src/app/components/icons/icon-hint.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: 5278ef7773e948d56c4d442c8c8c98cf, css: lightbulb, src: fontawesome +@Component({ + selector: 'app-icon-hint', + templateUrl: './icon-hint.component.html', + host: { class: 'icon' } +}) +export class IconHintComponent { +} diff --git a/src/app/components/icons/icon-info.component.html b/src/app/components/icons/icon-info.component.html new file mode 100644 index 00000000..adc2de87 --- /dev/null +++ b/src/app/components/icons/icon-info.component.html @@ -0,0 +1 @@ + diff --git a/src/app/components/icons/icon-info.component.ts b/src/app/components/icons/icon-info.component.ts index 8647914d..6a520455 100644 --- a/src/app/components/icons/icon-info.component.ts +++ b/src/app/components/icons/icon-info.component.ts @@ -2,7 +2,8 @@ import { Component } from '@angular/core'; @Component({ selector: 'app-icon-info', - template: ``, - styles: [`:host { display: contents; } svg { display: block; width: 1em; height: 1em; fill: currentColor; flex-shrink: 0; }`] + templateUrl: './icon-info.component.html', + host: { class: 'icon' } }) -export class IconInfoComponent {} +export class IconInfoComponent { +} diff --git a/src/app/components/icons/icon-left.component.html b/src/app/components/icons/icon-left.component.html new file mode 100644 index 00000000..9fdd68d0 --- /dev/null +++ b/src/app/components/icons/icon-left.component.html @@ -0,0 +1,5 @@ + diff --git a/src/app/components/icons/icon-left.component.ts b/src/app/components/icons/icon-left.component.ts new file mode 100644 index 00000000..a4642766 --- /dev/null +++ b/src/app/components/icons/icon-left.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: 58b78b6ca784d5c3db5beefcd9e18061, css: left-small, src: typicons +@Component({ + selector: 'app-icon-left', + templateUrl: './icon-left.component.html', + host: { class: 'icon' } +}) +export class IconLeftComponent { +} diff --git a/src/app/components/icons/icon-list-add.component.html b/src/app/components/icons/icon-list-add.component.html new file mode 100644 index 00000000..2c5a5bed --- /dev/null +++ b/src/app/components/icons/icon-list-add.component.html @@ -0,0 +1,8 @@ + diff --git a/src/app/components/icons/icon-list-add.component.ts b/src/app/components/icons/icon-list-add.component.ts new file mode 100644 index 00000000..1cee3959 --- /dev/null +++ b/src/app/components/icons/icon-list-add.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: 97bd5542ed3e143d2ee9b60e14487615, css: list-add, src: entypo +@Component({ + selector: 'app-icon-list-add', + templateUrl: './icon-list-add.component.html', + host: { class: 'icon' } +}) +export class IconListAddComponent { +} diff --git a/src/app/components/icons/icon-logo.component.html b/src/app/components/icons/icon-logo.component.html new file mode 100644 index 00000000..d7852e6f --- /dev/null +++ b/src/app/components/icons/icon-logo.component.html @@ -0,0 +1,13 @@ + diff --git a/src/app/components/icons/icon-logo.component.ts b/src/app/components/icons/icon-logo.component.ts new file mode 100644 index 00000000..d2497976 --- /dev/null +++ b/src/app/components/icons/icon-logo.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: b38002a7e1a57208ec9353285c99ed86, css: logo, src: custom_icons +@Component({ + selector: 'app-icon-logo', + templateUrl: './icon-logo.component.html', + host: { class: 'icon' } +}) +export class IconLogoComponent { +} diff --git a/src/app/components/icons/icon-menu.component.html b/src/app/components/icons/icon-menu.component.html new file mode 100644 index 00000000..82c9aef5 --- /dev/null +++ b/src/app/components/icons/icon-menu.component.html @@ -0,0 +1,9 @@ + diff --git a/src/app/components/icons/icon-menu.component.ts b/src/app/components/icons/icon-menu.component.ts new file mode 100644 index 00000000..ed6ba111 --- /dev/null +++ b/src/app/components/icons/icon-menu.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: 559647a6f430b3aeadbecd67194451dd, css: menu, src: fontawesome +@Component({ + selector: 'app-icon-menu', + templateUrl: './icon-menu.component.html', + host: { class: 'icon' } +}) +export class IconMenuComponent { +} diff --git a/src/app/components/icons/icon-mute.component.html b/src/app/components/icons/icon-mute.component.html new file mode 100644 index 00000000..23e621e0 --- /dev/null +++ b/src/app/components/icons/icon-mute.component.html @@ -0,0 +1,9 @@ + diff --git a/src/app/components/icons/icon-mute.component.ts b/src/app/components/icons/icon-mute.component.ts new file mode 100644 index 00000000..7c204810 --- /dev/null +++ b/src/app/components/icons/icon-mute.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: 43m0a70tvxqc6q7jxgzhz5lmlt3ce2iy, css: volume-low, src: typicons +@Component({ + selector: 'app-icon-mute', + templateUrl: './icon-mute.component.html', + host: { class: 'icon' } +}) +export class IconMuteComponent { +} diff --git a/src/app/components/icons/icon-ok.component.html b/src/app/components/icons/icon-ok.component.html new file mode 100644 index 00000000..60f97699 --- /dev/null +++ b/src/app/components/icons/icon-ok.component.html @@ -0,0 +1,6 @@ + diff --git a/src/app/components/icons/icon-ok.component.ts b/src/app/components/icons/icon-ok.component.ts new file mode 100644 index 00000000..83354fba --- /dev/null +++ b/src/app/components/icons/icon-ok.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: 12f4ece88e46abd864e40b35e05b11cd, css: ok, src: fontawesome +@Component({ + selector: 'app-icon-ok', + templateUrl: './icon-ok.component.html', + host: { class: 'icon' } +}) +export class IconOkComponent { +} diff --git a/src/app/components/icons/icon-pause.component.html b/src/app/components/icons/icon-pause.component.html new file mode 100644 index 00000000..7584117c --- /dev/null +++ b/src/app/components/icons/icon-pause.component.html @@ -0,0 +1,5 @@ + diff --git a/src/app/components/icons/icon-pause.component.ts b/src/app/components/icons/icon-pause.component.ts new file mode 100644 index 00000000..95b72533 --- /dev/null +++ b/src/app/components/icons/icon-pause.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: d8d378d0ce413f231dfa37592e39c227, css: pause, src: entypo +@Component({ + selector: 'app-icon-pause', + templateUrl: './icon-pause.component.html', + host: { class: 'icon' } +}) +export class IconPauseComponent { +} diff --git a/src/app/components/icons/icon-restart.component.html b/src/app/components/icons/icon-restart.component.html new file mode 100644 index 00000000..e62c13a1 --- /dev/null +++ b/src/app/components/icons/icon-restart.component.html @@ -0,0 +1,9 @@ + diff --git a/src/app/components/icons/icon-restart.component.ts b/src/app/components/icons/icon-restart.component.ts new file mode 100644 index 00000000..d2a881b2 --- /dev/null +++ b/src/app/components/icons/icon-restart.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: 5d3ef4b7c90d2931e641b840ee42f694, css: loop, src: iconic +@Component({ + selector: 'app-icon-restart', + templateUrl: './icon-restart.component.html', + host: { class: 'icon' } +}) +export class IconRestartComponent { +} diff --git a/src/app/components/icons/icon-right.component.html b/src/app/components/icons/icon-right.component.html new file mode 100644 index 00000000..af398dd8 --- /dev/null +++ b/src/app/components/icons/icon-right.component.html @@ -0,0 +1,5 @@ + diff --git a/src/app/components/icons/icon-right.component.ts b/src/app/components/icons/icon-right.component.ts new file mode 100644 index 00000000..707f7514 --- /dev/null +++ b/src/app/components/icons/icon-right.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: 877a233d7fdca8a1d82615b96ed0d7a2, css: right-small, src: typicons +@Component({ + selector: 'app-icon-right', + templateUrl: './icon-right.component.html', + host: { class: 'icon' } +}) +export class IconRightComponent { +} diff --git a/src/app/components/icons/icon-settings.component.html b/src/app/components/icons/icon-settings.component.html new file mode 100644 index 00000000..2304fee3 --- /dev/null +++ b/src/app/components/icons/icon-settings.component.html @@ -0,0 +1,13 @@ + diff --git a/src/app/components/icons/icon-settings.component.ts b/src/app/components/icons/icon-settings.component.ts new file mode 100644 index 00000000..8910114d --- /dev/null +++ b/src/app/components/icons/icon-settings.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: e99461abfef3923546da8d745372c995, css: cog, src: fontawesome +@Component({ + selector: 'app-icon-settings', + templateUrl: './icon-settings.component.html', + host: { class: 'icon' } +}) +export class IconSettingsComponent { +} diff --git a/src/app/components/icons/icon-shuffle.component.html b/src/app/components/icons/icon-shuffle.component.html new file mode 100644 index 00000000..1b5c1046 --- /dev/null +++ b/src/app/components/icons/icon-shuffle.component.html @@ -0,0 +1,20 @@ + diff --git a/src/app/components/icons/icon-shuffle.component.ts b/src/app/components/icons/icon-shuffle.component.ts new file mode 100644 index 00000000..95f3e6c4 --- /dev/null +++ b/src/app/components/icons/icon-shuffle.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: 72109d2fb3088d0e66ea6a9204297651, css: spin1, src: fontelico +@Component({ + selector: 'app-icon-shuffle', + templateUrl: './icon-shuffle.component.html', + host: { class: 'icon' } +}) +export class IconShuffleComponent { +} diff --git a/src/app/components/icons/icon-tilesinfo.component.html b/src/app/components/icons/icon-tilesinfo.component.html new file mode 100644 index 00000000..b1b6809b --- /dev/null +++ b/src/app/components/icons/icon-tilesinfo.component.html @@ -0,0 +1,14 @@ + diff --git a/src/app/components/icons/icon-tilesinfo.component.ts b/src/app/components/icons/icon-tilesinfo.component.ts new file mode 100644 index 00000000..94ce9b79 --- /dev/null +++ b/src/app/components/icons/icon-tilesinfo.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: c833c98d78cfebed5780cfaaa302a12b, css: calendar, src: iconic +@Component({ + selector: 'app-icon-tilesinfo', + templateUrl: './icon-tilesinfo.component.html', + host: { class: 'icon' } +}) +export class IconTilesinfoComponent { +} diff --git a/src/app/components/icons/icon-undo.component.html b/src/app/components/icons/icon-undo.component.html new file mode 100644 index 00000000..aabdfa1f --- /dev/null +++ b/src/app/components/icons/icon-undo.component.html @@ -0,0 +1,7 @@ + diff --git a/src/app/components/icons/icon-undo.component.ts b/src/app/components/icons/icon-undo.component.ts new file mode 100644 index 00000000..15b0b07d --- /dev/null +++ b/src/app/components/icons/icon-undo.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: ce5e29aa5208417700e7f7012a236c00, css: undo, src: iconic +@Component({ + selector: 'app-icon-undo', + templateUrl: './icon-undo.component.html', + host: { class: 'icon' } +}) +export class IconUndoComponent { +} diff --git a/src/app/components/icons/icon-up.component.html b/src/app/components/icons/icon-up.component.html new file mode 100644 index 00000000..2713d492 --- /dev/null +++ b/src/app/components/icons/icon-up.component.html @@ -0,0 +1,5 @@ + diff --git a/src/app/components/icons/icon-up.component.ts b/src/app/components/icons/icon-up.component.ts new file mode 100644 index 00000000..7a9b1c53 --- /dev/null +++ b/src/app/components/icons/icon-up.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +// uid: 62bc6fe2a82e4864e2b94d4c0985ee0c, css: up-small, src: typicons +@Component({ + selector: 'app-icon-up', + templateUrl: './icon-up.component.html', + host: { class: 'icon' } +}) +export class IconUpComponent { +} diff --git a/src/app/components/layout-list/layout-list.component.html b/src/app/components/layout-list/layout-list.component.html index c3866ba6..42b76d1b 100644 --- a/src/app/components/layout-list/layout-list.component.html +++ b/src/app/components/layout-list/layout-list.component.html @@ -12,9 +12,7 @@
{{ group.name | translateGroup }} - @if (!group.isRandom) { - [{{ group.layouts.length }}] - } +
} @if (group.expanded) { @@ -105,7 +103,7 @@
{{ item.bestTime|duration }} - +
} @@ -113,7 +111,7 @@ @if (item.layout.custom) { } diff --git a/src/app/components/layout-list/layout-list.component.scss b/src/app/components/layout-list/layout-list.component.scss index 43111898..91e07567 100644 --- a/src/app/components/layout-list/layout-list.component.scss +++ b/src/app/components/layout-list/layout-list.component.scss @@ -173,28 +173,50 @@ padding-bottom: 1.5em; } - .preview-custom, .preview-best-time { + .preview-best-time { position: absolute; right: 0; - background-color: var(--preview-overlay-background); color: var(--preview-overlay-text); text-shadow: 1px 1px var(--preview-overlay-text-shadow); + background-color: var(--preview-overlay-background); border-bottom-left-radius: 3px; padding: 3px 3px 3px 6px; + align-items: center; a { display: inline-block; min-width: 1.2em; text-align: right; transition: all 100ms; - margin-top: -1px; + font-size: 0.7em; + padding-left: 6px; - i { - font-size: 0.8em; + &:hover { + transform: scale(1.3); + color: var(--text-highlight-color); } + } + } + + .preview-custom { + position: absolute; + right: 0; + color: var(--preview-overlay-text); + text-shadow: 1px 1px var(--preview-overlay-text-shadow); + border-bottom-left-radius: 3px; + padding: 3px 3px 3px 6px; + + a { + display: inline-block; + min-width: 1.2em; + text-align: right; + transition: all 100ms; + font-size: 0.8em; + margin-bottom: -2px; &:hover { transform: scale(1.3); + color: var(--text-highlight-color); } } } diff --git a/src/app/components/layout-list/layout-list.component.ts b/src/app/components/layout-list/layout-list.component.ts index 270b68d1..96b1c929 100644 --- a/src/app/components/layout-list/layout-list.component.ts +++ b/src/app/components/layout-list/layout-list.component.ts @@ -11,6 +11,7 @@ import { generateRandomMapping } from '../../model/random-layout/random-layout'; import { RANDOM_LAYOUT_ID_PREFIX, type RandomSymmetry } from '../../model/random-layout/consts'; import { seedRNG, resetRNG, generateLayoutSeed } from '../../model/rng'; import { TranslateGroupPipe } from '../../pipes/translate-group.pipe'; +import { IconDeleteComponent } from '../icons/icon-delete.component'; export interface LayoutItem { layout: Layout; @@ -40,7 +41,7 @@ export interface RandomLayoutGroup extends LayoutGroup { selector: 'app-layout-list', templateUrl: './layout-list.component.html', styleUrls: ['./layout-list.component.scss'], - imports: [LayoutPreviewComponent, DurationPipe, TranslatePipe, TranslateGroupPipe, DeferLoadScrollHostDirective, DeferLoadDirective] + imports: [LayoutPreviewComponent, DurationPipe, TranslatePipe, TranslateGroupPipe, DeferLoadScrollHostDirective, DeferLoadDirective, IconDeleteComponent] }) export class LayoutListComponent implements OnInit, OnChanges { readonly layouts = input>(); diff --git a/src/app/model/consts.spec.ts b/src/app/model/consts.spec.ts index 40dd975c..5fe1b4d1 100644 --- a/src/app/model/consts.spec.ts +++ b/src/app/model/consts.spec.ts @@ -52,7 +52,7 @@ describe('Constants', () => { // Check easy mode const easyMode = GameModes.find(mode => mode.id === GAME_MODE_EASY); expect(easyMode).toBeDefined(); - expect(easyMode?.features.length).toBe(3); + expect(easyMode?.features.length).toBe(4); // Check standard mode const standardMode = GameModes.find(mode => mode.id === GAME_MODE_STANDARD); diff --git a/src/app/modules/editor/components/editor/editor.component.html b/src/app/modules/editor/components/editor/editor.component.html index 2a23d40c..69906bb5 100644 --- a/src/app/modules/editor/components/editor/editor.component.html +++ b/src/app/modules/editor/components/editor/editor.component.html @@ -1,9 +1,9 @@
- +
    -
  • {{ 'EDITOR_TITLE' | translate }}
  • +
  • {{ 'EDITOR_TITLE' | translate }}
  • @@ -24,7 +24,7 @@
      -
    • {{ 'EDITOR_TITLE' | translate }}: {{ 'EDITOR_IMPORT' | translate }}
    • +
    • {{ 'EDITOR_TITLE' | translate }}: {{ 'EDITOR_IMPORT' | translate }}
    @@ -36,7 +36,7 @@
      -
    • {{ 'EDITOR_TITLE' | translate }}: {{ layout.name }}
    • +
    • {{ 'EDITOR_TITLE' | translate }}: {{ layout.name }}
    • diff --git a/src/app/modules/editor/components/editor/editor.component.scss b/src/app/modules/editor/components/editor/editor.component.scss index fc5f9eb3..7e5fa3e1 100644 --- a/src/app/modules/editor/components/editor/editor.component.scss +++ b/src/app/modules/editor/components/editor/editor.component.scss @@ -9,6 +9,16 @@ background-color: var(--editor-color-bg); z-index: 10001; + .editor-title { + display: flex; + align-items: center; + gap: 8px; + + app-icon-logo { + color: red; + } + } + a { color: var(--main-content-link-color); cursor: pointer; diff --git a/src/app/modules/editor/components/editor/editor.component.ts b/src/app/modules/editor/components/editor/editor.component.ts index 2bf1dd24..3b551ee0 100644 --- a/src/app/modules/editor/components/editor/editor.component.ts +++ b/src/app/modules/editor/components/editor/editor.component.ts @@ -7,12 +7,14 @@ import type { EditLayout } from '../../model/edit-layout'; import type { Layout } from '../../../../model/types'; import { ImportComponent } from '../import/import.component'; import { ManagerComponent } from '../manager/manager.component'; +import { IconCloseComponent } from '../../../../components/icons/icon-close.component'; +import { IconLogoComponent } from '../../../../components/icons/icon-logo.component'; @Component({ selector: 'app-editor-component', templateUrl: './editor.component.html', styleUrls: ['./editor.component.scss'], - imports: [LayoutComponent, ImportComponent, ManagerComponent, TranslatePipe] + imports: [LayoutComponent, IconLogoComponent, ImportComponent, ManagerComponent, TranslatePipe, IconCloseComponent] }) export class EditorComponent { readonly closeEvent = output(); diff --git a/src/app/modules/editor/components/import/import.component.html b/src/app/modules/editor/components/import/import.component.html index 43598db2..740765ba 100644 --- a/src/app/modules/editor/components/import/import.component.html +++ b/src/app/modules/editor/components/import/import.component.html @@ -11,7 +11,7 @@ @for (log of logs; track log) {

      @if (log.id) { - {{ log.msg }} + {{ log.msg }} } @if (!log.id) { {{ log.msg }} diff --git a/src/app/modules/editor/components/import/import.component.ts b/src/app/modules/editor/components/import/import.component.ts index 605ea12c..ed7ec7e4 100644 --- a/src/app/modules/editor/components/import/import.component.ts +++ b/src/app/modules/editor/components/import/import.component.ts @@ -5,12 +5,13 @@ import { log } from '../../../../model/log'; import { importLayouts } from '../../model/import'; import { TranslatePipe } from '@ngx-translate/core'; import { DropZoneDirective } from '../../directives/drop-zone.directive'; +import { IconOkComponent } from '../../../../components/icons/icon-ok.component'; @Component({ selector: 'app-import-component', templateUrl: './import.component.html', styleUrls: ['./import.component.scss'], - imports: [TranslatePipe, DropZoneDirective] + imports: [TranslatePipe, DropZoneDirective, IconOkComponent] }) export class ImportComponent { readonly editEvent = output(); diff --git a/src/app/modules/editor/components/layout/layout.component.html b/src/app/modules/editor/components/layout/layout.component.html index 90e6fa9d..dbd1c576 100644 --- a/src/app/modules/editor/components/layout/layout.component.html +++ b/src/app/modules/editor/components/layout/layout.component.html @@ -13,7 +13,7 @@

      @@ -25,19 +25,19 @@
      Level {{ this.currentZ }}
    @@ -74,16 +74,16 @@
    Tiles: {{ this.stats.totalCount }}
    @@ -132,7 +132,7 @@ @if (saveDialog) {
    - +
    diff --git a/src/app/modules/editor/components/layout/layout.component.ts b/src/app/modules/editor/components/layout/layout.component.ts index 91f8a5e5..8931fc1d 100644 --- a/src/app/modules/editor/components/layout/layout.component.ts +++ b/src/app/modules/editor/components/layout/layout.component.ts @@ -14,6 +14,15 @@ import { BoardComponent } from '../board/board.component'; import { CommonModule } from '@angular/common'; import { optimizeMapping } from '../../model/optimize'; import { mappingExtents } from '../../../../model/mapping'; +import { IconCloseComponent } from '../../../../components/icons/icon-close.component'; +import { IconListAddComponent } from '../../../../components/icons/icon-list-add.component'; +import { IconUpComponent } from '../../../../components/icons/icon-up.component'; +import { IconDownComponent } from '../../../../components/icons/icon-down.component'; +import { IconDuplicateComponent } from '../../../../components/icons/icon-duplicate.component'; +import { IconClearComponent } from '../../../../components/icons/icon-clear.component'; +import { IconDeleteComponent } from '../../../../components/icons/icon-delete.component'; +import { IconLeftComponent } from '../../../../components/icons/icon-left.component'; +import { IconRightComponent } from '../../../../components/icons/icon-right.component'; interface Stats { name: string; @@ -46,7 +55,9 @@ interface EditLevel { selector: 'app-editor-layout-component', templateUrl: './layout.component.html', styleUrls: ['./layout.component.scss'], - imports: [CommonModule, BoardComponent, LayoutPreviewComponent, ExportComponent, TranslatePipe] + imports: [CommonModule, BoardComponent, LayoutPreviewComponent, ExportComponent, TranslatePipe, IconCloseComponent, + IconListAddComponent, IconUpComponent, IconDownComponent, IconDuplicateComponent, + IconClearComponent, IconDeleteComponent, IconLeftComponent, IconRightComponent] }) export class LayoutComponent implements OnInit, OnChanges, OnDestroy { readonly layout = model.required(); diff --git a/src/app/modules/editor/components/manager/manager.component.html b/src/app/modules/editor/components/manager/manager.component.html index 3eec0e7f..3204f21b 100644 --- a/src/app/modules/editor/components/manager/manager.component.html +++ b/src/app/modules/editor/components/manager/manager.component.html @@ -14,12 +14,12 @@ {{ 'EDITOR_LAYOUT_NR_OF_STONES' | translate }} {{ 'EDITOR_COLUMN_TEST' | translate }} @@ -35,7 +35,7 @@ {{ layout.mapping.length }} @if (test[layout.id]) {
    @@ -51,7 +51,7 @@ @if (layout.custom) { } diff --git a/src/app/modules/editor/components/manager/manager.component.ts b/src/app/modules/editor/components/manager/manager.component.ts index 44237346..caf7c9ec 100644 --- a/src/app/modules/editor/components/manager/manager.component.ts +++ b/src/app/modules/editor/components/manager/manager.component.ts @@ -4,12 +4,14 @@ import { LayoutService } from '../../../../service/layout.service'; import { WorkerService } from '../../../../service/worker.service'; import { LayoutPreviewComponent } from '../../../../components/layout-preview/layout-preview.component'; import { TranslatePipe } from '@ngx-translate/core'; +import { IconDeleteComponent } from '../../../../components/icons/icon-delete.component'; +import { IconExecuteComponent } from '../../../../components/icons/icon-execute.component'; @Component({ selector: 'app-manager-component', templateUrl: './manager.component.html', styleUrls: ['./manager.component.scss'], - imports: [LayoutPreviewComponent, TranslatePipe] + imports: [LayoutPreviewComponent, TranslatePipe, IconDeleteComponent, IconExecuteComponent] }) export class ManagerComponent implements OnChanges, OnDestroy { readonly inputLayouts = input>(); diff --git a/src/assets/i18n/ar.json b/src/assets/i18n/ar.json index 7320634e..8a2eab8d 100644 --- a/src/assets/i18n/ar.json +++ b/src/assets/i18n/ar.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://ar.wikipedia.org/wiki/Mahjong", "TILES_INFO": "معلومات البلاط", "TILES": "البلاط", - "INFO_LONG": "معلومات البلاط", + "TILES_INFO_LONG": "نظرة عامة على جميع البلاطات في اللعبة", "HELP": "مساعدة", "HELP_LONG": "إظهار / إخفاء هذا الحوار", "SETTINGS_LONG": "اضبط اللغة ومجموعات البلاط والألوان", diff --git a/src/assets/i18n/bn.json b/src/assets/i18n/bn.json index 8c71d4e7..7b0348c9 100644 --- a/src/assets/i18n/bn.json +++ b/src/assets/i18n/bn.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://bn.wikipedia.org/wiki/Mahjong", "TILES_INFO": "টাইলের তথ্য", "TILES": "টাইল", - "INFO_LONG": "টাইলের তথ্য", + "TILES_INFO_LONG": "গেমের সব টাইলের সারসংক্ষেপ", "HELP": "সাহায্য", "HELP_LONG": "এই ডায়ালগ দেখান/লুকান", "SETTINGS_LONG": "ভাষা, টাইল সেট ও রং সামঞ্জস্য করুন", diff --git a/src/assets/i18n/ca.json b/src/assets/i18n/ca.json index 0c8b6e7d..8a26f241 100644 --- a/src/assets/i18n/ca.json +++ b/src/assets/i18n/ca.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://ca.wikipedia.org/wiki/Mahjong", "TILES_INFO": "Informació de fitxes", "TILES": "Fitxes", - "INFO_LONG": "Informació de fitxes", + "TILES_INFO_LONG": "Visió general de totes les fitxes del joc", "HELP": "Ajuda", "HELP_LONG": "Mostrar/amagar aquest diàleg", "SETTINGS_LONG": "Ajusta l'idioma, els conjunts de fitxes i els colors", diff --git a/src/assets/i18n/cs.json b/src/assets/i18n/cs.json index 5890086a..03e9e96b 100644 --- a/src/assets/i18n/cs.json +++ b/src/assets/i18n/cs.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://cs.wikipedia.org/wiki/Mahjong", "TILES_INFO": "Informace o dlaždicích", "TILES": "Dlaždice", - "INFO_LONG": "Informace o dlaždicích", + "TILES_INFO_LONG": "Přehled všech dlaždic ve hře", "HELP": "Pomoc", "HELP_LONG": "Zobrazit/skrýt tento dialog", "SETTINGS_LONG": "Upravte jazyk, sady dlaždic a barvy", diff --git a/src/assets/i18n/da.json b/src/assets/i18n/da.json index 62259ea8..72398bc7 100644 --- a/src/assets/i18n/da.json +++ b/src/assets/i18n/da.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://da.wikipedia.org/wiki/Mahjong", "TILES_INFO": "Brikker information", "TILES": "Brikker", - "INFO_LONG": "Brikker information", + "TILES_INFO_LONG": "Oversigt over alle brikker i spillet", "HELP": "Hjælp", "HELP_LONG": "Vis/skjul denne dialog", "SETTINGS_LONG": "Juster sprog, brikkesæt og farver", diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index 2fb9dc59..c01f83f5 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://de.wikipedia.org/wiki/Mah-Jongg", "TILES_INFO": "Steinverzeichnis", "TILES": "Steine", - "INFO_LONG": "Steinverzeichnis", + "TILES_INFO_LONG": "Überblick über alle Steine im Spiel", "HELP": "Hilfe", "HELP_LONG": "Diesen Dialog anzeigen/ausblenden", "SETTINGS_LONG": "Sprache, Steine und Farben anpassen", diff --git a/src/assets/i18n/el.json b/src/assets/i18n/el.json index 4f4b6982..10a0b405 100644 --- a/src/assets/i18n/el.json +++ b/src/assets/i18n/el.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://en.wikipedia.org/wiki/Mahjong_tiles", "TILES_INFO": "Πληροφορίες πλακιδίων", "TILES": "Πλακάκια", - "INFO_LONG": "Πληροφορίες πλακιδίων", + "TILES_INFO_LONG": "Επισκόπηση όλων των πλακιδίων στο παιχνίδι", "HELP": "Βοήθεια", "HELP_LONG": "Εμφάνιση / απόκρυψη αυτού του διαλόγου", "SETTINGS_LONG": "Προσαρμόστε τη γλώσσα, τα σετ πλακιδίων και τα χρώματα", diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index f09f41b7..fbc1dada 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://en.wikipedia.org/wiki/Mahjong_tiles", "TILES_INFO": "Tiles Information", "TILES": "Tiles", - "INFO_LONG": "Tiles Information", + "TILES_INFO_LONG": "Overview of all tiles in the game", "HELP": "Help", "HELP_LONG": "Show/hide this dialog", "SETTINGS_LONG": "Adjust language, tile sets & colors", diff --git a/src/assets/i18n/es.json b/src/assets/i18n/es.json index e4748deb..ae721d92 100644 --- a/src/assets/i18n/es.json +++ b/src/assets/i18n/es.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://es.wikipedia.org/wiki/Mahjong#fichas", "TILES_INFO": "Información sobre las fichas", "TILES": "Fichas", - "INFO_LONG": "Información sobre las fichas", + "TILES_INFO_LONG": "Resumen de todas las fichas del juego", "HELP": "Ayuda", "HELP_LONG": "Mostrar/ocultar esta ventana", "SETTINGS_LONG": "Configurar idioma, conjunto de fichas y colores", diff --git a/src/assets/i18n/eu.json b/src/assets/i18n/eu.json index 5af9f2a8..16e0f579 100644 --- a/src/assets/i18n/eu.json +++ b/src/assets/i18n/eu.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://en.wikipedia.org/wiki/Mahjong_tiles", "TILES_INFO": "Fitxen informazioa", "TILES": "Fitxak", - "INFO_LONG": "Fitxen informazioa", + "TILES_INFO_LONG": "Jokoko fitxa guztien ikuspegi orokorra", "HELP": "Laguntza", "HELP_LONG": "Erakutsi/ezkutatu leiho hau", "SETTINGS_LONG": "Doitu hizkuntza, fitxa-sortak eta koloreak", diff --git a/src/assets/i18n/fa.json b/src/assets/i18n/fa.json index afb439d3..d71cd05c 100644 --- a/src/assets/i18n/fa.json +++ b/src/assets/i18n/fa.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://fa.wikipedia.org/wiki/ماجونگ", "TILES_INFO": "اطلاعات کاشی‌ها", "TILES": "کاشی‌ها", - "INFO_LONG": "اطلاعات کاشی‌ها", + "TILES_INFO_LONG": "مروری بر همه کاشی های بازی", "HELP": "راهنما", "HELP_LONG": "نمایش/مخفی کردن این پنجره", "SETTINGS_LONG": "تنظیم زبان، مجموعه کاشی و رنگ‌ها", diff --git a/src/assets/i18n/fi.json b/src/assets/i18n/fi.json index 90961918..f8e7eaf2 100644 --- a/src/assets/i18n/fi.json +++ b/src/assets/i18n/fi.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://fi.wikipedia.org/wiki/Mahjong", "TILES_INFO": "Kivien tiedot", "TILES": "Kivet", - "INFO_LONG": "Kivien tiedot", + "TILES_INFO_LONG": "Yleiskatsaus kaikkiin pelin laattoihin", "HELP": "Ohje", "HELP_LONG": "Näytä/piilota tämä dialogi", "SETTINGS_LONG": "Säädä kieltä, kivisetejä ja värejä", diff --git a/src/assets/i18n/fil.json b/src/assets/i18n/fil.json index 6818dbec..45ab9f28 100644 --- a/src/assets/i18n/fil.json +++ b/src/assets/i18n/fil.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://tl.wikipedia.org/wiki/Mahjong", "TILES_INFO": "Impormasyon ng mga Tile", "TILES": "Mga Tile", - "INFO_LONG": "Impormasyon ng mga Tile", + "TILES_INFO_LONG": "Pangkalahatang-ideya ng lahat ng tile sa laro", "HELP": "Tulong", "HELP_LONG": "Ipakita/itago ang dialog na ito", "SETTINGS_LONG": "Ayusin ang wika, tile set at mga kulay", diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json index ca69954b..dba8bee6 100644 --- a/src/assets/i18n/fr.json +++ b/src/assets/i18n/fr.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://fr.wikipedia.org/wiki/Mah-jong", "TILES_INFO": "Informations sur les tuiles", "TILES": "Tuiles", - "INFO_LONG": "Informations sur les tuiles", + "TILES_INFO_LONG": "Aperçu de toutes les tuiles du jeu", "HELP": "Aide", "HELP_LONG": "Afficher/masquer cette aide", "SETTINGS_LONG": "Ajuster la langue, les tuiles et les couleurs", diff --git a/src/assets/i18n/hi.json b/src/assets/i18n/hi.json index 0848273c..863fe5da 100644 --- a/src/assets/i18n/hi.json +++ b/src/assets/i18n/hi.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://en.wikipedia.org/wiki/Mahjong_tiles", "TILES_INFO": "पत्थर की जानकारी", "TILES": "पत्थर", - "INFO_LONG": "पत्थर की जानकारी", + "TILES_INFO_LONG": "खेल में सभी टाइलों का अवलोकन", "HELP": "सहायता", "HELP_LONG": "इस संवाद को दिखाएँ/छुपाएँ", "SETTINGS_LONG": "भाषा, पत्थर सेट और रंग समायोजित करें", diff --git a/src/assets/i18n/hu.json b/src/assets/i18n/hu.json index 24945b59..dfed3fe9 100644 --- a/src/assets/i18n/hu.json +++ b/src/assets/i18n/hu.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://hu.wikipedia.org/wiki/Mahjong", "TILES_INFO": "Kőinformációk", "TILES": "Kövek", - "INFO_LONG": "Kőinformációk", + "TILES_INFO_LONG": "A játék összes kövének áttekintése", "HELP": "Súgó", "HELP_LONG": "Párbeszédablak megjelenítése/elrejtése", "SETTINGS_LONG": "Nyelv, kőszetek és színek beállítása", diff --git a/src/assets/i18n/id.json b/src/assets/i18n/id.json index 5c870cbc..2ded3928 100644 --- a/src/assets/i18n/id.json +++ b/src/assets/i18n/id.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://id.wikipedia.org/wiki/Mahjong", "TILES_INFO": "Informasi Ubin", "TILES": "Ubin", - "INFO_LONG": "Informasi Ubin", + "TILES_INFO_LONG": "Ikhtisar semua ubin dalam permainan", "HELP": "Bantuan", "HELP_LONG": "Tampilkan/sembunyikan dialog ini", "SETTINGS_LONG": "Sesuaikan bahasa, set ubin & warna", diff --git a/src/assets/i18n/it.json b/src/assets/i18n/it.json index fd2c33bc..fd943d51 100644 --- a/src/assets/i18n/it.json +++ b/src/assets/i18n/it.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://it.wikipedia.org/wiki/Mahjong", "TILES_INFO": "Informazioni tessere", "TILES": "Tessere", - "INFO_LONG": "Informazioni tessere", + "TILES_INFO_LONG": "Panoramica di tutte le tessere nel gioco", "HELP": "Aiuto", "HELP_LONG": "Mostra/nascondi questo dialogo", "SETTINGS_LONG": "Regola la lingua, i set di tessere e i colori", diff --git a/src/assets/i18n/ja.json b/src/assets/i18n/ja.json index e4908f57..00b5c913 100644 --- a/src/assets/i18n/ja.json +++ b/src/assets/i18n/ja.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://ja.wikipedia.org/wiki/麻雀", "TILES_INFO": "牌の情報", "TILES": "牌", - "INFO_LONG": "牌の情報", + "TILES_INFO_LONG": "ゲーム内のすべての牌の概要", "HELP": "ヘルプ", "HELP_LONG": "このダイアログを表示/非表示", "SETTINGS_LONG": "言語、牌セット、色を調整", diff --git a/src/assets/i18n/ko.json b/src/assets/i18n/ko.json index c46859ee..dc332a97 100644 --- a/src/assets/i18n/ko.json +++ b/src/assets/i18n/ko.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://ko.wikipedia.org/wiki/마작", "TILES_INFO": "타일 정보", "TILES": "타일", - "INFO_LONG": "타일 정보", + "TILES_INFO_LONG": "게임의 모든 타일 개요", "HELP": "도움말", "HELP_LONG": "이 대화 상자 표시/숨기기", "SETTINGS_LONG": "언어, 타일 세트 및 색상 설정", diff --git a/src/assets/i18n/ms.json b/src/assets/i18n/ms.json index d178be0a..fb020f2c 100644 --- a/src/assets/i18n/ms.json +++ b/src/assets/i18n/ms.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://ms.wikipedia.org/wiki/Mahjong", "TILES_INFO": "Maklumat Jubin", "TILES": "Jubin", - "INFO_LONG": "Maklumat Jubin", + "TILES_INFO_LONG": "Gambaran keseluruhan semua jubin dalam permainan", "HELP": "Bantuan", "HELP_LONG": "Tunjuk/sembunyikan dialog ini", "SETTINGS_LONG": "Laraskan bahasa, set jubin & warna", diff --git a/src/assets/i18n/nl.json b/src/assets/i18n/nl.json index 06343d85..bd3986ae 100644 --- a/src/assets/i18n/nl.json +++ b/src/assets/i18n/nl.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://nl.wikipedia.org/wiki/Mahjong", "TILES_INFO": "Toon informatie over de stenen", "TILES": "Stenen", - "INFO_LONG": "Toon informatie over de stenen", + "TILES_INFO_LONG": "Overzicht van alle stenen in het spel", "HELP": "Hulp", "HELP_LONG": "Toon/verberg dit dialoogvenster", "SETTINGS_LONG": "Taal, tegelsets en kleuren aanpassen", diff --git a/src/assets/i18n/no.json b/src/assets/i18n/no.json index def45716..19d73c34 100644 --- a/src/assets/i18n/no.json +++ b/src/assets/i18n/no.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://no.wikipedia.org/wiki/Mahjong", "TILES_INFO": "Steininformasjon", "TILES": "Steiner", - "INFO_LONG": "Steininformasjon", + "TILES_INFO_LONG": "Oversikt over alle brikker i spillet", "HELP": "Hjelp", "HELP_LONG": "Vis/skjul denne dialogen", "SETTINGS_LONG": "Juster språk, steinsamlinger og farger", diff --git a/src/assets/i18n/pl.json b/src/assets/i18n/pl.json index fe06d1a5..aa12ba2c 100644 --- a/src/assets/i18n/pl.json +++ b/src/assets/i18n/pl.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://pl.wikipedia.org/wiki/Mahjong", "TILES_INFO": "Informacje o kamieniach", "TILES": "Kamienie", - "INFO_LONG": "Informacje o kamieniach", + "TILES_INFO_LONG": "Przegląd wszystkich kamieni w grze", "HELP": "Pomoc", "HELP_LONG": "Pokaż/ukryj to okno dialogowe", "SETTINGS_LONG": "Dostosuj język, zestawy kamieni i kolory", diff --git a/src/assets/i18n/pt.json b/src/assets/i18n/pt.json index 679b5fcd..5ebd32c6 100644 --- a/src/assets/i18n/pt.json +++ b/src/assets/i18n/pt.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://pt.wikipedia.org/wiki/Mahjong", "TILES_INFO": "Informações sobre as peças", "TILES": "Peças", - "INFO_LONG": "Informações sobre as peças", + "TILES_INFO_LONG": "Visão geral de todas as peças no jogo", "HELP": "Ajuda", "HELP_LONG": "Mostrar/ocultar esta caixa de diálogo", "SETTINGS_LONG": "Ajuste o idioma, conjuntos de blocos e cores", diff --git a/src/assets/i18n/ro.json b/src/assets/i18n/ro.json index 4316a137..5fa4e740 100644 --- a/src/assets/i18n/ro.json +++ b/src/assets/i18n/ro.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://en.wikipedia.org/wiki/Mahjong_tiles", "TILES_INFO": "Informații despre pietre", "TILES": "Pietre", - "INFO_LONG": "Informații despre pietre", + "TILES_INFO_LONG": "Prezentare generală a tuturor pieselor din joc", "HELP": "Ajutor", "HELP_LONG": "Arată/ascunde acest dialog", "SETTINGS_LONG": "Ajustați limba, seturile de pietre și culorile", diff --git a/src/assets/i18n/ru.json b/src/assets/i18n/ru.json index 1cde48b8..48d86853 100644 --- a/src/assets/i18n/ru.json +++ b/src/assets/i18n/ru.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://ru.wikipedia.org/wiki/Маджонг", "TILES_INFO": "Информация о фишках", "TILES": "Фишки", - "INFO_LONG": "Информация о фишках", + "TILES_INFO_LONG": "Обзор всех фишек в игре", "HELP": "Помощь", "HELP_LONG": "Показать/скрыть этот диалог", "SETTINGS_LONG": "Настройка языка, наборов плиток и цветов", diff --git a/src/assets/i18n/sv.json b/src/assets/i18n/sv.json index dddd3c00..c6435962 100644 --- a/src/assets/i18n/sv.json +++ b/src/assets/i18n/sv.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://sv.wikipedia.org/wiki/Mahjong", "TILES_INFO": "Information om stenar", "TILES": "Stenar", - "INFO_LONG": "Information om stenar", + "TILES_INFO_LONG": "Översikt över alla brickor i spelet", "HELP": "Hjälp", "HELP_LONG": "Visa/dölj denna dialog", "SETTINGS_LONG": "Justera språk, stenset och färger", diff --git a/src/assets/i18n/sw.json b/src/assets/i18n/sw.json index b9eb2867..f814575c 100644 --- a/src/assets/i18n/sw.json +++ b/src/assets/i18n/sw.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://en.wikipedia.org/wiki/Mahjong_tiles", "TILES_INFO": "Taarifa za Vigae", "TILES": "Vigae", - "INFO_LONG": "Taarifa za Vigae", + "TILES_INFO_LONG": "Muhtasari wa vigae vyote kwenye mchezo", "HELP": "Msaada", "HELP_LONG": "Onyesha/ficha dirisha hili", "SETTINGS_LONG": "Rekebisha lugha, seti za vigae na rangi", diff --git a/src/assets/i18n/ta.json b/src/assets/i18n/ta.json index 0d5fc8cb..992ba785 100644 --- a/src/assets/i18n/ta.json +++ b/src/assets/i18n/ta.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://en.wikipedia.org/wiki/Mahjong_tiles", "TILES_INFO": "ஓடுகள் தகவல்", "TILES": "ஓடுகள்", - "INFO_LONG": "ஓடுகள் தகவல்", + "TILES_INFO_LONG": "விளையாட்டிலுள்ள அனைத்து ஓடுகளின் கண்ணோட்டம்", "HELP": "உதவி", "HELP_LONG": "இந்த உரையாடலைக் காட்டு/மறை", "SETTINGS_LONG": "மொழி, ஓடு தொகுப்புகள் மற்றும் வண்ணங்களை மாற்று", diff --git a/src/assets/i18n/te.json b/src/assets/i18n/te.json index 07320ed8..1399399c 100644 --- a/src/assets/i18n/te.json +++ b/src/assets/i18n/te.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://en.wikipedia.org/wiki/Mahjong_tiles", "TILES_INFO": "టైల్స్ సమాచారం", "TILES": "టైల్స్", - "INFO_LONG": "టైల్స్ సమాచారం", + "TILES_INFO_LONG": "గేమ్ లోని అన్ని టైల్స్ యొక్క సమీక్ష", "HELP": "సహాయం", "HELP_LONG": "ఈ డైలాగ్ చూపించు/దాచు", "SETTINGS_LONG": "భాష, టైల్ సెట్లు & రంగులు సర్దుబాటు చేయండి", diff --git a/src/assets/i18n/th.json b/src/assets/i18n/th.json index 1dd9add4..8484465d 100644 --- a/src/assets/i18n/th.json +++ b/src/assets/i18n/th.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://en.wikipedia.org/wiki/Mahjong_tiles", "TILES_INFO": "ข้อมูลไพ่", "TILES": "ไพ่", - "INFO_LONG": "ข้อมูลไพ่", + "TILES_INFO_LONG": "ภาพรวมของไพ่ทั้งหมดในเกม", "HELP": "ช่วยเหลือ", "HELP_LONG": "แสดง/ซ่อนหน้าต่างนี้", "SETTINGS_LONG": "ปรับภาษา ชุดไพ่ และสี", diff --git a/src/assets/i18n/tr.json b/src/assets/i18n/tr.json index e09d4611..f73d424f 100644 --- a/src/assets/i18n/tr.json +++ b/src/assets/i18n/tr.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://tr.wikipedia.org/wiki/Mahjong", "TILES_INFO": "Taş Bilgileri", "TILES": "Taşlar", - "INFO_LONG": "Taş Bilgileri", + "TILES_INFO_LONG": "Oyundaki tüm taşların genel görünümü", "HELP": "Yardım", "HELP_LONG": "Bu iletişim kutusunu göster/gizle", "SETTINGS_LONG": "Dil, taş setleri ve renkleri ayarla", diff --git a/src/assets/i18n/uk.json b/src/assets/i18n/uk.json index 5e5219b1..a229164f 100644 --- a/src/assets/i18n/uk.json +++ b/src/assets/i18n/uk.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://uk.wikipedia.org/wiki/Маджонг", "TILES_INFO": "Інформація про камені", "TILES": "Камені", - "INFO_LONG": "Інформація про камені", + "TILES_INFO_LONG": "Огляд усіх плиток у грі", "HELP": "Довідка", "HELP_LONG": "Показати/приховати цей діалог", "SETTINGS_LONG": "Налаштуйте мову, набори каменів та кольори", diff --git a/src/assets/i18n/ur.json b/src/assets/i18n/ur.json index 360e3f7a..28551531 100644 --- a/src/assets/i18n/ur.json +++ b/src/assets/i18n/ur.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://en.wikipedia.org/wiki/Mahjong_tiles", "TILES_INFO": "ٹائلوں کی معلومات", "TILES": "ٹائلیں", - "INFO_LONG": "ٹائلوں کی معلومات", + "TILES_INFO_LONG": "کھیل میں تمام ٹائلز کا جائزہ", "HELP": "مدد", "HELP_LONG": "یہ ڈائیلاگ دکھائیں/چھپائیں", "SETTINGS_LONG": "زبان، ٹائل سیٹ اور رنگ ایڈجسٹ کریں", diff --git a/src/assets/i18n/vi.json b/src/assets/i18n/vi.json index 7bd6a143..67ecc04c 100644 --- a/src/assets/i18n/vi.json +++ b/src/assets/i18n/vi.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://en.wikipedia.org/wiki/Mahjong_tiles", "TILES_INFO": "Thông Tin Đá", "TILES": "Đá", - "INFO_LONG": "Thông Tin Đá", + "TILES_INFO_LONG": "Tổng quan về tất cả quân trong trò chơi", "HELP": "Trợ Giúp", "HELP_LONG": "Hiển thị/ẩn hộp thoại này", "SETTINGS_LONG": "Điều chỉnh ngôn ngữ, bộ đá và màu sắc", diff --git a/src/assets/i18n/zh.json b/src/assets/i18n/zh.json index f118f5bb..c58cc0f1 100644 --- a/src/assets/i18n/zh.json +++ b/src/assets/i18n/zh.json @@ -54,7 +54,7 @@ "READ_MORE_WIKIPEDIA_URL": "https://zh.wikipedia.org/wiki/麻将牌", "TILES_INFO": "牌信息", "TILES": "牌", - "INFO_LONG": "牌信息", + "TILES_INFO_LONG": "游戏中所有牌的概览", "HELP": "帮助", "HELP_LONG": "显示/隐藏此对话框", "SETTINGS_LONG": "调整语言、牌组和颜色", diff --git a/src/fonts/README.md b/src/fonts/README.md index 6a5d961e..b8f5601f 100644 --- a/src/fonts/README.md +++ b/src/fonts/README.md @@ -1,9 +1,9 @@ # Fonts -`Fontello Icon` -SIL License - - `Kulim Park` SIL License + + +For information about the icons please see + diff --git a/src/fonts/editor/LICENSE.txt b/src/fonts/editor/LICENSE.txt deleted file mode 100644 index 81e755e8..00000000 --- a/src/fonts/editor/LICENSE.txt +++ /dev/null @@ -1,30 +0,0 @@ -Font license info - - -## Typicons - - (c) Stephen Hutchings 2012 - - Author: Stephen Hutchings - License: SIL (http://scripts.sil.org/OFL) - Homepage: http://typicons.com/ - - -## Entypo - - Copyright (C) 2012 by Daniel Bruce - - Author: Daniel Bruce - License: SIL (http://scripts.sil.org/OFL) - Homepage: http://www.entypo.com - - -## Font Awesome - - Copyright (C) 2016 by Dave Gandy - - Author: Dave Gandy - License: SIL () - Homepage: http://fortawesome.github.com/Font-Awesome/ - - diff --git a/src/fonts/editor/config.json b/src/fonts/editor/config.json deleted file mode 100644 index 62b11545..00000000 --- a/src/fonts/editor/config.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "editor", - "css_prefix_text": "icon-editor-", - "css_use_suffix": false, - "hinting": true, - "units_per_em": 1000, - "ascent": 850, - "glyphs": [ - { - "uid": "c16a63e911bc47b46dc2a7129d2f0c46", - "css": "down-small", - "code": 59392, - "src": "typicons" - }, - { - "uid": "58b78b6ca784d5c3db5beefcd9e18061", - "css": "left-small", - "code": 59393, - "src": "typicons" - }, - { - "uid": "877a233d7fdca8a1d82615b96ed0d7a2", - "css": "right-small", - "code": 59394, - "src": "typicons" - }, - { - "uid": "62bc6fe2a82e4864e2b94d4c0985ee0c", - "css": "up-small", - "code": 59395, - "src": "typicons" - }, - { - "uid": "2626e3a1bbcd90e45849af3b58a1d594", - "css": "trash", - "code": 59396, - "src": "entypo" - }, - { - "uid": "3df1557e2d6e84ec32bd47aee5bfdf59", - "css": "cancel-alt", - "code": 59397, - "src": "typicons" - }, - { - "uid": "c8585e1e5b0467f28b70bce765d5840c", - "css": "docs", - "code": 61637, - "src": "fontawesome" - }, - { - "uid": "97bd5542ed3e143d2ee9b60e14487615", - "css": "list-add", - "code": 59442, - "src": "entypo" - }, - { - "uid": "12f4ece88e46abd864e40b35e05b11cd", - "css": "ok", - "code": 59408, - "src": "fontawesome" - }, - { - "uid": "4b2321afcbe0505a70b80abd5c25e09b", - "css": "paper-plane-empty", - "code": 61913, - "src": "fontawesome" - } - ] -} \ No newline at end of file diff --git a/src/fonts/editor/css/editor.css b/src/fonts/editor/css/editor.css deleted file mode 100644 index 993ba3b8..00000000 --- a/src/fonts/editor/css/editor.css +++ /dev/null @@ -1,72 +0,0 @@ -@font-face { - font-family: editor; - src: url('../font/editor.eot?76220897'); - src: url('../font/editor.eot?76220897#iefix') format('embedded-opentype'), - url('../font/editor.woff2?76220897') format('woff2'), - url('../font/editor.woff?76220897') format('woff'), - url('../font/editor.ttf?76220897') format('truetype'), - url('../font/editor.svg?76220897#editor') format('svg'); - font-weight: normal; - font-style: normal; -} - -/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ - -/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ - -/* -@media screen and (-webkit-min-device-pixel-ratio:0) { - @font-face { - font-family: 'editor'; - src: url('../font/editor.svg?76220897#editor') format('svg'); - } -} -*/ -[class^="icon-editor-"]::before, [class*=" icon-editor-"]::before { - font-family: editor, emoji; - font-style: normal; - font-weight: normal; - speak: never; - display: inline-block; - text-decoration: inherit; - width: 1em; - margin-right: .2em; - text-align: center; - - /* opacity: .8; */ - - /* For safety - reset parent styles, that can break glyph codes */ - font-variant: normal; - text-transform: none; - - /* fix buttons height, for twitter bootstrap */ - line-height: 1em; - - /* Animation center compensation - margins should be symmetric */ - - /* remove if not needed */ - margin-left: .2em; - - /* you can be more comfortable with increased icons size */ - - /* font-size: 120%; */ - - /* Font smoothing. That was taken from TWBS */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - - /* Uncomment for 3D effect */ - - /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ -} - -.icon-editor-down-small::before { content: '\e800'; } /* '' */ -.icon-editor-left-small::before { content: '\e801'; } /* '' */ -.icon-editor-right-small::before { content: '\e802'; } /* '' */ -.icon-editor-up-small::before { content: '\e803'; } /* '' */ -.icon-editor-trash::before { content: '\e804'; } /* '' */ -.icon-editor-cancel-alt::before { content: '\e805'; } /* '' */ -.icon-editor-ok::before { content: '\e810'; } /* '' */ -.icon-editor-list-add::before { content: '\e832'; } /* '' */ -.icon-editor-docs::before { content: '\f0c5'; } /* '' */ -.icon-editor-paper-plane-empty::before { content: '\f1d9'; } /* '' */ diff --git a/src/fonts/editor/font/editor.eot b/src/fonts/editor/font/editor.eot deleted file mode 100644 index ff62ffa75b022983ddb7d2451bbad6cc0891b1a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7752 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 VxA@x2Qu_vu - - -Copyright (C) 2024 by original authors @ fontello.com - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/fonts/editor/font/editor.ttf b/src/fonts/editor/font/editor.ttf deleted file mode 100644 index e69c44989d76479764fa3ed7ddfd5c3f4b8407b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7592 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 Ju(RRe{{+$or7i#f diff --git a/src/fonts/editor/font/editor.woff b/src/fonts/editor/font/editor.woff deleted file mode 100644 index 6f38aeff36b4daa7f6744ba24335fbb32f140922..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4596 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 - - -Copyright (C) 2025 by original authors @ fontello.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/fonts/fontello/font/mah.ttf b/src/fonts/fontello/font/mah.ttf deleted file mode 100644 index 76d64414f651497f659deb3b26b61f0f6197b57f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9776 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 z z4~))+Ad(q1kDZJ{{!w7>H`YT;SizsVG$;eG5y6@C=B-wV2}P-LJ!6(l(n_cH*4$S6`r;A z@ruCOP`o0twjo}TSlbw{$gFLOR}|LniB~MFjm4o2Q~$bDfTlGysnf?i{+&}$1Sk{&HEpD3c$lgwv3<9bI-??626 zLnw^GV;>lhTCrbaiTxuv;EoBsYsbVDr!>MmPT$vF5vhM9hos1?*nN+B9>&uXS9=Y~ zdoi0i&&aQ)31puKO3Uyh@VZgAhKIENN)Pq3z4k#L*uVqF6c8-M{)C>2Cxe3tz5my- z!m;PTJ^&MuK&zTmM_EdMYLBk3k7}bxK{*sYWL;Dw{GG+`gNFAbcLnqy*aW20R)ei# zCmG$Ajg{7unyL=2W6lHjv#CjQK3&o>JKU;XU^yi{mAfsdq8hp_M8x`hhGkkSk~Y?d z1lo~;F2UOOhbtnB#>}cDWDE0}E~2O+*$LTV2yh{f{P5v1MTmy{uN^7&hcv8k1p7o| ztb+L-um}WUDOo}ifiXll94g3%B*BbDR;`#2Jf77|`oUUomcboesE|O6RCS>ZLQMyE zNxBuuL{*Pyqij)T#i1RVu^Cg-I+@8O)jfY)xmtS(n)=Y+r#%!r$dwX zQ8V{ZcgEg3--kzJjz@%a6jf_>xlG+$p(Wa^-hR5Vr-eYam3Vo z5eKx4xpn5w8X_%;$TK%|Bwn$i)-dlkJpX^^(xVS@u>Xq}Gkvo>HmLQ7n(y(K=6qGo zQ6%8~u^p|9p?4tG%xuQ=Qr*q23XVbrelzTGIzfbclX@Sb{MbYA$1xrCdG!={#^d?` zniEWmBT%<`1Vwm9TPNepq4g6`^F$o~L*xj6NdS}qQ}GRIV5R{Wm{W{r6r>r(!+=K^ z4+Bm!9tNC=-$pjf0?GkGZ3mQ(-=-$+EFcs2DC47y`WWLgpvM`X0X@O^4CowNa|CP! zwk89LY)uBtvNahn$9Tp7%rhPalo$^K&NChcEEsYP16nlXV$cOcE(TpR(?o;1P30N0q(8JnI#?+R)yK*m!xLB?~{;9&&D za}9$J?#}u#qi2k`Zh~yYQzppRpT;}~%_%=_f{fuA6J!j(0p6kA`ED3JW4=$AAY;F2 zf{gt)F>=V9?^zRM49}S$WB4R^5ADu(%jg;NJ#T`H{Zl5$*k8cNL*{&+HbKU)Zi0;A z#rTHJIN9n_Xaj%LAHho#YFR!L)0L9Ww@hB&Dd-7;7r?itah#;Dpw^kMe5(~AXK?&$ zH(Tp{?OX6en}IQ*xA2{V3|Cs{3sX4$zmQ}7`Qb_%>)%m`i6F!IP$kMxUsG=4vrGDg exfz2K1a?)3v;7X;zNHH3)hn1wk#a8H}qQGmJo9nxHbp3>i_^my_sNJOG{4=8u&UIu3^H#fdjB{v4z03 zuK)n*5nRHu;JWj*HFt-{qDR2D(f$XXt)q_(T#JW?f&c(q(N9|*j&|1ORsaA|C)|e* zjvz;O{DB=@glm^@n;H%SkPpe&4&vbr01y+wZ7w+Cpxc*oM`ug8AMw9@Y5wsVOxXi5 z_lCch82-%vY6y-v4^HL~Yq%ByKZ_eY&o8XanRPDC?j8UD$t~Ouo)4hiz~tt{#myQX zOZqQoUpSfmjbe@7nU-c&W@c*^AhQ}vGdI@@bn~?lC5|D>cndT0&wzMw-V7dQK8Y`Z zNc~8|wV&;AXl#Nb5CKeLD2jl8vF4uUnVp@(ot-*;-@^j~^MKNPZ_GeeR){d(8eTp# z6a@P!RxF?i=%eru#ie8vEzAeIhd&oY52IrOc$;I>dS@Pe8Nu!b;mPJG(a=(3qPR*$ zV6eml32Op53lk-ZgFy$OND?&_q(gsQ9ghG;xdcL*GQJ6?zKUvc)w?hg_u2d0l+^^? zKSqrOSt&m6i)e~!CyT4kwUu_5uF^2|8`#O8%Kl(_@_#>ss*iUn{@IQVz}|Ye|5i6H zd}?(VTwFQ?WK3f^<*&pRw_XIM3;scAZo+jrAzNFa@V*yBX}%%5Jvby{;Y$&r`H3K{ z$&U~C&$-{C{<|Cq@O7oWgAw@varO*$Gy;8D8LsJu##-)bms4GYLLXy?R|_$vTG9&d|Q)=M>5*2v1KjjJvW z?K-w^QyFv56?98r0&@AJl)VMSC1yk^{KOLFDEJ2j$uxuLRTPT%KNN~)fCUa?#(38< zkvRFQS8YSs6Q463`<}s*p5Q&xERScKN9bg-)4iS4W!hOO$Ms+D`2J0A*GxaW z5rjug|E0pZl$zY%itE!l6H#``cl?zftpG*|OuDMg_~;^o#n+#Pq7JJZe(jhND9x3e zzoU!_q!_04us+yArTb3EC?T{QLr*+wsg!X;_pOB@bt#ES&0dt$n_jcVKD%Gz4r43- zF$v=VcWAE%Fa4dvlnCeif={z9!9#+2?k@%#!Rf`Kx1O6x{3c$)uwy z_Rn6!ZiB`!LgP{Q^b$$i^0g>9lB#~=>)Z7RC%;ruYi`ei@Q9Xf*zO8jiDpb$>4w|J_`y;>JK4o=cUL+-3 z@9(WPqf}wCZ%P985zPLk+i@A+`t24_smWEu+l{EkEvH&Cf`SHKcGwV4a z@6~%GQ!t)ue_*^A2(D3&=-v*TXPm}u3BYF~`270Oa(=1~f^pp%wxALzJMEs(SxA&x z(q?!|rMo-GS64QL-52u|iIv(O;F-DM*g@ddH_7KCl`+^^9Z z+sINvn}0=aPvEDi(s-6ze|1-A)po99}mz-~MT;tad-A^+rhyQLX6*Gwafn$0B*R zU=@!rl!+J}GAZgA(r;Zgu1kJLL~Yjr&BD}KzyI!Xad@{Vn$cy%w{k9-;<59h+jmHK zQ`;zAA*#oHCEQdWjQVkeTwzN$+Q|=^JivHkLlD%4CiTn2?_2jn!B;P{|wXj3;#RN zdWXWefFK1g8sNV?gqIfpu6Jg#{(DCXed3Otl@>1>TTffhAN70>J6FE5E6}HU@U_r$ zWIOopTPKq za%AVocot&uB%qEak+X2U=Tyh{h^(v!p`Dd9k)4mLUf~)+k_)n{G#ETeHcU6EX=RdM(g#ndOYeLe{Jr*c@8zuzDnC8g1#J1Nq0w)y zjPHeW$o3E6yQOoenp})hw6wH-*Wb=mm1V9j!)*oOe{wN*tu?=81JLd?RkBfiznnhmstM&i48xT1VodFVhA*x15=!P`k)1QPSjF18F69v;3b9I6|l7^h$a@H z;sh@C;vhSkYf$p;(e7_L&VNCPz0vaeP-P55dIZ}rg`U|Ll+7>`eU`vwXTq$ozy(;U zUK>!b=pq*x#{m&z)iDJfUSEj3ziUJW*k+bzE2&m5Wl4>PhHwQA$;@&GF1e1*!h2ClP=Y$d z1F}|SLb1&wtL}|o5|c{V>Xp@ksBroOCJc4zOS^GCm1*HLcWFqK#gUa5cy<@>f^xp(PFikTuwQL>0KWp`dELgUG00+7+!1j5wb(6m2h<{X7cz8)!dDrVZ2O^U#Jc+ znF%>IE<%$VYf^q4oy#t~#X0Z|VIo|AUK+i>zxRkthn2Iff8E#55X}&~ww1{{e2(on zF7BkSuaApBJ2^HYi}gH?dd-<)j-2uI#*~31b~1#pr|9XIR8P&jXoDg#-X9t!R38c` zpO}rk^PGQ|fP4)} zSHeImdY|zlMOx5DB^1N_y6;L1s^qn0GyqmSU)Y*Tgxn}%hjjB={m4kWAxR*ST;s2*Su1BzW#h{_k8CxX9c~8Hn5#b@wp`bHQ8`xjBWyrAUXGVG@)K^`S#~ z`SEzitU#YqhVHLLU>49pV!xVoq_|J8lYodaT;%aP^*D?tbc>}X`zwihFLcHhlq+)l zg~U&X3M;f#jokvE=(TFzta=OF5xwYJc}B={4cAWjs|+fYr61U~g_-q9&@c!J@i%7= zc@mMOw(!4r43~W1t%~%a<#faK7D*n5p%m9-OI&yDbxcb%ZVT140fJ`6LXZj)`4S0b zXvMaX-kqR^nm%4}X=_7A*+a{xf}~LjzO}jM`v|i}%4aqmzqcJolh?8$omXK?Zbw&8 z&@0jCBUh2l-y}$2i#=7NBNX~w0?H2JCWt=4kT)EqOBFQYsZhc{tMW8t@XOOI#OxXT zYLEm9vTmy3QKwvFBdyD&m*weB!5QKZ#5=$2{Wc*7g*_CB(3b1cZZ~rkmkSFo?&f6q zZ7Yobnz*Zex!mh9ee>|g&p816aW5v|$?am*JyTuH^-Yt+d(xYS<^-`%cN2UU9@}@+ zZ{pl@L@q;x#AF%kp%C7T0qTX_+ znehjj@;;Wtj~C?*Bp_v05SUK4>p(vWPM4Nfw(J&TD*B*NJI+eej+{TVo5-<}_}1e> z3lq+^HTa2QLO2K94s#{faQV|rdK`A&$Z3CPn&y9^l@(F|Wq3>TP>-HuJ{AZPVKV9z z=Bnf#Q9IOEc;zhQazh-UkjyU2gSeRTVhBbd$P_11oN91(@j(*+%wLZ_K(Mo z&62kZVTp>u){iX-jB}sG200#(M`>m;1mz1@ecNhEAv~OcSUEK*Cn!vS_=yL z`#tJG4w_;xRvfiBVE@;jPHWQ80O?Ch|i{GPb7~2^*!2Te3gC>NkenaKq&!i}c`0Isx^61b+S3k<5 z#STSXep`^1q)<=>@xnxrWNpP|b+7#O%ZLMQZio!@JUuL|E<&rES4$N>uJ_sM8C4pMcaazDpBA<6ieCJVH!K+U zg+qiT!0NWeoXK{vA!o~nA8A%MA)7IYZeE0yLzgBx>K;B0RY|NtnL}*|_E4T=wvFRL zfyi^&a8rLDOP_E4e>?Zn3X!J41p7k%kBKoeNT5$<#A6K7SLAufOFurfIeS2%->b*L z(&9_N1~ISUf(jRlfR@9J@}<)YXk*AyMLhGMo%QNa-#!}e@n;y~yWNO;M$~Vx-y_v% zovuq8K^az9LT!T^`tinN)SoUV4!h2(#;oWj7@{;tiKdh&4~@$xP0^Co~)Xl2?q3|y=QkBW0L{Jwf`Wp#;9L1pAMqu!@M<2$pm`m8A4c2Iq711aF< zh+*-_ndmpX4PWbzR!=GE#*gE;<7P7n_+5tnQ`k(!cuxa+i?0rm%~ao`v+_j2s^B zW+5JysWc~qzH)uP6~QEhx0A}S>0yZHlepVku$wK=qd;7(jN%Wh#5bJYM4=m5aLpfj zceELqY#GNzm0qEX8ykaV1kqb~DtgQ>!o<6avHKbtmYDT2iJOaIaCIi(3pY;6@U{%ZPuhg49_3T|*`4^YE)IYO(;mI$Z6E0j4{$BE3bto&BQ;&6d z92E)iTJn`_3ouPVeT{o&077*=;A!Zpr>SP@grCF`fXJnzfmZb&&_mT#~z9kbHHuydxw zc>dT4Dxbz3c+cA<<;Lwb`XMZC{$yL$%l%)U4X_butgF9q2kGEF<@*VMfy8}k99g5E zUycGuE-<%gXi|d%(HSrRsT{Z}|LHTqdviGVIVcRKk1y9Rq!*Z|xo8+`KtO{lFzMgE ze^+NGLvLp%R(@sRB_iI#OThNvOMsMPG4spMz&+_wV+K4-X*+3g8Yn9hw1?o24=x)dwAOt5CcH}SLg!}0U&@G+yVenaIpRf-kH!i zDHS9hyiile%DJGRd{S-^CAqmqOu4;2i%F9r=@a|qW2bp1WkF)!GivWs+{HuA<|b@BJ6slJmucFz-Hnq*Cq7Xp_}dpyLG8%sVAl8NC$DuCKs5H zZ@K@VT_mn~AB=llf`XONSVo2tb9TtK`$1Trv>SV0Vx6gYU%ok1AfFK>2?tDps!;AA!!yyN8@ZC2Y)g2QUTa5`b9-M&GUKQhn! z>uX+`p>@%qdAugiTn!y-R?u0zdlyT|YaV)f;8*weu4Fdg(t&ToWFnL0P-WX$M$Q8P z-*1O7q2kok4py<^(j66z~i$HUY7R4+?17g=J?O4eWr7Sn?=oQd_@ot4!Q zBG=u2-yAZkg40cd2hix(I#TG1s+l0yBr{3~r2WY6>#MeOk8|1!epKC%L=oG4D~;0>^sUvtD=yqSqAx>g!a$<%+L8Dw zh$&b5Ra8JhhY%g46pUL;qCqJ6ldoj#Ty)lPxR|H#J^{g!a07{UlEWW<=T29;Th7}aGeG*v`oLEcmQBeTcV*1#e!dcxoln?FQ? OsHCKTBnmbl0Pugmd03(V diff --git a/src/fonts/fontello/font/mah.woff2 b/src/fonts/fontello/font/mah.woff2 deleted file mode 100644 index eb96d778f9f37e1c3f3071b42a42f5c9a6583bef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5168 zcmV-06wm8-Pew8T0RR9102D9)4*&oF046X1029^#0RR9100000000000000000000 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 diff --git a/src/styles.scss b/src/styles.scss index 01d01fc0..79e52a52 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -5,6 +5,18 @@ box-sizing: border-box; } +.icon { + display: contents; + + svg { + display: block; + width: 1em; + height: 1em; + fill: currentColor; + flex-shrink: 0; + } +} + html { --main-bg-color: #2b424f; --main-bg-color-lt: #2e4856; @@ -564,7 +576,7 @@ p { border-radius: 12px; box-shadow: var(--overlay-popup-shadow); - .icon-logo { + app-icon-logo { color: red; } From b13a4b62399458946334ccbe476c19158e6903dd Mon Sep 17 00:00:00 2001 From: ffalt Date: Sat, 9 May 2026 11:37:26 +0200 Subject: [PATCH 5/5] fix(i18n): update translations for tile-related terms --- src/assets/i18n/de.json | 18 +++++++++--------- src/assets/i18n/nl.json | 16 ++++++++-------- src/assets/i18n/pt.json | 16 ++++++++-------- src/assets/i18n/ru.json | 16 ++++++++-------- 4 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index c01f83f5..1e3fcec0 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -17,7 +17,7 @@ "MSG_PLAY_AGAIN": "Nochmal spielen", "MSG_BEST": "Gratulation, neue Bestzeit!", "MSG_GOOD": "Sehr schön!", - "MSG_FAIL": "Keine passenden Ziegel mehr.", + "MSG_FAIL": "Keine passenden Steine mehr.", "STATS_GAMES": "Anzahl Spiele", "STATS_NAME": "Name", "STATS_WIN_GAMES": "Gewonnen", @@ -221,20 +221,20 @@ "EDITOR_EXPORT": "Exportieren", "EDITOR_EXPORT_LONG": "Exportiere Boards in Dateien", "EDITOR_NEW_LAYER_LONG": "Neues Ebene unterhalb", - "EDITOR_MOVE_TILES_UP_LONG": "Kacheln nach oben verschieben", - "EDITOR_MOVE_TILES_DOWN_LONG": "Kacheln nach unten verschieben", - "EDITOR_MOVE_TILES_LEFT_LONG": "Kacheln nach links verschieben", - "EDITOR_MOVE_TILES_RIGHT_LONG": "Kacheln nach rechts verschieben", + "EDITOR_MOVE_TILES_UP_LONG": "Steine nach oben verschieben", + "EDITOR_MOVE_TILES_DOWN_LONG": "Steine nach unten verschieben", + "EDITOR_MOVE_TILES_LEFT_LONG": "Steine nach links verschieben", + "EDITOR_MOVE_TILES_RIGHT_LONG": "Steine nach rechts verschieben", "EDITOR_MOVE_LAYER_UP_LONG": "Ebene nach oben verschieben", "EDITOR_MOVE_LAYER_DOWN_LONG": "Ebene nach unten verschieben", "EDITOR_DUPLICATE_LAYER_LONG": "Ebene duplizieren", "EDITOR_CLEAR_LAYER_LONG": "Ebene leeren", "EDITOR_DELETE_LAYER_LONG": "Ebene löschen", "EDITOR_DISCARD_CHANGES_SURE": "Änderungen verwerfen?", - "EDITOR_MOVE_ALL_TILES_UP_LONG": "Alle Kacheln nach oben verschieben", - "EDITOR_MOVE_ALL_TILES_DOWN_LONG": "Alle Kacheln nach unten verschieben", - "EDITOR_MOVE_ALL_TILES_LEFT_LONG": "Alle Kacheln nach links verschieben", - "EDITOR_MOVE_ALL_TILES_RIGHT_LONG": "Alle Kacheln nach rechts verschieben", + "EDITOR_MOVE_ALL_TILES_UP_LONG": "Alle Steine nach oben verschieben", + "EDITOR_MOVE_ALL_TILES_DOWN_LONG": "Alle Steine nach unten verschieben", + "EDITOR_MOVE_ALL_TILES_LEFT_LONG": "Alle Steine nach links verschieben", + "EDITOR_MOVE_ALL_TILES_RIGHT_LONG": "Alle Steine nach rechts verschieben", "EDITOR_LAYOUT_NAME": "Name", "EDITOR_LAYOUT_BY": "Von", "EDITOR_LAYOUT_CATEGORY": "Kategorie", diff --git a/src/assets/i18n/nl.json b/src/assets/i18n/nl.json index bd3986ae..fd0cffd2 100644 --- a/src/assets/i18n/nl.json +++ b/src/assets/i18n/nl.json @@ -221,20 +221,20 @@ "EDITOR_EXPORT": "Exporteer", "EDITOR_EXPORT_LONG": "Exporteer borden naar bestanden", "EDITOR_NEW_LAYER_LONG": "Nieuwe laag hieronder", - "EDITOR_MOVE_TILES_UP_LONG": "Verplaats tegels omhoog", - "EDITOR_MOVE_TILES_DOWN_LONG": "Verplaats tegels omlaag", - "EDITOR_MOVE_TILES_LEFT_LONG": "Verplaats tegels naar links", - "EDITOR_MOVE_TILES_RIGHT_LONG": "Verplaats tegels naar rechts", + "EDITOR_MOVE_TILES_UP_LONG": "Verplaats stenen omhoog", + "EDITOR_MOVE_TILES_DOWN_LONG": "Verplaats stenen omlaag", + "EDITOR_MOVE_TILES_LEFT_LONG": "Verplaats stenen naar links", + "EDITOR_MOVE_TILES_RIGHT_LONG": "Verplaats stenen naar rechts", "EDITOR_MOVE_LAYER_UP_LONG": "Laag omhoog bewegen", "EDITOR_MOVE_LAYER_DOWN_LONG": "Laag omlaag bewegen", "EDITOR_DUPLICATE_LAYER_LONG": "Dupliceer laag", "EDITOR_CLEAR_LAYER_LONG": "Laag wissen", "EDITOR_DELETE_LAYER_LONG": "Laag verwijderen", "EDITOR_DISCARD_CHANGES_SURE": "Wijzigingen verwerpen?", - "EDITOR_MOVE_ALL_TILES_UP_LONG": "Verplaats alle tegels omhoog", - "EDITOR_MOVE_ALL_TILES_DOWN_LONG": "Verplaats alle tegels omlaag", - "EDITOR_MOVE_ALL_TILES_LEFT_LONG": "Verplaats alle tegels naar links", - "EDITOR_MOVE_ALL_TILES_RIGHT_LONG": "Verplaats alle tegels naar rechts", + "EDITOR_MOVE_ALL_TILES_UP_LONG": "Verplaats alle stenen omhoog", + "EDITOR_MOVE_ALL_TILES_DOWN_LONG": "Verplaats alle stenen omlaag", + "EDITOR_MOVE_ALL_TILES_LEFT_LONG": "Verplaats alle stenen naar links", + "EDITOR_MOVE_ALL_TILES_RIGHT_LONG": "Verplaats alle stenen naar rechts", "EDITOR_LAYOUT_NAME": "Naam", "EDITOR_LAYOUT_BY": "Op", "EDITOR_LAYOUT_CATEGORY": "Categorie", diff --git a/src/assets/i18n/pt.json b/src/assets/i18n/pt.json index 5ebd32c6..969b683d 100644 --- a/src/assets/i18n/pt.json +++ b/src/assets/i18n/pt.json @@ -221,20 +221,20 @@ "EDITOR_EXPORT": "Exportar", "EDITOR_EXPORT_LONG": "Exportar boards para arquivos", "EDITOR_NEW_LAYER_LONG": "Nova camada abaixo", - "EDITOR_MOVE_TILES_UP_LONG": "Mover blocos para cima", - "EDITOR_MOVE_TILES_DOWN_LONG": "Mover blocos para baixo", - "EDITOR_MOVE_TILES_LEFT_LONG": "Mover blocos para esquerda", - "EDITOR_MOVE_TILES_RIGHT_LONG": "Mover blocos para direita", + "EDITOR_MOVE_TILES_UP_LONG": "Mover peças para cima", + "EDITOR_MOVE_TILES_DOWN_LONG": "Mover peças para baixo", + "EDITOR_MOVE_TILES_LEFT_LONG": "Mover peças para esquerda", + "EDITOR_MOVE_TILES_RIGHT_LONG": "Mover peças para direita", "EDITOR_MOVE_LAYER_UP_LONG": "Mover camada para cima", "EDITOR_MOVE_LAYER_DOWN_LONG": "Mover camada para baixo", "EDITOR_DUPLICATE_LAYER_LONG": "Duplicar camada", "EDITOR_CLEAR_LAYER_LONG": "Limpar camada", "EDITOR_DELETE_LAYER_LONG": "Eliminar camada", "EDITOR_DISCARD_CHANGES_SURE": "Descartar alterações?", - "EDITOR_MOVE_ALL_TILES_UP_LONG": "Mover todos os blocos para cima", - "EDITOR_MOVE_ALL_TILES_DOWN_LONG": "Mover todos os blocos para baixo", - "EDITOR_MOVE_ALL_TILES_LEFT_LONG": "Mover todos os blocos para a esquerda", - "EDITOR_MOVE_ALL_TILES_RIGHT_LONG": "Mover todos os blocos para a direita", + "EDITOR_MOVE_ALL_TILES_UP_LONG": "Mover todas as peças para cima", + "EDITOR_MOVE_ALL_TILES_DOWN_LONG": "Mover todas as peças para baixo", + "EDITOR_MOVE_ALL_TILES_LEFT_LONG": "Mover todas as peças para a esquerda", + "EDITOR_MOVE_ALL_TILES_RIGHT_LONG": "Mover todas as peças para a direita", "EDITOR_LAYOUT_NAME": "Nome", "EDITOR_LAYOUT_BY": "De", "EDITOR_LAYOUT_CATEGORY": "Categoria", diff --git a/src/assets/i18n/ru.json b/src/assets/i18n/ru.json index 48d86853..fe83967c 100644 --- a/src/assets/i18n/ru.json +++ b/src/assets/i18n/ru.json @@ -221,20 +221,20 @@ "EDITOR_EXPORT": "Экспорт", "EDITOR_EXPORT_LONG": "Экспортировать доски в файлы", "EDITOR_NEW_LAYER_LONG": "Новый слой ниже", - "EDITOR_MOVE_TILES_UP_LONG": "Переместить плитки вверх", - "EDITOR_MOVE_TILES_DOWN_LONG": "Переместить плитки вниз", - "EDITOR_MOVE_TILES_LEFT_LONG": "Переместить плитки влево", - "EDITOR_MOVE_TILES_RIGHT_LONG": "Переместить плитки вправо", + "EDITOR_MOVE_TILES_UP_LONG": "Переместить фишки вверх", + "EDITOR_MOVE_TILES_DOWN_LONG": "Переместить фишки вниз", + "EDITOR_MOVE_TILES_LEFT_LONG": "Переместить фишки влево", + "EDITOR_MOVE_TILES_RIGHT_LONG": "Переместить фишки вправо", "EDITOR_MOVE_LAYER_UP_LONG": "Переместить слой вверх", "EDITOR_MOVE_LAYER_DOWN_LONG": "Переместить слой вниз", "EDITOR_DUPLICATE_LAYER_LONG": "Дублировать слой", "EDITOR_CLEAR_LAYER_LONG": "Очистить слой", "EDITOR_DELETE_LAYER_LONG": "Удалить слой", "EDITOR_DISCARD_CHANGES_SURE": "Отменить изменения?", - "EDITOR_MOVE_ALL_TILES_UP_LONG": "Переместить все плитки вверх", - "EDITOR_MOVE_ALL_TILES_DOWN_LONG": "Переместить все плитки вниз", - "EDITOR_MOVE_ALL_TILES_LEFT_LONG": "Переместить все плитки влево", - "EDITOR_MOVE_ALL_TILES_RIGHT_LONG": "Переместить все плитки вправо", + "EDITOR_MOVE_ALL_TILES_UP_LONG": "Переместить все фишки вверх", + "EDITOR_MOVE_ALL_TILES_DOWN_LONG": "Переместить все фишки вниз", + "EDITOR_MOVE_ALL_TILES_LEFT_LONG": "Переместить все фишки влево", + "EDITOR_MOVE_ALL_TILES_RIGHT_LONG": "Переместить все фишки вправо", "EDITOR_LAYOUT_NAME": "Имя", "EDITOR_LAYOUT_BY": "От", "EDITOR_LAYOUT_CATEGORY": "Категория",