mirror of
https://github.com/maelgangloff/domain-watchdog.git
synced 2025-12-17 17:55:42 +00:00
feat: add ICANN-list tab
This commit is contained in:
parent
7c10f4bd3c
commit
ac264d9a13
@ -4,7 +4,7 @@ import TextPage from './pages/TextPage'
|
|||||||
import DomainSearchPage from './pages/search/DomainSearchPage'
|
import DomainSearchPage from './pages/search/DomainSearchPage'
|
||||||
import EntitySearchPage from './pages/search/EntitySearchPage'
|
import EntitySearchPage from './pages/search/EntitySearchPage'
|
||||||
import NameserverSearchPage from './pages/search/NameserverSearchPage'
|
import NameserverSearchPage from './pages/search/NameserverSearchPage'
|
||||||
import TldPage from './pages/search/TldPage'
|
import TldPage from './pages/infrastructure/TldPage'
|
||||||
import StatisticsPage from './pages/StatisticsPage'
|
import StatisticsPage from './pages/StatisticsPage'
|
||||||
import WatchlistPage from './pages/tracking/WatchlistPage'
|
import WatchlistPage from './pages/tracking/WatchlistPage'
|
||||||
import UserPage from './pages/UserPage'
|
import UserPage from './pages/UserPage'
|
||||||
@ -18,6 +18,7 @@ import {Sider} from './components/Sider'
|
|||||||
import {jt, t} from 'ttag'
|
import {jt, t} from 'ttag'
|
||||||
import {BugOutlined, InfoCircleOutlined, MergeOutlined} from '@ant-design/icons'
|
import {BugOutlined, InfoCircleOutlined, MergeOutlined} from '@ant-design/icons'
|
||||||
import TrackedDomainPage from './pages/tracking/TrackedDomainPage'
|
import TrackedDomainPage from './pages/tracking/TrackedDomainPage'
|
||||||
|
import IcannRegistrarPage from "./pages/infrastructure/IcannRegistrarPage";
|
||||||
|
|
||||||
const PROJECT_LINK = 'https://github.com/maelgangloff/domain-watchdog'
|
const PROJECT_LINK = 'https://github.com/maelgangloff/domain-watchdog'
|
||||||
const LICENSE_LINK = 'https://www.gnu.org/licenses/agpl-3.0.txt'
|
const LICENSE_LINK = 'https://www.gnu.org/licenses/agpl-3.0.txt'
|
||||||
@ -94,8 +95,9 @@ export default function App(): React.ReactElement {
|
|||||||
<Route path='/search/domain' element={<DomainSearchPage/>}/>
|
<Route path='/search/domain' element={<DomainSearchPage/>}/>
|
||||||
<Route path='/search/domain/:query' element={<DomainSearchPage/>}/>
|
<Route path='/search/domain/:query' element={<DomainSearchPage/>}/>
|
||||||
<Route path='/search/entity' element={<EntitySearchPage/>}/>
|
<Route path='/search/entity' element={<EntitySearchPage/>}/>
|
||||||
<Route path='/search/nameserver' element={<NameserverSearchPage/>}/>
|
|
||||||
<Route path='/search/tld' element={<TldPage/>}/>
|
<Route path='/infrastructure/tld' element={<TldPage/>}/>
|
||||||
|
<Route path='/infrastructure/icann' element={<IcannRegistrarPage/>}/>
|
||||||
|
|
||||||
<Route path='/tracking/watchlist' element={<WatchlistPage/>}/>
|
<Route path='/tracking/watchlist' element={<WatchlistPage/>}/>
|
||||||
<Route path='/tracking/domains' element={<TrackedDomainPage/>}/>
|
<Route path='/tracking/domains' element={<TrackedDomainPage/>}/>
|
||||||
|
|||||||
@ -4,14 +4,17 @@ import {
|
|||||||
AimOutlined,
|
AimOutlined,
|
||||||
ApiOutlined,
|
ApiOutlined,
|
||||||
BankOutlined,
|
BankOutlined,
|
||||||
|
ClusterOutlined,
|
||||||
CompassOutlined,
|
CompassOutlined,
|
||||||
FileSearchOutlined,
|
FileSearchOutlined,
|
||||||
HomeOutlined,
|
HomeOutlined,
|
||||||
LineChartOutlined,
|
LineChartOutlined,
|
||||||
LoginOutlined,
|
LoginOutlined,
|
||||||
LogoutOutlined,
|
LogoutOutlined,
|
||||||
|
SafetyOutlined,
|
||||||
SearchOutlined,
|
SearchOutlined,
|
||||||
TableOutlined,
|
TableOutlined,
|
||||||
|
TeamOutlined,
|
||||||
UserOutlined
|
UserOutlined
|
||||||
} from '@ant-design/icons'
|
} from '@ant-design/icons'
|
||||||
import {Menu} from 'antd'
|
import {Menu} from 'antd'
|
||||||
@ -44,22 +47,14 @@ export function Sider({isAuthenticated}: { isAuthenticated: boolean }) {
|
|||||||
onClick: () => navigate('/search/domain')
|
onClick: () => navigate('/search/domain')
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: '/search/tld',
|
key: '/search/entity',
|
||||||
icon: <BankOutlined/>,
|
|
||||||
label: t`TLD`,
|
|
||||||
title: t`TLD list`,
|
|
||||||
disabled: !isAuthenticated,
|
|
||||||
onClick: () => navigate('/search/tld')
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
{
|
|
||||||
key: 'entity-finder',
|
|
||||||
icon: <TeamOutlined/>,
|
icon: <TeamOutlined/>,
|
||||||
label: t`Entity`,
|
label: t`Entity`,
|
||||||
title: t`Entity Finder`,
|
title: t`Entity Finder`,
|
||||||
disabled: true,
|
disabled: !isAuthenticated,
|
||||||
onClick: () => navigate('/search/entity')
|
onClick: () => navigate('/search/entity')
|
||||||
},
|
},
|
||||||
|
/*
|
||||||
{
|
{
|
||||||
key: 'ns-finder',
|
key: 'ns-finder',
|
||||||
icon: <CloudServerOutlined/>,
|
icon: <CloudServerOutlined/>,
|
||||||
@ -71,6 +66,31 @@ export function Sider({isAuthenticated}: { isAuthenticated: boolean }) {
|
|||||||
*/
|
*/
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
key: 'infrastructure',
|
||||||
|
icon: <ClusterOutlined/>,
|
||||||
|
label: t`Infrastructure`,
|
||||||
|
title: t`Infrastructure`,
|
||||||
|
disabled: !isAuthenticated,
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
key: '/infrastructure/tld',
|
||||||
|
icon: <BankOutlined/>,
|
||||||
|
label: t`TLD`,
|
||||||
|
title: t`TLD list`,
|
||||||
|
disabled: !isAuthenticated,
|
||||||
|
onClick: () => navigate('/infrastructure/tld')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: '/infrastructure/icann',
|
||||||
|
icon: <SafetyOutlined/>,
|
||||||
|
label: t`ICANN list`,
|
||||||
|
title: t`ICANN list`,
|
||||||
|
disabled: !isAuthenticated,
|
||||||
|
onClick: () => navigate('/infrastructure/icann')
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
key: 'tracking',
|
key: 'tracking',
|
||||||
label: t`Tracking`,
|
label: t`Tracking`,
|
||||||
@ -99,6 +119,21 @@ export function Sider({isAuthenticated}: { isAuthenticated: boolean }) {
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
key: 'tools',
|
||||||
|
label: t`Tools`,
|
||||||
|
icon: <ToolOutlined/>,
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
key: '/tools/idn',
|
||||||
|
icon: <FieldStringOutlined/>,
|
||||||
|
label: t`IDN Conversion`,
|
||||||
|
onClick: () => navigate('/')
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
*/
|
||||||
{
|
{
|
||||||
key: '/stats',
|
key: '/stats',
|
||||||
icon: <LineChartOutlined/>,
|
icon: <LineChartOutlined/>,
|
||||||
@ -131,7 +166,7 @@ export function Sider({isAuthenticated}: { isAuthenticated: boolean }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return <Menu
|
return <Menu
|
||||||
defaultOpenKeys={['search', 'info', 'tracking', 'doc']}
|
defaultOpenKeys={['search', 'info', 'tracking', 'doc', 'infrastructure']}
|
||||||
selectedKeys={[location.pathname.includes('/search/domain') ? '/search/domain' : location.pathname]}
|
selectedKeys={[location.pathname.includes('/search/domain') ? '/search/domain' : location.pathname]}
|
||||||
mode='inline'
|
mode='inline'
|
||||||
theme='dark'
|
theme='dark'
|
||||||
|
|||||||
134
assets/pages/infrastructure/IcannRegistrarPage.tsx
Normal file
134
assets/pages/infrastructure/IcannRegistrarPage.tsx
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
import React, {useEffect, useState} from 'react'
|
||||||
|
import {Card, Divider, Table, Typography} from 'antd'
|
||||||
|
import type {IcannAccreditation} from '../../utils/api'
|
||||||
|
import {t} from 'ttag'
|
||||||
|
import type {ColumnType} from 'antd/es/table'
|
||||||
|
import {CheckCircleOutlined, SettingOutlined, CloseCircleOutlined} from "@ant-design/icons"
|
||||||
|
import {getIcannAccreditations} from "../../utils/api/icann-accreditations";
|
||||||
|
|
||||||
|
const {Text, Paragraph} = Typography
|
||||||
|
|
||||||
|
interface FiltersType {
|
||||||
|
'icannAccreditation.status': 'Accredited' | 'Reserved' | 'Terminated',
|
||||||
|
}
|
||||||
|
|
||||||
|
function RegistrarListTable(filters: FiltersType) {
|
||||||
|
interface TableRow {
|
||||||
|
key: string
|
||||||
|
handle: number
|
||||||
|
name: string
|
||||||
|
}
|
||||||
|
|
||||||
|
const [dataTable, setDataTable] = useState<TableRow[]>([])
|
||||||
|
const [total, setTotal] = useState(0)
|
||||||
|
|
||||||
|
const fetchData = (params: FiltersType & { page: number, itemsPerPage: number }) => {
|
||||||
|
getIcannAccreditations(params).then((data) => {
|
||||||
|
setTotal(data['hydra:totalItems'])
|
||||||
|
setDataTable(data['hydra:member'].map((accreditation: IcannAccreditation) => ({
|
||||||
|
key: accreditation.handle,
|
||||||
|
handle: parseInt(accreditation.handle),
|
||||||
|
name: accreditation.icannAccreditation.registrarName
|
||||||
|
})
|
||||||
|
).sort((a, b) => a.handle - b.handle))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
fetchData({...filters, page: 1, itemsPerPage: 30})
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
let columns: Array<ColumnType<TableRow>> = [
|
||||||
|
{
|
||||||
|
title: t`ID`,
|
||||||
|
dataIndex: 'handle',
|
||||||
|
width: '10vh',
|
||||||
|
align: 'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: t`Registrar`,
|
||||||
|
dataIndex: 'name'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Table
|
||||||
|
columns={columns}
|
||||||
|
dataSource={dataTable}
|
||||||
|
pagination={{
|
||||||
|
total,
|
||||||
|
hideOnSinglePage: true,
|
||||||
|
defaultPageSize: 30,
|
||||||
|
onChange: (page, itemsPerPage) => {
|
||||||
|
fetchData({...filters, page, itemsPerPage})
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
|
||||||
|
scroll={{y: '50vh'}}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function IcannRegistrarPage() {
|
||||||
|
const [activeTabKey, setActiveTabKey] = useState<string>('Accredited')
|
||||||
|
|
||||||
|
const contentList: Record<string, React.ReactNode> = {
|
||||||
|
Accredited: <>
|
||||||
|
<Text>{t`An accredited number means that ICANN's contract with the registrar is ongoing.`}</Text>
|
||||||
|
<Divider/>
|
||||||
|
<RegistrarListTable {...{'icannAccreditation.status': 'Accredited'}} />
|
||||||
|
</>,
|
||||||
|
Reserved: <>
|
||||||
|
<Text>{t`A reserved number can be used by TLD registries for specific operations.`}</Text>
|
||||||
|
<Divider/>
|
||||||
|
<RegistrarListTable {...{'icannAccreditation.status': 'Reserved'}} />
|
||||||
|
</>,
|
||||||
|
Terminated: <>
|
||||||
|
<Text>{t`A terminated number means that ICANN's contract with the registrar has been terminated.`}</Text>
|
||||||
|
<Divider/>
|
||||||
|
<RegistrarListTable {...{'icannAccreditation.status': 'Terminated'}} />
|
||||||
|
</>
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Paragraph>
|
||||||
|
{t`This page lists ICANN-accredited registrars.`}
|
||||||
|
</Paragraph>
|
||||||
|
<Paragraph>
|
||||||
|
{t`The list is officially published and maintained by the Internet Assigned Numbers Authority (IANA), the organization responsible for managing the Internet's unique identifiers (including numbers, IP addresses, and domain name extensions).`}
|
||||||
|
</Paragraph>
|
||||||
|
<Divider/>
|
||||||
|
|
||||||
|
<Card
|
||||||
|
style={{width: '100%'}}
|
||||||
|
tabProps={{
|
||||||
|
size: 'middle',
|
||||||
|
}}
|
||||||
|
tabList={[
|
||||||
|
{
|
||||||
|
key: 'Accredited',
|
||||||
|
label: t`Accredited`,
|
||||||
|
icon: <CheckCircleOutlined/>
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'Reserved',
|
||||||
|
label: t`Reserved`,
|
||||||
|
icon: <SettingOutlined/>
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'Terminated',
|
||||||
|
label: t`Terminated`,
|
||||||
|
icon: <CloseCircleOutlined />
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
activeTabKey={activeTabKey}
|
||||||
|
key={activeTabKey}
|
||||||
|
onTabChange={(k: string) => setActiveTabKey(k)}
|
||||||
|
>
|
||||||
|
{contentList[activeTabKey]}
|
||||||
|
|
||||||
|
</Card>
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
}
|
||||||
@ -10,6 +10,7 @@ import punycode from 'punycode/punycode'
|
|||||||
import {getCountryCode} from '../../utils/functions/getCountryCode'
|
import {getCountryCode} from '../../utils/functions/getCountryCode'
|
||||||
import {tldToEmoji} from '../../utils/functions/tldToEmoji'
|
import {tldToEmoji} from '../../utils/functions/tldToEmoji'
|
||||||
import {BankOutlined, FlagOutlined, GlobalOutlined, TrademarkOutlined} from "@ant-design/icons"
|
import {BankOutlined, FlagOutlined, GlobalOutlined, TrademarkOutlined} from "@ant-design/icons"
|
||||||
|
import {Link} from "react-router-dom";
|
||||||
|
|
||||||
const {Text, Paragraph} = Typography
|
const {Text, Paragraph} = Typography
|
||||||
|
|
||||||
@ -38,7 +39,7 @@ function TldTable(filters: FiltersType) {
|
|||||||
setDataTable(data['hydra:member'].map((tld: Tld) => {
|
setDataTable(data['hydra:member'].map((tld: Tld) => {
|
||||||
const rowData = {
|
const rowData = {
|
||||||
key: tld.tld,
|
key: tld.tld,
|
||||||
TLD: <Typography.Text code>{punycode.toUnicode(tld.tld)}</Typography.Text>
|
TLD: <Link to={'/search/domain/' + tld.tld}><Typography.Text code>{punycode.toUnicode(tld.tld)}</Typography.Text></Link>
|
||||||
}
|
}
|
||||||
const type = filters.type
|
const type = filters.type
|
||||||
let countryName
|
let countryName
|
||||||
14
assets/utils/api/icann-accreditations.ts
Normal file
14
assets/utils/api/icann-accreditations.ts
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import type {IcannAccreditation, Tld} from './index'
|
||||||
|
import {request} from './index'
|
||||||
|
|
||||||
|
interface IcannAccreditationList {
|
||||||
|
'hydra:totalItems': number
|
||||||
|
'hydra:member': IcannAccreditation[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getIcannAccreditations(params: object): Promise<IcannAccreditationList> {
|
||||||
|
return (await request<IcannAccreditationList>({
|
||||||
|
url: 'entities/icann-accreditations',
|
||||||
|
params
|
||||||
|
})).data
|
||||||
|
}
|
||||||
@ -124,6 +124,16 @@ export interface TrackedDomains {
|
|||||||
'hydra:member': Domain[]
|
'hydra:member': Domain[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface IcannAccreditation {
|
||||||
|
handle: string
|
||||||
|
icannAccreditation: {
|
||||||
|
registrarName: string
|
||||||
|
status: string
|
||||||
|
date?: string
|
||||||
|
updated?: string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export async function request<T = object, R = AxiosResponse<T>, D = object>(config: AxiosRequestConfig): Promise<R> {
|
export async function request<T = object, R = AxiosResponse<T>, D = object>(config: AxiosRequestConfig): Promise<R> {
|
||||||
const axiosConfig: AxiosRequestConfig = {
|
const axiosConfig: AxiosRequestConfig = {
|
||||||
...config,
|
...config,
|
||||||
|
|||||||
@ -3,34 +3,34 @@ msgstr ""
|
|||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
|
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
|
||||||
|
|
||||||
#: assets/App.tsx:119
|
#: assets/App.tsx:121
|
||||||
msgid "TOS"
|
msgid "TOS"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/App.tsx:120
|
#: assets/App.tsx:122
|
||||||
msgid "Privacy Policy"
|
msgid "Privacy Policy"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/App.tsx:121
|
#: assets/App.tsx:123
|
||||||
msgid "FAQ"
|
msgid "FAQ"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/App.tsx:128
|
#: assets/App.tsx:130
|
||||||
msgid "Documentation"
|
msgid "Documentation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/App.tsx:133
|
#: assets/App.tsx:135
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"${ ProjectLink } is an open source project distributed under the ${ "
|
"${ ProjectLink } is an open source project distributed under the ${ "
|
||||||
"LicenseLink } license."
|
"LicenseLink } license."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/App.tsx:146
|
#: assets/App.tsx:148
|
||||||
msgid "Official git repository"
|
msgid "Official git repository"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/App.tsx:149
|
#: assets/App.tsx:151
|
||||||
msgid "Submit an issue"
|
msgid "Submit an issue"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -44,8 +44,8 @@ msgstr ""
|
|||||||
#: assets/components/RegisterForm.tsx:39
|
#: assets/components/RegisterForm.tsx:39
|
||||||
#: assets/components/RegisterForm.tsx:47
|
#: assets/components/RegisterForm.tsx:47
|
||||||
#: assets/components/search/DomainSearchBar.tsx:28
|
#: assets/components/search/DomainSearchBar.tsx:28
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:119
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:157
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:222
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:263
|
||||||
#: assets/utils/providers/forms/AutoDnsConnectorForm.tsx:21
|
#: assets/utils/providers/forms/AutoDnsConnectorForm.tsx:21
|
||||||
#: assets/utils/providers/forms/AutoDnsConnectorForm.tsx:32
|
#: assets/utils/providers/forms/AutoDnsConnectorForm.tsx:32
|
||||||
#: assets/utils/providers/forms/AutoDnsConnectorForm.tsx:47
|
#: assets/utils/providers/forms/AutoDnsConnectorForm.tsx:47
|
||||||
@ -164,73 +164,107 @@ msgid "Entities"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/search/DomainSearchBar.tsx:31
|
#: assets/components/search/DomainSearchBar.tsx:31
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:122
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:160
|
||||||
msgid "This domain name does not appear to be valid"
|
msgid "This domain name does not appear to be valid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/Sider.tsx:29
|
#: assets/components/Sider.tsx:32
|
||||||
msgid "Home"
|
msgid "Home"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/Sider.tsx:35
|
#: assets/components/Sider.tsx:38
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/Sider.tsx:41
|
#: assets/components/Sider.tsx:44
|
||||||
#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:175
|
#: assets/components/tracking/watchlist/TrackedDomainTable.tsx:175
|
||||||
msgid "Domain"
|
msgid "Domain"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/Sider.tsx:42
|
#: assets/components/Sider.tsx:45
|
||||||
msgid "Domain Finder"
|
msgid "Domain Finder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/Sider.tsx:49
|
#: assets/components/Sider.tsx:52
|
||||||
|
msgid "Entity"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/components/Sider.tsx:53
|
||||||
|
msgid "Entity Finder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/components/Sider.tsx:72
|
||||||
|
#: assets/components/Sider.tsx:73
|
||||||
|
msgid "Infrastructure"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/components/Sider.tsx:79
|
||||||
#: assets/pages/StatisticsPage.tsx:114
|
#: assets/pages/StatisticsPage.tsx:114
|
||||||
#: assets/pages/search/TldPage.tsx:78
|
#: assets/pages/infrastructure/TldPage.tsx:79
|
||||||
msgid "TLD"
|
msgid "TLD"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/Sider.tsx:50
|
#: assets/components/Sider.tsx:80
|
||||||
msgid "TLD list"
|
msgid "TLD list"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/Sider.tsx:76
|
#: assets/components/Sider.tsx:87
|
||||||
msgid "Tracking"
|
#: assets/components/Sider.tsx:88
|
||||||
msgstr ""
|
msgid "ICANN list"
|
||||||
|
|
||||||
#: assets/components/Sider.tsx:82
|
|
||||||
msgid "My Watchlists"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: assets/components/Sider.tsx:89
|
|
||||||
msgid "Tracking table"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/Sider.tsx:96
|
#: assets/components/Sider.tsx:96
|
||||||
|
msgid "Tracking"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/components/Sider.tsx:102
|
||||||
|
msgid "My Watchlists"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/components/Sider.tsx:109
|
||||||
|
msgid "Tracking table"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/components/Sider.tsx:116
|
||||||
msgid "My Connectors"
|
msgid "My Connectors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/Sider.tsx:105
|
#: assets/components/Sider.tsx:140
|
||||||
|
#.
|
||||||
|
#. {
|
||||||
|
#. key: 'tools',
|
||||||
|
#. label: t`Tools`,
|
||||||
|
#. icon: <ToolOutlined/>,
|
||||||
|
#. children: [
|
||||||
|
#. {
|
||||||
|
#. key: '/tools/idn',
|
||||||
|
#. icon: <FieldStringOutlined/>,
|
||||||
|
#. label: t`IDN Conversion`,
|
||||||
|
#. onClick: () => navigate('/')
|
||||||
|
#. }
|
||||||
|
#. ]
|
||||||
|
#. },
|
||||||
|
#.
|
||||||
msgid "Statistics"
|
msgid "Statistics"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/Sider.tsx:115
|
#: assets/components/Sider.tsx:150
|
||||||
#: assets/pages/UserPage.tsx:17
|
#: assets/pages/UserPage.tsx:17
|
||||||
msgid "My Account"
|
msgid "My Account"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/Sider.tsx:120
|
#: assets/components/Sider.tsx:155
|
||||||
msgid "Log out"
|
msgid "Log out"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/Sider.tsx:128
|
#: assets/components/Sider.tsx:163
|
||||||
#: assets/pages/LoginPage.tsx:35
|
#: assets/pages/LoginPage.tsx:35
|
||||||
#: assets/pages/LoginPage.tsx:45
|
#: assets/pages/LoginPage.tsx:45
|
||||||
msgid "Log in"
|
msgid "Log in"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/tracking/connector/ConnectorForm.tsx:36
|
#: assets/components/tracking/connector/ConnectorForm.tsx:36
|
||||||
|
#: assets/pages/infrastructure/IcannRegistrarPage.tsx:49
|
||||||
#: assets/utils/functions/rdapTranslation.ts:12
|
#: assets/utils/functions/rdapTranslation.ts:12
|
||||||
msgid "Registrar"
|
msgid "Registrar"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -257,7 +291,7 @@ msgid "Next"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/tracking/connector/ConnectorForm.tsx:96
|
#: assets/components/tracking/connector/ConnectorForm.tsx:96
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:269
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:310
|
||||||
msgid "Create"
|
msgid "Create"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -437,77 +471,190 @@ msgstr ""
|
|||||||
msgid "Watchlist"
|
msgid "Watchlist"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:75
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:113
|
||||||
msgid "Name"
|
msgid "Name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:87
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:125
|
||||||
msgid "Watchlist Name"
|
msgid "Watchlist Name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:88
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:126
|
||||||
msgid "Naming the Watchlist makes it easier to find in the list below."
|
msgid "Naming the Watchlist makes it easier to find in the list below."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:99
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:137
|
||||||
msgid "At least one domain name"
|
msgid "At least one domain name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:110
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:148
|
||||||
msgid "Domain names"
|
msgid "Domain names"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:128
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:166
|
||||||
msgid "Domain name"
|
msgid "Domain name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:147
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:185
|
||||||
msgid "Add a Domain name"
|
msgid "Add a Domain name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:155
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:193
|
||||||
msgid "Tracked events"
|
msgid "Tracked events"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:157
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:195
|
||||||
msgid "At least one trigger"
|
msgid "At least one trigger"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:181
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:222
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:196
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:237
|
||||||
msgid "Connector"
|
msgid "Connector"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:191
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:232
|
||||||
msgid ""
|
msgid ""
|
||||||
"Please make sure the connector information is valid to purchase a domain "
|
"Please make sure the connector information is valid to purchase a domain "
|
||||||
"that may be available soon."
|
"that may be available soon."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:213
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:254
|
||||||
msgid "DSN"
|
msgid "DSN"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:225
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:266
|
||||||
msgid "This DSN does not appear to be valid"
|
msgid "This DSN does not appear to be valid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:249
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:290
|
||||||
msgid "Check out this link to the Symfony documentation to help you build the DSN"
|
msgid "Check out this link to the Symfony documentation to help you build the DSN"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:259
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:300
|
||||||
msgid "Add a Webhook"
|
msgid "Add a Webhook"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:269
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:310
|
||||||
msgid "Update"
|
msgid "Update"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/components/tracking/watchlist/WatchlistForm.tsx:272
|
#: assets/components/tracking/watchlist/WatchlistForm.tsx:313
|
||||||
msgid "Reset"
|
msgid "Reset"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/IcannRegistrarPage.tsx:43
|
||||||
|
msgid "ID"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/IcannRegistrarPage.tsx:77
|
||||||
|
msgid ""
|
||||||
|
"An accredited number means that ICANN's contract with the registrar is "
|
||||||
|
"ongoing."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/IcannRegistrarPage.tsx:82
|
||||||
|
msgid "A reserved number can be used by TLD registries for specific operations."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/IcannRegistrarPage.tsx:87
|
||||||
|
msgid ""
|
||||||
|
"A terminated number means that ICANN's contract with the registrar has been "
|
||||||
|
"terminated."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/IcannRegistrarPage.tsx:96
|
||||||
|
msgid "This page lists ICANN-accredited registrars."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/IcannRegistrarPage.tsx:99
|
||||||
|
msgid ""
|
||||||
|
"The list is officially published and maintained by the Internet Assigned "
|
||||||
|
"Numbers Authority (IANA), the organization responsible for managing the "
|
||||||
|
"Internet's unique identifiers (including numbers, IP addresses, and domain "
|
||||||
|
"name extensions)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/IcannRegistrarPage.tsx:111
|
||||||
|
msgid "Accredited"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/IcannRegistrarPage.tsx:116
|
||||||
|
msgid "Reserved"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/IcannRegistrarPage.tsx:121
|
||||||
|
msgid "Terminated"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/TldPage.tsx:86
|
||||||
|
msgid "Flag"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/TldPage.tsx:89
|
||||||
|
msgid "Country"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/TldPage.tsx:96
|
||||||
|
msgid "Registry Operator"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/TldPage.tsx:124
|
||||||
|
msgid ""
|
||||||
|
"Top-level domains sponsored by specific organizations that set rules for "
|
||||||
|
"registration and use, often related to particular interest groups or "
|
||||||
|
"industries."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/TldPage.tsx:129
|
||||||
|
msgid ""
|
||||||
|
"Generic top-level domains open to everyone, not restricted by specific "
|
||||||
|
"criteria, representing various themes or industries."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/TldPage.tsx:134
|
||||||
|
msgid ""
|
||||||
|
"Generic top-level domains associated with specific brands, allowing "
|
||||||
|
"companies to use their own brand names as domains."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/TldPage.tsx:139
|
||||||
|
msgid ""
|
||||||
|
"Top-level domains based on country codes, identifying websites according to "
|
||||||
|
"their country of origin."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/TldPage.tsx:148
|
||||||
|
msgid "This page presents all active TLDs in the root zone database."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/TldPage.tsx:151
|
||||||
|
msgid ""
|
||||||
|
"IANA provides the list of currently active TLDs, regardless of their type, "
|
||||||
|
"and ICANN provides the list of gTLDs.\n"
|
||||||
|
"In most cases, the two-letter ccTLD assigned to a country is made in "
|
||||||
|
"accordance with the ISO 3166-1 standard.\n"
|
||||||
|
"This data is updated every month. Three HTTP requests are needed for the "
|
||||||
|
"complete update of TLDs in Domain Watchdog (two requests to IANA and one to "
|
||||||
|
"ICANN).\n"
|
||||||
|
"At the same time, the list of root RDAP servers is updated."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/TldPage.tsx:166
|
||||||
|
msgid "Generic Top-Level-Domains"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/TldPage.tsx:171
|
||||||
|
msgid "Country-Code Top-Level-Domains"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/TldPage.tsx:176
|
||||||
|
msgid "Brand Generic Top-Level-Domains"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assets/pages/infrastructure/TldPage.tsx:181
|
||||||
|
msgid "Sponsored Top-Level-Domains"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: assets/pages/LoginPage.tsx:45
|
#: assets/pages/LoginPage.tsx:45
|
||||||
msgid "Create an account"
|
msgid "Create an account"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -526,75 +673,6 @@ msgid ""
|
|||||||
"WHOIS by its registrar."
|
"WHOIS by its registrar."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/pages/search/TldPage.tsx:85
|
|
||||||
msgid "Flag"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: assets/pages/search/TldPage.tsx:88
|
|
||||||
msgid "Country"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: assets/pages/search/TldPage.tsx:95
|
|
||||||
msgid "Registry Operator"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: assets/pages/search/TldPage.tsx:123
|
|
||||||
msgid ""
|
|
||||||
"Top-level domains sponsored by specific organizations that set rules for "
|
|
||||||
"registration and use, often related to particular interest groups or "
|
|
||||||
"industries."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: assets/pages/search/TldPage.tsx:128
|
|
||||||
msgid ""
|
|
||||||
"Generic top-level domains open to everyone, not restricted by specific "
|
|
||||||
"criteria, representing various themes or industries."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: assets/pages/search/TldPage.tsx:133
|
|
||||||
msgid ""
|
|
||||||
"Generic top-level domains associated with specific brands, allowing "
|
|
||||||
"companies to use their own brand names as domains."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: assets/pages/search/TldPage.tsx:138
|
|
||||||
msgid ""
|
|
||||||
"Top-level domains based on country codes, identifying websites according to "
|
|
||||||
"their country of origin."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: assets/pages/search/TldPage.tsx:147
|
|
||||||
msgid "This page presents all active TLDs in the root zone database."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: assets/pages/search/TldPage.tsx:150
|
|
||||||
msgid ""
|
|
||||||
"IANA provides the list of currently active TLDs, regardless of their type, "
|
|
||||||
"and ICANN provides the list of gTLDs.\n"
|
|
||||||
"In most cases, the two-letter ccTLD assigned to a country is made in "
|
|
||||||
"accordance with the ISO 3166-1 standard.\n"
|
|
||||||
"This data is updated every month. Three HTTP requests are needed for the "
|
|
||||||
"complete update of TLDs in Domain Watchdog (two requests to IANA and one to "
|
|
||||||
"ICANN).\n"
|
|
||||||
"At the same time, the list of root RDAP servers is updated."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: assets/pages/search/TldPage.tsx:165
|
|
||||||
msgid "Generic Top-Level-Domains"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: assets/pages/search/TldPage.tsx:170
|
|
||||||
msgid "Country-Code Top-Level-Domains"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: assets/pages/search/TldPage.tsx:175
|
|
||||||
msgid "Brand Generic Top-Level-Domains"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: assets/pages/search/TldPage.tsx:180
|
|
||||||
msgid "Sponsored Top-Level-Domains"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: assets/pages/StatisticsPage.tsx:35
|
#: assets/pages/StatisticsPage.tsx:35
|
||||||
msgid "RDAP queries"
|
msgid "RDAP queries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -638,15 +716,15 @@ msgstr ""
|
|||||||
msgid "Create a Connector"
|
msgid "Create a Connector"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/pages/tracking/WatchlistPage.tsx:51
|
#: assets/pages/tracking/WatchlistPage.tsx:63
|
||||||
msgid "Watchlist created !"
|
msgid "Watchlist created !"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/pages/tracking/WatchlistPage.tsx:63
|
#: assets/pages/tracking/WatchlistPage.tsx:75
|
||||||
msgid "Watchlist updated !"
|
msgid "Watchlist updated !"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/pages/tracking/WatchlistPage.tsx:87
|
#: assets/pages/tracking/WatchlistPage.tsx:99
|
||||||
msgid "Create a Watchlist"
|
msgid "Create a Watchlist"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -661,7 +739,7 @@ msgstr ""
|
|||||||
msgid "Roles"
|
msgid "Roles"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assets/utils/functions/DomainToTag.tsx:19
|
#: assets/utils/functions/DomainToTag.tsx:16
|
||||||
msgid "The domain name was updated less than a week ago."
|
msgid "The domain name was updated less than a week ago."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user