Referência do Next.js
18ways.config.*
Crie 18ways.config.ts, 18ways.config.js ou 18ways.config.cjs na raiz do seu app e exporte
sua configuração do 18ways lá.
import type { WaysConfig } from '@18ways/next/config';
export default {
apiKey: process.env.NEXT_PUBLIC_18WAYS_PUBLIC_API_KEY,
baseLocale: 'en-GB',
router: 'app', // 'app', 'path', or 'none' depending on if you use app router, path router, or if you don't want the router to sync with locale at all
} satisfies WaysConfig;withWays()
Importe de @18ways/next/config e chame-o a partir de next.config.js.
import { withWays } from '@18ways/next/config';Quando 18ways.config.* existe, withWays() o carrega automaticamente. Para router: 'path', ele
retorna a configuração nativa de i18n do Next com a detecção de localidade desativada. Para router: 'app' e
router: 'none', ele injeta o alias necessário para imports diretos de @18ways/next/server.
Opções comuns:
| Opção | Tipo | Notas |
|---|---|---|
apiKey | string | Obrigatório. |
baseLocale | string | Localidade de origem e localidade padrão para o roteamento. |
roteador | 'app' | 'path' | 'none' | Modo de roteamento por localidade. Use none quando algum outro roteador já for o dono das URLs de localidade. |
localesAceitas | string[] | Lista explícita de locais. Obrigatória para path, opcional nos demais casos. Mantenha o modo path em sincronia com os idiomas habilitados no seu painel do 18ways. |
domínios | Array<{domain, defaultLocale}> | Mapa opcional de roteamento de domínio. |
localeParamName | string | Parâmetro de segmento de localidade do App Router. O padrão é lang. |
persistLocaleCookie | boolean | ((request) => boolean) | Política de persistência de cookies de localidade para alterações de localidade no servidor e no cliente. |
cacheTtl | número | TTL de cache para solicitações de adaptador. |
fetcher | typeof fetch | Implementação de busca personalizada. |
init(config)
Importar de @18ways/next/server.
Use-o quando quiser vincular explicitamente um objeto de configuração.
WaysRoot
Importe WaysRoot diretamente de @18ways/next/server em seus layouts depois de envolver
next.config.js com withWays(...).
Use WaysRoot no seu layout para que o adaptador possa iniciar o estado de tempo de execução para a solicitação atual.
Com o roteamento de locale do App Router, isso normalmente significa app/[lang]/layout.tsx.
getLocale()
Resolva a localidade atual no servidor. Este é o helper a ser usado quando você precisar do estado da localidade
fora de WaysRoot, por exemplo, em helpers de SEO apenas no servidor ou em outro código de servidor vinculado à requisição.
htmlAttrs()
htmlAttrs() resolve os valores atuais de lang e dir para o elemento do documento.
generateWaysMetadata()
Use generateWaysMetadata() dentro de generateMetadata() quando você quiser títulos traduzidos,
descrições e URLs canônicas ou alternativas que considerem a localidade.
proxy.ts
Para router: 'app', proxy.ts é o ponto de entrada opinativo para redirecionamentos de localidade no momento da requisição.
Reexporte de @18ways/next/proxy para lidar com / -> /{locale} e canonização de domínio.
export { default, config } from '@18ways/next/proxy';Se você já tem seu próprio arquivo de projeto proxy.ts ou middleware.ts, use
getWaysProxyResponse(request) e retorne-o antes do restante da sua lógica.
Ajuda para clientes
Importar de @18ways/next/client.
useLocale()
Leia e altere a localidade atual. Este é o gancho que você emparelha com LanguageSwitcher ou sua própria
interface de seleção personalizada.
useRouter()
Wrapper sensível ao locale em torno da navegação do Next. Passe locale="fr-FR" para forçar um destino localizado ou
locale={false} para forçar um sem localidade.
Link
Wrapper ciente de localidade em torno de next/link com o mesmo modelo de substituição de useRouter().
useUnlocalizedPathname()
Leia o caminho atual sem o prefixo de localidade.
useLocalizedHref()
Auxiliar de baixo nível para converter um href interno em um href atual com reconhecimento de localidade.
Path routing config
No modo router: 'app', o adaptador segue sua árvore de rotas:
- rotas em
app/[lang]/...são localizadas - as rotas fora desse segmento permanecem não localizadas
Link, useRouter() e setLocale() tratam rotas internas como localizadas por padrão. Use
locale={false} somente quando você precisar direcionar explicitamente uma rota não localizada.