小编ric*_*art的帖子

无法在 Android Studio 中设置默认语言

我在 Android Studio 中收到有关未翻译字符串的警告 - 它告诉我它们尚未翻译成英语。这似乎是因为我有一个“en-rGB”资源文件夹。但是我尝试按照 lint 中的说明指定默认语言,但这并没有奏效。

我有以下 strings.xml 文件:

values/strings.xml

<resources xmlns:tools="http://schemas.android.com/tools"
    tools:locale="en">

    <string name="string1">Howdy</string>
    <string name="string2">Howdy</string>
</resources>
Run Code Online (Sandbox Code Playgroud)

values-en-rGB/strings.xml

<resources>

    <string name="string1">Hello</string>
</resources>
Run Code Online (Sandbox Code Playgroud)

values-fr/strings.xml

<resources>

    <string name="string1">Bonjour</string>
    <string name="string2">Bonjour</string>
</resources>
Run Code Online (Sandbox Code Playgroud)

values-fr-rCA/strings.xml

<resources>

    <string name="string2">Bonjour</string>
</resources>
Run Code Online (Sandbox Code Playgroud)

预期结果:应该没有警告,两个字符串都被翻译成英文和法文

实际结果:Lint 会警告 string2,说它没有翻译成英文。

请注意,我已经包含了 fr-rCA 以表明它不是区域性的东西。令人高兴的是,只要将其翻译为“未区域化”的法语,它也不需要翻译为加拿大法语。在这种情况下,它不会警告 string1,即使它没有被翻译成加拿大法语,因为它已经被翻译成法语。

我无法将主资源文件夹更改为英文 ( values-en),因为这会导致没有默认资源的错误。这是真的。

我一般不想取消警告,因为我计划添加其他语言,并且我确实希望对未翻译成我包含的其他语言的字符串显示警告。

我所追求的是将默认语言通知 lint 的正确方法。我已按照“翻译不完整”警告的说明进行了操作:

您可以通过为资源文件中的根元素指定 tools:locale="languageCode" 来告诉 lint(和其他工具)哪种语言是您的 res/values/ 文件夹中的默认语言。(工具前缀指的是命名空间声明 http://schemas.android.com/tools。)

但这似乎不起作用。是我做错了,还是 lint 的问题?

android localization lint android-resources android-studio

8
推荐指数
1
解决办法
726
查看次数

我应该使用位字段来映射传入的串行数据吗?

我们有通过串行(蓝牙)传入的数据,它映射到特定的结构。该结构的某些部分是子字节大小,因此“显而易见”的解决方案是将传入数据映射到位字段。我无法确定的是机器或编译器的位字节顺序是否会影响它(这很难测试),以及我是否应该完全放弃位字段。

例如,我们有一条1.5字节的数据,所以我们使用结构体:

{
    uint8_t data1; // lsb
    uint8_t data2:4; // msb
    uint8_t reserved:4;
} Data;
Run Code Online (Sandbox Code Playgroud)

保留位始终为 1

例如,如果传入的数据是 0xD2,0xF4,则值为 0x04D2,即 1234。

我们使用的结构始终适用于我们测试过的系统,但我们需要它尽可能可移植。

我的问题是:

  • data1无论字节序如何,总是会按预期表示正确的值(我假设是的,并且硬件/软件接口应该始终正确处理单个整个字节 - 如果发送 0xD2,则应该接收 0xD2)?

  • 是否可能data2reserved错误的方式,用data2代表高 4 位而不是低 4 位?

如果是:

  • 位字节顺序(通常)是否取决于字节字节顺序,或者它们可以完全不同吗?

  • 位字节顺序是由硬件还是编译器决定的?看起来 Intel 上的所有 Linux 系统都是一样的——对于 ARM 来说也是如此吗?(如果我们可以说我们可以支持所有 Intel 和 ARM linux 版本,那应该没问题)

  • 是否有一种简单的方法可以在编译器中确定它的方式,并在需要时保留位字段条目?

虽然位字段是映射传入数据的最简洁的代码方式,但我想我只是想知道放弃它们并使用类似的东西是否更安全:

struct {
    uint8_t data1; // lsb (0xFF)
    uint8_t data2; // msb (0x0F) & reserved (0xF0)
} Data;

Data d;

int value = (d.data2 & …
Run Code Online (Sandbox Code Playgroud)

c endianness bit-fields

4
推荐指数
1
解决办法
516
查看次数