@celestia-island/hikari 0.45.3 → 0.45.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/components/HkAboutModal.scss +47 -4
- package/src/components/HkAboutModal.test.tsx +58 -30
- package/src/components/HkAboutModal.tsx +89 -70
- package/src/i18n/locales/ar/platform.json +0 -5
- package/src/i18n/locales/de/platform.json +0 -5
- package/src/i18n/locales/en/platform.json +0 -5
- package/src/i18n/locales/es/platform.json +0 -5
- package/src/i18n/locales/fr/platform.json +0 -5
- package/src/i18n/locales/ja/platform.json +0 -5
- package/src/i18n/locales/ko/platform.json +0 -5
- package/src/i18n/locales/pt/platform.json +0 -5
- package/src/i18n/locales/ru/platform.json +0 -5
- package/src/i18n/locales/zh-Hans/platform.json +0 -5
- package/src/i18n/locales/zh-Hant/platform.json +0 -5
package/package.json
CHANGED
|
@@ -32,8 +32,16 @@
|
|
|
32
32
|
|
|
33
33
|
.s-about-modal-header {
|
|
34
34
|
display: flex;
|
|
35
|
+
flex-direction: column;
|
|
36
|
+
align-items: center;
|
|
37
|
+
gap: var(--space-8, 0.5rem);
|
|
38
|
+
text-align: center;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.s-about-modal-header > div {
|
|
42
|
+
display: flex;
|
|
43
|
+
flex-direction: column;
|
|
35
44
|
align-items: center;
|
|
36
|
-
gap: var(--space-12, 0.75rem);
|
|
37
45
|
}
|
|
38
46
|
|
|
39
47
|
.s-about-modal-logo-img {
|
|
@@ -72,6 +80,21 @@
|
|
|
72
80
|
color: rgb(var(--color-muted));
|
|
73
81
|
}
|
|
74
82
|
|
|
83
|
+
.s-about-modal-slogan {
|
|
84
|
+
margin: 0;
|
|
85
|
+
font-size: var(--text-base, 1rem);
|
|
86
|
+
font-weight: 600;
|
|
87
|
+
text-align: center;
|
|
88
|
+
color: rgb(var(--color-text));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.s-about-modal-made-by {
|
|
92
|
+
margin: 0;
|
|
93
|
+
font-size: var(--text-sm, 0.8125rem);
|
|
94
|
+
text-align: center;
|
|
95
|
+
color: rgb(var(--color-text));
|
|
96
|
+
}
|
|
97
|
+
|
|
75
98
|
.s-about-modal-tagline {
|
|
76
99
|
margin: var(--space-2, 0.125rem) 0 0;
|
|
77
100
|
font-size: var(--text-xs, 0.75rem);
|
|
@@ -80,8 +103,9 @@
|
|
|
80
103
|
|
|
81
104
|
.s-about-modal-description {
|
|
82
105
|
margin: 0;
|
|
83
|
-
font-size: var(--text-
|
|
84
|
-
line-height: 1.
|
|
106
|
+
font-size: var(--text-xs, 0.75rem);
|
|
107
|
+
line-height: 1.6;
|
|
108
|
+
text-align: center;
|
|
85
109
|
color: rgb(var(--color-muted));
|
|
86
110
|
}
|
|
87
111
|
|
|
@@ -127,6 +151,7 @@
|
|
|
127
151
|
.s-about-modal-links-list {
|
|
128
152
|
display: flex;
|
|
129
153
|
flex-wrap: wrap;
|
|
154
|
+
justify-content: center;
|
|
130
155
|
gap: var(--space-8, 0.5rem);
|
|
131
156
|
}
|
|
132
157
|
|
|
@@ -154,7 +179,25 @@
|
|
|
154
179
|
0 0 0 4px rgb(var(--color-primary));
|
|
155
180
|
}
|
|
156
181
|
|
|
182
|
+
.s-about-modal-footer-links {
|
|
183
|
+
display: flex;
|
|
184
|
+
flex-wrap: wrap;
|
|
185
|
+
justify-content: center;
|
|
186
|
+
gap: var(--space-12, 0.75rem);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.s-about-modal-footer-link {
|
|
190
|
+
font-size: var(--text-xs, 0.75rem);
|
|
191
|
+
color: rgb(var(--color-muted));
|
|
192
|
+
text-decoration: none;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.s-about-modal-footer-link:hover {
|
|
196
|
+
color: rgb(var(--color-primary));
|
|
197
|
+
text-decoration: underline;
|
|
198
|
+
}
|
|
199
|
+
|
|
157
200
|
.s-about-modal-footer {
|
|
158
201
|
display: flex;
|
|
159
|
-
justify-content:
|
|
202
|
+
justify-content: center;
|
|
160
203
|
}
|
|
@@ -94,30 +94,70 @@ describe("HkAboutModal branding", () => {
|
|
|
94
94
|
expect(query<HTMLElement>(".s-about-modal-description").textContent).toBe("Save the world.");
|
|
95
95
|
});
|
|
96
96
|
|
|
97
|
-
it("renders
|
|
97
|
+
it("renders the made-by sentence with a linked author name", async () => {
|
|
98
98
|
mountAbout({
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
99
|
+
madeByPrefix: "由",
|
|
100
|
+
madeByName: "伊欧",
|
|
101
|
+
madeByNameHref: "https://github.com/langyo",
|
|
102
|
+
madeBySuffix: " 主创,来自 Celestia Island",
|
|
102
103
|
});
|
|
103
104
|
await flushModal();
|
|
105
|
+
const line = query<HTMLElement>(".s-about-modal-made-by");
|
|
106
|
+
expect(line.textContent).toBe("由伊欧 主创,来自 Celestia Island");
|
|
104
107
|
const link = query<HTMLAnchorElement>(".s-about-modal-row-link");
|
|
105
|
-
expect(link.textContent).toBe("
|
|
106
|
-
expect(link.getAttribute("href")).toBe("https://github.com/
|
|
108
|
+
expect(link.textContent).toBe("伊欧");
|
|
109
|
+
expect(link.getAttribute("href")).toBe("https://github.com/langyo");
|
|
107
110
|
expect(link.getAttribute("target")).toBe("_blank");
|
|
108
|
-
const rows = [...document.body.querySelectorAll<HTMLElement>(".s-about-modal-row")];
|
|
109
|
-
const licenseRow = rows.find((row) => row.textContent?.includes("BUSL-1.1"));
|
|
110
|
-
expect(licenseRow, "license row renders").toBeTruthy();
|
|
111
|
-
expect(licenseRow!.textContent).toContain("License");
|
|
112
111
|
});
|
|
113
112
|
|
|
114
|
-
it("renders the
|
|
115
|
-
mountAbout({
|
|
113
|
+
it("renders the made-by sentence without a link when no href", async () => {
|
|
114
|
+
mountAbout({ madeByPrefix: "由", madeByName: "伊欧", madeBySuffix: " 主创" });
|
|
116
115
|
await flushModal();
|
|
117
|
-
expect(query<HTMLElement>(".s-about-modal-
|
|
116
|
+
expect(query<HTMLElement>(".s-about-modal-made-by").textContent).toBe("由伊欧 主创");
|
|
118
117
|
expect(document.body.querySelector(".s-about-modal-row-link")).toBeNull();
|
|
119
118
|
});
|
|
120
119
|
|
|
120
|
+
it("renders software-component version rows", async () => {
|
|
121
|
+
mountAbout({
|
|
122
|
+
componentVersions: [
|
|
123
|
+
{ label: "WebUI 版本", value: "0.1.138 REW2HF 生产" },
|
|
124
|
+
{ label: "计算引擎版本", value: "0.1.0" },
|
|
125
|
+
],
|
|
126
|
+
});
|
|
127
|
+
await flushModal();
|
|
128
|
+
const rows = [...document.body.querySelectorAll<HTMLElement>(".s-about-modal-row")];
|
|
129
|
+
expect(rows.length).toBe(2);
|
|
130
|
+
expect(rows[0]!.textContent).toContain("WebUI 版本");
|
|
131
|
+
expect(rows[0]!.textContent).toContain("0.1.138 REW2HF 生产");
|
|
132
|
+
expect(rows[1]!.textContent).toContain("计算引擎版本");
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
it("renders centered license chips", async () => {
|
|
136
|
+
mountAbout({
|
|
137
|
+
licenses: [
|
|
138
|
+
{ label: "SySL-1.0", href: "https://github.com/celestia-island/hikari/blob/master/LICENSE" },
|
|
139
|
+
{ label: "BUSL-1.1", href: "https://github.com/celestia-island/shittim-chest/blob/master/LICENSE" },
|
|
140
|
+
],
|
|
141
|
+
});
|
|
142
|
+
await flushModal();
|
|
143
|
+
const chips = [...document.body.querySelectorAll<HTMLAnchorElement>(".s-about-modal-link")];
|
|
144
|
+
expect(chips.map((chip) => chip.textContent)).toEqual(["SySL-1.0", "BUSL-1.1"]);
|
|
145
|
+
for (const chip of chips) expect(chip.getAttribute("target")).toBe("_blank");
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
it("renders centered legal footer links", async () => {
|
|
149
|
+
mountAbout({
|
|
150
|
+
footerLinks: [{ label: "京ICP备2026xxxx号", href: "https://beian.miit.gov.cn/" }],
|
|
151
|
+
});
|
|
152
|
+
await flushModal();
|
|
153
|
+
const links = [
|
|
154
|
+
...document.body.querySelectorAll<HTMLAnchorElement>(".s-about-modal-footer-link"),
|
|
155
|
+
];
|
|
156
|
+
expect(links.length).toBe(1);
|
|
157
|
+
expect(links[0]!.textContent).toBe("京ICP备2026xxxx号");
|
|
158
|
+
expect(links[0]!.getAttribute("href")).toBe("https://beian.miit.gov.cn/");
|
|
159
|
+
});
|
|
160
|
+
|
|
121
161
|
it("renders the backdrop factory inside the clipped layer", async () => {
|
|
122
162
|
mountAbout({ backdrop: () => h("div", { class: "test-backdrop-marker" }) });
|
|
123
163
|
await flushModal();
|
|
@@ -159,23 +199,11 @@ describe("HkAboutModal branding", () => {
|
|
|
159
199
|
expect(badge.textContent).toContain(`© ${year} Test App`);
|
|
160
200
|
});
|
|
161
201
|
|
|
162
|
-
it("
|
|
163
|
-
mountAbout(
|
|
164
|
-
await flushModal();
|
|
165
|
-
const rows = () => [
|
|
166
|
-
...document.body.querySelectorAll<HTMLElement>(".s-about-modal-row-label"),
|
|
167
|
-
];
|
|
168
|
-
|
|
169
|
-
setLocale("zh-Hans");
|
|
170
|
-
await flushModal();
|
|
171
|
-
let text = rows().map((el) => el.textContent);
|
|
172
|
-
expect(text.some((t) => t === "作者")).toBe(true);
|
|
173
|
-
expect(text.some((t) => t === "许可证")).toBe(true);
|
|
174
|
-
|
|
175
|
-
setLocale("en");
|
|
202
|
+
it("renders no branding rows when no branding props are given", async () => {
|
|
203
|
+
mountAbout();
|
|
176
204
|
await flushModal();
|
|
177
|
-
|
|
178
|
-
expect(
|
|
179
|
-
expect(
|
|
205
|
+
expect(document.body.querySelectorAll(".s-about-modal-row").length).toBe(0);
|
|
206
|
+
expect(document.body.querySelector(".s-about-modal-made-by")).toBeNull();
|
|
207
|
+
expect(document.body.querySelector(".s-about-modal-links")).toBeNull();
|
|
180
208
|
});
|
|
181
209
|
});
|
|
@@ -10,17 +10,23 @@ export interface HAboutLink {
|
|
|
10
10
|
href: string;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
/** One software-component version row (label left, composed value right). */
|
|
14
|
+
export interface HAboutComponentVersion {
|
|
15
|
+
label: string;
|
|
16
|
+
value: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
13
19
|
/**
|
|
14
20
|
* HkAboutModal — version / about dialog.
|
|
15
21
|
* (Upstreamed from shittim-chest's plana-legacy layer.)
|
|
16
22
|
*
|
|
17
|
-
* Shows
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* plain identity
|
|
23
|
+
* Shows a centered identity block (logo above the name above the tagline)
|
|
24
|
+
* plus optional branding: a made-by sentence with a linked author name, a
|
|
25
|
+
* centered organization line, software-component version rows, license and
|
|
26
|
+
* external link chips, a decorative backdrop layer (canvas or anything
|
|
27
|
+
* else, rendered behind the content and pointer-inert) and centered legal
|
|
28
|
+
* footer links (e.g. ICP filings). Every branding prop is optional — the
|
|
29
|
+
* modal degrades to the plain identity card when none are given.
|
|
24
30
|
*/
|
|
25
31
|
export const HkAboutModal = defineComponent({
|
|
26
32
|
name: "HkAboutModal",
|
|
@@ -30,28 +36,33 @@ export const HkAboutModal = defineComponent({
|
|
|
30
36
|
appName: { type: String, required: true },
|
|
31
37
|
/** Application version (e.g. "0.1.4"). */
|
|
32
38
|
version: { type: String, required: true },
|
|
33
|
-
/** Optional app build hash / commit. */
|
|
34
|
-
buildHash: { type: String, default: undefined },
|
|
35
|
-
/** Optional engine version (backend), e.g. "0.2.1". */
|
|
36
|
-
engineVersion: { type: String, default: undefined },
|
|
37
|
-
/** Optional engine build hash / commit. */
|
|
38
|
-
engineBuildHash: { type: String, default: undefined },
|
|
39
39
|
/** Optional logo image URL — replaces the first-letter tile. */
|
|
40
40
|
logoSrc: { type: String, default: undefined },
|
|
41
41
|
/** Optional one-liner under the version (e.g. the app tagline). */
|
|
42
42
|
tagline: { type: String, default: undefined },
|
|
43
|
-
/** Optional
|
|
43
|
+
/** Optional centered small line under the header (organization blurb). */
|
|
44
44
|
description: { type: String, default: undefined },
|
|
45
|
-
/**
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
|
|
45
|
+
/** Made-by sentence: text before the linked author name (e.g. "由"). */
|
|
46
|
+
madeByPrefix: { type: String, default: undefined },
|
|
47
|
+
/** Made-by sentence: the linked author name (e.g. "伊欧"). */
|
|
48
|
+
madeByName: { type: String, default: undefined },
|
|
49
|
+
/** Link applied to the author name (e.g. the GitHub profile). */
|
|
50
|
+
madeByNameHref: { type: String, default: undefined },
|
|
51
|
+
/** Made-by sentence: text after the name (e.g. " 主创,来自 …"). */
|
|
52
|
+
madeBySuffix: { type: String, default: undefined },
|
|
53
|
+
/** License chips (e.g. SySL-1.0 / BUSL-1.1), rendered centered. */
|
|
54
|
+
licenses: { type: Array as PropType<HAboutLink[]>, default: () => [] },
|
|
55
|
+
/** Software-component version rows (WebUI / engines), label + value. */
|
|
56
|
+
componentVersions: {
|
|
57
|
+
type: Array as PropType<HAboutComponentVersion[]>,
|
|
58
|
+
default: () => [],
|
|
59
|
+
},
|
|
51
60
|
/** Optional copyright holder in the footer (defaults to the app name). */
|
|
52
61
|
copyright: { type: String, default: undefined },
|
|
53
62
|
/** Optional external links (e.g. GitHub, docs). */
|
|
54
63
|
links: { type: Array as PropType<HAboutLink[]>, default: () => [] },
|
|
64
|
+
/** Optional centered legal links above the copyright (ICP filings). */
|
|
65
|
+
footerLinks: { type: Array as PropType<HAboutLink[]>, default: () => [] },
|
|
55
66
|
/**
|
|
56
67
|
* Optional decorative backdrop factory, rendered behind the content
|
|
57
68
|
* inside a clipped, pointer-inert layer. The modal owns only the layer —
|
|
@@ -66,21 +77,26 @@ export const HkAboutModal = defineComponent({
|
|
|
66
77
|
setup(props, { emit }) {
|
|
67
78
|
const { t } = useI18n();
|
|
68
79
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const renderAuthorValue = () => {
|
|
74
|
-
if (!props.authorHref) return props.author;
|
|
75
|
-
return (
|
|
80
|
+
const renderMadeBy = () => {
|
|
81
|
+
if (!props.madeByName) return null;
|
|
82
|
+
const name = props.madeByNameHref ? (
|
|
76
83
|
<a
|
|
77
84
|
class="s-about-modal-row-link"
|
|
78
|
-
href={props.
|
|
85
|
+
href={props.madeByNameHref}
|
|
79
86
|
target="_blank"
|
|
80
87
|
rel="noopener noreferrer"
|
|
81
88
|
>
|
|
82
|
-
{props.
|
|
89
|
+
{props.madeByName}
|
|
83
90
|
</a>
|
|
91
|
+
) : (
|
|
92
|
+
<span>{props.madeByName}</span>
|
|
93
|
+
);
|
|
94
|
+
return (
|
|
95
|
+
<p class="s-about-modal-made-by">
|
|
96
|
+
{props.madeByPrefix}
|
|
97
|
+
{name}
|
|
98
|
+
{props.madeBySuffix}
|
|
99
|
+
</p>
|
|
84
100
|
);
|
|
85
101
|
};
|
|
86
102
|
|
|
@@ -113,50 +129,37 @@ export const HkAboutModal = defineComponent({
|
|
|
113
129
|
</div>
|
|
114
130
|
</header>
|
|
115
131
|
|
|
132
|
+
{renderMadeBy()}
|
|
116
133
|
{props.description && <p class="s-about-modal-description">{props.description}</p>}
|
|
117
134
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
<
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
<span class="s-about-modal-row-label">
|
|
144
|
-
{t("hikari::about.engineVersion", "Engine version")}
|
|
145
|
-
</span>
|
|
146
|
-
<span class="s-about-modal-row-value">{props.engineVersion}</span>
|
|
147
|
-
</div>
|
|
148
|
-
)}
|
|
149
|
-
{props.engineBuildHash && (
|
|
150
|
-
<div class="s-about-modal-row">
|
|
151
|
-
<span class="s-about-modal-row-label">
|
|
152
|
-
{t("hikari::about.engineBuildHash", "Engine build")}
|
|
153
|
-
</span>
|
|
154
|
-
<span class="s-about-modal-row-value" title={props.engineBuildHash}>
|
|
155
|
-
{shortHash(props.engineBuildHash)}
|
|
156
|
-
</span>
|
|
135
|
+
{props.componentVersions.length > 0 && (
|
|
136
|
+
<div class="s-about-modal-rows">
|
|
137
|
+
{props.componentVersions.map((component) => (
|
|
138
|
+
<div class="s-about-modal-row" key={component.label}>
|
|
139
|
+
<span class="s-about-modal-row-label">{component.label}</span>
|
|
140
|
+
<span class="s-about-modal-row-value">{component.value}</span>
|
|
141
|
+
</div>
|
|
142
|
+
))}
|
|
143
|
+
</div>
|
|
144
|
+
)}
|
|
145
|
+
|
|
146
|
+
{props.licenses.length > 0 && (
|
|
147
|
+
<div class="s-about-modal-links">
|
|
148
|
+
<div class="s-about-modal-links-list">
|
|
149
|
+
{props.licenses.map((license) => (
|
|
150
|
+
<a
|
|
151
|
+
key={license.href}
|
|
152
|
+
href={license.href}
|
|
153
|
+
target="_blank"
|
|
154
|
+
rel="noopener noreferrer"
|
|
155
|
+
class="s-about-modal-link"
|
|
156
|
+
>
|
|
157
|
+
{license.label}
|
|
158
|
+
</a>
|
|
159
|
+
))}
|
|
157
160
|
</div>
|
|
158
|
-
|
|
159
|
-
|
|
161
|
+
</div>
|
|
162
|
+
)}
|
|
160
163
|
|
|
161
164
|
{props.links.length > 0 && (
|
|
162
165
|
<div class="s-about-modal-links">
|
|
@@ -176,6 +179,22 @@ export const HkAboutModal = defineComponent({
|
|
|
176
179
|
</div>
|
|
177
180
|
)}
|
|
178
181
|
|
|
182
|
+
{props.footerLinks.length > 0 && (
|
|
183
|
+
<div class="s-about-modal-footer-links">
|
|
184
|
+
{props.footerLinks.map((link) => (
|
|
185
|
+
<a
|
|
186
|
+
key={link.href}
|
|
187
|
+
href={link.href}
|
|
188
|
+
target="_blank"
|
|
189
|
+
rel="noopener noreferrer"
|
|
190
|
+
class="s-about-modal-footer-link"
|
|
191
|
+
>
|
|
192
|
+
{link.label}
|
|
193
|
+
</a>
|
|
194
|
+
))}
|
|
195
|
+
</div>
|
|
196
|
+
)}
|
|
197
|
+
|
|
179
198
|
<footer class="s-about-modal-footer">
|
|
180
199
|
<HBadge variant="muted">
|
|
181
200
|
© {new Date().getFullYear()} {props.copyright ?? props.appName}
|
|
@@ -14,11 +14,6 @@
|
|
|
14
14
|
"hikari::clipboard.copyFailed": "فشل النسخ",
|
|
15
15
|
"hikari::about.title": "حول",
|
|
16
16
|
"hikari::about.version": "الإصدار",
|
|
17
|
-
"hikari::about.buildHash": "البناء",
|
|
18
|
-
"hikari::about.engineVersion": "إصدار المحرك",
|
|
19
|
-
"hikari::about.engineBuildHash": "بناء المحرك",
|
|
20
|
-
"hikari::about.author": "المؤلف",
|
|
21
|
-
"hikari::about.license": "الترخيص",
|
|
22
17
|
"hikari::theme.mode": "وضع السمة",
|
|
23
18
|
"hikari::theme.modeLight": "فاتح",
|
|
24
19
|
"hikari::theme.modeDark": "داكن",
|
|
@@ -14,11 +14,6 @@
|
|
|
14
14
|
"hikari::clipboard.copyFailed": "Kopieren fehlgeschlagen",
|
|
15
15
|
"hikari::about.title": "Über",
|
|
16
16
|
"hikari::about.version": "Version",
|
|
17
|
-
"hikari::about.buildHash": "Build",
|
|
18
|
-
"hikari::about.engineVersion": "Engine-Version",
|
|
19
|
-
"hikari::about.engineBuildHash": "Engine-Build",
|
|
20
|
-
"hikari::about.author": "Autor",
|
|
21
|
-
"hikari::about.license": "Lizenz",
|
|
22
17
|
"hikari::theme.mode": "Design-Modus",
|
|
23
18
|
"hikari::theme.modeLight": "Hell",
|
|
24
19
|
"hikari::theme.modeDark": "Dunkel",
|
|
@@ -14,11 +14,6 @@
|
|
|
14
14
|
"hikari::clipboard.copyFailed": "Copy failed",
|
|
15
15
|
"hikari::about.title": "About",
|
|
16
16
|
"hikari::about.version": "Version",
|
|
17
|
-
"hikari::about.buildHash": "Build",
|
|
18
|
-
"hikari::about.engineVersion": "Engine version",
|
|
19
|
-
"hikari::about.engineBuildHash": "Engine build",
|
|
20
|
-
"hikari::about.author": "Author",
|
|
21
|
-
"hikari::about.license": "License",
|
|
22
17
|
"hikari::theme.mode": "Theme mode",
|
|
23
18
|
"hikari::theme.modeLight": "Light",
|
|
24
19
|
"hikari::theme.modeDark": "Dark",
|
|
@@ -14,11 +14,6 @@
|
|
|
14
14
|
"hikari::clipboard.copyFailed": "Error al copiar",
|
|
15
15
|
"hikari::about.title": "Acerca de",
|
|
16
16
|
"hikari::about.version": "Versión",
|
|
17
|
-
"hikari::about.buildHash": "Compilación",
|
|
18
|
-
"hikari::about.engineVersion": "Versión del motor",
|
|
19
|
-
"hikari::about.engineBuildHash": "Compilación del motor",
|
|
20
|
-
"hikari::about.author": "Autor",
|
|
21
|
-
"hikari::about.license": "Licencia",
|
|
22
17
|
"hikari::theme.mode": "Modo de tema",
|
|
23
18
|
"hikari::theme.modeLight": "Claro",
|
|
24
19
|
"hikari::theme.modeDark": "Oscuro",
|
|
@@ -14,11 +14,6 @@
|
|
|
14
14
|
"hikari::clipboard.copyFailed": "Échec de la copie",
|
|
15
15
|
"hikari::about.title": "À propos",
|
|
16
16
|
"hikari::about.version": "Version",
|
|
17
|
-
"hikari::about.buildHash": "Build",
|
|
18
|
-
"hikari::about.engineVersion": "Version du moteur",
|
|
19
|
-
"hikari::about.engineBuildHash": "Build du moteur",
|
|
20
|
-
"hikari::about.author": "Auteur",
|
|
21
|
-
"hikari::about.license": "Licence",
|
|
22
17
|
"hikari::theme.mode": "Mode du thème",
|
|
23
18
|
"hikari::theme.modeLight": "Clair",
|
|
24
19
|
"hikari::theme.modeDark": "Sombre",
|
|
@@ -14,11 +14,6 @@
|
|
|
14
14
|
"hikari::clipboard.copyFailed": "コピーに失敗しました",
|
|
15
15
|
"hikari::about.title": "このアプリについて",
|
|
16
16
|
"hikari::about.version": "バージョン",
|
|
17
|
-
"hikari::about.buildHash": "ビルド",
|
|
18
|
-
"hikari::about.engineVersion": "エンジンバージョン",
|
|
19
|
-
"hikari::about.engineBuildHash": "エンジンビルド",
|
|
20
|
-
"hikari::about.author": "作者",
|
|
21
|
-
"hikari::about.license": "ライセンス",
|
|
22
17
|
"hikari::theme.mode": "テーマモード",
|
|
23
18
|
"hikari::theme.modeLight": "ライト",
|
|
24
19
|
"hikari::theme.modeDark": "ダーク",
|
|
@@ -14,11 +14,6 @@
|
|
|
14
14
|
"hikari::clipboard.copyFailed": "복사 실패",
|
|
15
15
|
"hikari::about.title": "정보",
|
|
16
16
|
"hikari::about.version": "버전",
|
|
17
|
-
"hikari::about.buildHash": "빌드",
|
|
18
|
-
"hikari::about.engineVersion": "엔진 버전",
|
|
19
|
-
"hikari::about.engineBuildHash": "엔진 빌드",
|
|
20
|
-
"hikari::about.author": "제작자",
|
|
21
|
-
"hikari::about.license": "라이선스",
|
|
22
17
|
"hikari::theme.mode": "테마 모드",
|
|
23
18
|
"hikari::theme.modeLight": "라이트",
|
|
24
19
|
"hikari::theme.modeDark": "다크",
|
|
@@ -14,11 +14,6 @@
|
|
|
14
14
|
"hikari::clipboard.copyFailed": "Falha ao copiar",
|
|
15
15
|
"hikari::about.title": "Sobre",
|
|
16
16
|
"hikari::about.version": "Versão",
|
|
17
|
-
"hikari::about.buildHash": "Build",
|
|
18
|
-
"hikari::about.engineVersion": "Versão do motor",
|
|
19
|
-
"hikari::about.engineBuildHash": "Build do motor",
|
|
20
|
-
"hikari::about.author": "Autor",
|
|
21
|
-
"hikari::about.license": "Licença",
|
|
22
17
|
"hikari::theme.mode": "Modo do tema",
|
|
23
18
|
"hikari::theme.modeLight": "Claro",
|
|
24
19
|
"hikari::theme.modeDark": "Escuro",
|
|
@@ -14,11 +14,6 @@
|
|
|
14
14
|
"hikari::clipboard.copyFailed": "Не удалось скопировать",
|
|
15
15
|
"hikari::about.title": "О программе",
|
|
16
16
|
"hikari::about.version": "Версия",
|
|
17
|
-
"hikari::about.buildHash": "Сборка",
|
|
18
|
-
"hikari::about.engineVersion": "Версия движка",
|
|
19
|
-
"hikari::about.engineBuildHash": "Сборка движка",
|
|
20
|
-
"hikari::about.author": "Автор",
|
|
21
|
-
"hikari::about.license": "Лицензия",
|
|
22
17
|
"hikari::theme.mode": "Режим темы",
|
|
23
18
|
"hikari::theme.modeLight": "Светлая",
|
|
24
19
|
"hikari::theme.modeDark": "Тёмная",
|
|
@@ -14,11 +14,6 @@
|
|
|
14
14
|
"hikari::clipboard.copyFailed": "复制失败",
|
|
15
15
|
"hikari::about.title": "关于",
|
|
16
16
|
"hikari::about.version": "版本",
|
|
17
|
-
"hikari::about.buildHash": "构建",
|
|
18
|
-
"hikari::about.engineVersion": "引擎版本",
|
|
19
|
-
"hikari::about.engineBuildHash": "引擎构建",
|
|
20
|
-
"hikari::about.author": "作者",
|
|
21
|
-
"hikari::about.license": "许可证",
|
|
22
17
|
"hikari::theme.mode": "主题模式",
|
|
23
18
|
"hikari::theme.modeLight": "浅色",
|
|
24
19
|
"hikari::theme.modeDark": "深色",
|
|
@@ -14,11 +14,6 @@
|
|
|
14
14
|
"hikari::clipboard.copyFailed": "複製失敗",
|
|
15
15
|
"hikari::about.title": "關於",
|
|
16
16
|
"hikari::about.version": "版本",
|
|
17
|
-
"hikari::about.buildHash": "建置",
|
|
18
|
-
"hikari::about.engineVersion": "引擎版本",
|
|
19
|
-
"hikari::about.engineBuildHash": "引擎建置",
|
|
20
|
-
"hikari::about.author": "作者",
|
|
21
|
-
"hikari::about.license": "授權條款",
|
|
22
17
|
"hikari::theme.mode": "主題模式",
|
|
23
18
|
"hikari::theme.modeLight": "淺色",
|
|
24
19
|
"hikari::theme.modeDark": "深色",
|