feat(media): extract workspace package
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
import { describe, expect, it } from "vitest"
|
||||
|
||||
import { mediaMessages } from "../messages"
|
||||
import { mediaCatalogLocales } from "./catalogs"
|
||||
import { messages as enUS } from "./en-US"
|
||||
import { messages as zhHans } from "./zh-Hans"
|
||||
|
||||
describe("media locale catalogs", () => {
|
||||
it("ships every media message in every built-in locale", () => {
|
||||
expectCompleteCatalogs({
|
||||
catalogs: {
|
||||
"en-US": enUS,
|
||||
"zh-Hans": zhHans,
|
||||
},
|
||||
locales: mediaCatalogLocales,
|
||||
messageIds: Object.values(mediaMessages).map(
|
||||
(descriptor) => descriptor.id
|
||||
),
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
function expectCompleteCatalogs({
|
||||
catalogs,
|
||||
locales,
|
||||
messageIds,
|
||||
}: {
|
||||
catalogs: Readonly<Record<string, Readonly<Record<string, string>>>>
|
||||
locales: readonly string[]
|
||||
messageIds: readonly string[]
|
||||
}) {
|
||||
expect(Object.keys(catalogs)).toEqual([...locales])
|
||||
|
||||
const expectedIds = new Set(messageIds)
|
||||
for (const messages of Object.values(catalogs)) {
|
||||
expect(new Set(Object.keys(messages))).toEqual(expectedIds)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
import type { mediaMessages } from "../messages"
|
||||
|
||||
export const mediaCatalogLocales = ["en-US", "zh-Hans"] as const
|
||||
|
||||
interface MessageDescriptorMap {
|
||||
readonly [key: string]: {
|
||||
readonly id: string
|
||||
}
|
||||
}
|
||||
|
||||
type MessageId<T extends MessageDescriptorMap> = T[keyof T]["id"]
|
||||
|
||||
export type MediaCatalogLocale = (typeof mediaCatalogLocales)[number]
|
||||
export type MediaMessageCatalog = Readonly<
|
||||
Record<MessageId<typeof mediaMessages>, string>
|
||||
>
|
||||
@@ -0,0 +1,73 @@
|
||||
import type { MediaMessageCatalog } from "./catalogs"
|
||||
|
||||
export const locale = "en-US"
|
||||
export const languageTag = "en-US"
|
||||
export const messages = {
|
||||
"blocks.media.actions.cancel": "Cancel",
|
||||
"blocks.media.actions.copyInformation": "Copy information",
|
||||
"blocks.media.actions.copyLink": "Copy link",
|
||||
"blocks.media.actions.copyName": "Copy name",
|
||||
"blocks.media.actions.delete": "Delete",
|
||||
"blocks.media.actions.details": "View details",
|
||||
"blocks.media.actions.favorite": "Favorite",
|
||||
"blocks.media.actions.loadMore": "Load more",
|
||||
"blocks.media.actions.moveToFolder": "Move to folder",
|
||||
"blocks.media.actions.rename": "Rename",
|
||||
"blocks.media.actions.retry": "Try again",
|
||||
"blocks.media.actions.save": "Save",
|
||||
"blocks.media.actions.saving": "Saving…",
|
||||
"blocks.media.actions.select": "Select",
|
||||
"blocks.media.actions.selectFolder": "Select folder {name}",
|
||||
"blocks.media.actions.unfavorite": "Unfavorite",
|
||||
"blocks.media.actions.upload": "Upload",
|
||||
"blocks.media.actions.viewOriginal": "View original",
|
||||
"blocks.media.copy.failed":
|
||||
"Copy failed. Check browser clipboard permissions.",
|
||||
"blocks.media.deleteAsset.description":
|
||||
"This media item will no longer appear in the library.",
|
||||
"blocks.media.deleteAsset.title": "Delete media",
|
||||
"blocks.media.deleteFolder.description":
|
||||
"This folder and its child folders will be deleted. Their media items will become unclassified.",
|
||||
"blocks.media.deleteFolder.title": "Delete folder",
|
||||
"blocks.media.details.dimensions": "Dimensions",
|
||||
"blocks.media.details.fileName": "File name",
|
||||
"blocks.media.details.noDimensions": "Unknown",
|
||||
"blocks.media.details.size": "Size",
|
||||
"blocks.media.details.type": "Type",
|
||||
"blocks.media.details.uploadedAt": "Uploaded",
|
||||
"blocks.media.empty.description":
|
||||
"Upload images or videos to manage them here.",
|
||||
"blocks.media.empty.title": "No media",
|
||||
"blocks.media.emptySearch.description": "No media files match your search.",
|
||||
"blocks.media.filters.all": "All media",
|
||||
"blocks.media.filters.favorite": "Favorites",
|
||||
"blocks.media.filters.image": "Images",
|
||||
"blocks.media.filters.unclassified": "Unclassified",
|
||||
"blocks.media.filters.video": "Videos",
|
||||
"blocks.media.folders.classification":
|
||||
"Folders only organize media in this library and do not change file URLs.",
|
||||
"blocks.media.folders.create": "New folder",
|
||||
"blocks.media.folders.empty": "No folders yet. Create one.",
|
||||
"blocks.media.folders.name": "Folder name",
|
||||
"blocks.media.folders.newChild": "New child folder",
|
||||
"blocks.media.folders.placeholder": "Enter a folder name",
|
||||
"blocks.media.folders.rename": "Rename folder",
|
||||
"blocks.media.folders.title": "Folders",
|
||||
"blocks.media.load.error": "Unable to load media",
|
||||
"blocks.media.loading": "Loading media…",
|
||||
"blocks.media.picker.description":
|
||||
"Choose an uploaded image or video from the media library.",
|
||||
"blocks.media.picker.selectedCount": "{count} selected",
|
||||
"blocks.media.picker.title": "Select media",
|
||||
"blocks.media.picker.useSelected": "Use selected media",
|
||||
"blocks.media.renameMedia.description":
|
||||
"This changes the display name without changing the file or its URL.",
|
||||
"blocks.media.renameMedia.title": "Rename media",
|
||||
"blocks.media.search": "Search media files",
|
||||
"blocks.media.title": "Media library",
|
||||
"blocks.media.upload.chooseStorage": "Choose cloud storage",
|
||||
"blocks.media.upload.cloud": "Upload to cloud",
|
||||
"blocks.media.upload.error": "Unable to upload media.",
|
||||
"blocks.media.upload.server": "Upload to server",
|
||||
"blocks.media.upload.success": "{count} media files uploaded.",
|
||||
} as const satisfies MediaMessageCatalog
|
||||
@@ -0,0 +1,69 @@
|
||||
import type { MediaMessageCatalog } from "./catalogs"
|
||||
|
||||
export const locale = "zh-Hans"
|
||||
export const languageTag = "zh-CN"
|
||||
export const messages = {
|
||||
"blocks.media.actions.cancel": "取消",
|
||||
"blocks.media.actions.copyInformation": "复制媒体信息",
|
||||
"blocks.media.actions.copyLink": "复制链接",
|
||||
"blocks.media.actions.copyName": "复制名称",
|
||||
"blocks.media.actions.delete": "删除",
|
||||
"blocks.media.actions.details": "查看详情",
|
||||
"blocks.media.actions.favorite": "收藏",
|
||||
"blocks.media.actions.loadMore": "加载更多",
|
||||
"blocks.media.actions.moveToFolder": "移动到目录",
|
||||
"blocks.media.actions.rename": "重命名",
|
||||
"blocks.media.actions.retry": "重新加载",
|
||||
"blocks.media.actions.save": "保存",
|
||||
"blocks.media.actions.saving": "正在保存…",
|
||||
"blocks.media.actions.select": "选择",
|
||||
"blocks.media.actions.selectFolder": "选择目录:{name}",
|
||||
"blocks.media.actions.unfavorite": "取消收藏",
|
||||
"blocks.media.actions.upload": "上传",
|
||||
"blocks.media.actions.viewOriginal": "查看原文件",
|
||||
"blocks.media.copy.failed": "复制失败,请检查浏览器剪贴板权限。",
|
||||
"blocks.media.deleteAsset.description": "该媒体将不再显示在媒体库中。",
|
||||
"blocks.media.deleteAsset.title": "删除媒体",
|
||||
"blocks.media.deleteFolder.description":
|
||||
"该目录及其子目录将被删除,其中的媒体会变为未分类。",
|
||||
"blocks.media.deleteFolder.title": "删除目录",
|
||||
"blocks.media.details.dimensions": "尺寸",
|
||||
"blocks.media.details.fileName": "文件名称",
|
||||
"blocks.media.details.noDimensions": "未知",
|
||||
"blocks.media.details.size": "大小",
|
||||
"blocks.media.details.type": "类型",
|
||||
"blocks.media.details.uploadedAt": "上传时间",
|
||||
"blocks.media.empty.description": "上传图片或视频后,可在这里统一管理。",
|
||||
"blocks.media.empty.title": "暂无媒体",
|
||||
"blocks.media.emptySearch.description": "没有找到匹配的媒体文件。",
|
||||
"blocks.media.filters.all": "全部媒体",
|
||||
"blocks.media.filters.favorite": "收藏",
|
||||
"blocks.media.filters.image": "图片",
|
||||
"blocks.media.filters.unclassified": "未分类",
|
||||
"blocks.media.filters.video": "视频",
|
||||
"blocks.media.folders.classification":
|
||||
"目录仅用于媒体库内分类,不会改变文件链接。",
|
||||
"blocks.media.folders.create": "新建目录",
|
||||
"blocks.media.folders.empty": "暂无目录,点击新建。",
|
||||
"blocks.media.folders.name": "目录名称",
|
||||
"blocks.media.folders.newChild": "新建子目录",
|
||||
"blocks.media.folders.placeholder": "输入目录名称",
|
||||
"blocks.media.folders.rename": "重命名目录",
|
||||
"blocks.media.folders.title": "目录",
|
||||
"blocks.media.load.error": "无法加载媒体",
|
||||
"blocks.media.loading": "正在加载媒体…",
|
||||
"blocks.media.picker.description": "从媒体库中选择已上传的图片或视频。",
|
||||
"blocks.media.picker.selectedCount": "已选择 {count} 项",
|
||||
"blocks.media.picker.title": "选择媒体",
|
||||
"blocks.media.picker.useSelected": "使用所选媒体",
|
||||
"blocks.media.renameMedia.description":
|
||||
"仅修改展示名称,不会改变文件或已有链接。",
|
||||
"blocks.media.renameMedia.title": "修改媒体名称",
|
||||
"blocks.media.search": "搜索媒体文件",
|
||||
"blocks.media.title": "媒体库",
|
||||
"blocks.media.upload.chooseStorage": "选择云端存储",
|
||||
"blocks.media.upload.cloud": "上传到云端",
|
||||
"blocks.media.upload.error": "无法上传媒体文件。",
|
||||
"blocks.media.upload.server": "上传到服务器",
|
||||
"blocks.media.upload.success": "已上传 {count} 个媒体文件。",
|
||||
} as const satisfies MediaMessageCatalog
|
||||
Reference in New Issue
Block a user