Skip to content

Commit

Permalink
2661 - Translation System - Crowdin integration (#4031)
Browse files Browse the repository at this point in the history
* 2661 - Sort translation keys

* 2661 - Add crowdin.yml

* 2661 - Add translation workflows

* 2661 - Add fra 2025 anchors file for Arabic
  • Loading branch information
yaguzmang authored Oct 16, 2024
1 parent fa8eb20 commit eaf13a5
Show file tree
Hide file tree
Showing 88 changed files with 8,852 additions and 8,779 deletions.
34 changes: 34 additions & 0 deletions .github/workflows/translations-download-workflow.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: New Crowdin translations PR

on:
workflow_dispatch:

permissions:
contents: write
pull-requests: write

jobs:
crowdin:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Synchronize with Crowdin
uses: crowdin/github-action@v2
with:
upload_sources: false
upload_translations: false
download_translations: true
# Export options
export_only_approved: true

localization_branch_name: i18n_crowdin_translations
create_pull_request: true
pull_request_title: "New Crowdin translations"
pull_request_body: "New Crowdin pull request with translations"
pull_request_base_branch_name: "development"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
23 changes: 23 additions & 0 deletions .github/workflows/translations-upload-workflow.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: Upload translation sources

on:
push:
paths: ["src/i18n/resources/en/**/*.json", "!src/i18n/resources/en/panEuropean/**"]
branches: [development]

jobs:
crowdin-upload-sources:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Crowdin push
uses: crowdin/github-action@v2
with:
upload_sources: true
upload_translations: false
download_translations: false
env:
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
14 changes: 14 additions & 0 deletions crowdin.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
"project_id_env": "CROWDIN_PROJECT_ID"
"api_token_env": "CROWDIN_PERSONAL_TOKEN"
"base_path": "."
"base_url": "https://api.crowdin.com"
"preserve_hierarchy": true

files:
[
{
"source": "/src/i18n/resources/en/**/*.json",
"translation": "/src/i18n/resources/%two_letters_code%/%original_file_name%",
"ignore": ["/src/i18n/resources/en/panEuropean/**"],
},
]
2 changes: 2 additions & 0 deletions src/i18n/resources/ar.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import * as admin from './ar/admin.json'
import * as anchors from './ar/anchors.json'
import * as area from './ar/area.json'
import * as assessmentSection from './ar/assessmentSection.json'
import * as common from './ar/common.json'
Expand All @@ -20,6 +21,7 @@ import * as uc from './ar/uc.json'

export const arTranslation = {
admin,
anchors,
area,
common,
contentCheck,
Expand Down
25 changes: 25 additions & 0 deletions src/i18n/resources/ar/anchors.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"fra": {
"2025": {
"1a": "ا) 1",
"1b": "ب) 1",
"1c": "ج) 1",
"1d": "د) 1",
"1e": "ه) 1",
"2a": "ا) 2",
"2b": "ب) 2",
"2c": "ج) 2",
"2d": "د) 2",
"3a": "ا) 3",
"3b": "ب) 3",
"3c": "ج) 3",
"4a": "ا) 4",
"4b": "ب) 4",
"5a": "ا) 5",
"5b": "ب) 5",
"5c": "ج) 5",
"6a": "ا) 6",
"6b": "ب) 6"
}
}
}
4 changes: 2 additions & 2 deletions src/i18n/resources/ar/assessmentSection.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"odpUpdatedAfterEstimatingThisCell": "تم تحديث نقطة البيانات الأصلية بعد استخدام التقديرات لهذة الخلية",
"dataTableHasErrors": "بيانات الجدول تحتوي على أخطاء. ",
"hoverCellToSeeDetails": "يُرجى التمرير فوق الخلية الحمراء للاطلاع على التفاصيل."
"hoverCellToSeeDetails": "يُرجى التمرير فوق الخلية الحمراء للاطلاع على التفاصيل.",
"odpUpdatedAfterEstimatingThisCell": "تم تحديث نقطة البيانات الأصلية بعد استخدام التقديرات لهذة الخلية"
}
4 changes: 2 additions & 2 deletions src/i18n/resources/ar/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,10 @@
"success": "تمت بنجاح",
"tier": "المستوى",
"tiers": {
"notSelected": "",
"high": "مرتفع",
"low": "منخفض",
"medium": "متوسط",
"low": "منخفض"
"notSelected": ""
},
"totalPercentage": "النسبة المئوية الإجمالية",
"trend": "اتجاه",
Expand Down
102 changes: 51 additions & 51 deletions src/i18n/resources/ar/contentCheck.json
Original file line number Diff line number Diff line change
@@ -1,77 +1,77 @@
{
"//": "المفاتيح هي بنفس صيغة حقول قاعدة البيانات ",
"disturbances": {
"diseases": "$t(disturbances.diseases)",
"insects": "$t(disturbances.insects)",
"other": "$t(disturbances.other)",
"severe_weather_events": "$t(disturbances.severeWeatherEvents)",
"title": "الاضطرابات"
},
"extent": {
"bamboo": "$t(specificForestCategories.bamboo)",
"mangroves": "$t(specificForestCategories.mangroves)",
"title": "مَدًى",
"certified_area": "مساحة الغابات المعتمدة (١٠٠٠ هكتار)",
"forest_area": "الغابة (١٠٠٠ هكتار)",
"management_plan_percent": "مساحة الغابات مع خطط الإدارة (٪ من الغابات)",
"mangroves": "$t(specificForestCategories.mangroves)",
"other_wooded_land": "أراضي حرجية أخرى (١٠٠٠ هكتار)",
"primary_forest_percent": "غابة أولية (٪ من الغابات)",
"protected_forest_percent": "الغابات في المناطق المحمية (٪ من الغابات)",
"management_plan_percent": "مساحة الغابات مع خطط الإدارة (٪ من الغابات)",
"certified_area": "مساحة الغابات المعتمدة (١٠٠٠ هكتار)"
},
"periodicChangeRate": {
"title": "معدلات التغيير الدوري (المعدلات السنوية)",
"forest_area_annual_net_change": "صافي التغير السنوي لمساحة الغابات (١٠٠٠ هكتار)",
"forest_area_annual_net_change_rate": "معدل التغير الصافي السنوي لمساحة الغابات (٪)",
"other_wooded_land_annual_net_change": "صافي التغير السنوي لمساحة الأراضي الحرجية الأخرى (١٠٠٠ هكتار)",
"other_wooded_land_annual_net_change_rate": "معدل التغير الصافي السنوي لمنطقة الأراضي الحرجية الأخرى (٪)",
"primary_forest_annual_net_change": "صافي التغير السنوي للغابات الأولية (١٠٠٠ هكتار)",
"primary_forest_annual_net_change_rate": "معدل التغير في مساحة الغابات الأولية (٪)",
"natural_forest_area_annual_net_change": "التجديد الصافي السنوي لالغابات المجددة طبيعياً",
"natural_forest_area_annual_net_change_rate": "معدل التغير لالغابات المجددة طبيعياً (٪)",
"planted_forest_annual_net_change": "صافي التغير السنوي للغابات المزروعة",
"planted_forest_annual_net_change_rate": "معدل تغير الغابات المزروعة (٪)"
"title": "مَدًى"
},
"forestGrowingStockBiomassCarbon": {
"title": "مخزون الغابات المتزايد والكتلة الحيوية والكربون",
"forest": "مخزون الأشجار الحيّة (متر مكعب / هكتار)",
"forest_above_ground": "الكتلة الحيوية فوق الأرض (طن / هكتار)",
"forest_below_ground": "الكتلة الحيوية تحت الأرض (طن / هكتار)",
"forest_deadwood": "الحطب الميّت (طن / هكتار)",
"above_ground_biomass_growing_stock_ratio": "نسبة (الكتلة الحيوية فوق الأرض) / مخزون النمو (طن / متر مكعب)",
"carbon_biomass_above_ground_ratio": "النسبة (الكربون / الكتلة الحيوية) للكتلة الحيوية فوق الأرض",
"carbon_biomass_below_ground_ratio": "النسبة (الكربون / الكتلة الحيوية) للكتلة الحيوية تحت الأرض",
"carbon_biomass_deadwood_ratio": "النسبة (الحطب الميّت / الكتلة الحيوية الحية)",
"carbon_forest_above_ground": "الكربون في الكتلة الحيوية فوق الأرض (طن / هكتار)",
"carbon_forest_below_ground": "الكربون في الكتلة الحيوية تحت الأرض (طن / هكتار)",
"carbon_forest_deadwood": "الكربون في الخشب الميت (طن / هكتار)",
"carbon_forest_litter": "الكربون في بقايا النبات (طن / هكتار)",
"carbon_forest_soil": "الكربون في التربة (طن / هكتار)",
"above_ground_biomass_growing_stock_ratio": "نسبة (الكتلة الحيوية فوق الأرض) / مخزون النمو (طن / متر مكعب)",
"dead_living_mass_ratio": "نسبة (الكربون / الكتلة الحيوية) الحطب الميّت",
"forest": "مخزون الأشجار الحيّة (متر مكعب / هكتار)",
"forest_above_ground": "الكتلة الحيوية فوق الأرض (طن / هكتار)",
"forest_below_ground": "الكتلة الحيوية تحت الأرض (طن / هكتار)",
"forest_deadwood": "الحطب الميّت (طن / هكتار)",
"root_shoot_ratio": "معدل وزن الجزء الجذري إلى الجزء الخضري",
"carbon_biomass_deadwood_ratio": "النسبة (الحطب الميّت / الكتلة الحيوية الحية)",
"carbon_biomass_above_ground_ratio": "النسبة (الكربون / الكتلة الحيوية) للكتلة الحيوية فوق الأرض",
"carbon_biomass_below_ground_ratio": "النسبة (الكربون / الكتلة الحيوية) للكتلة الحيوية تحت الأرض",
"dead_living_mass_ratio": "نسبة (الكربون / الكتلة الحيوية) الحطب الميّت"
"title": "مخزون الغابات المتزايد والكتلة الحيوية والكربون"
},
"primaryDesignatedManagementObjective": {
"title": "الهدف الرئيسى المحدد للإدارة",
"production": "$t(designatedManagementObjective.production)",
"protection_of_soil_and_water": "$t(designatedManagementObjective.soilWaterProtection)",
"conservation_of_biodiversity": "$t(designatedManagementObjective.biodiversityConservation)",
"social_services": "$t(designatedManagementObjective.socialServices)",
"multiple_use": "$t(designatedManagementObjective.multipleUse)",
"other": "$t(designatedManagementObjective.other)",
"no_unknown": "$t(designatedManagementObjective.unknown)"
},
"totalAreaDesignatedManagementObjective": "إجمالي المساحة الخاضعة لهدف إدارة محدد",
"forestOwnership": {
"title": "الملكية",
"other_or_unknown": "$t(forestOwnership.otherOrUnknown)",
"private_ownership": "$t(forestOwnership.privateOwnership)",
"public_ownership": "$t(forestOwnership.publicOwnership)",
"other_or_unknown": "$t(forestOwnership.otherOrUnknown)"
"title": "الملكية"
},
"holderOfManagementRights": {
"title": "حقوق إدارة الغابات العامة",
"public_administration": "$t(holderOfManagementRights.publicAdministration)",
"communities": "$t(holderOfManagementRights.communities)",
"individuals": "$t(holderOfManagementRights.individuals)",
"other": "$t(holderOfManagementRights.other)",
"private_businesses": "$t(holderOfManagementRights.privateBusinesses)",
"communities": "$t(holderOfManagementRights.communities)",
"other": "$t(holderOfManagementRights.other)"
"public_administration": "$t(holderOfManagementRights.publicAdministration)",
"title": "حقوق إدارة الغابات العامة"
},
"disturbances": {
"title": "الاضطرابات",
"insects": "$t(disturbances.insects)",
"diseases": "$t(disturbances.diseases)",
"severe_weather_events": "$t(disturbances.severeWeatherEvents)",
"other": "$t(disturbances.other)"
}
"periodicChangeRate": {
"forest_area_annual_net_change": "صافي التغير السنوي لمساحة الغابات (١٠٠٠ هكتار)",
"forest_area_annual_net_change_rate": "معدل التغير الصافي السنوي لمساحة الغابات (٪)",
"natural_forest_area_annual_net_change": "التجديد الصافي السنوي لالغابات المجددة طبيعياً",
"natural_forest_area_annual_net_change_rate": "معدل التغير لالغابات المجددة طبيعياً (٪)",
"other_wooded_land_annual_net_change": "صافي التغير السنوي لمساحة الأراضي الحرجية الأخرى (١٠٠٠ هكتار)",
"other_wooded_land_annual_net_change_rate": "معدل التغير الصافي السنوي لمنطقة الأراضي الحرجية الأخرى (٪)",
"planted_forest_annual_net_change": "صافي التغير السنوي للغابات المزروعة",
"planted_forest_annual_net_change_rate": "معدل تغير الغابات المزروعة (٪)",
"primary_forest_annual_net_change": "صافي التغير السنوي للغابات الأولية (١٠٠٠ هكتار)",
"primary_forest_annual_net_change_rate": "معدل التغير في مساحة الغابات الأولية (٪)",
"title": "معدلات التغيير الدوري (المعدلات السنوية)"
},
"primaryDesignatedManagementObjective": {
"conservation_of_biodiversity": "$t(designatedManagementObjective.biodiversityConservation)",
"multiple_use": "$t(designatedManagementObjective.multipleUse)",
"no_unknown": "$t(designatedManagementObjective.unknown)",
"other": "$t(designatedManagementObjective.other)",
"production": "$t(designatedManagementObjective.production)",
"protection_of_soil_and_water": "$t(designatedManagementObjective.soilWaterProtection)",
"social_services": "$t(designatedManagementObjective.socialServices)",
"title": "الهدف الرئيسى المحدد للإدارة"
},
"totalAreaDesignatedManagementObjective": "إجمالي المساحة الخاضعة لهدف إدارة محدد"
}
14 changes: 7 additions & 7 deletions src/i18n/resources/ar/dataSource.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
{
"referenceToTataSource": "مرجع مصدر البيانات",
"typeOfDataSource": "نوع مصدر البيانات",
"fraVariable": "متغير (فرا)",
"variable": "المتغير",
"yearForDataSource": "سنة مصدر البيانات",
"comments": "التعليقات",
"fraVariable": "متغير (فرا)",
"nationalForestInventory": "الجرد الوطني للغابات (NFI)",
"referenceToTataSource": "مرجع مصدر البيانات",
"registersAndStatistics": "السجلات والإحصاءات",
"remoteSensingBasedAssessmentWithGroundTruthing": "التقييم القائم على الاستشعار عن بعد مع التحقيق السطحي",
"statisticalRemoteSensingSurveyWithAccuracyAssessment": "المسح الإحصائي بالاستشعار عن بعد مع تقييم الدقة",
"remoteSensingBasedAssessmentWithoutGroundTruthing": "التقييم القائم على الاستشعار عن بعد دون التحقيق السطحي",
"statisticalRemoteSensingSurveyWithAccuracyAssessment": "المسح الإحصائي بالاستشعار عن بعد مع تقييم الدقة",
"typeOfDataSource": "نوع مصدر البيانات",
"variable": "المتغير",
"vegetationMapping": "رسم خرائط الغطاء النباتي",
"registersAndStatistics": "السجلات والإحصاءات"
"yearForDataSource": "سنة مصدر البيانات"
}
4 changes: 2 additions & 2 deletions src/i18n/resources/ar/email.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"invitationAccepted": {
"htmlMessage": "{{recipientSurname}} {{recipientName}} عزيزتي عزيزي /\n<br/><br/>\n<b><a href=\"{{- manageCollaboratorsUrl}}\">{{country}}</a></b> في {{role}} ك {{cycleName}} {{assessmentName}} لقد تم قبول الدعوة المقدمة من جانبكم {{invitedUserSurname}} {{invitedUserName}} المستخدم\n<br/><br/>\nفريق التقييم العالمي للموارد الحرجيه",
"subject": "لقد تم قبول الدعوة المقدمة من جانبكم {{invitedUserSurname}} {{invitedUserName}} المستخدم",
"textMessage": "{{recipientSurname}} {{recipientName}} عزيزتي عزيزي /\n\n{{country}} في {{role}} ك {{cycleName}} {{assessmentName}} لقد تم قبول الدعوة المقدمة من جانبكم {{invitedUserSurname}} {{invitedUserName}} المستخدم\n{{- manageCollaboratorsUrl}}\n\nفريق التقييم العالمي للموارد الحرجيه",
"htmlMessage": "{{recipientSurname}} {{recipientName}} عزيزتي عزيزي /\n<br/><br/>\n<b><a href=\"{{- manageCollaboratorsUrl}}\">{{country}}</a></b> في {{role}} ك {{cycleName}} {{assessmentName}} لقد تم قبول الدعوة المقدمة من جانبكم {{invitedUserSurname}} {{invitedUserName}} المستخدم\n<br/><br/>\nفريق التقييم العالمي للموارد الحرجيه"
"textMessage": "{{recipientSurname}} {{recipientName}} عزيزتي عزيزي /\n\n{{country}} في {{role}} ك {{cycleName}} {{assessmentName}} لقد تم قبول الدعوة المقدمة من جانبكم {{invitedUserSurname}} {{invitedUserName}} المستخدم\n{{- manageCollaboratorsUrl}}\n\nفريق التقييم العالمي للموارد الحرجيه"
}
}
Loading

0 comments on commit eaf13a5

Please sign in to comment.