58 lines
2.1 KiB
SQL
Executable file
58 lines
2.1 KiB
SQL
Executable file
-- I18N Feature Database Initialization
|
|
|
|
-- Translations table
|
|
CREATE TABLE IF NOT EXISTS translations (
|
|
id SERIAL PRIMARY KEY,
|
|
key VARCHAR(255) NOT NULL,
|
|
namespace VARCHAR(100) NOT NULL DEFAULT 'common',
|
|
locale VARCHAR(10) NOT NULL,
|
|
source_text TEXT NOT NULL,
|
|
translated_text TEXT NOT NULL,
|
|
quality_score DECIMAL(3, 2) DEFAULT 0.00,
|
|
provider VARCHAR(50),
|
|
from_cache BOOLEAN DEFAULT FALSE,
|
|
from_static BOOLEAN DEFAULT FALSE,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
UNIQUE(key, namespace, locale)
|
|
);
|
|
|
|
-- Glossary table
|
|
CREATE TABLE IF NOT EXISTS glossary (
|
|
id SERIAL PRIMARY KEY,
|
|
source VARCHAR(255) NOT NULL,
|
|
category VARCHAR(100) NOT NULL DEFAULT 'general',
|
|
translations JSONB NOT NULL DEFAULT '{}',
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
UNIQUE(source, category)
|
|
);
|
|
|
|
-- Locales table
|
|
CREATE TABLE IF NOT EXISTS locales (
|
|
code VARCHAR(10) PRIMARY KEY,
|
|
name VARCHAR(100) NOT NULL,
|
|
native_name VARCHAR(100) NOT NULL,
|
|
flag VARCHAR(10),
|
|
rtl BOOLEAN DEFAULT FALSE,
|
|
enabled BOOLEAN DEFAULT TRUE,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
);
|
|
|
|
-- Default locales
|
|
INSERT INTO locales (code, name, native_name, flag, rtl) VALUES
|
|
('en', 'English', 'English', '🇺🇸', false),
|
|
('es', 'Spanish', 'Español', '🇪🇸', false),
|
|
('fr', 'French', 'Français', '🇫🇷', false),
|
|
('de', 'German', 'Deutsch', '🇩🇪', false),
|
|
('ja', 'Japanese', '日本語', '🇯🇵', false),
|
|
('ko', 'Korean', '한국어', '🇰🇷', false),
|
|
('zh', 'Chinese', '中文', '🇨🇳', false),
|
|
('ar', 'Arabic', 'العربية', '🇸🇦', true),
|
|
('he', 'Hebrew', 'עברית', '🇮🇱', true)
|
|
ON CONFLICT (code) DO NOTHING;
|
|
|
|
-- Indexes
|
|
CREATE INDEX IF NOT EXISTS idx_translations_key_locale ON translations(key, locale);
|
|
CREATE INDEX IF NOT EXISTS idx_translations_namespace ON translations(namespace);
|
|
CREATE INDEX IF NOT EXISTS idx_glossary_category ON glossary(category);
|