WWW.YOUINFO.SITE
标签聚合 国际

/tag/国际

LinuxDo 最新话题 · 2026-06-11 20:54:16+08:00 · tech

才知道,看了下是6.1的旧闻了,但是站里也没看到,发一下 全球首部人工智能治理法正式生效。其意义何在? 通用人工智能治理协议于 2026 年 6 月 1 日成为可强制执行的国际法——这将影响 OpenAI、谷歌以及所有部署前沿人工智能模型的公司。 2026年6月1日,技术监管史上发生了一件前所未有的事情:通用人工智能治理协议从自愿性准则转变为可强制执行的国际法。联合国与欧盟人工智能法案的执行团队以及来自包括美国、印度、日本、韩国和英国在内的47个参与国的监管机构协调合作,制定了首个全球人工智能透明度和安全性基准。历史上首次,部署前沿人工智能模型的科技公司无论其服务器位于何处或公司注册地在哪里,都面临着具有法律约束力的合规框架。人工智能监管套利的时代原则上已经结束。 协议的实际要求 核心要求适用于参与辖区内部署的任何参数超过一万亿的人工智能模型——基本上涵盖了OpenAI、Google DeepMind、Anthropic、Meta和Mistral等公司的所有前沿模型,同时豁免了大多数初创企业和企业开发者使用的中型模型。受监管的模型在部署到新的用途类别之前,必须接受强制性的第三方安全审计。它们必须向监管机构提供算法透明度文档——包括政府可查阅的训练数据来源说明、安全评估结果以及已知的性能限制。此外,它们还必须实施标准化的事件报告机制:当受监管的人工智能系统造成或促成损害时,开发者必须在72小时内向相关国家主管部门报告。 处罚:不合规的实际代价 违规行为可能导致罚款,罚款金额按全球年收入的一定比例计算(遵循GDPR的结构),最严重的违规行为最高罚款可达全球年收入的6%。运营处罚包括有权撤销参与司法管辖区的部署许可,从而有效地阻止某个模型同时在47个国家/地区使用。欧盟拥有最完善的执法机制,其耗时三年建立的欧盟人工智能办公室目前与新成立的联合国人工智能监督秘书处一起,成为两大主要监管机构之一。美国尚未通过与欧盟人工智能法案类似的联邦人工智能立法,但已通过行政协议同意遵守国际协议。 这对印度的AI生态系统意味着什么 印度是全球协议的签署国,这既为印度蓬勃发展的AI行业带来了义务,也带来了机遇。印度170多家AI初创公司中,绝大多数(占绝大多数)部署的模型参数低于一万亿的印度AI公司无需接受强制审计。这维持了印度AI生态系统相对宽松的监管环境,使其更具竞争力。对于规模较大的印度科技公司——例如Infosys、TCS、Wipro和Tech Mahindra等,它们都拥有重要的AI业务——协议要求它们确保为参与司法管辖区的客户部署的任何前沿AI模型都符合透明度和审计要求。这加速了对AI治理咨询服务的需求,而印度的IT服务巨头们在全球市场中拥有得天独厚的优势来提供此类服务。 中国、俄罗斯与不参与的地缘政治 这些协议涵盖47个国家,但中国、俄罗斯和几个海湾国家明显缺席。中国对人工智能的监管方式以国内为导向,侧重于内容控制而非安全透明度;参与联合国协调的框架将需要披露与这种方式不符的信息。这造成了一种结构性矛盾:在非签署国市场部署模型的中国人工智能公司无需承担合规义务,而美国、欧洲和印度的公司则面临强制性审计和报告。这种不对称性是否会促使中国重新考虑不参与该协议,或者是否会给中国带来削弱协议的压力,是未来十年人工智能治理的核心地缘政治问题。现有已部署的模型有六个月的过渡期,截止日期为2026年12月1日,在此期间需要完成初步合规审计。人工智能行业已对此做出回应,对合规基础设施进行了大量投资:第三方人工智能审计公司报告称,自3月份协议最终确定以来,客户咨询量增加了300%至400%。 TechPopDaily – 2 Jun 26 Global AI Governance Law 2026: What It Means for Tech Companies Worldwide Universal AI governance protocols became enforceable international law June 1, 2026, with mandatory audits for models over 1T parameters—affecting all major A 2 个帖子 - 2 位参与者 阅读完整话题

v2ex · 2026-06-11 16:37:36+08:00 · tech

对于经常折腾 VPS 和独立服务器的玩家来说,阿里云国际版的香港、新加坡以及美西精品网线路,在延迟和稳定性上一直是有目共睹的。不过,国际站的付款门槛挡住了不少国内开发者。 今天分享一个无需海外信用卡、通过正规分销商实现账号充值和余额托管的方案。 账号充值核心痛点 注册时提示需要验证海外手机号。 绑定消费卡时因账单地址不符导致风控。 无法使用国内常规支付手段进行直接结算。 官方授权代理商的解决方案 通过关联代理商 LingduCloud 账户,你的阿里云国际站账号可以转为“余额支付”模式。代理商会直接向你的账户中注入官方美金余额。 📩 客服 Telegram: @ cloudcup 🔥 合作平台: 阿里云国际|腾讯云国际|华为云国际| AWS | GCP | Azure 🔗 官方网站: https://www.lingducloud.com ✈️自助开户充值:@cloudcup_bot ✈️双向联系:@cloudcupbot

cnBeta全文版 · 2026-06-11 13:05:24+08:00 · tech

泡泡玛特国际集团有限公司正回应外界对其海外业务过度依赖“昙花一现”爆款的担忧。公司表示,Labubu去年的爆发式增长,反而掩盖了其他玩具的强劲表现。首席运营官司德在接受媒体采访时透露,去年美国市场非Labubu产品的销售额约占总收入的50%。这是泡泡玛特首次披露其最大海外单一市场的细分数据。他表示,在日本、韩国和东南亚等地,非Labubu角色已经占据了销售额的大部分。 司德于2015年加入泡泡玛特,当时公司正从一家生活杂货零售连锁店转型为专注于艺术玩具的公司。他表示:“去年,人们过分强调了Labubu的重要性。” 他说:“泡泡玛特的其他知识产权也实现了强劲增长,并获得了大量用户和粉丝,但它们完全被Labubu的光芒所掩盖。”他举例提到了“星星人”系列——这是一套星星形象的公仔和玩具,是该公司在亚洲增长最快的角色之一。 Labubu是中国产品在西方市场引发消费者狂热的罕见例子,去年这股热潮达到顶峰时,玩具在几秒钟内就被抢购一空。但自去年8月创下历史新高以来,泡泡玛特股价已下跌近一半,市值蒸发约280亿美元,原因是投资者越来越担心公司能否让这个长着龅牙的怪兽形象成为经久不衰的热门产品,还是说它只是一时的风潮。 在2025年收入飙升185%(其中海外市场增长300%)之后,出现放缓的迹象正在累积。根据Bloomberg Second Measure数据,泡泡玛特在美国这一关键增长引擎的销售额,在3月份下降45%之后,4月份又下降了42%。尽管第一季度总收入可能攀升了80%,但公司对今年的增长指引是至少20%。 泡泡玛特股价周三上涨5%,结束了连续四天的下跌,这与香港基准指数的下跌走势形成对比。 仅仅是炒作? 不过,一些分析师更为悲观。摩根士丹利预计今年销售增长13%,汇丰控股预测增长9.6%。与此同时,德意志银行预测将下降2%,理由是泡泡玛特的商业模式容易受到Labubu热潮退去的影响。 德意志银行消费分析师Sammi Xu表示:“我们认为Labubu只是炒作,它在海外市场已经进入了急剧的下行周期。”“如果Labubu的人气减弱,不再吸引客流,那么损失将不仅仅是一个IP的销售额,还会影响到单次交易的件数和品牌参与度,导致总收入出现更严重的恶化。” 尽管如此,泡泡玛特至少有一位高调的支持者。根据摩根士丹利的说法,有影响力的中国投资者段永平已将其在该公司的持股增至约6.04%,这很可能使他成为泡泡玛特创始人及管理层之外的最大股东。 海外员工占比将提升 虽然泡泡玛特的国内业务表现强劲,第一季度实现了105%的增长,但公司希望最终成为一家全球性企业。 司德估计,几年内, 海外员工将占泡泡玛特员工总数的50%左右 ,而目前这一比例为20%至30%。他预测,鉴于公司现在拥有更完整的产品组合、更充裕的资金池和更高的品牌知名度,公司可以在短短几年内复制其在国内市场花费十年时间才取得的成功。 尽管近几个月增长放缓,但美国仍是实现这一目标的核心。根据媒体基于公司公告的计算,今年前五个月,泡泡玛特在美国新增了十多家门店,使其在美国的门店总数达到约80家。公司希望今年在美国拥有超过100家门店,包括第四季度在纽约时代广场和第五大道开设旗舰店。 虽然泡泡玛特正寻求培育Skullpanda和Hirono等角色的需求以实现多元化,但亿万富翁首席执行官王宁将Labubu形容为一座“金矿”——这凸显了公司专注于从这款爆红产品中挖掘更多价值。 Labubu电影与新品 公司正在与索尼影视娱乐公司合作制作一部Labubu电影,司德表示这部电影最早可能在2028年夏季上映。这些怪兽角色今年还将出现在高规格活动中,包括FIFA世界杯和第100届梅西感恩节大游行。 新的Labubu产品也正在路上。公司将在下半年推出该角色的全新系列以及一款艺术家联名产品。 司德表示:“我们对去年的增长感到高兴。我们经历了痛苦,但我们很快乐。”“尽管今年情况有所回落,但这给了我们更强的信心。一旦你见识到全球市场的机会有多么巨大,它自然会驱动更强的信念和投入更多资源的意愿。” 查看评论

LinuxDo 最新话题 · 2026-06-11 10:07:59+08:00 · tech

佬友们大家早上好, 我上个月底申请开通了一个嘉信理财(国际)账户,并且开户成功后绑定了VIP Access,开户使用手机号是gg卡号。 开通之后发现可以通过账户密码登录网站和手机app,两步验证也可以正常登录手机app账户,于是就一段时间没动,一直在等黑妹坐床邮件。 但是今天打算再次登录账户看一看发现自己的号疑似被封禁了还是怎么回事,一直提示无效账户名称或者密码。(见附图) 我的账号密码是1password保存的,所以肯定没问题。 请问佬友们有无遇到这种情况呢?以及我该怎么办才能解决这个问题呢 ? 谢谢佬们!!! 1 个帖子 - 1 位参与者 阅读完整话题

cnBeta全文版 · 2026-06-10 22:35:06+08:00 · tech

苹果正在悄然在部分国际市场下架 Apple Vision Pro 旅行盒配件,这款售价 199 美元的官方收纳盒已从多国苹果在线商店中消失。有消息显示,Apple Vision Pro 旅行盒目前已不再出现在包括英国、日本、德国、法国、爱尔兰和中国香港在内的多个国家和地区的苹果官网配件页面上,相关产品页面也被完全移除,这一做法被普遍视为正式停产且短期内无意重新上架的信号。 在中国和澳大利亚,旅行盒产品页面仍然存在,但按钮已变为灰色,显示无法购买;相比之下,美国、加拿大和阿联酋市场仍保持正常销售,具体调整时间尚不明确,但应为近期变动。 对于已无法购买官方旅行盒的市场,用户仍可以选购 Belkin 为 Vision Pro 推出的旅行包作为替代方案,目前该配件仍在国际市场通过苹果渠道销售,苹果方面则尚未就原装旅行盒的供货变化作出任何公开说明。 此次调整发生在 Vision Pro 整体战略明显收缩的背景之下。2025 年 10 月发布的 Vision Pro M5 版本并未成功点燃新的消费热潮,尽管芯片升级,但 3499 美元的定价始终维持不变,市场反响平平。 有分析认为,Vision Pro 自上市以来的累计销量约在 60 万台左右,同时其退货率明显高于苹果近年其他硬件产品,凸显出这条产品线在消费端的接受度问题。 在 M5 机型反响不佳后,苹果内部的 Vision Pro 团队 reportedly 已被解散,成员被调配至其他项目,负责 Vision 产品线的负责人 Mike Rockwell 自 2025 年 3 月起转而领导苹果的 Siri 团队。 此前外界期待的更轻、更便宜的 “Vision Air” 版本据称已在 2025 年 10 月被取消,彭博社记者 Mark Gurman 也表示,即便将来还有新一代头显问世,时间点恐怕也要在两年之后,原因在于苹果大部分混合现实硬件人才已被转投其他方向。 供应链分析师郭明錤近期披露,即将接任苹果 CEO 的 John Ternus 已拍板取消第二代 Vision Pro 以及 Vision Air 两款产品,苹果当前的重心正转向智能眼镜形态的可穿戴设备。 据称,目前仍在开发中的只剩两类产品:一款主打 AI 功能、定位对标 Meta 与雷朋合作款的智能眼镜,预计在 2027 年前后推出;以及一款带显示屏的 AR 眼镜,预计发布时间要到 2029 年以后。 与此同时,Gurman 也曾指出,一款更轻薄、更低价的 Vision Pro 仍存在于长期规划中,但现实时间表大概率要等到 2028 年末甚至 2029 年才有机会亮相。 在上述战略收缩与产品路线调整的大背景下,Vision Pro 旅行盒在多国市场的悄然“退场”,无论是彻底停产还是仅仅是清理库存,外界普遍将其视为这款头显未来走向愈发不确定的又一信号。 查看评论

LinuxDo 最新话题 · 2026-06-10 16:11:53+08:00 · tech

前情提要: 显示器方案求推荐 搞七捻三 先说一下背景,打算买苹果还没上市的M5 MAC mini,需要4K,所以需要新增一台显示器,然后在海外当地买太贵了,就是同价格能在国内买高不止一个档次的,所以选择从国内往海外带 最开始想的是华为最新出的 27 寸带音响的那个,但是 27 寸直接手提上飞机是不可能的,太大了,直接走托运,但是国际托运都是扔的暴力托运,我那个行李箱都摧残得不成样子了,侧边的托都被砸得凹进去了 所以放弃 27 寸 转… 带显示器到国外,原厂未拆包装+外包一层气泡柱直接托运,我自己行李放登机箱,27寸显示器比我登机箱都高,哈哈 原厂包装应该是抗1米跌落,我又外加了气泡柱,飞机还是窄体机,应该没那么高,安全的可能性很高 成败在此一举,明天晚上追更,看看能不能平安送达 补一下背景,显示器 2013 元,而且只是一件 所以在个人免税额度里,行李直挂,虽然转机,但是中间我不用管这个显示器柜台托运了,等着落地机场拿就行,当地海关抽检和入境海关不是在同一个地方,那个地方在机场出口,就是你过完入境之后,在机场出口他才有可能抽查你,那会儿,哪怕他要拆掉抽查也没问题,因为已经落地了当地机场了,直接就该打车回家了,外面这个气泡柱是防暴力托运的,到时候拆掉,里面还有原包装呢。我拎着原包装就正常回家了 1 个帖子 - 1 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-06-09 21:06:44+08:00 · tech

前言 最近我在开发一个基于 Plasmo 的 Chrome MV3 浏览器扩展,项目主要用于统一管理 ChatGPT、Claude 等 AI 平台的对话记录,支持账号同步、搜索、收藏、标签、批量操作等功能。 随着功能逐渐完善,扩展里出现了大量 UI 文案、提示信息、错误信息。如果这些文本全部硬编码在组件里,后续维护会非常麻烦: 想支持英文、中文等多语言时,需要到处改代码; popup、content script、background 里都有文案,容易遗漏; Chrome 扩展本身也有名称、描述等 manifest 文案,也需要国际化; 文案带变量时,比如“已选中 5 项”,如果手动拼接,会不利于多语言适配。 因此,我最终使用 Chrome 扩展原生提供的 chrome.i18n API,再结合 Plasmo 的目录约定,给项目做了一套轻量、简单、够用的国际化方案。 本文就结合我的项目实践,介绍如何在 Plasmo 浏览器扩展中实现 i18n。 一、项目技术栈 我的项目是一个 Chrome MV3 扩展,主要技术栈如下: Plasmo React TypeScript Tailwind CSS Chrome Extension Manifest V3 项目结构比较简单,所有源文件都放在项目根目录,没有额外的 src 目录。 核心文件大致如下: my-first-extension/ ├── popup.tsx ├── content.ts ├── background.ts ├── logic.ts ├── db.ts ├── utils/ │ └── i18n.ts ├── locales/ │ ├── en/ │ │ └── messages.json │ └── zh_CN/ │ └── messages.json ├── package.json └── ... 其中和国际化相关的主要是: utils/i18n.ts locales/en/messages.json locales/zh_CN/messages.json package.json 二、Plasmo 项目中的语言包目录 在 Chrome 扩展规范中,最终构建产物里通常会有 _locales 目录,例如: _locales/ ├── en/ │ └── messages.json └── zh_CN/ └── messages.json 而在 Plasmo 项目开发阶段,我们可以直接在项目中创建: locales/ ├── en/ │ └── messages.json └── zh_CN/ └── messages.json Plasmo 构建时会处理这些语言资源,让它们符合 Chrome Extension 的国际化规范。 我的项目里目前支持两种语言: locales/en/messages.json locales/zh_CN/messages.json 其中: en 是英文; zh_CN 是简体中文。 三、在 manifest 中配置默认语言 Chrome 扩展要启用国际化,必须在 manifest 中声明 default_locale 。 在 Plasmo 项目里,可以直接在 package.json 的 manifest 字段里配置: { "manifest": { "default_locale": "en", "permissions": [ "storage", "alarms" ], "host_permissions": [ "https://chatgpt.com/*", "https://claude.ai/*" ] } } 这里我把默认语言设置为英文: "default_locale": "en" 这意味着如果用户当前浏览器语言没有对应的语言包,Chrome 会回退使用英文语言包。 四、扩展名称和描述的国际化 浏览器扩展的名称、描述也可以使用 Chrome i18n 的占位符语法。 我的 package.json 中这样写: { "name": "multi-ai-conversation-manager", "displayName": "__MSG_extName__", "description": "__MSG_extDescription__" } 这里的重点是: "displayName": "__MSG_extName__", "description": "__MSG_extDescription__" __MSG_xxx__ 是 Chrome 扩展国际化的特殊语法。 例如: __MSG_extName__ 会去当前语言包的 messages.json 中查找: { "extName": { "message": "ChatGPT & Claude AI Conversation Manager" } } 中文语言包中对应的是: { "extName": { "message": "ChatGPT、Claude AI 对话管理器" } } 这样一来,扩展在 Chrome 扩展管理页、商店信息或者 manifest 中展示时,就能根据用户浏览器语言自动切换名称和描述。 五、messages.json 的基本格式 Chrome 扩展的语言文件必须叫做 messages.json 。 基本格式如下: { "key": { "message": "具体文案" } } 比如英文语言包: { "account_management": { "message": "Account Management" }, "account_add": { "message": "Add Account" }, "btn_confirm": { "message": "Confirm" }, "btn_cancel": { "message": "Cancel" } } 中文语言包: { "account_management": { "message": "账号管理" }, "account_add": { "message": "添加账号" }, "btn_confirm": { "message": "确认" }, "btn_cancel": { "message": "取消" } } 这里需要注意: 不同语言包里的 key 要保持一致。 也就是说,英文里有: "account_add" 中文里也必须有: "account_add" 否则运行时调用这个 key 时,某些语言环境下就可能取不到翻译。 六、封装一个统一的 t 函数 虽然可以在代码里直接写: chrome.i18n.getMessage("btn_confirm") 但如果项目中大量使用这个 API,会有几个问题: 写起来比较长; 后续如果想增加 fallback 逻辑,需要到处改; popup、content script、background 都会重复使用; 不方便统一处理参数替换。 所以我在项目中封装了一个简单的工具函数。 文件位置: utils/i18n.ts 代码如下: /** * Chrome 扩展国际化工具函数 * 封装 chrome.i18n API,提供类型安全的文本获取方法 */ /** * 获取国际化文本 * @param key - messages.json 中定义的 key * @param substitutions - 可选的替换参数,字符串或字符串数组 * @returns 翻译后的文本,如果 key 不存在则返回 key 本身 */ export function t(key: string, substitutions?: string | string[]): string { return chrome.i18n.getMessage(key, substitutions) || key } 这个函数做了两件事: 第一,简化调用: t("btn_confirm") 比下面这样更简洁: chrome.i18n.getMessage("btn_confirm") 第二,增加 fallback: return chrome.i18n.getMessage(key, substitutions) || key 如果某个 key 没有找到,直接返回 key 本身。这样至少页面不会显示空字符串,调试时也很容易发现哪个 key 没配置。 七、在 React Popup 页面中使用 i18n 我的扩展主要 UI 在 popup.tsx 中,它是一个 React 页面。 首先引入工具函数: import { t } from "./utils/i18n" 然后就可以在 JSX 中使用: <button> {t("account_add")} </button> 或者用于错误提示: return ( <div className="p-4 text-red-500 text-sm"> {t("errorBoundaryMessage")} </div> ) 对应的英文语言包: { "errorBoundaryMessage": { "message": "An error occurred. Please close and reopen the extension" } } 对应的中文语言包: { "errorBoundaryMessage": { "message": "出现错误,请关闭后重新打开扩展" } } 这样,当用户浏览器语言是中文时,会显示中文;如果是英文环境,则显示英文。 八、在 Content Script 中使用 i18n 浏览器扩展不仅 popup 页面需要国际化,content script 也经常需要显示文案。 我的项目中, content.ts 会注入到 ChatGPT 或 Claude 页面中,用于检测当前登录账号。如果发现新账号,会在页面右下角显示一个提示卡片,引导用户同步账号。 同样先引入: import { t } from "./utils/i18n" 然后在创建 DOM 时使用: card.innerHTML = ` <button class="close-btn" aria-label="${t('content_closeAriaLabel')}">×</button> <div class="header"> <div class="text-content"> <h3>${t('content_newAccountTitle')}</h3> <p>${t('content_newAccountDesc', platformName)}</p> </div> </div> <div class="actions"> <button class="btn-ignore">${t('content_btnIgnore')}</button> <button class="btn-add">${t('content_btnSync')}</button> </div> ` 这里有一个带变量的文案: t("content_newAccountDesc", platformName) 比如英文里可能是: { "content_newAccountDesc": { "message": "A new $PLATFORM$ account was detected. Do you want to sync it now?", "placeholders": { "platform": { "content": "$1", "example": "ChatGPT" } } } } 中文里可以是: { "content_newAccountDesc": { "message": "检测到新的 $PLATFORM$ 账号,是否立即同步?", "placeholders": { "platform": { "content": "$1", "example": "ChatGPT" } } } } 这样在代码里只需要传入平台名称: t("content_newAccountDesc", "ChatGPT") 最终 Chrome 会自动把 $1 对应的内容替换进去。 九、在 Background 和业务逻辑中使用 i18n 除了 UI,后台逻辑里也会产生提示信息或错误信息。 比如消息处理器、同步逻辑、错误封装中,也可以统一使用: import { t } from "~utils/i18n" 或: import { t } from "./utils/i18n" 然后: throw new Error(t("error_accountMismatch")) 或者: return { success: false, error: t("error_syncFailed") } 这样有一个好处: 前端展示的错误信息和后台返回的错误信息,都可以使用同一套语言包管理。 对于浏览器扩展来说,popup、content script、background 是不同运行环境,如果不统一管理文案,后期维护会很痛苦。 十、带参数文案的写法 国际化里最常见的问题之一,就是文案里带变量。 比如: 已选中 5 项 不能简单写成: "已选中 " + count + " 项" 因为不同语言的语序可能不一样。 正确做法是放到语言包中: 英文: { "batch_selectedCount": { "message": "$COUNT$ items selected", "placeholders": { "count": { "content": "$1", "example": "5" } } } } 中文: { "batch_selectedCount": { "message": "已选中 $COUNT$ 项", "placeholders": { "count": { "content": "$1", "example": "5" } } } } 代码中调用: t("batch_selectedCount", String(selectedCount)) 如果有多个参数,也可以传数组: t("error_accountMismatch", [oldEmail, newEmail]) 语言包中可以使用: { "error_accountMismatch": { "message": "账号不匹配:当前账号是 $CURRENT$,目标账号是 $TARGET$", "placeholders": { "current": { "content": "$1", "example": "[email protected]" }, "target": { "content": "$2", "example": "[email protected]" } } } } 十一、推荐的 key 命名方式 随着项目变大,语言包会越来越长。如果 key 命名不规范,很容易混乱。 我在项目中采用了按业务模块前缀命名的方式,例如: theme_light theme_dark theme_system account_management account_add account_delete account_sync batch_manage batch_addTag batch_removeTag batch_selectedCount tag_management tag_create tag_rename tag_delete conversation_notFound conversation_total conversation_copyLink content_newAccountTitle content_newAccountDesc content_btnIgnore content_btnSync errorBoundaryMessage error_syncFailed 这种命名方式有几个优点: 一眼能看出文案属于哪个模块; 搜索方便; 不容易和其他模块冲突; 语言包比较容易维护。 我个人不太建议全部写成非常短的 key,例如: title desc button message 因为项目一大,这些 key 很快就会失去语义。 十二、Chrome i18n 的语言选择机制 使用 chrome.i18n 后,不需要我们自己判断用户语言。 Chrome 会根据用户浏览器语言自动选择语言包。 比如项目里有: locales/en/messages.json locales/zh_CN/messages.json 如果用户浏览器语言是中文简体,Chrome 会优先使用: zh_CN 如果用户浏览器语言是英文,则使用: en 如果没有找到对应语言,会回退到 manifest 中配置的: "default_locale": "en" 所以在大多数情况下,我们不需要自己写: navigator.language 也不需要自己维护语言切换逻辑。 十三、Plasmo i18n 实现流程总结 整体流程可以总结为五步。 1. 创建语言包目录 locales/ ├── en/ │ └── messages.json └── zh_CN/ └── messages.json 2. 在 package.json 中配置默认语言 { "manifest": { "default_locale": "en" } } 3. 使用 __MSG_xxx__ 国际化扩展名称和描述 { "displayName": "__MSG_extName__", "description": "__MSG_extDescription__" } 4. 封装 i18n 工具函数 export function t(key: string, substitutions?: string | string[]): string { return chrome.i18n.getMessage(key, substitutions) || key } 5. 在 popup、content script、background 中统一调用 t("btn_confirm") t("batch_selectedCount", String(count)) t("content_newAccountDesc", platformName) 十四、这种方案的优点 我目前这个项目采用的是原生 chrome.i18n 方案,而不是引入 i18next 、 react-intl 之类的第三方库。 原因很简单:对于浏览器扩展来说,原生方案已经足够好用。 它的优点包括: 1. 不需要额外依赖 不需要安装额外 npm 包,减少 bundle 体积。 2. 和 Chrome 扩展天然集成 manifest 中的名称、描述都可以直接使用 __MSG_xxx__ 。 3. popup、content script、background 都能用 只要在扩展环境中,都可以调用: chrome.i18n.getMessage() 4. 构建简单 Plasmo 会处理扩展构建,不需要自己手动生成 _locales 。 5. 维护成本低 对于中小型浏览器扩展项目,这种方案非常轻量。 十五、需要注意的坑 1. 必须配置 default_locale 如果使用了语言包,但是 manifest 没有配置: "default_locale": "en" 扩展可能无法正确加载国际化资源。 2. key 必须在所有语言包中保持一致 比如英文有: "btn_confirm" 中文也应该有: "btn_confirm" 否则在某些语言下会取不到翻译。 3. messages.json 格式不能随便写 Chrome i18n 不是普通 JSON 字典,不能写成: { "btn_confirm": "Confirm" } 必须写成: { "btn_confirm": { "message": "Confirm" } } 4. 占位符要用 $1 、 $2 比如: { "conversation_total": { "message": "$COUNT$ conversations", "placeholders": { "count": { "content": "$1", "example": "10" } } } } 代码中: t("conversation_total", "10") 5. 不建议在代码里拼接多语言句子 不推荐: t("selected") + count + t("items") 推荐: t("batch_selectedCount", String(count)) 因为不同语言的语序可能不一样。 6. content script 中使用 innerHTML 时要注意安全 如果语言包内容完全由开发者自己维护,风险较小。但如果文案来自用户输入,就不要直接拼进 innerHTML 。 我的项目中的语言包是静态文件,由开发者维护,所以可以用于构造提示卡片。但如果要插入用户输入,最好使用 textContent 或做好转义。 十六、适合继续优化的方向 目前这个方案已经可以满足我的项目需求,不过后续还可以继续优化。 1. 给 key 增加 TypeScript 类型约束 现在的 t 函数是: export function t(key: string, substitutions?: string | string[]): string 也就是说 key 是普通字符串。 如果写错了: t("btn_confim") TypeScript 不会报错,只有运行时才会发现。 后续可以自动从 messages.json 生成类型,例如: type I18nKey = | "btn_confirm" | "btn_cancel" | "account_add" | "account_delete" 然后改成: export function t(key: I18nKey, substitutions?: string | string[]): string { return chrome.i18n.getMessage(key, substitutions) || key } 这样可以在开发阶段提前发现 key 拼写错误。 2. 编写脚本检查多语言 key 是否一致 可以写一个 Node.js 脚本,对比: locales/en/messages.json locales/zh_CN/messages.json 检查两个文件的 key 是否完全一致。 比如: en 中有但 zh_CN 中没有 zh_CN 中有但 en 中没有 这对项目变大后非常有用。 3. 拆分语言包 当 messages.json 变得非常大时,可以按模块维护源文件,例如: i18n-source/ ├── account.json ├── batch.json ├── tag.json ├── content.json └── error.json 然后通过脚本合并生成最终的: locales/en/messages.json locales/zh_CN/messages.json 不过对于大多数浏览器扩展项目,一个 messages.json 也完全够用。 十七、完整示例 下面给一个简化版完整示例。 package.json { "name": "multi-ai-conversation-manager", "displayName": "__MSG_extName__", "description": "__MSG_extDescription__", "manifest": { "default_locale": "en", "permissions": [ "storage", "alarms" ] } } locales/en/messages.json { "extName": { "message": "ChatGPT & Claude AI Conversation Manager" }, "extDescription": { "message": "Unified management for ChatGPT and Claude conversations" }, "btn_confirm": { "message": "Confirm" }, "btn_cancel": { "message": "Cancel" }, "batch_selectedCount": { "message": "$COUNT$ items selected", "placeholders": { "count": { "content": "$1", "example": "5" } } } } locales/zh_CN/messages.json { "extName": { "message": "ChatGPT、Claude AI 对话管理器" }, "extDescription": { "message": "统一管理 ChatGPT、Claude 平台的 AI 对话" }, "btn_confirm": { "message": "确认" }, "btn_cancel": { "message": "取消" }, "batch_selectedCount": { "message": "已选中 $COUNT$ 项", "placeholders": { "count": { "content": "$1", "example": "5" } } } } utils/i18n.ts export function t(key: string, substitutions?: string | string[]): string { return chrome.i18n.getMessage(key, substitutions) || key } popup.tsx import { t } from "./utils/i18n" export default function Popup() { const selectedCount = 5 return ( <div> <button>{t("btn_confirm")}</button> <button>{t("btn_cancel")}</button> <p>{t("batch_selectedCount", String(selectedCount))}</p> </div> ) } 结语 在 Plasmo 浏览器扩展项目中实现 i18n,并不一定要引入复杂的国际化框架。 对于大多数 Chrome 扩展来说,直接使用浏览器原生的 chrome.i18n API 就已经足够: manifest 文案使用 __MSG_xxx__ ; 页面和脚本中使用 chrome.i18n.getMessage() ; 封装一个简单的 t() 函数; 使用 locales/en/messages.json 、 locales/zh_CN/messages.json 管理语言包; 对变量文案使用 placeholders。 这种方式简单、轻量、和浏览器扩展生态天然兼容,非常适合 Plasmo 架构下的扩展开发。 我目前的项目就是采用这种方案,同时覆盖了 popup 页面、content script、background 消息处理和错误提示。整体使用下来,维护成本低,也方便后续继续增加更多语言支持。 1 个帖子 - 1 位参与者 阅读完整话题

v2ex · 2026-06-09 14:40:25+08:00 · tech

职位描述 1 、负责阿里国际(Aliexpress)电商交易系统的购物车、下单、订单管理和逆向流程的开发与优化,确保交易流程的顺畅与高效。 2 、设计并实施高可用、高性能的 Java 架构,以支持大规模并发交易处理。 3 、参与 Agent 开发,提升系统自动化处理能力和智能化水平。 4 、与团队协作,利用大模型训练技术,优化 Agent 处理效率和正确率。 职位要求 1 、本科及以上学历,计算机科学或相关专业,扎实的 Java 基础和架构设计能力。 2 、具有至少 3 年的 Java/python 或者其他语音开发经验,有实际的 Agent 开发项目经验者优先。 3 、熟悉大模型训练技术,有实际应用经验者更佳。 4 、良好的团队合作精神,具备优秀的沟通和协调能力,能与跨部门团队有效协作。 5 、对电商交易流程有深入理解,善于解决问题,有创新思维,致力于提升交易系统的质量和效率。 流程超快,速来,我专程跟进。 (985 、211 、双一流) 或者 (中大厂经验) 联系 vx:czQ1NDU2OTQ2 (base64)

IT之家 · 2026-06-09 09:08:53+08:00 · tech

IT之家 6 月 9 日消息,中兴现已为旗下 5G 随身 WiFi U60 Pro 推出全球版本,其内置国内 5G 卡和国际漫游卡(国际漫游卡无法在内地使用),目前暂时仅和一款所谓“AI 智能跟拍云台”捆绑销售,商品卡显示定价为 2174 元。 具体来看,相应全球版本配备的国际漫游卡在海外地区支持下载使用谷歌地图、YouTube 等热门应用,其中全球 144 国家通用流量 10GB 299 元(30 天有效)、亚洲 12 地区通用流量 10GB 159 元(30 天有效)、中东 9 国通用包 10GB 699 元(30 天有效)、欧洲地区通用流量 10GB 109 元(30 天有效)。 规格方面,该产品搭载 骁龙 X75 旗舰芯片平台 ,配备 3.5 英寸触摸屏,支持 5G-A 高速网络 + 3CC 载波聚合技术,下载速度可达 4.29Gbps。 内置 10000mAh 电池 ,支持 27W 快充 + 18W 反向快充。 京东 中兴 U60 Pro 全球版 2174 元 直达链接 京东 618 无门槛红包 面额至高 26618 元,每天抽 3 次: 点此抽红包 淘宝 618 无门槛红包 面额至高 26888 元,每天抽 1 次: 点此抽红包

v2ex · 2026-06-09 02:07:15+08:00 · tech

阿里云国际站的香港和新加坡轻量应用服务器一直以稳定和高带宽著称。但是很多搬砖党和技术党在注册第一步就被风控拦截。今天聊聊如何正确注册并持有一个稳定的阿里云国际站账号。 注册前的准备工作 为了避开阿里云严格的防欺诈风控系统,自主注册时需要注意以下几点: 干净的本地环境:尽量使用纯净的海外住宅 IP ,避免使用万人骑的公用机房节点。 合规的支付手段:姓名、注册地址需要与你的 PayPal 或境外信用卡账单地址大致相符。 更安全的路线:代理商合作开户 如果你觉得搞定海外支付和防风控太麻烦,最简单的破局点是找阿里云国际站分销商(代理商)。 零门槛开户:代理商可以通过后台给你发关联邮件,直接绕过官方的支付方式强制绑定。 灵活代充值:可以直接找代理商代充余额,支持国内常用的支付工具,甚至支持加密货币。 独立控制面板:注册成功后,你依然是在阿里云官网登录和管理实例,安全性和官方直接注册完全一致。 关于选机房的建议 注册成功后,如果主打国内方向,首选 中国香港( Hong Kong ) 和 新加坡( Singapore ) 节点,其延迟和吞吐量在同类海外云服务中表现非常亮眼。 🌐 lingducloud | 全球云资源一站式服务商 📩 客服 Telegram: @cloudcup 🔥 合作平台: 阿里云国际|腾讯云国际|华为云国际| AWS | GCP | Azure 🔗 官方自助开户网站: https://cloudcup.online

v2ex · 2026-06-08 20:19:38+08:00 · tech

为什么会有足协这种机构长期存在,干得不好还保留这样的组织,现在有一个叫董路的人率领 U12 出征意大利第 37 届 SIGISMONDI 国际青少年杯,获得冠军? 以下观点纯属瞎猜,如果说中了,那就是事实 我思考的是,足协之所以存在,是因为利益关系,权力机构想通过至高无上的权利,管理一支赚钱的队伍,从而让自己的权力获利,按照中国的人口总量,理论上早就应该选拔出有竞争力的队伍,而之所以现今没产生,是因为权力机构不想失去控制权,所以我们看到足协长期存在甚至可以干扰各种民间赛事,之前的什么村超被搅黄也是这个原因,他们不允许赚钱的事情被民间或者下方的机构获得控制权,而他们得不到就损坏,长期稳固自己的控制权。 理论上来讲,只要每个城市选拔优秀的队伍,再用这些队伍去打比赛,最终城市与城市之间对抗,这么多城市这么多人比赛下来,很快就可以诞生影响世界的队伍和人员,但是他们从来不这样干,他们的干法,让你匪夷所思。 但是想明白了他们为什么这样做,有什么好处,就明白,他们这样干其实还是为了他们自己能牟利。 而城市竞争,最终控制权到不了上层权力手中,只会到某个别城市,所以这种他们不愿意干。 说白了中国的足球其实就是 “行政项目”而非 “市场项目” 同样其它的体育项目差不多也一样,他们的方式本质上就是为了获得绝对的控制权,牟利权

v2ex · 2026-06-08 20:19:38+08:00 · tech

为什么会有足协这种机构长期存在,干得不好还保留这样的组织,现在有一个叫董路的人率领 U12 出征意大利第 37 届 SIGISMONDI 国际青少年杯,获得冠军? 以下观点纯属瞎猜,如果说中了,那就是事实 我思考的是,足协之所以存在,是因为利益关系,权力机构想通过至高无上的权利,管理一支赚钱的队伍,从而让自己的权力获利,按照中国的人口总量,理论上早就应该选拔出有竞争力的队伍,而之所以现今没产生,是因为权力机构不想失去控制权,所以我们看到足协长期存在甚至可以干扰各种民间赛事,之前的什么村超被搅黄也是这个原因,他们不允许赚钱的事情被民间或者下方的机构获得控制权,而他们得不到就损坏,长期稳固自己的控制权。 理论上来讲,只要每个城市选拔优秀的队伍,再用这些队伍去打比赛,最终城市与城市之间对抗,这么多城市这么多人比赛下来,很快就可以诞生影响世界的队伍和人员,但是他们从来不这样干,他们的干法,让你匪夷所思。 但是想明白了他们为什么这样做,有什么好处,就明白,他们这样干其实还是为了他们自己能牟利。 而城市竞争,最终控制权到不了上层权力手中,只会到某个别城市,所以这种他们不愿意干。 说白了中国的足球其实就是 “行政项目”而非 “市场项目” 同样其它的体育项目差不多也一样,他们的方式本质上就是为了获得绝对的控制权,牟利权

v2ex · 2026-06-08 20:19:38+08:00 · tech

为什么会有足协这种机构长期存在,干得不好还保留这样的组织,现在有一个叫董路的人率领 U12 出征意大利第 37 届 SIGISMONDI 国际青少年杯,获得冠军? 以下观点纯属瞎猜,如果说中了,那就是事实 我思考的是,足协之所以存在,是因为利益关系,权力机构想通过至高无上的权利,管理一支赚钱的队伍,从而让自己的权力获利,按照中国的人口总量,理论上早就应该选拔出有竞争力的队伍,而之所以现今没产生,是因为权力机构不想失去控制权,所以我们看到足协长期存在甚至可以干扰各种民间赛事,之前的什么村超被搅黄也是这个原因,他们不允许赚钱的事情被民间或者下方的机构获得控制权,而他们得不到就损坏,长期稳固自己的控制权。 理论上来讲,只要每个城市选拔优秀的队伍,再用这些队伍去打比赛,最终城市与城市之间对抗,这么多城市这么多人比赛下来,很快就可以诞生影响世界的队伍和人员,但是他们从来不这样干,他们的干法,让你匪夷所思。 但是想明白了他们为什么这样做,有什么好处,就明白,他们这样干其实还是为了他们自己能牟利。 而城市竞争,最终控制权到不了上层权力手中,只会到某个别城市,所以这种他们不愿意干。 说白了中国的足球其实就是 “行政项目”而非 “市场项目” 同样其它的体育项目差不多也一样,他们的方式本质上就是为了获得绝对的控制权,牟利权