Page Not Found
-We couldn't find the page you were looking for :(
+Page Not Found
+We couldn't find the page you were looking for :(
+Let's give it another shot:
+Let's give it another shot:
+diff --git a/.locadex/LOCADEX.md b/.locadex/LOCADEX.md new file mode 100644 index 00000000000000..0139063b35e2e7 --- /dev/null +++ b/.locadex/LOCADEX.md @@ -0,0 +1,21 @@ +# 🌐 Locadex i18n + +This repository is configured to use Locadex for automated internationalization. + +## Configuration: + +- **Working Directory**: `.` +- **Branch Prefix**: `locadex/` +- **Configured Locales**: `en`, `es` +- **Local Translations**: Enabled + +## How it works: + +- Once this setup PR is merged, Locadex will automatically monitor your repository for changes +- Locadex will analyze your code for translatable content and internationalize your changes based on your configured settings +- You can configure when Locadex should run (PRs or commits) and whether it should create PRs or commit directly through the General Translation Dashboard + +--- + +Generated by [Locadex](https://generaltranslation.com) • [Documentation](https://generaltranslation.com/docs) +Timestamp: 11/4/2025 diff --git a/app/global-error.jsx b/app/global-error.jsx index 1e0bec88c38c3c..2bda4d07cba556 100644 --- a/app/global-error.jsx +++ b/app/global-error.jsx @@ -2,20 +2,22 @@ import 'prism-sentry/index.css'; -import {useEffect} from 'react'; +import { useEffect } from 'react'; import * as Sentry from '@sentry/nextjs'; import Error from 'next/error'; +import { GTProvider } from "gt-next"; -export default function GlobalError({error}) { + +export default function GlobalError({ error }) { useEffect(() => { Sentry.captureException(error); }, [error]); return ( - -
+ +We couldn't find the page you were looking for :(
+We couldn't find the page you were looking for :(
+Let's give it another shot:
+Let's give it another shot:
+
{param.schema?.enum.map(e => {
@@ -49,7 +51,7 @@ function Params({params}) {
)}
{param.schema?.items?.enum && (
- choices:
+ {gt('choices')}:
{param.schema?.items?.enum.map(e => {
@@ -122,6 +124,7 @@ type Props = {
};
export function ApiPage({api}: Props) {
+ const gt = useGT();
const frontMatter = {
title: api.name,
};
@@ -145,38 +148,40 @@ export function ApiPage({api}: Props) {
{!!api.pathParameters.length && (
- Path Parameters
+ {gt('Path Parameters')}
)}
{!!api.queryParameters.length && (
- Query Parameters:
+ {gt('Query Parameters:')}
)}
{!!api.bodyParameters.length && (
- Body Parameters
+ {gt('Body Parameters')}
)}
{api.security?.length && (
- Scopes
+ {gt('Scopes')}
-
+
- {'You need to '}
-
- authenticate via bearer auth token.
-
+
+ You need to{' '}
+
+ authenticate via bearer auth token.
+
+
+ {''} requires one of the following scopes:
- {''} requires one of the following scopes:
-
+
{getScopes(api, 'auth_token').map(scope => (
diff --git a/src/components/banner/index.tsx b/src/components/banner/index.tsx
index cd9dbbbba2229b..b97c054248da52 100644
--- a/src/components/banner/index.tsx
+++ b/src/components/banner/index.tsx
@@ -1,6 +1,7 @@
'use client';
import {useEffect, useState} from 'react';
+import {msg, useMessages} from 'gt-next';
import styles from './banner.module.scss';
@@ -50,9 +51,9 @@ const BANNERS: BannerType[] = [
// check it out on `/contributing/pages/banners/`
{
appearsOn: ['^/contributing/pages/banners/'],
- text: 'Edit this banner on `/src/components/banner/index.tsx`',
+ text: msg('Edit this banner on `/src/components/banner/index.tsx`'),
linkURL: 'https://docs.sentry.io/contributing/pages/banners/',
- linkText: 'CTA',
+ linkText: msg('CTA'),
},
{
appearsOn: [
@@ -61,9 +62,9 @@ const BANNERS: BannerType[] = [
'^/platforms/android/',
'^/platforms/apple/guides/ios/',
],
- text: 'Session Replay is now generally available for mobile.',
+ text: msg('Session Replay is now generally available for mobile.'),
linkURL: 'https://docs.sentry.io/product/explore/session-replay/mobile/',
- linkText: 'Get started today.',
+ linkText: msg('Get started today.'),
},
];
@@ -100,6 +101,7 @@ const readOrResetLocalStorage = () => {
export function Banner() {
type BannerWithHash = BannerType & {hash: string};
const [banner, setBanner] = useState(null);
+ const m = useMessages();
useEffect(() => {
const matchingBanner = BANNERS.find(b => {
@@ -136,9 +138,9 @@ export function Banner() {
- {banner.text}
+ {m(banner.text)}
- {banner.linkText}
+ {m(banner.linkText)}
diff --git a/src/components/changelog/docsChangelog.tsx b/src/components/changelog/docsChangelog.tsx
index 6c8f3c6a2a9b0f..281442ba8e2306 100644
--- a/src/components/changelog/docsChangelog.tsx
+++ b/src/components/changelog/docsChangelog.tsx
@@ -1,3 +1,5 @@
+import {T, Plural, Num, DateTime} from 'gt-next';
+
interface ChangelogEntry {
author: string;
description: string;
@@ -36,10 +38,12 @@ export async function DocsChangelog() {
if (entries.length === 0) {
return (
-
- No changelog entries available
- Check back later for updates.
-
+
+
+ No changelog entries available
+ Check back later for updates.
+
+
);
}
@@ -70,17 +74,27 @@ export async function DocsChangelog() {
{totalFiles > 0 && •}
{totalFiles > 0 && (
-
- {totalFiles} file{totalFiles !== 1 ? 's' : ''} changed
-
+
+
+
+ {totalFiles} file changed
+ >
+ }
+ other={
+ <>
+ {totalFiles} files changed
+ >
+ }
+ />
+
+
)}
@@ -91,15 +105,19 @@ export async function DocsChangelog() {
{entry.filesChanged && totalFiles > 0 && (
-
- View changed files
-
+
+
+ View changed files
+
+
{entry.filesChanged.added && entry.filesChanged.added.length > 0 && (
-
- Added:
-
+
+
+ Added:
+
+
{entry.filesChanged.added.map(file => (
-
@@ -112,9 +130,11 @@ export async function DocsChangelog() {
{entry.filesChanged.modified &&
entry.filesChanged.modified.length > 0 && (
-
- Modified:
-
+
+
+ Modified:
+
+
{entry.filesChanged.modified.map(file => (
-
@@ -127,9 +147,11 @@ export async function DocsChangelog() {
{entry.filesChanged.removed &&
entry.filesChanged.removed.length > 0 && (
-
- Removed:
-
+
+
+ Removed:
+
+
{entry.filesChanged.removed.map(file => (
-
@@ -146,29 +168,31 @@ export async function DocsChangelog() {
);
})}
{entries.length > 20 && (
-
-
- Showing the 20 most recent updates. View the{' '}
-
- full content dashboard
- {' '}
- or subscribe to the{' '}
-
- RSS feed
-
- .
-
-
+
+
+
+ Showing the 20 most recent updates. View the{' '}
+
+ full content dashboard
+ {' '}
+ or subscribe to the{' '}
+
+ RSS feed
+
+ .
+
+
+
)}
);
diff --git a/src/components/cliChecksumTable/index.tsx b/src/components/cliChecksumTable/index.tsx
index 7283ab2d46e27d..14bec236fe83eb 100644
--- a/src/components/cliChecksumTable/index.tsx
+++ b/src/components/cliChecksumTable/index.tsx
@@ -1,4 +1,5 @@
import getAppRegistry from 'sentry-docs/build/appRegistry';
+import {T, Var} from 'gt-next';
import styles from './styles.module.scss';
@@ -22,8 +23,8 @@ export async function CliChecksumTable() {
- Filename (v{version})
- Integrity Checksum
+ Filename (v{version})
+ Integrity Checksum
diff --git a/src/components/codeBlock/index.tsx b/src/components/codeBlock/index.tsx
index b7cc64c2927e4a..744561ee3aa382 100644
--- a/src/components/codeBlock/index.tsx
+++ b/src/components/codeBlock/index.tsx
@@ -2,6 +2,7 @@
import {RefObject, useEffect, useRef, useState} from 'react';
import {Clipboard} from 'react-feather';
+import {T} from 'gt-next';
import {usePlausibleEvent} from 'sentry-docs/hooks/usePlausibleEvent';
@@ -117,7 +118,7 @@ export function CodeBlock({filename, language, children}: CodeBlockProps) {
className={styles.copied}
style={{opacity: showCopied ? 1 : 0}}
>
- Copied
+ Copied
{makeKeywordsClickable(makeHighlightBlocks(children, language))}
diff --git a/src/components/codeKeywords/keywordSelector.tsx b/src/components/codeKeywords/keywordSelector.tsx
index 820f4307c587a0..31de8a73e0a6c8 100644
--- a/src/components/codeKeywords/keywordSelector.tsx
+++ b/src/components/codeKeywords/keywordSelector.tsx
@@ -5,6 +5,7 @@ import {createPortal} from 'react-dom';
import {usePopper} from 'react-popper';
import {AnimatePresence} from 'framer-motion';
import {useTheme} from 'next-themes';
+import {useGT} from 'gt-next';
import {useOnClickOutside} from 'sentry-docs/clientUtils';
import {useIsMounted} from 'sentry-docs/hooks/isMounted';
@@ -46,6 +47,7 @@ export function KeywordSelector({
const [orgFilter, setOrgFilter] = useState('');
const [showProjectPreview, setShowProjectPreview] = useState(false);
const {resolvedTheme: theme} = useTheme();
+ const gt = useGT();
const isDarkMode = theme === 'dark';
const {isMounted} = useIsMounted();
@@ -75,7 +77,7 @@ export function KeywordSelector({
const currentSelection = choices[currentSelectionIdx];
if (!currentSelection) {
- return keyword ;
+ return {gt('keyword')} ;
}
const selector = isOpen && (
@@ -89,7 +91,7 @@ export function KeywordSelector({
/>
{choices.length > 5 && (
e.stopPropagation()}
value={orgFilter}
onChange={e => setOrgFilter(e.target.value)}
@@ -137,8 +139,11 @@ export function KeywordSelector({
title={currentSelection?.title}
aria-label={
currentSelection?.title
- ? `${currentSelection?.title}: ${currentSelection[keyword]}. Click to select different project.`
- : `Click to select project`
+ ? gt('{title}: {keyword}. Click to select different project.', {
+ title: currentSelection.title,
+ keyword: currentSelection[keyword],
+ })
+ : gt('Click to select project')
}
aria-expanded={isOpen}
onClick={() => setIsOpen(!isOpen)}
diff --git a/src/components/codeKeywords/orgAuthTokenCreator.tsx b/src/components/codeKeywords/orgAuthTokenCreator.tsx
index ff7ed1a0e764a7..23a25fea862a84 100644
--- a/src/components/codeKeywords/orgAuthTokenCreator.tsx
+++ b/src/components/codeKeywords/orgAuthTokenCreator.tsx
@@ -5,6 +5,7 @@ import {createPortal} from 'react-dom';
import {usePopper} from 'react-popper';
import {AnimatePresence} from 'framer-motion';
import {useTheme} from 'next-themes';
+import {useGT} from 'gt-next';
import {useOnClickOutside} from 'sentry-docs/clientUtils';
import {useIsMounted} from 'sentry-docs/hooks/isMounted';
@@ -43,6 +44,7 @@ export function OrgAuthTokenCreator() {
const [isAnimating, setIsAnimating] = useState(false);
const {resolvedTheme: theme} = useTheme();
const isDarkMode = theme === 'dark';
+ const gt = useGT();
const {isMounted} = useIsMounted();
@@ -115,16 +117,16 @@ export function OrgAuthTokenCreator() {
}
if (tokenState.status === 'error') {
- return There was an error while generating your token. ;
+ return {gt('There was an error while generating your token.')} ;
}
if (tokenState.status === 'loading') {
- return Generating token... ;
+ return {gt('Generating token...')} ;
}
const selector = isOpen && (
- Select an organization:
+ {gt('Select an organization:')}
{
handlePress();
@@ -192,7 +194,7 @@ export function OrgAuthTokenCreator() {
onAnimationStart={() => setIsAnimating(true)}
onAnimationComplete={() => setIsAnimating(false)}
>
- Click to generate token (DO NOT commit)
+ {gt('Click to generate token (DO NOT commit)')}
diff --git a/src/components/codeTabs.tsx b/src/components/codeTabs.tsx
index 64a19962bb5359..e76bc4b9d50750 100644
--- a/src/components/codeTabs.tsx
+++ b/src/components/codeTabs.tsx
@@ -10,6 +10,7 @@ import {
useState,
} from 'react';
import styled from '@emotion/styled';
+import {msg, useMessages} from 'gt-next';
import {CodeBlockProps} from './codeBlock';
import {CodeContext} from './codeContext';
@@ -19,23 +20,25 @@ import {SignInNote} from './signInNote';
// human readable versions of names
const HUMAN_LANGUAGE_NAMES = {
- coffee: 'CoffeeScript',
- cpp: 'C++',
- csharp: 'C#',
- es6: 'JavaScript (ES6)',
- fsharp: 'F#',
- html: 'HTML',
- javascript: 'JavaScript',
- json: 'JSON',
- jsx: 'JSX',
- tsx: 'TSX',
- php: 'PHP',
- powershell: 'PowerShell',
- typescript: 'TypeScript',
- yaml: 'YAML',
- yml: 'YAML',
+ coffee: msg('CoffeeScript'),
+ cpp: msg('C++'),
+ csharp: msg('C#'),
+ es6: msg('JavaScript (ES6)'),
+ fsharp: msg('F#'),
+ html: msg('HTML'),
+ javascript: msg('JavaScript'),
+ json: msg('JSON'),
+ jsx: msg('JSX'),
+ tsx: msg('TSX'),
+ php: msg('PHP'),
+ powershell: msg('PowerShell'),
+ typescript: msg('TypeScript'),
+ yaml: msg('YAML'),
+ yml: msg('YAML'),
};
+const TEXT_FALLBACK = msg('Text');
+
interface CodeTabProps {
children: React.ReactElement | React.ReactElement[];
}
@@ -51,6 +54,7 @@ const showSigninNote = (children: ReactNode) => {
export function CodeTabs({children}: CodeTabProps) {
const codeBlocks = Array.isArray(children) ? [...children] : [children];
+ const m = useMessages();
// The title is what we use for sorting and also for remembering the
// selection. If there is no title fall back to the title cased language name
@@ -60,10 +64,10 @@ export function CodeTabs({children}: CodeTabProps) {
return title;
}
if (!language) {
- return 'Text';
+ return m(TEXT_FALLBACK);
}
if (language in HUMAN_LANGUAGE_NAMES) {
- return HUMAN_LANGUAGE_NAMES[language];
+ return m(HUMAN_LANGUAGE_NAMES[language]);
}
return language[0].toUpperCase() + language.substring(1);
diff --git a/src/components/communitySupportedPlatforms/index.tsx b/src/components/communitySupportedPlatforms/index.tsx
index c5036d931bbb4c..1fd47ddcaac488 100644
--- a/src/components/communitySupportedPlatforms/index.tsx
+++ b/src/components/communitySupportedPlatforms/index.tsx
@@ -1,4 +1,5 @@
import Image from 'next/image';
+import {msg, useMessages} from 'gt-next';
import {ExternalLink} from '../externalLink';
@@ -22,98 +23,99 @@ import wordpress from './icons/wordpress.png';
const CommunityPlatforms = [
{
- name: 'Clojure (Sentry Clj)',
+ name: msg('Clojure (Sentry Clj)'),
url: 'https://github.com/getsentry/sentry-clj',
icon: clojure,
},
{
- name: 'Clojure (Raven Clj)',
+ name: msg('Clojure (Raven Clj)'),
url: 'https://github.com/sethtrain/raven-clj#alternatives',
icon: clojure,
},
{
- name: 'Cloudflare Workers',
+ name: msg('Cloudflare Workers'),
url: 'https://github.com/robertcepa/toucan-js',
icon: cloudflare,
},
{
- name: 'ColdFusion',
+ name: msg('ColdFusion'),
url: 'https://github.com/coldbox-modules/sentry',
icon: coldfusion,
},
{
- name: 'Crystal',
+ name: msg('Crystal'),
url: 'https://github.com/Sija/raven.cr',
icon: crystal,
},
{
- name: 'Defold',
+ name: msg('Defold'),
url: 'https://github.com/indiesoftby/defold-sentinel',
icon: defold,
},
{
- name: 'Grails',
+ name: msg('Grails'),
url: 'https://github.com/agorapulse/grails-sentry',
icon: grails,
},
{
- name: 'Hono',
+ name: msg('Hono'),
url: 'https://github.com/honojs/middleware/tree/main/packages/sentry',
icon: hono,
},
{
- name: 'Kubernetes',
+ name: msg('Kubernetes'),
url: 'https://github.com/alekitto/sentry-kubernetes',
icon: kubernetes,
},
{
- name: 'Lua',
+ name: msg('Lua'),
url: 'https://github.com/cloudflare/raven-lua',
icon: lua,
},
{
- name: 'Nuxt 2',
+ name: msg('Nuxt 2'),
url: 'https://github.com/nuxt-community/sentry-module',
icon: nuxt,
},
{
- name: 'OCaml',
+ name: msg('OCaml'),
url: 'https://github.com/brendanlong/sentry-ocaml',
icon: ocaml,
},
{
- name: 'Quarkus',
+ name: msg('Quarkus'),
url: 'https://github.com/quarkiverse/quarkus-logging-sentry',
icon: quarkus,
},
{
- name: 'Scrapy',
+ name: msg('Scrapy'),
url: 'https://github.com/llonchj/scrapy-sentry',
icon: scrapy,
},
{
- name: 'Serverless Framework',
+ name: msg('Serverless Framework'),
url: 'https://github.com/arabold/serverless-sentry-plugin',
icon: serverless,
},
{
- name: 'Strapi',
+ name: msg('Strapi'),
url: 'https://github.com/strapi/strapi/tree/master/packages/plugins/sentry',
icon: strapi,
},
{
- name: 'Terraform',
+ name: msg('Terraform'),
url: 'https://github.com/jianyuan/terraform-provider-sentry',
icon: terraform,
},
{
- name: 'WordPress',
+ name: msg('WordPress'),
url: 'https://github.com/stayallive/wp-sentry',
icon: wordpress,
},
];
export function CommunitySupportedPlatforms() {
+ const m = useMessages();
return (
{CommunityPlatforms.map(platform => (
@@ -126,10 +128,10 @@ export function CommunitySupportedPlatforms() {
src={platform.icon.src}
width={20}
height={20}
- alt={platform.name}
+ alt={m(platform.name)}
className="!border-none !shadow-none"
/>
- {platform.name}
+ {m(platform.name)}
))}
diff --git a/src/components/configValue.tsx b/src/components/configValue.tsx
index adefb169a49845..e788f412a21e28 100644
--- a/src/components/configValue.tsx
+++ b/src/components/configValue.tsx
@@ -1,4 +1,5 @@
import {Fragment} from 'react';
+import {T, Branch, Var} from 'gt-next';
type Props = {
children: JSX.Element;
@@ -7,26 +8,27 @@ type Props = {
};
const getDescriptiveLocation = (location: string): JSX.Element => {
- switch (location) {
- case 'env':
- return in System Environment ;
- case 'yaml':
- return (
-
- in config.yaml
-
- );
- case 'python':
- return (
-
- in sentry.conf.py
-
- );
- case 'cli':
- return on the command line ;
- default:
- throw new Error('Invalid location');
- }
+ return (
+
+ in System Environment}
+ yaml={
+
+ in config.yaml
+
+ }
+ python={
+
+ in sentry.conf.py
+
+ }
+ cli={on the command line }
+ >
+ {(() => { throw new Error('Invalid location'); })()}
+
+
+ );
};
export function ConfigValue({name, location, children}: Props): JSX.Element {
@@ -36,7 +38,9 @@ export function ConfigValue({name, location, children}: Props): JSX.Element {
{name}
- Declared {getDescriptiveLocation(location)}
+
+ Declared {getDescriptiveLocation(location)}
+
{children}
diff --git a/src/components/copyMarkdownButton.tsx b/src/components/copyMarkdownButton.tsx
index b4a40817847cdd..255d0001e3dcfa 100644
--- a/src/components/copyMarkdownButton.tsx
+++ b/src/components/copyMarkdownButton.tsx
@@ -4,6 +4,7 @@ import {Fragment, useCallback, useEffect, useRef, useState} from 'react';
import {createPortal} from 'react-dom';
import {Clipboard} from 'react-feather';
import Link from 'next/link';
+import {useGT} from 'gt-next';
import {usePlausibleEvent} from 'sentry-docs/hooks/usePlausibleEvent';
import Chevron from 'sentry-docs/icons/Chevron';
@@ -14,6 +15,7 @@ interface CopyMarkdownButtonProps {
}
export function CopyMarkdownButton({pathname}: CopyMarkdownButtonProps) {
+ const gt = useGT();
const [isLoading, setIsLoading] = useState(false);
const [copied, setCopied] = useState(false);
const [error, setError] = useState(false);
@@ -136,7 +138,9 @@ export function CopyMarkdownButton({pathname}: CopyMarkdownButtonProps) {
disabled={isLoading}
>
- {error ? 'Failed to copy' : copied ? 'Copied!' : 'Copy page'}
+
+ {error ? gt('Failed to copy') : copied ? gt('Copied!') : gt('Copy page')}
+
@@ -175,12 +179,12 @@ export function CopyMarkdownButton({pathname}: CopyMarkdownButtonProps) {
- {error ? 'Failed to copy' : 'Copy page'}
+ {error ? gt('Failed to copy') : gt('Copy page')}
{error
- ? 'Network error - please try again'
- : 'Copy page as Markdown for LLMs'}
+ ? gt('Network error - please try again')
+ : gt('Copy page as Markdown for LLMs')}
@@ -197,10 +201,10 @@ export function CopyMarkdownButton({pathname}: CopyMarkdownButtonProps) {
- View as Markdown
+ {gt('View as Markdown')}
- View this page as plain text
+ {gt('View this page as plain text')}
diff --git a/src/components/createGitHubAppForm.tsx b/src/components/createGitHubAppForm.tsx
index 834a3fd8299cab..7ebd3ce9baea42 100644
--- a/src/components/createGitHubAppForm.tsx
+++ b/src/components/createGitHubAppForm.tsx
@@ -2,10 +2,12 @@
import {useState} from 'react';
import {Button} from '@radix-ui/themes';
+import {T, useGT} from 'gt-next';
const MAX_COMPONENTS_ON_PAGE = 100;
export function CreateGitHubAppForm({url, defaultOrg, defaultUrlPrefix}) {
+ const gt = useGT();
const [orgSlug, setOrgSlug] = useState('');
const [urlPrefix, setUrlPrefix] = useState('');
const renderedUrl = url
@@ -21,9 +23,11 @@ export function CreateGitHubAppForm({url, defaultOrg, defaultUrlPrefix}) {
-
+
+
+
-
+
+
+
- Create GitHub App
+ {gt('Create GitHub App')}
diff --git a/src/components/devDocsCardGrid.tsx b/src/components/devDocsCardGrid.tsx
index e999b7f6baa608..8964b612ffc60a 100644
--- a/src/components/devDocsCardGrid.tsx
+++ b/src/components/devDocsCardGrid.tsx
@@ -1,3 +1,5 @@
+import {useGT} from 'gt-next';
+
import BackendImg from 'sentry-docs/imgs/back-end.png';
import InfraImg from 'sentry-docs/imgs/dev-infra.png';
import FrontendImg from 'sentry-docs/imgs/front-end.png';
@@ -10,71 +12,73 @@ import SelfHostedImg from 'sentry-docs/imgs/support.png';
import {Card} from './card';
export function DevDocsCardGrid() {
+ const gt = useGT();
+
return (
diff --git a/src/components/docFeedback/index.tsx b/src/components/docFeedback/index.tsx
index b0dd8704f29af6..a0f03ab36cd954 100644
--- a/src/components/docFeedback/index.tsx
+++ b/src/components/docFeedback/index.tsx
@@ -3,6 +3,7 @@ import {Fragment, useEffect, useState} from 'react';
import {CheckIcon as Check} from '@radix-ui/react-icons';
import {Button} from '@radix-ui/themes';
import * as Sentry from '@sentry/browser';
+import {useGT} from 'gt-next';
import {usePlausibleEvent} from 'sentry-docs/hooks/usePlausibleEvent';
@@ -11,6 +12,7 @@ type Props = {
};
export function DocFeedback({pathname}: Props) {
+ const gt = useGT();
const {emit} = usePlausibleEvent();
const [showFeedback, setShowFeedback] = useState(false);
const [feedbackSubmitted, setFeedbackSubmitted] = useState(false);
@@ -60,26 +62,26 @@ export function DocFeedback({pathname}: Props) {
{feedbackSubmitted ? (
- Thanks for your feedback
+ {gt('Thanks for your feedback')}
) : (
- Was this helpful?
+ {gt('Was this helpful?')}
@@ -93,8 +95,8 @@ export function DocFeedback({pathname}: Props) {
diff --git a/src/components/docPage/index.tsx b/src/components/docPage/index.tsx
index 51e1c7fb995dab..085210838c195c 100644
--- a/src/components/docPage/index.tsx
+++ b/src/components/docPage/index.tsx
@@ -6,6 +6,7 @@ import {FrontMatter} from 'sentry-docs/types';
import {PaginationNavNode} from 'sentry-docs/types/paginationNavNode';
import {isNotNil} from 'sentry-docs/utils';
import {getUnversionedPath} from 'sentry-docs/versioning';
+import {useGT} from 'gt-next';
import './type.scss';
@@ -44,6 +45,7 @@ export function DocPage({
nextPage,
previousPage,
}: Props) {
+ const gt = useGT();
const {rootNode, path} = serverContext();
const currentPlatform = getCurrentPlatform(rootNode, path);
const currentGuide = getCurrentGuide(rootNode, path);
@@ -103,10 +105,10 @@ export function DocPage({
- {previousPage && }
+ {previousPage && }
- {nextPage && }
+ {nextPage && }
diff --git a/src/components/expandable/index.tsx b/src/components/expandable/index.tsx
index 66364b877aed96..7994de82044cad 100644
--- a/src/components/expandable/index.tsx
+++ b/src/components/expandable/index.tsx
@@ -3,6 +3,7 @@
import {ReactNode, useCallback, useEffect, useRef, useState} from 'react';
import {ChevronDownIcon, ChevronRightIcon} from '@radix-ui/react-icons';
import * as Sentry from '@sentry/nextjs';
+import {useGT} from 'gt-next';
import {usePlausibleEvent} from 'sentry-docs/hooks/usePlausibleEvent';
@@ -40,6 +41,7 @@ export function Expandable({
hideFromMd = false,
}: Props) {
const id = permalink ? slugify(title) : undefined;
+ const gt = useGT();
const [isExpanded, setIsExpanded] = useState(false);
const [copied, setCopied] = useState(false);
@@ -175,8 +177,8 @@ export function Expandable({
onClick={copyContentOnClick}
type="button" // Important for buttons in summaries
>
- {!copied && 'Copy Rules'}
- {copied && 'Copied!'}
+ {!copied && gt('Copy Rules')}
+ {copied && gt('Copied!')}
)}
diff --git a/src/components/githubCTA/index.tsx b/src/components/githubCTA/index.tsx
index 90ef5f0e3e3f96..6059f70075585a 100644
--- a/src/components/githubCTA/index.tsx
+++ b/src/components/githubCTA/index.tsx
@@ -1,4 +1,5 @@
import Link from 'next/link';
+import {T} from 'gt-next';
import {nodeForPath} from 'sentry-docs/docTree';
import {serverContext} from 'sentry-docs/serverContext';
@@ -15,25 +16,29 @@ export function GitHubCTA() {
return (
-
- Help improve this content
-
+
+
+ Help improve this content
+
+
-
- Our documentation is open source and available on GitHub. Your contributions are
- welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would
- be better").
-
- How to contribute{' '}
- |
- Edit this page |
-
- Create a docs issue
- {' '}
- |
- Get support{' '}
-
-
+
+
+ Our documentation is open source and available on GitHub. Your contributions are
+ welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would
+ be better").
+
+ How to contribute{' '}
+ |
+ Edit this page |
+
+ Create a docs issue
+ {' '}
+ |
+ Get support{' '}
+
+
+
);
}
diff --git a/src/components/githubDomainChecker.tsx b/src/components/githubDomainChecker.tsx
index b80b55053b6c6b..81afbe22c64e33 100644
--- a/src/components/githubDomainChecker.tsx
+++ b/src/components/githubDomainChecker.tsx
@@ -1,12 +1,14 @@
'use client';
import {useState} from 'react';
+import {useGT} from 'gt-next';
interface GitHubDomainCheckerProps {
id?: string;
}
export function GitHubDomainChecker({id}: GitHubDomainCheckerProps = {}) {
+ const gt = useGT();
const [domain, setDomain] = useState('');
const [isValidDomain, setIsValidDomain] = useState(false);
@@ -95,13 +97,13 @@ export function GitHubDomainChecker({id}: GitHubDomainCheckerProps = {}) {
@@ -111,26 +113,24 @@ export function GitHubDomainChecker({id}: GitHubDomainCheckerProps = {}) {
{isValidDomain ? (
- Recommended Installation:
+ {gt('Recommended Installation:')}
{isGitHubCom ? (
- GitHub - Use the standard GitHub integration for
- github.com
+ {gt('GitHub')} - {gt('Use the standard GitHub integration for github.com')}
) : (
- GitHub Enterprise - Use GitHub Enterprise integration
- for your domain
+ {gt('GitHub Enterprise')} - {gt('Use GitHub Enterprise integration for your domain')}
)}
) : (
- Invalid Domain - Please enter a valid GitHub domain or URL
+ {gt('Invalid Domain')} - {gt('Please enter a valid GitHub domain or URL')}
)}
diff --git a/src/components/guideGrid.tsx b/src/components/guideGrid.tsx
index e287dfc6a6eff2..2e54ca9f0a1a7d 100644
--- a/src/components/guideGrid.tsx
+++ b/src/components/guideGrid.tsx
@@ -1,4 +1,5 @@
import {Fragment} from 'react';
+import {T} from 'gt-next';
import {getCurrentPlatform, getPlatform} from 'sentry-docs/docTree';
import {serverContext} from 'sentry-docs/serverContext';
@@ -27,7 +28,9 @@ export function GuideGrid({platform, className}: Props) {
return (
- Related Guides
+
+ Related Guides
+
{currentPlatform.guides.map(guide => (
-
diff --git a/src/components/header.tsx b/src/components/header.tsx
index 159229a5f2681a..4c8e3f7888a526 100644
--- a/src/components/header.tsx
+++ b/src/components/header.tsx
@@ -12,6 +12,7 @@ import {MobileMenu} from './mobileMenu';
import {NavLink} from './navlink';
import {Search} from './search';
import {ThemeToggle} from './theme-toggle';
+import {LocaleSelector, useGT, T} from 'gt-next';
export const sidebarToggleId = sidebarStyles['navbar-menu-toggle'];
@@ -28,6 +29,7 @@ export function Header({
noSearch,
useStoredSearchPlatforms,
}: Props) {
+ const gt = useGT();
return (
{/* define a header-height variable for consumption by other components */}
@@ -37,7 +39,7 @@ export function Header({