بعد از هر اجرا یک درخواست کشیدن باز کنید
- id: translate uses: IEvangelist/resource-translator@v3 with: sourceLocale: en subscriptionKey: ${{ secrets.TRANSLATOR_KEY }} endpoint: ${{ secrets.TRANSLATOR_ENDPOINT }} region: ${{ secrets.TRANSLATOR_REGION }}
- if: steps.translate.outputs.has-new-translations == 'true' uses: peter-evans/create-pull-request@v7 with: branch: machine-translation title: ${{ steps.translate.outputs.summary-title }} body: ${{ steps.translate.outputs.summary-details }} labels: localizationMonorepos: ترجمه دامنه به ازای هر بسته
with: sourceLocale: en include: | apps/web/**/*.en.resx packages/shared/**/*.en.json exclude: | **/dist/** **/__tests__/**فرهنگ لغت نام های تجاری و اصطلاحات محصول
یک .github/resource-translator.yml در مخزن بیندازید:
glossary: Acme: Contoso Octocat: Octocat ".NET": ".NET" "C++": "C++"اصطلاحات واژه نامه بعد از آن ترجمه به کار می روند، بنابراین خروجی ترجمه ماشینی برندینگ مورد علاقه شما را حتی زمانی که مدل آن را با مترادف عوض کرده است، حفظ می کند.
دسته بندی مترجم سفارشی (صنعت / حوزه)
with: sourceLocale: en subscriptionKey: ${{ secrets.TRANSLATOR_KEY }} endpoint: ${{ secrets.TRANSLATOR_ENDPOINT }} categoryId: 1234abcd-5678-90ef-... یک دسته بندی Azure Custom Translator را بر اساس مجموعه ای که واژگان و لحن صنعت شما (حقوقی، پزشکی، بازاریابی، مهندسی داخلی و غیره) را نشان می دهد آموزش دهید و شناسه آن را از طریق categoryId پاس کنید. این قوی ترین اهرم صوتی است که Azure ارائه می دهد.
کنترل تن + پشتیبان سخت گیرانه
# .github/resource-translator.yml# Industry / domain — choose your tone via a Custom Translator categorycategoryId: legal-en
# Treat profanity strictly for content aimed at younger audiencesprofanityAction: MarkedprofanityMarker: Tag
# Fail the run rather than silently fall back to the general modelallowFallback: false یک categoryId مترجم سفارشی را با profanityAction و allowFallback: false ترکیب کنید تا صدای یکنواختی برقرار شود و اگر دسته بندی انتخاب شده برای یکی از مکان های هدف شما استقرار نداشته باشد، روند کاری شکست می خورد.
قبل از فعال کردن روند کاری، تمرین را انجام دهید
with: dryRun: true failOnError: false این عمل همچنان خروجی های خلاصه و یک خلاصه گام را ارسال می کند، اما هیچ فایلی نوشته نمی شود. با failOnError: false ترکیب کنید تا هر مشکل را به عنوان هشدار هنگام تکرار مطرح کنید.