无法在 xamarin 表单中为 Google.Cloud.Translation 设置 GOOGLE_APPLICATION_CREDENTIALS 环境变量

Not able to set the GOOGLE_APPLICATION_CREDENTIALS environment variable for Google.Cloud.Translation in xamarin forms

我正在尝试使用 Google 云平台 (GCP) 的 Google.Cloud.Translation 服务来翻译 Xamarin 表单中的文本。我想将我的申请从英语翻译成阿拉伯语。我启用了 API。从服务帐户创建了一个 json 文件。按照以下 url 中的步骤操作 https://cloud.google.com/translate/docs/setup

但是当我尝试设置 GOOGLE_APPLICATION_CREDENTIALS 时,我仍然遇到异常 -

Error reading credential file from location
C:/Users/xxx/Downloads/xxxx-280817-bedb566bfd11.json: Could not find a part of the path "/C:/Users/xxxx/Downloads/xxxx-280817-bedb566bfd11.json". Please check the value of the Environment Variable GOOGLE_APPLICATION_CREDENTIALS

我已经尝试了很多方法来解决这个问题。这是我的代码:

System.Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS","C:/Users/xxx/Downloads/xx-280817-bedb566bfd11.json");
                    
TranslationClient client = TranslationClient.Create();

我该如何解决这个问题,以便我可以在我的 Xamarin 表单中将英语翻译成阿拉伯语?

将你的 GOOGLE_APPLICATION_CREDENTIALS json 文件作为 EmbeddedResource 你可以通过这种方式获取你的路径

<ItemGroup>
  <EmbeddedResource Include="_fonts/OpenSans.ttf" />
</ItemGroup>

获取文件路径

var assembly = typeof(MyLibrary.MyClass).GetTypeInfo().Assembly;
Stream resource = assembly.GetManifestResourceStream("MyLibrary._fonts.OpenSans.ttf");

关键是在 GetManifestResourceStream 调用中使用正确的名称。你必须使用 [assembly name].[directory].[file name].

参考 link:

您遇到的问题是应用程序默认凭据不可用。

如果 运行ning 在 Google Compute Engine 中,它们可用,否则,环境变量 GOOGLE_APPLICATION_CREDENTIALS 必须在您的本地机器上定义,指向一个定义凭据的文件shown here.

那么怎么定义呢?

如果您使用 Mac 并将 json 文件放在下载文件夹中,您将打开终端应用程序并 运行 里面有这个命令:

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/xx-280817-bedb566bfd11.json"

您似乎使用的是 Windows 计算机,并且您将文件放在“下载”文件夹中,因此您可以打开“Windows 命令Prompt”(在 运行 中键入 CMD,或搜索命令提示符)和 运行 此命令:

set GOOGLE_APPLICATION_CREDENTIALS="C:\Users\xxx\Downloads\xx-280817-bedb566bfd11.json"

确保 xx-280817-bedb566bfd11.json 是包含您的服务帐户密钥的 JSON 文件的正确文件名。

您可以在 Google 云平台控制台 as shown here 中获取服务帐户密钥。