@@ -222,13 +236,14 @@ function VersionComponent() {
}
const instanceSchema = z.object({
- name: z.string().min(1, "Instance name is required"),
- notes: z.string().max(100, "Notes must be at most 100 characters").optional(),
+ name: z.string().min(1, translate("create.instanceNameRequired")),
+ notes: z.string().max(100, translate("create.notesMax")).optional(),
modLoader: z.enum(["fabric", "forge"]).optional(),
modLoaderVersion: z.string().optional(),
});
function InstanceComponent() {
+ const { t } = useI18n();
const {
control,
register,
@@ -248,32 +263,32 @@ function InstanceComponent() {
const [isLoadingFabric, setIsLoadingFabric] = useState(false);
const loadForgeVersions = useCallback(async () => {
if (forgeVersions) return;
- if (!versionId) return toast.error("Version ID is not set");
+ if (!versionId) return toast.error(t("create.versionIdMissing"));
setIsLoadingForge(true);
try {
const versions = await getForgeVersionsForGame(versionId);
setForgeVersions(versions);
} catch (e) {
console.error("Failed to load Forge versions:", e);
- toast.error(`Failed to load Forge versions: ${String(e)}`);
+ toast.error(t("create.loadForgeFailed", { error: String(e) }));
} finally {
setIsLoadingForge(false);
}
- }, [versionId, forgeVersions]);
+ }, [versionId, forgeVersions, t]);
const loadFabricVersions = useCallback(async () => {
if (fabricVersions) return;
- if (!versionId) return toast.error("Version ID is not set");
+ if (!versionId) return toast.error(t("create.versionIdMissing"));
setIsLoadingFabric(true);
try {
const versions = await getFabricLoadersForVersion(versionId);
setFabricVersions(versions);
} catch (e) {
console.error("Failed to load Fabric versions:", e);
- toast.error(`Failed to load Fabric versions: ${String(e)}`);
+ toast.error(t("create.loadFabricFailed", { error: String(e) }));
} finally {
setIsLoadingFabric(false);
}
- }, [versionId, fabricVersions]);
+ }, [versionId, fabricVersions, t]);
const modLoaderField = register("modLoader");
const modLoaderVersionField = register("modLoaderVersion");
@@ -285,14 +300,14 @@ function InstanceComponent() {
@@ -387,7 +402,9 @@ function InstanceComponent() {
}}
>
Forge {version.version} for Minecraft{" "}
- {version.minecraftVersion}
+ {t("create.forMinecraft", {
+ version: version.minecraftVersion,
+ })}
{idx !== forgeVersions.length - 1 &&
}
@@ -452,7 +469,7 @@ function InstanceComponent() {
{isLoadingFabric ? (
-
Loading Fabric versions...
+
{t("create.loadingFabric")}
) : (
@@ -479,7 +496,9 @@ function InstanceComponent() {
}}
>
Fabric {version.loader.version} for Minecraft{" "}
- {version.intermediary.version}
+ {t("create.forMinecraft", {
+ version: version.intermediary.version,
+ })}
{idx !== fabricVersions.length - 1 && }
@@ -500,19 +519,20 @@ export const useVersionId = () => useContext(VersionIdContext);
const { useStepper, Stepper } = defineStepper(
{
id: "version",
- title: "Version",
+ title: translate("create.step.version"),
Component: VersionComponent,
schema: versionSchema,
},
{
id: "instance",
- title: "Instance",
+ title: translate("create.step.instance"),
Component: InstanceComponent,
schema: instanceSchema,
},
);
export function CreateInstancePage() {
+ const { t } = useI18n();
const stepper = useStepper();
const schema = stepper.state.current.data.schema;
const form = useForm>({
@@ -551,7 +571,7 @@ export function CreateInstancePage() {
setInstanceMeta(data as z.infer);
}
- if (!versionId) return toast.error("Please select a version first");
+ if (!versionId) return toast.error(t("create.selectVersionFirst"));
setIsCreating(true);
@@ -567,7 +587,7 @@ export function CreateInstancePage() {
switch (instanceMeta.modLoader) {
case "fabric":
if (!instanceMeta.modLoaderVersion) {
- toast.error("Please select a Fabric loader version");
+ toast.error(t("create.selectFabricFirst"));
return;
}
await installFabric(
@@ -578,7 +598,7 @@ export function CreateInstancePage() {
break;
case "forge":
if (!instanceMeta.modLoaderVersion) {
- toast.error("Please select a Forge loader version");
+ toast.error(t("create.selectForgeFirst"));
return;
}
await installForge(
@@ -588,19 +608,19 @@ export function CreateInstancePage() {
);
break;
default:
- toast.error("Unsupported mod loader");
+ toast.error(t("create.unsupportedModLoader"));
break;
}
navigate("/instances");
} catch (error) {
console.error(error);
- toast.error("Failed to create instance");
+ toast.error(t("create.failed"));
} finally {
setIsCreating(false);
}
},
- [stepper, instanceStore.create, versionId, navigate],
+ [stepper, instanceStore.create, versionId, navigate, t],
);
return (
@@ -663,7 +683,7 @@ export function CreateInstancePage() {
disabled={isCreating}
{...domProps}
>
- Previous
+ {t("common.previous")}
)}
/>
@@ -672,14 +692,14 @@ export function CreateInstancePage() {
{isCreating ? (
<>
- Creating
+ {t("common.creating")}
>
) : (
- "Create"
+ t("common.create")
)}
) : (
-
+
)}
@@ -688,6 +708,7 @@ export function CreateInstancePage() {
}
function PageWrapper() {
+ const { t } = useI18n();
const navigate = useNavigate();
const [showCancelDialog, setShowCancelDialog] = useState(false);
@@ -710,10 +731,10 @@ function PageWrapper() {
>
-
Create Instance
+
{t("create.title")}
- Create a new Minecraft instance.
+ {t("create.subtitle")}