Acknowledged

Problem with installing app

One of my user has tried to install widget PSX-7 (https://apps.garmin.com/apps/1944b8b4-409e-482d-b7b3-becd4e8b1b05) but he couldn't due the incapability error but he has installed PSX-6 (https://apps.garmin.com/apps/e4ce9423-c37e-4aa7-b778-f24c2347c923). Both are built the same SDK (7.3.1m PSX-7 few days later), both have the same min API level to 2.4.

  • There is no default language but there is default resource and inside "strings" - it means default strings.

    The manifest defines languages or nothing -> compiler builds languages or none but ALWAYS default.

    Watch, user -> language = LAN, starting app, system check if there is a resources for LAN, if not, simple load res from default.

    So if a dev prepare only default resource and inside Esperanto strings all will be shown in Esperanto independent of LAN.

    I understand all of that but again that doesn't explain how the compiler would know that your app supports English unless you say so, or you leave the languages unspecified.

    Your implicit answer would be that it doesn't matter (due to all the things you said above), but now we both know better.

    Why shouldn't the compiler include/exclude devices based on language support? It is this process that mandates that you list all the languages your app supports, if you choose to list any at all (otherwise the compiler just assumes you support English).

    > There is no default language but there is default resource and inside "strings" - it means default strings.

    Right and I already covered that. That covers the process of string lookups, but not the specification of what languages your app supports. Perhaps the mistake here was to assume that string lookup is the only way that languages have any effect on CIQ apps.

    > The complete lack of documentation around part numbers with respect to CIQ is a little disappointing.

    But actually, the behavior here is documented. If either of us had read the related docs recently, we would've seen the problem immediately.

    https://developer.garmin.com/connect-iq/core-topics/manifest-and-permissions/

    Languages

    Connect IQ apps can be localized across over 30 languages, and the languages your app support can impact what regions of the world your app is available in. In the manifest you can declare the languages your app supports, which will be used when exporting your application to the store. See Resources for more information.

    Notice how it does *not* say anything like: "the languages your app supports are only used to look up strings in resources, and nothing else".

  • There is no default language but there is default resource and inside "strings" - it means default strings.

    The manifest defines languages or nothing -> compiler builds languages or none but ALWAYS default.

    Watch, user -> language = LAN, starting app, system check if there is a resources for LAN, if not, simple load res from default.

    So if a dev prepare only default resource and inside Esperanto strings all will be shown in Esperanto independent of LAN.

  • > There's default language resources, but not a "default language" (as in an unspecified / generic language). I think every device always has a language set: e.g.

    To be clear, a given string resource in your app may not have a language associated with it (because it's in the default resource folder), but when your app runs on a device, that device is always configured with a specific language. (e.g. My fr955 is currently set to English. I can't set it to "no language", I can only change the language to an actual language that's supported by the device.)

  • > No, I had always at least pol (and others if I plan real translation) because thought that for not chosen language default is applied!

    That's because you're only looking at it from the POV of how language resources work, and not from the POV of how Garmin knows what languages your app supports.

    For example, most devs probably put all their English strings in resource (the default) resource folder, so that if they also support other languages, the English strings will be used as a default. But if you don't put "eng" in the manifest, how does Garmin know your app supports English. For all they know, your default strings could be French or German.

    Clearly the only way for Garmin to know what languages your app supports is for you to specify them in the manifest.

    And now we know that Garmin actually does something with this information.

    > There is a default language!

    There's default language resources, but not a "default language" (as in an unspecified / generic language). I think every device always has a language set: e.g.

    https://developer.garmin.com/connect-iq/api-docs/Toybox/System/DeviceSettings.html#systemLanguage-var

    https://developer.garmin.com/connect-iq/api-docs/Toybox/System.html#Language-module

    That's why I mentioned that if you don't specify a language in manifest.xml, the compiler apparently assumes your app supports English. That's the one sense where there"s a "default language" (setting), but I don't think that's what you meant.

  • No, I had always at least pol (and others if I plan real translation) because thought that for not chosen language default is applied!

    So usually it looks like:

    and of course in resources I put English translation. So now, I've added eng, nothing change without additional line in manifest but device is included...

    But, without warning, I have to check if eng is specified in json in any part number....