Skip to content

Commit b7ee9c6

Browse files
committed
Add trasns for Environments List and Table
1 parent 5d1bc87 commit b7ee9c6

File tree

3 files changed

+60
-26
lines changed

3 files changed

+60
-26
lines changed

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

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2551,8 +2551,40 @@ export const en = {
25512551
"EnvironmentsFeature2": "Deployment of applications, data sources, and configurations between environments, directly from the UI.",
25522552
"EnvironmentsFeature3": "Environment-specific access controls and visibility rules.",
25532553
"EnvironmentsFeature5": "Clear separation of concerns for staging, sandbox, and production operations.",
2554-
},
25552554

2555+
// Environments page translations
2556+
"environments": {
2557+
"title": "Environments",
2558+
"search": "Search",
2559+
"refresh": "Refresh",
2560+
"addEnvironment": "Add Environment",
2561+
"errorLoadingEnvironments": "Error loading environments",
2562+
"noEnvironmentsFoundMatching": "No environments found matching \"{searchText}\"",
2563+
"noEnvironmentsFound": "No environments found. Create your first environment to get started.",
2564+
"environmentsTypeLabel": "{type} Environments",
2565+
"showingAllEnvironments": "Showing all {count} environments",
2566+
"unnamedEnvironment": "Unnamed Environment",
2567+
"masterEnvironment": "Master Environment",
2568+
"viewAuditLogs": "View Audit Logs",
2569+
"id": "ID",
2570+
"domain": "Domain",
2571+
"master": "Master",
2572+
"license": "License",
2573+
"apiCalls": "API Calls",
2574+
"yes": "Yes",
2575+
"no": "No",
2576+
"copyId": "Copy ID",
2577+
"copied": "Copied!",
2578+
"percentUsed": "{percent}% used",
2579+
"licenseStatus": {
2580+
"checking": "Checking...",
2581+
"licensed": "Licensed",
2582+
"unlicensed": "License Required",
2583+
"error": "Setup Required",
2584+
"unknown": "Unknown"
2585+
}
2586+
}
2587+
},
25562588
"subscription": {
25572589
"details": "Subscription Details",
25582590
"productDetails": "Product Details",

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
)}

client/packages/lowcoder/src/pages/setting/environments/components/EnvironmentsTable.tsx

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { EditOutlined, AuditOutlined, LinkOutlined, EnvironmentOutlined, StarFil
44
import { Environment } from '../types/environment.types';
55
import { getEnvironmentTagColor, formatEnvironmentType } from '../utils/environmentUtils';
66
import { getAPICallsStatusColor } from '../services/license.service';
7+
import { trans } from 'i18n';
78

89
const { Text, Title } = Typography;
910

@@ -56,35 +57,35 @@ const EnvironmentsTable: React.FC<EnvironmentsTableProps> = ({
5657
return {
5758
icon: <SyncOutlined spin />,
5859
color: '#40a9ff',
59-
text: 'Checking...',
60+
text: trans("enterprise.environments.licenseStatus.checking"),
6061
status: 'processing' as const
6162
};
6263
case 'licensed':
6364
return {
6465
icon: <CheckCircleOutlined />,
6566
color: '#73d13d',
66-
text: 'Licensed',
67+
text: trans("enterprise.environments.licenseStatus.licensed"),
6768
status: 'success' as const
6869
};
6970
case 'unlicensed':
7071
return {
7172
icon: <CloseCircleOutlined />,
7273
color: '#ff7875',
73-
text: 'License Required',
74+
text: trans("enterprise.environments.licenseStatus.unlicensed"),
7475
status: 'warning' as const
7576
};
7677
case 'error':
7778
return {
7879
icon: <ExclamationCircleOutlined />,
7980
color: '#ffc53d',
80-
text: 'Setup Required',
81+
text: trans("enterprise.environments.licenseStatus.error"),
8182
status: 'warning' as const
8283
};
8384
default:
8485
return {
8586
icon: <ExclamationCircleOutlined />,
8687
color: '#d9d9d9',
87-
text: 'Unknown',
88+
text: trans("enterprise.environments.licenseStatus.unknown"),
8889
status: 'default' as const
8990
};
9091
}
@@ -163,9 +164,9 @@ const EnvironmentsTable: React.FC<EnvironmentsTableProps> = ({
163164
/>
164165
<div>
165166
<Title level={5} style={{ margin: 0, marginBottom: '4px', fontSize: '14px' }}>
166-
{env.environmentName || 'Unnamed Environment'}
167+
{env.environmentName || trans("enterprise.environments.unnamedEnvironment")}
167168
{env.isMaster && (
168-
<Tooltip title="Master Environment">
169+
<Tooltip title={trans("enterprise.environments.masterEnvironment")}>
169170
<StarFilled style={{ color: '#faad14', marginLeft: '6px', fontSize: '12px' }} />
170171
</Tooltip>
171172
)}
@@ -192,7 +193,7 @@ const EnvironmentsTable: React.FC<EnvironmentsTableProps> = ({
192193
{/* Only show audit button for licensed environments */}
193194
{isAccessible && (
194195
<div>
195-
<Tooltip title="View Audit Logs" placement="top">
196+
<Tooltip title={trans("enterprise.environments.viewAuditLogs")} placement="top">
196197
<Button
197198
type="text"
198199
icon={<AuditOutlined />}
@@ -214,9 +215,9 @@ const EnvironmentsTable: React.FC<EnvironmentsTableProps> = ({
214215
<div style={{ padding: '8px 0', borderTop: '1px solid #f5f5f5' }}>
215216
<div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>
216217
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
217-
<Text type="secondary" style={{ fontSize: '12px' }}>ID:</Text>
218+
<Text type="secondary" style={{ fontSize: '12px' }}>{trans("enterprise.environments.id")}:</Text>
218219
{isAccessible ? (
219-
<Text style={{ fontSize: '12px', fontFamily: 'monospace' }} copyable={{ tooltips: ['Copy ID', 'Copied!'] }}>
220+
<Text style={{ fontSize: '12px', fontFamily: 'monospace' }} copyable={{ tooltips: [trans("enterprise.environments.copyId"), trans("enterprise.environments.copied")] }}>
220221
{env.environmentId}
221222
</Text>
222223
) : (
@@ -227,7 +228,7 @@ const EnvironmentsTable: React.FC<EnvironmentsTableProps> = ({
227228
</div>
228229

229230
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
230-
<Text type="secondary" style={{ fontSize: '12px' }}>Domain:</Text>
231+
<Text type="secondary" style={{ fontSize: '12px' }}>{trans("enterprise.environments.domain")}:</Text>
231232
{env.environmentFrontendUrl ? (
232233
isAccessible ? (
233234
<a
@@ -251,14 +252,14 @@ const EnvironmentsTable: React.FC<EnvironmentsTableProps> = ({
251252
</div>
252253

253254
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
254-
<Text type="secondary" style={{ fontSize: '12px' }}>Master:</Text>
255+
<Text type="secondary" style={{ fontSize: '12px' }}>{trans("enterprise.environments.master")}:</Text>
255256
<Text style={{ fontSize: '12px' }}>
256-
{env.isMaster ? 'Yes' : 'No'}
257+
{env.isMaster ? trans("enterprise.environments.yes") : trans("enterprise.environments.no")}
257258
</Text>
258259
</div>
259260

260261
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
261-
<Text type="secondary" style={{ fontSize: '12px' }}>License:</Text>
262+
<Text type="secondary" style={{ fontSize: '12px' }}>{trans("enterprise.environments.license")}:</Text>
262263
<div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>
263264
<span style={{ color: licenseDisplay.color, fontSize: '12px' }}>
264265
{licenseDisplay.icon}
@@ -275,7 +276,7 @@ const EnvironmentsTable: React.FC<EnvironmentsTableProps> = ({
275276
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '6px' }}>
276277
<Text type="secondary" style={{ fontSize: '11px' }}>
277278
<ApiOutlined style={{ marginRight: '4px' }} />
278-
API Calls
279+
{trans("enterprise.environments.apiCalls")}
279280
</Text>
280281

281282
</div>
@@ -295,7 +296,7 @@ const EnvironmentsTable: React.FC<EnvironmentsTableProps> = ({
295296
fontSize: '10px',
296297
color: '#8c8c8c'
297298
}}>
298-
<span>{env.licenseDetails.apiCallsUsage || 0}% used</span>
299+
<span>{trans("enterprise.environments.percentUsed", { percent: env.licenseDetails.apiCallsUsage || 0 })}</span>
299300
</div>
300301
</div>
301302
)}
@@ -310,7 +311,7 @@ const EnvironmentsTable: React.FC<EnvironmentsTableProps> = ({
310311
{environments.length > 10 && (
311312
<div style={{ textAlign: 'center', margin: '16px 0' }}>
312313
<Text type="secondary" style={{ fontSize: '13px' }}>
313-
Showing all {environments.length} environments
314+
{trans("enterprise.environments.showingAllEnvironments", { count: environments.length })}
314315
</Text>
315316
</div>
316317
)}

0 commit comments

Comments
 (0)