İçindekiler
Better Auth, TypeScript uygulamaları için hızla tercih edilen kimlik doğrulama framework'ü haline geliyor. Ancak kullanıcılarınız Türkçe, Almanca veya Japonca konuştuğunda "Invalid email or password" göstermek yeterli değil.
Bu rehber, Better Auth'u lokalize etmek için ihtiyacınız olan her şeyi kapsıyor — 48 hata kodunun çevirisinden cookie tabanlı dil algılamaya kadar, yeni dil eklerken sıfır deploy gereksinimi ile.
Better i18n modern uygulamalar için lokalizasyon altyapısıdır. Ücretsiz başlayın — hesabınızı oluşturun.
Kimlik Doğrulama Lokalizasyonunun Üç Katmanı
Better Auth'un çeviri gerektiren üç farklı yüzeyi var:
| Katman | Ne Çevrilir | Nerede Gerçekleşir |
|---|---|---|
| Sunucu hataları | INVALID_EMAIL_OR_PASSWORD → "Geçersiz e-posta veya şifre" | Sunucu tarafı plugin |
| UI bileşenleri | "Sign in" → "Giriş Yap" | İstemci tarafı AuthLocalization |
| E-posta şablonları | Doğrulama e-postaları, şifre sıfırlama | E-posta gönderim callback'leri |
Çoğu rehber yalnızca bir katmanı kapsar. Bu rehber üçünü de kapsıyor — çünkü kullanıcılarınız üçüyle de etkileşime giriyor.
Tüm 48 Better Auth Hata Kodu (Çevirileriyle)
Kuruluma geçmeden önce, Better Auth'un döndürebileceği tüm hata kodlarının tam referansı. Bunlar çevirmeniz gereken key'ler:
Kimlik Doğrulama (8 key)
| Hata Kodu | İngilizce | Türkçe |
|---|---|---|
INVALID_EMAIL_OR_PASSWORD | Invalid email or password | Geçersiz e-posta veya şifre |
INVALID_PASSWORD | Invalid password | Geçersiz şifre |
INVALID_EMAIL | Invalid email | Geçersiz e-posta |
INVALID_TOKEN | Invalid token | Geçersiz token |
TOKEN_EXPIRED | Token expired | Token süresi doldu |
EMAIL_NOT_VERIFIED | Email not verified | E-posta doğrulanmadı |
EMAIL_ALREADY_VERIFIED | Email is already verified | E-posta zaten doğrulanmış |
EMAIL_MISMATCH | Email mismatch | E-posta uyuşmuyor |
Kullanıcı Yönetimi (8 key)
| Hata Kodu | İngilizce | Türkçe |
|---|---|---|
USER_NOT_FOUND | User not found | Kullanıcı bulunamadı |
USER_ALREADY_EXISTS | User already exists. | Bu kullanıcı zaten mevcut. |
USER_ALREADY_EXISTS_USE_ANOTHER_EMAIL | User already exists. Use another email. | Bu e-posta adresi zaten kayıtlı. Başka bir e-posta deneyin. |
INVALID_USER | Invalid user | Geçersiz kullanıcı |
USER_EMAIL_NOT_FOUND | User email not found | Kullanıcı e-postası bulunamadı |
USER_ALREADY_HAS_PASSWORD | User already has a password. | Kullanıcının zaten bir şifresi var. |
FAILED_TO_CREATE_USER | Failed to create user | Kullanıcı oluşturulamadı |
FAILED_TO_UPDATE_USER | Failed to update user | Kullanıcı güncellenemedi |
Oturum ve Şifre (8 key)
| Hata Kodu | İngilizce | Türkçe |
|---|---|---|
SESSION_EXPIRED | Session expired. | Oturum süresi doldu. Yeniden giriş yapın. |
SESSION_NOT_FRESH | Session is not fresh | Oturum güncel değil |
FAILED_TO_CREATE_SESSION | Failed to create session | Oturum oluşturulamadı |
FAILED_TO_GET_SESSION | Failed to get session | Oturum bilgisi alınamadı |
PASSWORD_TOO_SHORT | Password too short | Şifre çok kısa |
PASSWORD_TOO_LONG | Password too long | Şifre çok uzun |
PASSWORD_ALREADY_SET | User already has a password set | Kullanıcının zaten bir şifresi var |
CREDENTIAL_ACCOUNT_NOT_FOUND | Credential account not found | Kimlik bilgisi hesabı bulunamadı |
Yaklaşım 1: Statik Çeviriler (Yerleşik Plugin)
Better Auth, statik çeviri haritası kabul eden resmi bir @better-auth/i18n plugin'i sunar:
import { betterAuth } from "better-auth";
import { i18n } from "@better-auth/i18n";
export const auth = betterAuth({
plugins: [
i18n({
defaultLocale: "en",
translations: {
tr: {
INVALID_EMAIL_OR_PASSWORD: "Geçersiz e-posta veya şifre",
USER_NOT_FOUND: "Kullanıcı bulunamadı",
// ... 46 key daha
},
},
detection: ["cookie", "header"],
localeCookie: "locale",
}),
],
});
Artıları: Sıfır bağımlılık, kutudan çıktığı gibi çalışır.
Eksileri:
- Her çeviri değişikliği kod değişikliği + deploy gerektirir
- Çeviriler sunucu kodunuza gömülüdür — dil sayısıyla doğru orantılı büyür
- Çeviri yönetim arayüzü yok — geliştiriciler JSON düzenler
- AI destekli çeviri yok — her yeni dil için manuel çalışma
2-3 dil için sorunsuz çalışır. Ancak 10+ dile ölçeklendirirken veya geliştirici olmayan kişilerin çevirileri yönetmesini istediğinizde farklı bir yaklaşım gerekir.
Yaklaşım 2: CDN Tabanlı Çeviriler — Better i18n ile (Önerilen)
Better i18n temelden farklı bir yaklaşım benimser: çeviriler CDN'de yaşar, dashboard'dan yönetilir ve deploy gerektirmeden güncellenir.
Adım 1: Server SDK'yı Kurun
npm install @better-i18n/server
Adım 2: i18n Singleton Oluşturun
// src/i18n.ts
import { createServerI18n } from "@better-i18n/server";
export const i18n = createServerI18n({
project: "sizin-org/sizin-proje",
defaultLocale: "en",
});
Adım 3: Better Auth Provider'ı Ekleyin
// src/auth.ts
import { betterAuth } from "better-auth";
import { createBetterAuthProvider } from "@better-i18n/server/providers/better-auth";
import { i18n } from "./i18n";
export const auth = betterAuth({
plugins: [
createBetterAuthProvider(i18n, {
localeCookie: "locale",
}),
],
});
Sunucu tarafında bu kadar. Provider:
- Her Better Auth hata yanıtını yakalar
- Kullanıcının dilini
localecookie'sinden okur (Accept-Language'a fallback) - Çevirileri CDN'den getirir (bellekte 60 saniye önbelleğe alınır)
- Hata mesajını çevirisiyle değiştirir
Adım 4: İstemcide Dili Kaydedin
İstemci tarafında localeCookie prop'unu kullanın — cookie otomatik yazılır:
import { BetterI18nProvider } from "@better-i18n/use-intl";
function App() {
return (
<BetterI18nProvider
project="sizin-org/sizin-proje"
localeCookie
>
<UygulamanIz />
</BetterI18nProvider>
);
}
Adım 5: Çeviri Key'lerini Ekleyin
Tüm 48 key'i eklemenin en hızlı yolu Better i18n MCP sunucusu ve bir AI agent kullanmaktır:
"auth" namespace'inde
DEFAULT_AUTH_KEYS'teki tüm key'leri oluştur. İngilizce varsayılanları ayarla, sonra Türkçe, Almanca, İspanyolca, Fransızca ve Japonca'ya çevir.
Adım 6: Dashboard'dan Çevirin
better-i18n.com'a gidin, projenizi açın, "auth" namespace'ine gidin ve çevirin. AI Çevir butonunu kullanarak tüm key'leri saniyeler içinde herhangi bir dile otomatik çevirin.
Kod değişikliği yok. Deploy yok. Çeviriler 60 saniye içinde CDN'de canlı.
Statik vs CDN Tabanlı: Tam Karşılaştırma
| Özellik | @better-auth/i18n | better-auth-localization | Better i18n |
|---|---|---|---|
| Çeviri kaynağı | Koda gömülü | npm paketi | CDN (runtime) |
| Yeni dil ekleme | Kod + deploy | npm güncellemesi bekle | Dashboard — deploy yok |
| Çeviri güncelleme | Kod + deploy | Açık kaynak PR | Dashboard — 60s'de canlı |
| Yerleşik diller | Sadece İngilizce | 31+ dil | Herhangi biri (AI çevirili) |
| AI çeviri | Hayır | Hayır | Evet — tek tıkla |
| Geliştirici olmayanlar | Hayır | Hayır | Evet — dashboard UI |
| Paket boyutu etkisi | Dillerle büyür | Dil başına ~50KB | Sıfır — runtime'da çekilir |
| E-posta şablonu i18n | Manuel | Hayır | CDN tabanlı (aynı sistem) |
| MCP / AI agent desteği | Hayır | Hayır | Evet — tam MCP sunucusu |
| Ücretsiz tier | N/A (yerleşik) | Açık kaynak | Ücretsiz başla |
Başlarken
Better Auth lokalizasyonunu Better i18n ile kurmak yaklaşık 10 dakika sürer:
- better-i18n.com'da ücretsiz hesap oluşturun
- Proje oluşturun ve hedef dillerinizi ekleyin
@better-i18n/serverkurun ve Better Auth provider'ı ekleyin- Key'leri ekleyin — AI ile MCP sunucusu kullanın veya
DEFAULT_AUTH_KEYS'i programatik olarak import edin - Çevirin — dashboard'dan AI çeviri kullanın veya manuel çevirin
- Yayınlayın — çeviriler anında CDN'de canlı
Kredi kartı gerekmez. Ücretsiz başlayın.