internal static async Task <FileTranslateEntity> EnsureTranslated(this ITranslateService translateService, FileEntity file)
        {
            Assert.NotNull(file);
            Assert.True(file.FileId.HasValue);

            FileTranslateEntity translate;

            while ((translate = await translateService.LookupTranslate(new LookupTranslateParameter(file.FileId.Value))) == null ||
                   translate.Status != "success")
            {
                if (translate == null)
                {
                    translate = await translateService.CreateTranslate(
                        new CreateTranslateParameter(new FileTranslateRequest(new TranslateSource(file.FileId, file.Name, false))));
                }

                Assert.True(translate?.Status != "failed");

                if (null == translate)
                {
                    continue;
                }

                if (translate.Status != "success")
                {
                    Thread.Sleep(3000);
                    continue;
                }

                break;
            }

            return(translate);
        }