Skip to content

Commit d28fd2b

Browse files
committed
✅ Refactor website localization structure
1 parent 488eeb7 commit d28fd2b

99 files changed

Lines changed: 2862 additions & 1349 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

package-lock.json

Lines changed: 64 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
"clsx": "^2.1.1",
1818
"i18next": "^24.2.2",
1919
"i18next-browser-languagedetector": "^8.0.4",
20+
"i18next-http-backend": "^3.0.2",
21+
"i18next-resources-to-backend": "^1.2.1",
2022
"motion": "^12.5.0",
2123
"primeicons": "^7.0.0",
2224
"primereact": "^10.9.3",

src/app/admin/MenuItem.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,22 +34,22 @@ export interface MenuItem {
3434
export const getStaffMenuItems = (t: TFunction): MenuItem[] => [
3535
{
3636
id: "home",
37-
label: t("navigation.staff.home"),
37+
label: t("navigation:dock:home"),
3838
icon: "pi pi-home",
3939
color: "#F2C94C", // Jaune miel
4040
Component: HomePage,
4141
},
4242
{
4343
id: "catalogs",
44-
label: t("navigation.staff.catalogs"),
44+
label: t("navigation:dock:catalogs"),
4545
icon: "pi pi-server",
4646
color: "#8D6E33", // Ambre foncé
4747
Component: CatalogsPage,
4848
showInMenu: (user: User) => !user.blocked,
4949
},
5050
{
5151
id: "scopes",
52-
label: t("navigation.staff.scopes"),
52+
label: t("navigation:dock:scopes"),
5353
icon: "pi pi-building",
5454
color: "#4F3A1B", // Brun foncé
5555
Component: ScopesPage,
@@ -58,7 +58,7 @@ export const getStaffMenuItems = (t: TFunction): MenuItem[] => [
5858
},
5959
{
6060
id: "roles",
61-
label: t("navigation.staff.roles"),
61+
label: t("navigation:dock:roles"),
6262
icon: "pi pi-shield",
6363
color: "#E0A800", // Ambre doré
6464
Component: RolesPage,
@@ -67,23 +67,23 @@ export const getStaffMenuItems = (t: TFunction): MenuItem[] => [
6767
},
6868
{
6969
id: "groups",
70-
label: t("navigation.staff.groups"),
70+
label: t("navigation:dock:groups"),
7171
icon: "pi pi-users", // Icône de groupe (plusieurs personnes)
7272
color: "#7D6608", // Brun miel
7373
Component: GroupsPage,
7474
showInMenu: (user: User) => !user.blocked,
7575
},
7676
{
7777
id: "users",
78-
label: t("navigation.staff.users"),
78+
label: t("navigation:dock:users"),
7979
icon: "pi pi-user", // Changé pour une icône d'utilisateur individuel
8080
color: "#BF8F30", // Ambre clair
8181
Component: UsersPage,
8282
showInMenu: (user: User) => !user.blocked,
8383
},
8484
{
8585
id: "competitions",
86-
label: t("navigation.staff.competitions"),
86+
label: t("navigation:dock:competitions"),
8787
icon: "pi pi-graduation-cap",
8888
color: "#5A3E28", // Brun foncé
8989
Component: CompetitionsPage,

src/app/admin/components/AppDock/AppDock.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ interface AppDockProps {
1919

2020
export default function AppDock({ setPage }: AppDockProps) {
2121
const { user } = useAuth();
22-
const { i18n, t } = useTranslation();
22+
const { i18n, t } = useTranslation(["common", "navigation"]);
2323
const { logout } = useAuth();
2424
const [displayTerminal, setDisplayTerminal] = useState(false);
2525
const [windowWidth, setWindowWidth] = useState(window.innerWidth);
@@ -57,7 +57,7 @@ export default function AppDock({ setPage }: AppDockProps) {
5757

5858
const dockItems = [
5959
{
60-
label: t("navigation.staff.terminal"),
60+
label: t("navigation:dock:terminal"),
6161
icon: () => createIconContainer("pi pi-angle-right", "#262626"),
6262
command: () => {
6363
setDisplayTerminal(true);

src/app/admin/pages/AdminLayout.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import AppDock from "@admin/components/AppDock/AppDock";
77
import { useActivePage } from "@contexts/ActivePageContext";
88

99
export default function Admin() {
10-
const { t } = useTranslation();
10+
const { t } = useTranslation(["common", "navigation"]);
1111
const { activePage, setActivePage } = useActivePage();
1212
const [isSticky, setIsSticky] = useState(false);
1313

@@ -60,7 +60,7 @@ export default function Admin() {
6060
<div className="p-4 min-h-screen mb-28">
6161
<div className="mb-6">
6262
<h1 className="text-3xl font-bold text-white mb-2">
63-
{t("navigation.staff." + activePage)}
63+
{t("navigation:staff." + activePage)}
6464
</h1>
6565
<div className="w-20 h-1 bg-amber-500 rounded"></div>
6666
</div>

src/app/admin/pages/catalogs/CatalogsPage.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export default function CatalogsPage() {
2929
const data = await ServiceManager.catalogs.fetchCatalogs();
3030
setCatalogs(data);
3131
} catch (err) {
32-
setError(t("staff.catalogs.errorFetchingCatalogs"));
32+
setError(t("admin:catalogs:errorFetchingCatalogs"));
3333
console.error(err);
3434
} finally {
3535
setLoading(false);
@@ -52,7 +52,7 @@ export default function CatalogsPage() {
5252
{loading && (
5353
<div className="flex flex-col items-center justify-center p-6">
5454
<ProgressSpinner style={{ width: "50px", height: "50px" }} />
55-
<p className="mt-4 text-gray-600">{t("staff.catalogs.loading")}</p>
55+
<p className="mt-4 text-gray-600">{t("common:states.loading")}</p>
5656
</div>
5757
)}
5858

@@ -69,7 +69,7 @@ export default function CatalogsPage() {
6969
<div className="flex flex-col items-center justify-center p-12 rounded-lg shadow">
7070
<i className="pi pi-inbox text-5xl text-gray-400 mb-4"></i>
7171
<p className="text-gray-600 text-xl">
72-
{t("staff.catalogs.noCatalogs")}
72+
{t("admion:catalogs:noCatalogs")}
7373
</p>
7474
</div>
7575
)}
@@ -78,7 +78,7 @@ export default function CatalogsPage() {
7878
<>
7979
<div className="flex items-center justify-between mb-10">
8080
<p className="font-semibold text-white-800">
81-
{t("staffTabs.catalogs.description")}
81+
{t("admin:catalogs:description")}
8282
</p>
8383
</div>
8484

src/app/admin/pages/catalogs/components/CatalogDetails.tsx

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export const CatalogDetails = ({
3737
);
3838
setThemes(data);
3939
} catch (err) {
40-
setError(t("staff.catalogs.errorFetchingCatalogs"));
40+
setError(t("admin:catalogs:errorFetchingCatalogs"));
4141
console.error(err);
4242
} finally {
4343
setLoading(false);
@@ -72,7 +72,7 @@ export const CatalogDetails = ({
7272
icon="pi pi-eye"
7373
className="p-button-rounded p-button-outlined p-button-sm"
7474
onClick={() => setSelectedPuzzle(puzzle)}
75-
tooltip={t("staff.catalogs.viewPuzzle")}
75+
tooltip={t("admin:catalogs:viewPuzzle")}
7676
/>
7777
);
7878
};
@@ -99,7 +99,7 @@ export const CatalogDetails = ({
9999
</div>
100100
<Button
101101
icon="pi pi-arrow-left"
102-
label={t("staff.catalogs.back")}
102+
label={t("admin:catalogs:back")}
103103
className="p-button-primary"
104104
onClick={onBack}
105105
/>
@@ -110,13 +110,13 @@ export const CatalogDetails = ({
110110
<Divider />
111111

112112
<h3 className="text-xl font-semibold text-gray-800 mb-4">
113-
{t("staff.catalogs.themes")}
113+
{t("admin:catalogs:themes")}
114114
</h3>
115115

116116
{loading && (
117117
<div className="flex flex-col items-center justify-center p-6">
118118
<ProgressSpinner style={{ width: "50px", height: "50px" }} />
119-
<p className="mt-4 text-gray-600">{t("staff.catalogs.loading")}</p>
119+
<p className="mt-4 text-gray-600">{t("admin:catalogs:loading")}</p>
120120
</div>
121121
)}
122122

@@ -132,7 +132,7 @@ export const CatalogDetails = ({
132132
{!loading && !error && (!themes || themes.length === 0) && (
133133
<div className="flex flex-col items-center justify-center p-6 bg-gray-50 rounded">
134134
<i className="pi pi-folder-open text-5xl text-gray-400 mb-4"></i>
135-
<p className="text-gray-600">{t("staff.catalogs.noThemes")}</p>
135+
<p className="text-gray-600">{t("admin:catalogs:noThemes")}</p>
136136
</div>
137137
)}
138138

@@ -146,7 +146,7 @@ export const CatalogDetails = ({
146146
<span>{theme.name}</span>
147147
<Tag
148148
value={`${theme.enigmes_count} ${t(
149-
"staff.catalogs.puzzlesCount"
149+
"admin:catalogs:puzzlesCount"
150150
)}`}
151151
className="ml-2"
152152
/>
@@ -159,32 +159,32 @@ export const CatalogDetails = ({
159159
rows={5}
160160
rowsPerPageOptions={[5, 10, 25]}
161161
tableStyle={{ minWidth: "50rem" }}
162-
emptyMessage={t("staff.catalogs.notFound")}
162+
emptyMessage={t("admin:catalogs:notFound")}
163163
>
164164
<Column
165165
field="name"
166-
header={t("common.fields.name")}
166+
header={t("common:fields.name")}
167167
sortable
168168
/>
169169
<Column
170170
field="author"
171-
header={t("staff.catalogs.author")}
171+
header={t("admin:catalogs:author")}
172172
sortable
173173
/>
174174
<Column
175175
field="difficulty"
176-
header={t("staff.catalogs.difficulty")}
176+
header={t("admin:catalogs:difficulty")}
177177
body={difficultyTemplate}
178178
sortable
179179
/>
180180
<Column
181181
field="language"
182-
header={t("staff.catalogs.language")}
182+
header={t("admin:catalogs:language")}
183183
sortable
184184
/>
185185
<Column
186186
field="createdAt"
187-
header={t("staff.catalogs.createdAt")}
187+
header={t("admin:catalogs:createdAt")}
188188
body={(rowData) => dateTemplate(rowData, "createdAt")}
189189
sortable
190190
/>

src/app/admin/pages/catalogs/components/CatalogsList.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export const CatalogsList = ({
4242

4343
<div className="mt-auto">
4444
<Button
45-
label={t("staffTabs.catalogs.details")}
45+
label={t("admin:catalogs:details")}
4646
icon="pi pi-arrow-right"
4747
iconPos="right"
4848
className="p-button-rounded p-button-outlined w-full"

0 commit comments

Comments
 (0)