'Content-Language metadata field in GCS object not allowing ISO-639-2 from API

While trying to update the Content-Language metadata field of an object to ISO-639-2 field from the UI works fine, when trying to do the same from http API, it fails with an invalid argument error. The official documentation page states that ISO-639-1 codes are supported (although the link goes to 639-2).

Any ideas on how to update the Content-Language via http/json for objects in ISO-639-2 ? Or it's possible the UI treats it differently?

Response from GetObject for an object with ISO-639-2 updated via ui

{
  "kind": "storage#object",
  "id": "XXXXXXXXX/textfile.txt/XXXXXXX",
  "selfLink": ...,
  "mediaLink": ...,
  "name": "textfile.txt",
  "bucket": "XXXXXX",
  "generation": "XXXXXX",
  "metageneration": "2",
  "contentType": "text/plain; charset=utf-8",
  "storageClass": "STANDARD",
  "size": "29",
  "md5Hash": "f510qpm7Jh30uKbBcN4e0A==",
  **"contentLanguage": "ach",**
  "crc32c": "4fnpOw==",
  "etag": "COet043XpPcCEAI=",
  "temporaryHold": false,
  "eventBasedHold": false,
  "timeCreated": "2022-04-21T07:56:14.769Z",
  "updated": "2022-04-21T07:57:14.321Z",
  "timeStorageClassUpdated": "2022-04-21T07:56:14.769Z",
  "metadata": {
    "gcsfuse_mtime": "2022-04-21T07:56:13.375009661Z"
  }
}

Error when trying to set the same value as received in the above call via json

    {
    "error": {
    "code": 400,
    "message": "Invalid argument.",
    "errors": [
      {
        "message": "Invalid argument.",
        "domain": "global",
        "reason": "invalid"
      }
    ]
  }
}


Solution 1:[1]

I reproduced your case, and it seems like you are right. Content-Language only allows ISO 639-1 language codes for the supported values of this metadata.

When Content-Language was set to “ach” in JSON POST API call it gave me errors “curl: (3) Failed to convert ach” to ACE; string contains a disallowed character” but when set to “en”/ “de”/ “aa” it works fine and gives a HTTP 200 response. I think the logic which works here, checks for ISO 639-1 format.

I have gone through the documentation, and it says clearly “Refer to ISO 639-1 language codes for the supported values of this metadata.” Maybe it routes to ISO 639-2 page, because it contains both ISO 639-1 and ISO 639-2 codes, out of which it mentions it only supports ISO 639-1 language codes. You can check out this documentation as well.

Raise a feature request here so that the Content-Language supports ISO 639-2 language code in API calls.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Priyashree Bhadra