
移动开发UI组件【免费下载链接】ActionBarSherlock[DEPRECATED] Action bar implementation which uses the native action bar on Android 4.0 and a custom implementation on pre-4.0 through a single API and theme.项目地址https://gitcode.com/gh_mirrors/ac/ActionBarSherlock点击查看免费下载导读ActionBarSherlock 通过在 Android 4.0 上使用原生 ActionBar、在 4.0 以下使用自绘实现向开发者提供了一套跨版本统一的 ActionBar API。但 ActionBar 内置的无障碍描述文案contentDescription、上下文操作栏按钮、分享面板、搜索框提示等字符串默认只有英文若要让应用在非英语地区开箱即用就需要一个独立的国际化资源库。本文介绍的actionbarsherlock-i18n正是这样一个随仓库发布的翻译资源库它把 ActionBarSherlock 用到的全部字符串翻译成主流语言并通过一条 Maven 命令即可增量更新。读完本文你将掌握该库的字符串清单与命名规范、它在源码中的具体消费位置以及如何用mvn org.holoeverywhere:resbuilder:build基于strings.json重新生成全部翻译资源。一、actionbarsherlock-i18n 是什么根据 actionbarsherlock-i18n/README.md 的定位A library project which has translations of all of the strings used by ActionBarSherlock in the most popular languages. To update runmvn org.holoeverywhere:resbuilder:build.这是一个库工程library project作用是把 ActionBarSherlock 主库在运行时引用的所有字符串如“Navigate home”“More options”“Search”等翻译为最流行的语言并以 Android 资源目录的形式组织成可直接依赖的apklib资源包。它的独立存在保证了主库 actionbarsherlock 保持纯英文基线所有翻译集中在 i18n 子工程中不污染核心实现需要多语言的应用只需把actionbarsherlock-i18n作为依赖引入即可获得与系统原生风格一致的中文、日文、法文等文案更新翻译时不需要改动主库任何 Java 代码或默认资源只需执行一条 Maven 命令。从工程结构看该模块包含一个strings.json配置、一个pom.xml构建文件以及约 50 个values-*区域资源目录见 actionbarsherlock-i18n/res覆盖 af、am、ar、be、bg、ca、cs、da、de、el、en-rGB、es、es-rUS、et、fa、fi、fr、he、hi、hr、hu、in、it、iw、ja、ko、lt、lv、ms、nb、nl、pl、pt、pt-rBR、pt-rPT、ro、ru、sk、sl、sr、sv、sw、th、tl、tr、uk、vi、zh-rCN、zh-rTW、zu 等语言/地区配置。二、需要翻译的字符串清单与命名规范翻译范围的权威定义在 actionbarsherlock-i18n/strings.json 中{ grab: [ action_bar_home_description, action_bar_up_description, action_menu_overflow_description, action_mode_done, activity_chooser_view_see_all, activity_chooser_view_dialog_title_default, share_action_provider_share_with, activitychooserview_choose_application, shareactionprovider_share_with, shareactionprovider_share_with_application, searchview_description_search, searchview_description_query, searchview_description_clear, searchview_description_submit, searchview_description_voice ], prefix: abs__, filename_pattern: abs__%s.xml, ignore_default_locale: true }其含义为grab需要抓取并翻译的字符串 key 列表不含abs__前缀共 15 个基础 key结合命名规范展开后对应 17 个最终资源名部分 key 在最终资源中以两种命名形式出现prefix所有资源统一加abs__前缀避免与宿主应用或系统资源冲突filename_pattern生成文件统一命名为abs__key.xml即仓库中每个values-xx/目录下的 abs__strings.xmlignore_default_locale跳过默认语言环境英文因为英文基线已由主库 actionbarsherlock/res/values/abs__strings.xml 提供翻译目录只维护非英文区域。2.1 与主库默认字符串的对应关系主库的英文基线定义在 actionbarsherlock/res/values/abs__strings.xml与strings.json的 key 一一对应资源名abs__ key英文默认值用途abs__action_bar_home_descriptionNavigate homeHome 按钮的无障碍描述abs__action_bar_up_descriptionNavigate upUp 按钮的无障碍描述abs__action_menu_overflow_descriptionMore options溢出菜单overflow按钮的无障碍描述abs__action_mode_doneDone上下文操作栏ActionMode左侧 Done 按钮文案abs__activity_chooser_view_see_allSee all...活动选择器展开列表按钮文案abs__activitychooserview_choose_applicationChoose an application活动选择器弹出窗口描述abs__shareactionprovider_share_withShare withShareActionProvider 分享目标按钮描述abs__shareactionprovider_share_with_applicationShare with%s带应用名的分享描述含占位符abs__searchview_description_searchSearch搜索按钮无障碍描述abs__searchview_description_querySearch query搜索输入框无障碍描述abs__searchview_description_clearClear query清除按钮无障碍描述abs__searchview_description_submitSubmit query提交按钮无障碍描述abs__searchview_description_voiceVoice search语音搜索按钮无障碍描述2.2 占位符与格式细节翻译文件中含格式占位符的字符串必须保留占位符。例如英文基线string nameabs__shareactionprovider_share_with_application Share with xliff:g idapplication_name exampleBluetooth%s/xliff:g /string对应的简体中文翻译为string nameabs__shareactionprovider_share_with_application与“%s”共享/string对应的日文翻译为string nameabs__shareactionprovider_share_with_application%sと共有/string可以看到所有区域文件都保留了%s占位符参见 values-zh-rCN/abs__strings.xml、values-ja/abs__strings.xml、values-fr/abs__strings.xml并统一把字符串用引号包裹避免特殊字符被资源编译器误解析。%s在运行时会被实际的应用名替换因此翻译者只需调整语序不能删除占位符。另外个别 key 在翻译文件中的资源名与主库存在差异例如activity_chooser_view_dialog_title_default对应翻译文件中的abs__activity_chooser_view_dialog_title_default如“选择活动”share_action_provider_share_with对应abs__share_action_provider_share_with如“分享对象”——从源码结构看这些 key 源于 Android Support Library 中ActivityChooserView/ShareActionProvider的既有字符串被resbuilder一并抓取后交由各语言翻译。三、这些字符串在 ActionBarSherlock 源码中的实际消费位置翻译资源不是“纸面资产”它们在主库的 Java 与布局文件中被真实引用。梳理源码可以确认以下消费点ActionBar 的 Home/Up 无障碍描述在 ActionBarView.java 中通过R.string.abs__action_bar_home_description与R.string.abs__action_bar_up_description为图标设置contentDescriptionActionBarView.java 中同样在构造时使用abs__action_bar_up_description。这意味着 TalkBack 等无障碍服务会直接朗读这些翻译后的文案。ActivityChooserView在 ActivityChooserView.java 中使用R.string.abs__activitychooserview_choose_application作为弹出面板的描述ActivityChooserView.java 使用R.string.abs__activity_chooser_view_see_all作为“查看全部”按钮的文案。ShareActionProvider在 ShareActionProvider.java 中拼接abs__shareactionprovider_share_with_application与abs__shareactionprovider_share_with前者通过getString(...)传入应用名完成%s替换ShareActionProvider.java 复用abs__activity_chooser_view_see_all。SearchView 布局在 abs__search_view.xml 中搜索按钮、输入框、清除按钮、提交按钮和语音按钮分别通过string/abs__searchview_description_search、abs__searchview_description_query、abs__searchview_description_clear、abs__searchview_description_submit、abs__searchview_description_voice设置android:contentDescription。由上述引用关系可以看出i18n 库翻译的是面向用户与无障碍服务的可见文案一旦缺失英文环境下会回退到主库英文基线非英文环境下则会出现英文文案混杂在本地化界面中的问题。四、如何更新翻译resbuilder构建命令更新 actionbarsherlock-i18n 的唯一入口就是 README 中给出的命令mvn org.holoeverywhere:resbuilder:build该命令由 actionbarsherlock-i18n/pom.xml 中声明的org.holoeverywhere:resbuilder插件提供。运行前需要满足两个前提环境变量ANDROID_HOME已设置插件配置里通过${env.ANDROID_HOME}读取 Android SDK 路径androidSdkPath${env.ANDROID_HOME}/androidSdkPathSDK 用于提供资源编译所需的平台工具在模块根目录下执行includeDirs指向${project.basedir}模块根目录inputFiles指定strings.json:strings即以strings.json作为输入清单。执行后resbuilder会读取strings.json中grab列表的 key结合prefixabs__与filename_patternabs__%s.xml生成每个values-xx/目录下的目标文件依据ignore_default_localetrue跳过默认英文语言环境只产出非英文翻译文件。4.1 pom.xml 中的完整构建配置actionbarsherlock-i18n/pom.xml 的关键配置如下artifactIdactionbarsherlock-i18n/artifactId packagingapklib/packaging dependencies !-- 依赖主库的 apklib 资源包 -- dependency groupIdcom.actionbarsherlock/groupId artifactIdactionbarsherlock/artifactId version${project.version}/version typeapklib/type /dependency dependency groupIdcom.google.android/groupId artifactIdandroid/artifactId scopeprovided/scope /dependency dependency groupIdcom.google.android/groupId artifactIdsupport-v4/artifactId scopeprovided/scope /dependency /dependencies build plugins plugin groupIdcom.jayway.maven.plugins.android.generation2/groupId artifactIdandroid-maven-plugin/artifactId extensionstrue/extensions /plugin plugin groupIdorg.holoeverywhere/groupId artifactIdresbuilder/artifactId configuration androidSdkPath${env.ANDROID_HOME}/androidSdkPath includeDirs dir${project.basedir}/dir /includeDirs inputFiles filestrings.json:strings/file /inputFiles /configuration /plugin plugin groupIdorg.codehaus.mojo/groupId artifactIdbuild-helper-maven-plugin/artifactId !-- 将 Gradle 产物 build/libs/actionbarsherlock-i18n-version.aar 作为附加构件 (typeaar) 附加到构建结果 -- /plugin /plugins /build解读packaging为apklib表明该模块以 Android 库工程形式产出资源包同时通过build-helper-maven-plugin将 Gradle 构建的.aar文件${project.basedir}/build/libs/${project.artifactId}-${gradle.version}.aar作为附加构件发布兼顾 Maven 与 Gradle 两种消费方式依赖主库actionbarsherlockapklib类型是为了让resbuilder能解析到主库的字符串基线android与support-v4以provided方式提供仅用于编译期android-maven-plugin负责将资源目录编译打包为最终 apklib。五、翻译文件的组织与手工维护方式除了自动生成开发者也可以直接手工编辑各values-xx/abs__strings.xml。以简体中文为例values-zh-rCN/abs__strings.xml 的完整结构如下?xml version1.0 encodingutf-8?resources string nameabs__action_bar_home_description导航首页/string string nameabs__action_bar_up_description向上导航/string string nameabs__action_menu_overflow_description更多选项/string string nameabs__action_mode_done完成/string string nameabs__activity_chooser_view_dialog_title_default选择活动/string string nameabs__activity_chooser_view_see_all查看全部/string string nameabs__activitychooserview_choose_application选择应用/string string nameabs__searchview_description_clear清除查询/string string nameabs__searchview_description_query搜索查询/string string nameabs__searchview_description_search搜索/string string nameabs__searchview_description_submit提交查询/string string nameabs__searchview_description_voice语音搜索/string string nameabs__share_action_provider_share_with分享对象/string string nameabs__shareactionprovider_share_with共享对象/string string nameabs__shareactionprovider_share_with_application与“%s”共享/string /resources维护要点文件必须是单个resources根节点所有string直接平铺格式与resbuilder生成一致字符串值建议用双引号包裹避免出现特殊字符如中文引号、%时被资源编译器误处理占位符不可删除含%s的条目如abs__shareactionprovider_share_with_application在翻译时必须保留%s否则运行时会抛格式化异常新增 key 时先在strings.json的grab中登记这样重新运行mvn org.holoeverywhere:resbuilder:build才能把它同步到所有语言文件。六、在应用中使用该库的建议流程实际接入时建议遵循以下步骤仓库为只读以下均为查看/构建/依赖层面的用法引入依赖在应用的pom.xml中声明对com.actionbarsherlock:actionbarsherlock-i18n:versionapklib/aar的依赖Gradle 项目则引入对应.aar构件保留主库依赖i18n 库依赖主库 actionbarsherlock翻译资源与主库字符串通过abs__前缀的覆盖机制合并运行时英文回退由主库 res/values/abs__strings.xml 兜底按需更新翻译当主库新增字符串 key 时先在 strings.json 的grab列表补充 key再在对应values-xx/abs__strings.xml中补译最后运行mvn org.holoeverywhere:resbuilder:build校验生成结果验证效果检查 abs__search_view.xml 等布局中引用的contentDescription以及 ActionBarView.java、ShareActionProvider.java 中的字符串消费点确保目标语言文案正确显示。七、小结actionbarsherlock-i18n是一个结构清晰、更新链路完整的独立国际化资源库strings.json定义翻译清单与命名规则pom.xml定义resbuilder生成流程与 apklib/aar 双重打包方式约 50 个values-*目录承载主流语言翻译主库源码与布局则负责消费这些字符串。对维护者而言掌握mvn org.holoeverywhere:resbuilder:build与strings.json的配合方式即可在新增字符串后快速同步全量翻译对使用者而言只需引入该库即可让 ActionBarSherlock 的 ActionBar、ActionMode、ShareActionProvider 与 SearchView 文案随系统语言自动本地化。赞分享移动开发UI组件【免费下载链接】ActionBarSherlock[DEPRECATED] Action bar implementation which uses the native action bar on Android 4.0 and a custom implementation on pre-4.0 through a single API and theme.项目地址https://gitcode.com/gh_mirrors/ac/ActionBarSherlock点击查看免费下载相关推荐Kubernetes Dashboard 日语国际化ja i18n团队指南翻译规范、XLIFF 流程与源码级实践Kubernetes Dashboard 日语国际化ja i18n团队指南翻译规范、XLIFF 流程与源码级实践 导读 本文以仓库中 modules/we前端后端云原生slides国际化实现i18n架构与翻译流程slides国际化实现i18n架构与翻译流程 你是否在使用slides制作演示文稿时遇到过需要支持多语言的情况本文将详细介绍slides项目的国际化 i18CLI开发工具SD.Next Checkpoint 模型融合完整指南6 步实操从选型到出图SD.Next Checkpoint 模型融合完整指南6 步实操从选型到出图 如果你曾在两个 Checkpoint 之间纠结——A 构图稳、B 色彩好——SDAI 应用媒体生成计算机视觉后端上一篇npm-check-updates开发依赖与生产依赖分离更新策略下一篇Hotel命令行参数终极指南--out、--name、--port等选项详解创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考