import 'package:flutter/widgets.dart'; import 'package:wechat_assets_picker/wechat_assets_picker.dart'; abstract final class AssetPickerLocalization { static final RegExp _separatorPattern = RegExp(r'[._-]+'); static final RegExp _whitespacePattern = RegExp(r'\s+'); static const Map _systemPathNames = { 'recent': '最近项目', 'recents': '最近项目', 'all': '全部', 'all photos': '所有照片', 'all images': '所有图片', 'all videos': '所有视频', 'camera': '相机', 'camera roll': '相机胶卷', 'dcim': '相机', 'screenshot': '截屏', 'screenshots': '截屏', 'screen shot': '截屏', 'screen shots': '截屏', 'screen recording': '屏幕录制', 'screen recordings': '屏幕录制', 'screen recorder': '屏幕录制', 'recordings': '录制内容', 'recording': '录制内容', 'pictures': '图片', 'picture': '图片', 'images': '图片', 'image': '图片', 'photos': '照片', 'photo': '照片', 'videos': '视频', 'video': '视频', 'movies': '影片', 'movie': '影片', 'downloads': '下载', 'download': '下载', 'documents': '文档', 'document': '文档', 'saved pictures': '已保存的图片', 'saved images': '已保存的图片', 'saved photos': '已保存的照片', 'edited': '已编辑', 'edited photos': '已编辑照片', 'edited images': '已编辑图片', 'cropped': '已裁剪', 'cropped images': '已裁剪图片', 'collage': '拼图', 'collages': '拼图', 'restored': '已恢复', 'favorites': '收藏', 'favourites': '收藏', 'favorite': '收藏', 'favourite': '收藏', 'hidden': '已隐藏', 'trash': '回收站', 'recycle bin': '回收站', 'recently deleted': '最近删除', 'panorama': '全景照片', 'panoramas': '全景照片', 'portrait': '人像', 'portraits': '人像', 'selfie': '自拍', 'selfies': '自拍', 'live photo': '实况照片', 'live photos': '实况照片', 'raw': 'RAW 照片', 'raw photos': 'RAW 照片', 'gif': '动图', 'gifs': '动图', 'animated': '动图', 'animated images': '动图', 'burst': '连拍快照', 'bursts': '连拍快照', 'slow motion': '慢动作', 'slo mo': '慢动作', 'time lapse': '延时摄影', 'long screenshot': '长截屏', 'long screenshots': '长截屏', 'wallpaper': '壁纸', 'wallpapers': '壁纸', 'bluetooth': '蓝牙', 'nearby share': '附近分享', 'received files': '接收的文件', 'scanner': '扫描件', 'scans': '扫描件', 'mishare': '小米互传', 'huawei share': '华为分享', 'honor share': '荣耀分享', 'shareit': '茄子快传', }; static const Map _appPathNames = { 'facebook messenger': 'Messenger', 'photoshop express': 'Photoshop Express', 'baidu netdisk': '百度网盘', 'baidunetdisk': '百度网盘', 'tencent qq': 'QQ', 'qqfile recv': 'QQ 接收文件', 'micro msg': '微信', 'micromsg': '微信', 'com tencent mm': '微信', 'wei xin': '微信', 'weixin': '微信', 'wechat': '微信', 'wechat work': '企业微信', 'wecom': '企业微信', 'wework': '企业微信', 'wxwork': '企业微信', 'qq': 'QQ', 'dingtalk': '钉钉', 'ding talk': '钉钉', 'feishu': '飞书', 'lark': '飞书', 'sina weibo': '微博', 'weibo': '微博', 'douyin': '抖音', 'aweme': '抖音', 'tiktok': 'TikTok', 'kuaishou': '快手', 'kwai': '快手', 'xiaohongshu': '小红书', 'xhs': '小红书', 'red': '小红书', 'bilibili': '哔哩哔哩', 'zhihu': '知乎', 'baidu': '百度', 'alipay': '支付宝', 'taobao': '淘宝', 'tmall': '天猫', 'jingdong': '京东', 'jd': '京东', 'wps': 'WPS', 'ucdownloads': 'UC 下载', 'qqbrowser': 'QQ 浏览器', 'quark': '夸克', 'netdisk': '网盘', 'whatsapp': 'WhatsApp', 'whatsapp business': 'WhatsApp Business', 'telegram': 'Telegram', 'instagram': 'Instagram', 'facebook': 'Facebook', 'messenger': 'Messenger', 'twitter': 'Twitter', 'snapchat': 'Snapchat', 'line': 'LINE', 'discord': 'Discord', 'reddit': 'Reddit', 'pinterest': 'Pinterest', 'signal': 'Signal', 'viber': 'Viber', 'capcut': '剪映', 'jianying': '剪映', 'meitu': '美图', 'picsart': 'PicsArt', 'canva': 'Canva', 'lightroom': 'Lightroom', 'inshot': 'InShot', 'kinemaster': 'KineMaster', 'google photos': 'Google 相册', 'onedrive': 'OneDrive', 'dropbox': 'Dropbox', }; static const Map _mediaSuffixNames = { 'image': '图片', 'images': '图片', 'picture': '图片', 'pictures': '图片', 'photo': '照片', 'photos': '照片', 'video': '视频', 'videos': '视频', 'movie': '影片', 'movies': '影片', 'audio': '音频', 'audios': '音频', 'music': '音乐', 'document': '文档', 'documents': '文档', 'doc': '文档', 'docs': '文档', 'file': '文件', 'files': '文件', 'download': '下载', 'downloads': '下载', 'received': '接收文件', 'received files': '接收文件', 'animated gif': '动图', 'animated gifs': '动图', 'gif': '动图', 'gifs': '动图', }; static String pathName( BuildContext context, AssetPathEntity path, ) { final Locale locale = Localizations.maybeLocaleOf(context) ?? WidgetsBinding.instance.platformDispatcher.locale; return pathNameForLocale(locale, path); } static String pathNameForLocale(Locale locale, AssetPathEntity path) { if (locale.languageCode.toLowerCase() != 'zh') { return path.name; } if (path.isAll) { return '最近项目'; } final String normalizedName = _normalize(path.name); final String? systemName = _systemPathNames[normalizedName]; if (systemName != null) { return systemName; } final String? appName = _appPathNames[normalizedName]; if (appName != null) { return appName; } for (final MapEntry app in _appPathNames.entries) { final String prefix = '${app.key} '; if (!normalizedName.startsWith(prefix)) { continue; } final String suffix = normalizedName.substring(prefix.length); final String? translatedSuffix = _mediaSuffixNames[suffix]; if (translatedSuffix != null) { return '${app.value} $translatedSuffix'; } } return path.name; } static String _normalize(String name) { return name .trim() .toLowerCase() .replaceAll(_separatorPattern, ' ') .replaceAll(_whitespacePattern, ' '); } }