Skip to content

Commit a4b22cd

Browse files
authored
Merge pull request #1729 from iamfaran/environments-translations
Environments translations + Merge Conflicts Resolve
2 parents c8aff04 + bf0cfab commit a4b22cd

29 files changed

+863
-413
lines changed

client/packages/lowcoder/src/i18n/locales/en.ts

Lines changed: 417 additions & 3 deletions
Large diffs are not rendered by default.

client/packages/lowcoder/src/pages/setting/environments/EnvironmentDetail.tsx

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import { getEnvironmentTagColor } from "./utils/environmentUtils";
4646
import { formatAPICalls, getAPICallsStatusColor } from "./services/license.service";
4747
import ErrorComponent from './components/ErrorComponent';
4848
import { Level1SettingPageContent } from "../styled";
49+
import { trans } from "i18n";
4950

5051
/**
5152
* Environment Detail Page Component
@@ -105,9 +106,9 @@ const EnvironmentDetail: React.FC = () => {
105106
if (error || !environment) {
106107
return (
107108
<ErrorComponent
108-
errorMessage={"Environment Not Found"}
109+
errorMessage={trans("enterprise.environments.detail.environmentNotFound")}
109110
returnPath="/setting/environments"
110-
returnLabel="Return to Environments List"
111+
returnLabel={trans("enterprise.environments.detail.returnToEnvironmentsList")}
111112
/>
112113
);
113114
}
@@ -138,26 +139,26 @@ const EnvironmentDetail: React.FC = () => {
138139
// Stats data for the cards
139140
const statsData = [
140141
{
141-
title: "Type",
142-
value: environment.environmentType || "Unknown",
142+
title: trans("enterprise.environments.detail.type"),
143+
value: environment.environmentType || trans("enterprise.environments.detail.unknown"),
143144
icon: <CloudServerOutlined />,
144145
color: getEnvironmentTagColor(environment.environmentType)
145146
},
146147
{
147-
title: "Status",
148-
value: environment.isLicensed ? "Licensed" : "Unlicensed",
148+
title: trans("enterprise.environments.detail.status"),
149+
value: environment.isLicensed ? trans("enterprise.environments.detail.licensed") : trans("enterprise.environments.detail.unlicensed"),
149150
icon: environment.isLicensed ? <CheckCircleOutlined /> : <CloseCircleOutlined />,
150151
color: environment.isLicensed ? "#52c41a" : "#ff4d4f"
151152
},
152153
{
153-
title: "API Key",
154-
value: environment.environmentApikey ? "Configured" : "Not Set",
154+
title: trans("enterprise.environments.detail.apiKey"),
155+
value: environment.environmentApikey ? trans("enterprise.environments.detail.configured") : trans("enterprise.environments.detail.notSet"),
155156
icon: <SafetyOutlined />,
156157
color: environment.environmentApikey ? "#1890ff" : "#faad14"
157158
},
158159
{
159-
title: "Master Env",
160-
value: environment.isMaster ? "Yes" : "No",
160+
title: trans("enterprise.environments.detail.masterEnv"),
161+
value: environment.isMaster ? trans("enterprise.environments.yes") : trans("enterprise.environments.no"),
161162
icon: <UserOutlined />,
162163
color: environment.isMaster ? "#722ed1" : "#8c8c8c"
163164
}
@@ -168,7 +169,7 @@ const EnvironmentDetail: React.FC = () => {
168169
key: 'workspaces',
169170
label: (
170171
<span>
171-
<AppstoreOutlined /> Workspaces
172+
<AppstoreOutlined /> {trans("enterprise.environments.detail.workspaces")}
172173
</span>
173174
),
174175
children: <WorkspacesTab environment={environment} />
@@ -177,7 +178,7 @@ const EnvironmentDetail: React.FC = () => {
177178
key: 'userGroups',
178179
label: (
179180
<span>
180-
<UsergroupAddOutlined /> User Groups
181+
<UsergroupAddOutlined /> {trans("enterprise.environments.detail.userGroups")}
181182
</span>
182183
),
183184
children: <UserGroupsTab environment={environment} />
@@ -192,12 +193,12 @@ const EnvironmentDetail: React.FC = () => {
192193
items={[
193194
{
194195
key: 'environments',
195-
title: 'Environments',
196+
title: trans("enterprise.environments.title"),
196197
onClick: () => history.push('/setting/environments')
197198
},
198199
{
199200
key: 'current',
200-
title: environment.environmentName || "Environment Detail"
201+
title: environment.environmentName || trans("enterprise.environments.detail.environmentDetail")
201202
}
202203
]}
203204
/>
@@ -224,7 +225,7 @@ const EnvironmentDetail: React.FC = () => {
224225

225226
{/* Basic Environment Information Card */}
226227
<Card
227-
title="Environment Overview"
228+
title={trans("enterprise.environments.detail.environmentOverview")}
228229
style={{
229230
marginBottom: "24px",
230231
borderRadius: '4px',
@@ -238,7 +239,7 @@ const EnvironmentDetail: React.FC = () => {
238239
column={{ xxl: 4, xl: 3, lg: 3, md: 2, sm: 1, xs: 1 }}
239240
size="small"
240241
>
241-
<Descriptions.Item label="Domain">
242+
<Descriptions.Item label={trans("enterprise.environments.domain")}>
242243
{environment.environmentFrontendUrl ? (
243244
<a
244245
href={environment.environmentFrontendUrl}
@@ -248,32 +249,32 @@ const EnvironmentDetail: React.FC = () => {
248249
{environment.environmentFrontendUrl} <LinkOutlined />
249250
</a>
250251
) : (
251-
"No domain set"
252+
trans("enterprise.environments.detail.noDomainSet")
252253
)}
253254
</Descriptions.Item>
254-
<Descriptions.Item label="Environment ID">
255+
<Descriptions.Item label={trans("enterprise.environments.detail.environmentId")}>
255256
<code style={{ padding: '2px 6px', background: '#f5f5f5', borderRadius: '3px' }}>
256257
{environment.environmentId}
257258
</code>
258259
</Descriptions.Item>
259-
<Descriptions.Item label="License Status">
260+
<Descriptions.Item label={trans("enterprise.environments.detail.licenseStatus")}>
260261
{(() => {
261262
switch (environment.licenseStatus) {
262263
case 'checking':
263-
return <Tag icon={<SyncOutlined spin />} color="blue" style={{ borderRadius: '4px' }}>Checking...</Tag>;
264+
return <Tag icon={<SyncOutlined spin />} color="blue" style={{ borderRadius: '4px' }}>{trans("enterprise.environments.licenseStatus.checking")}</Tag>;
264265
case 'licensed':
265-
return <Tag icon={<CheckCircleOutlined />} color="green" style={{ borderRadius: '4px' }}>Licensed</Tag>;
266+
return <Tag icon={<CheckCircleOutlined />} color="green" style={{ borderRadius: '4px' }}>{trans("enterprise.environments.licenseStatus.licensed")}</Tag>;
266267
case 'unlicensed':
267-
return <Tag icon={<CloseCircleOutlined />} color="orange" style={{ borderRadius: '4px' }}>License Needed</Tag>;
268+
return <Tag icon={<CloseCircleOutlined />} color="orange" style={{ borderRadius: '4px' }}>{trans("enterprise.environments.detail.licenseNeeded")}</Tag>;
268269
case 'error':
269-
return <Tag icon={<ExclamationCircleOutlined />} color="orange" style={{ borderRadius: '4px' }}>Setup Required</Tag>;
270+
return <Tag icon={<ExclamationCircleOutlined />} color="orange" style={{ borderRadius: '4px' }}>{trans("enterprise.environments.detail.setupRequired")}</Tag>;
270271
default:
271-
return <Tag color="default" style={{ borderRadius: '4px' }}>Unknown</Tag>;
272+
return <Tag color="default" style={{ borderRadius: '4px' }}>{trans("enterprise.environments.detail.unknown")}</Tag>;
272273
}
273274
})()}
274275
</Descriptions.Item>
275-
<Descriptions.Item label="Created">
276-
{environment.createdAt ? new Date(environment.createdAt).toLocaleDateString() : "Unknown"}
276+
<Descriptions.Item label={trans("enterprise.environments.detail.created")}>
277+
{environment.createdAt ? new Date(environment.createdAt).toLocaleDateString() : trans("enterprise.environments.detail.unknown")}
277278
</Descriptions.Item>
278279
</Descriptions>
279280
</Card>
@@ -285,7 +286,7 @@ const EnvironmentDetail: React.FC = () => {
285286
title={
286287
<span>
287288
<CrownOutlined style={{ color: '#52c41a', marginRight: '8px' }} />
288-
License Details
289+
{trans("enterprise.environments.detail.licenseDetails")}
289290
</span>
290291
}
291292
style={{
@@ -304,7 +305,7 @@ const EnvironmentDetail: React.FC = () => {
304305
styles={{ body: { padding: '16px' } }}
305306
>
306307
<Statistic
307-
title="API Calls Remaining"
308+
title={trans("enterprise.environments.detail.apiCallsRemaining")}
308309
value={environment.licenseDetails.remainingAPICalls}
309310
formatter={(value) => (
310311
<span style={{
@@ -333,7 +334,7 @@ const EnvironmentDetail: React.FC = () => {
333334
color: '#8c8c8c',
334335
marginTop: '4px'
335336
}}>
336-
{environment.licenseDetails.apiCallsUsage || 0}% used
337+
{trans("enterprise.environments.percentUsed", { percent: environment.licenseDetails.apiCallsUsage || 0 })}
337338
</div>
338339
</div>
339340
</Card>
@@ -347,7 +348,7 @@ const EnvironmentDetail: React.FC = () => {
347348
styles={{ body: { padding: '16px' } }}
348349
>
349350
<Statistic
350-
title="Total API Calls Limit"
351+
title={trans("enterprise.environments.detail.totalApiCallsLimit")}
351352
value={environment.licenseDetails.totalAPICallsLimit}
352353
formatter={(value) => value?.toLocaleString()}
353354
prefix={<ApiOutlined />}
@@ -356,7 +357,7 @@ const EnvironmentDetail: React.FC = () => {
356357
color="blue"
357358
style={{ marginTop: '12px' }}
358359
>
359-
{environment.licenseDetails.eeLicenses.length} License{environment.licenseDetails.eeLicenses.length !== 1 ? 's' : ''}
360+
{environment.licenseDetails.eeLicenses.length} {environment.licenseDetails.eeLicenses.length !== 1 ? trans("enterprise.environments.detail.licenses") : trans("enterprise.environments.detail.license")}
360361
</Tag>
361362
</Card>
362363
</Col>
@@ -369,8 +370,8 @@ const EnvironmentDetail: React.FC = () => {
369370
styles={{ body: { padding: '16px' } }}
370371
>
371372
<Statistic
372-
title="Enterprise Edition"
373-
value={environment.licenseDetails.eeActive ? "Active" : "Inactive"}
373+
title={trans("enterprise.environments.detail.enterpriseEdition")}
374+
value={environment.licenseDetails.eeActive ? trans("enterprise.environments.detail.active") : trans("enterprise.environments.detail.inactive")}
374375
formatter={(value) => (
375376
<Tag
376377
color={environment.licenseDetails?.eeActive ? "green" : "red"}
@@ -388,7 +389,7 @@ const EnvironmentDetail: React.FC = () => {
388389
<div style={{ marginTop: '24px' }}>
389390
<Typography.Title level={5} style={{ marginBottom: '16px' }}>
390391
<UserOutlined style={{ marginRight: '8px' }} />
391-
License Information
392+
{trans("enterprise.environments.detail.licenseInformation")}
392393
</Typography.Title>
393394

394395
<Row gutter={[16, 16]}>
@@ -408,13 +409,13 @@ const EnvironmentDetail: React.FC = () => {
408409
</strong>
409410
</div>
410411
<div style={{ fontSize: '12px', color: '#8c8c8c', marginBottom: '8px' }}>
411-
ID: {license.customerId}
412+
{trans("enterprise.environments.id")}: {license.customerId}
412413
</div>
413414
<div style={{ fontSize: '12px', color: '#8c8c8c', marginBottom: '8px' }}>
414415
UUID: <span style={{ fontFamily: 'monospace' }}>{license.uuid.substring(0, 8)}...</span>
415416
</div>
416417
<Tag color="blue">
417-
{license.apiCallsLimit.toLocaleString()} calls
418+
{license.apiCallsLimit.toLocaleString()} {trans("enterprise.environments.detail.calls")}
418419
</Tag>
419420
</Card>
420421
</Col>

client/packages/lowcoder/src/pages/setting/environments/EnvironmentsList.tsx

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import StatsCard from "./components/StatsCard";
1313
import { buildEnvironmentId } from "@lowcoder-ee/constants/routesURL";
1414
import { createEnvironment } from "./services/environments.service";
1515
import { getEnvironmentTagColor } from "./utils/environmentUtils";
16+
import { trans } from "i18n";
1617
import styled from "styled-components";
1718

1819
const EnvironmentsWrapper = styled.div`
@@ -157,9 +158,9 @@ const EnvironmentsList: React.FC = () => {
157158
return (
158159
<EnvironmentsWrapper>
159160
<HeaderWrapper>
160-
<Title>Environments</Title>
161+
<Title>{trans("enterprise.environments.title")}</Title>
161162
<Search
162-
placeholder="Search"
163+
placeholder={trans("enterprise.environments.search")}
163164
value={searchText}
164165
onChange={(e) => setSearchText(e.target.value)}
165166
style={{ width: "192px", height: "32px", margin: "0 12px 0 0" }}
@@ -169,14 +170,14 @@ const EnvironmentsList: React.FC = () => {
169170
icon={<SyncOutlined spin={isLoading} />}
170171
onClick={handleRefresh}
171172
>
172-
Refresh
173+
{trans("enterprise.environments.refresh")}
173174
</RefreshBtn>
174175
<AddBtn
175176
buttonType="primary"
176177
icon={<AddIcon />}
177178
onClick={() => setIsCreateModalVisible(true)}
178179
>
179-
Add Environment
180+
{trans("enterprise.environments.addEnvironment")}
180181
</AddBtn>
181182
</HeaderWrapper>
182183

@@ -187,7 +188,7 @@ const EnvironmentsList: React.FC = () => {
187188
{environmentStats.map(([type, count]) => (
188189
<Col xs={24} sm={12} md={8} lg={6} key={type}>
189190
<StatsCard
190-
title={`${type} Environments`}
191+
title={trans("enterprise.environments.environmentsTypeLabel", { type })}
191192
value={count}
192193
icon={getEnvironmentIcon(type)}
193194
color={getEnvironmentTagColor(type)}
@@ -199,7 +200,7 @@ const EnvironmentsList: React.FC = () => {
199200

200201
{error && (
201202
<Alert
202-
message="Error loading environments"
203+
message={trans("enterprise.environments.errorLoadingEnvironments")}
203204
description={error}
204205
type="error"
205206
showIcon
@@ -209,14 +210,14 @@ const EnvironmentsList: React.FC = () => {
209210

210211
{!isLoading && !error && filteredEnvironments.length === 0 && searchText && (
211212
<Empty
212-
description={`No environments found matching "${searchText}"`}
213+
description={trans("enterprise.environments.noEnvironmentsFoundMatching", { searchText })}
213214
style={{ margin: "60px 0" }}
214215
/>
215216
)}
216217

217218
{!isLoading && !error && environments.length === 0 && !searchText && (
218219
<Empty
219-
description="No environments found. Create your first environment to get started."
220+
description={trans("enterprise.environments.noEnvironmentsFound")}
220221
style={{ margin: "60px 0" }}
221222
/>
222223
)}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy