progress_activity
- Waiting for authorization...
+ {t("deviceCodeWaiting")}
)}
>
@@ -646,33 +646,27 @@ export default function OAuthModal({
warning
- Remote access + Google OAuth: The default credentials only accept
- redirects to localhost. After authorizing, your browser will try to
- open localhost — copy that full URL and paste it below. For fully
- remote use without this manual step,{" "}
-
- configure your own OAuth credentials
-
- .
+ ",
+ ''
+ )
+ .replace("", ""),
+ }}
+ />
)}
{/* Generic remote info for other providers */}
{!isTrueLocalhost && !GOOGLE_OAUTH_PROVIDERS.has(provider) && (
info
- Remote access: Since you're accessing OmniRoute remotely,
- after authorizing you'll see an error page (localhost not found). That's
- expected — just copy the full URL from your browser's address bar and paste
- it below.
+ {t("remoteAccessInfo")}
- Step 2: Paste the callback URL or auth code here
-
+
{t("step2PasteCallback")}
- After authorization, paste the full callback URL. For Claude Code and Cline, you
- can also paste the Authentication Code directly, for example{" "}
- code#state.
+ ", "")
+ .replace("", ""),
+ }}
+ />
>
@@ -730,12 +726,12 @@ export default function OAuthModal({
check_circle
-
Connected Successfully!
+
{t("success")}
- Your {providerInfo.name} account has been connected.
+ {t("successMessage", { providerName: providerInfo.name })}
)}
@@ -746,14 +742,14 @@ export default function OAuthModal({
error
-
Connection Failed
+
{t("error")}
{error}
diff --git a/src/shared/components/PricingModal.tsx b/src/shared/components/PricingModal.tsx
index a44c98f8cd..d752c58e15 100644
--- a/src/shared/components/PricingModal.tsx
+++ b/src/shared/components/PricingModal.tsx
@@ -1,9 +1,11 @@
"use client";
import { useState, useEffect } from "react";
+import { useTranslations } from "next-intl";
import { getDefaultPricing, formatCost } from "@/shared/constants/pricing";
export default function PricingModal({ isOpen, onClose, onSave }) {
+ const t = useTranslations("pricingModal");
const [pricingData, setPricingData] = useState({});
const [loading, setLoading] = useState(true);
const [saving, setSaving] = useState(false);
@@ -62,18 +64,18 @@ export default function PricingModal({ isOpen, onClose, onSave }) {
onClose();
} else {
const error = await response.json();
- alert(`Failed to save pricing: ${error.error}`);
+ alert(`${t("errorSaveFailed")}: ${error.error}`);
}
} catch (error) {
console.error("Failed to save pricing:", error);
- alert("Failed to save pricing");
+ alert(t("errorSaveFailed"));
} finally {
setSaving(false);
}
};
const handleReset = async () => {
- if (!confirm("Reset all pricing to defaults? This cannot be undone.")) return;
+ if (!confirm(t("resetConfirm"))) return;
try {
const response = await fetch("/api/pricing", { method: "DELETE" });
@@ -83,7 +85,7 @@ export default function PricingModal({ isOpen, onClose, onSave }) {
}
} catch (error) {
console.error("Failed to reset pricing:", error);
- alert("Failed to reset pricing");
+ alert(t("errorResetFailed"));
}
};
@@ -98,7 +100,7 @@ export default function PricingModal({ isOpen, onClose, onSave }) {