主题(皮肤)与多语言
主题体系:CSS 变量驱动
OCPS 主题是 CSS 变量集合,前端读取主题 API 注入 :root 变量即可换肤,无需重写样式。内置 7+ 套官方皮肤:
| 代码 | 名称 | 风格 | ||
|---|---|---|---|---|
starlight | 星辉 | 浅色极简,干净通透 | ||
indigo | 靛蓝之夜 | 深色科技感 | ||
midnight | 午夜 | 深蓝 + 天青,开发者友好 | ||
noir | 黑金 | 近黑 + 香槟金,商务奢华 | ||
emerald | 翡翠 | 墨绿 + 翡翠主色 | ||
aurum | 琥珀 | 暖金 | ||
bordeaux | 酒红 | 红金 | ||
arcade | 街机 | 游戏风 | ||
sonic | 声波 | 音频风 |
主题变量示例:
:root {
--brand: #4f46e5;
--brand-2: #7c3aed;
--brand-3: #0ea5e9;
--bg: #ffffff;
--card: #f8fafc;
--text: #0f172a;
--border: #e2e8f0;
}
主题 API
GET https://api.ocps.cc/themes/v1/themes?lang=cn
返回主题列表(代码、名称、描述、CSS 变量)。前端渲染时:
<style id="ocps-theme"></style>
<script>
fetch('https://api.ocps.cc/themes/v1/themes')
.then(r => r.json())
.then(d => {
const t = d.items.find(x => x.code === 'starlight');
const vars = Object.entries(t.variables).map(([k,v]) => k + ': ' + v + ';').join('');
document.getElementById('ocps-theme').textContent = ':root{' + vars + '}';
});
</script>
前端皮肤切换
导航栏通常放一个"衣服"图标,点击弹出皮肤下拉(与语言切换并列):
- 拉取主题列表渲染下拉;
- 选择后把主题代码写入 Cookie / localStorage;
- 刷新或实时注入 CSS 变量;
- 平台后台可管理皮肤(新增/编辑/删除),应用安装模板时读取
theme_default。
多语言(8 语言)
平台默认 8 种语言:en / cn / tw / jp / de / fr / es / ar。
语言路由约定
/{lang} # 语言首页
/{lang}/{module} # 模块页
/{lang}/{module}/list/{slug} # 分类列表
/{lang}/{module}/list/d/{slug} # 详情页(d = detail)
/sitemap.xml # 多语言站点地图
/robots.txt
内容多语言
- 每条内容带
lang字段;同一内容不同语言建议各建一条,meta_json.variant_ids互相关联; - 列表接口
?lang=过滤; - SEO 建议输出
hreflang与canonical,并在 sitemap 中列出所有语言变体。
RTL(阿拉伯语)
ar 语言需启用 RTL:<html dir="rtl" lang="ar">,同时把 CSS 逻辑属性(margin-inline-start 等)做好;OCPS 前端统一用逻辑方向,RTL 自动翻转。
模板的 8 语言
模板名称/描述支持 name_json / description_json(8 语言键),市场展示按当前语言取词。