مجموعة أدوات تطوير Ruby

الترجمة بالذكاء الاصطناعي مع Ruby وLingo.dev

مقدمة

تقوم مكتبة Lingo.dev لـ Ruby بترجمة النصوص وكائنات Hash ومحادثات الدردشة مع دعم للعمليات المجمعة وتتبع التقدم والمعالجة المتزامنة. تتعامل مع البيانات الكبيرة عن طريق تقسيم المحتوى تلقائيًا إلى أحجام دفعات مثالية وتدعم المعاجم للحفاظ على اتساق المصطلحات.

التثبيت

gem

gem install lingodotdev

Bundler

أضف إلى ملف Gemfile الخاص بك:

gem 'lingodotdev'

ثم قم بتشغيل:

bundle install

ترجمة سريعة

تخطى إدارة النسخ للترجمات الفردية. تتعامل هذه الطرق مع دورة حياة المحرك تلقائيًا وتستخدم الوضع السريع افتراضيًا، مما يجعلها مثالية لأدوات CLI والنصوص البرمجية.

require 'lingodotdev'

# ترجمة النص

text_result = LingoDotDev::Engine.quick_translate(
  'Hello world',
  api_key: ENV['LINGODOTDEV_API_KEY'],
  target_locale: 'es'
)
puts "Text: #{text_result}"

# ترجمة الكائن

object_result = LingoDotDev::Engine.quick_translate(
  { greeting: 'Hello', farewell: 'Goodbye' },
  api_key: ENV['LINGODOTDEV_API_KEY'],
  target_locale: 'fr'
)
puts "Object: #{object_result}"

الاستخدام الأساسي

تتطلب مكتبة SDK مفتاح API من Lingo.dev.

require 'lingodotdev'

engine = LingoDotDev::Engine.new(api_key: ENV['LINGODOTDEV_API_KEY'])

result = engine.localize_text(
  'Welcome! We missed you.',
  target_locale: 'es'
)
puts result

ترجمة النص مع تتبع التقدم

تتبع تقدم الترجمة باستخدام دالة استدعاء. حتى سلاسل النصوص الفردية تمر عبر المقسم، مما يتيح الإبلاغ عن التقدم للنصوص الطويلة ويوفر سلوكًا متسقًا عبر جميع أنواع المحتوى.

require 'lingodotdev'

engine = LingoDotDev::Engine.new(api_key: ENV['LINGODOTDEV_API_KEY'])

result = engine.localize_text(
  'We sent a confirmation email.',
  target_locale: 'es'
) do |progress|
  puts "Progress: #{progress}%"
end

puts "Result: #{result}"

ترجمة الكائنات

ترجمة كائنات Hash المتداخلة مع الحفاظ على البنية. تقوم مكتبة SDK بمعالجة جميع قيم السلاسل النصية بشكل متكرر بغض النظر عن العمق.

require 'lingodotdev'

content = {
  title: 'Welcome',
  cta: 'Start your free trial',
  footer: {
    legal: 'All rights reserved.',
    help: 'Need help?'
  }
}

engine = LingoDotDev::Engine.new(api_key: ENV['LINGODOTDEV_API_KEY'])

result = engine.localize_object(content, target_locale: 'es')
puts result

الترجمة الجماعية إلى لغات متعددة

ترجمة المحتوى إلى لغات مستهدفة متعددة في طلب واحد. يُرجع مصفوفة تحتوي على نتيجة واحدة لكل لغة مستهدفة، بنفس الترتيب المطلوب.

require 'lingodotdev'

engine = LingoDotDev::Engine.new(api_key: ENV['LINGODOTDEV_API_KEY'])

# ترجمة النص إلى لغات متعددة

text_results = engine.batch_localize_text(
  'Welcome to our application',
  target_locales: ['es', 'fr', 'de'],
  fast: true
)
puts "Text results: #{text_results}"

ترجمة الكائنات الجماعية

توطين كائنات متعددة إلى نفس اللغة المستهدفة. مفيد لمعالجة مجموعات من عناصر المحتوى بكفاءة.

require 'lingodotdev'

engine = LingoDotDev::Engine.new(api_key: ENV['LINGODOTDEV_API_KEY'])

objects = [
  { title: 'Welcome', body: 'Hello there' },
  { title: 'About', body: 'Learn more about us' },
  { title: 'Contact', body: 'Get in touch' }
]

results = engine.batch_localize_objects(
  objects,
  target_locale: 'es',
  concurrent: true
)

results.each do |result|
  puts "#{result[:title]}: #{result[:body]}"
end

ترجمة المحادثات

ترجمة رسائل الدردشة مع الحفاظ على أسماء المتحدثين. يجب أن تحتوي كل رسالة على مفتاحي :name و:text. مفيدة لتوطين محادثات الدعم، وسجلات الدردشة، أو أنظمة الحوار دون فقدان بنية المحادثة.

require 'lingodotdev'

chat = [
  { name: 'Alice', text: 'Hello everyone!' },
  { name: 'Bob', text: 'How are you doing?' },
  { name: 'Alice', text: 'Great, thanks for asking!' }
]

engine = LingoDotDev::Engine.new(api_key: ENV['LINGODOTDEV_API_KEY'])

result = engine.localize_chat(chat, target_locale: 'es')

result.each do |message|
  puts "#{message[:name]}: #{message[:text]}"
end

المعالجة المتسلسلة مع تتبع التقدم

يتيح الوضع المتسلسل استدعاءات مفصلة لتتبع التقدم. تتلقى دالة الاستدعاء نسبة التقدم المئوية لكل دفعة تتم معالجتها، وهي مفيدة لتصحيح مشكلات الترجمة أو إظهار تقدم مفصل في واجهات المستخدم.

require 'lingodotdev'

content = {
  welcome: 'Hello',
  goodbye: 'Farewell',
  help: 'Need assistance?'
}

engine = LingoDotDev::Engine.new(api_key: ENV['LINGODOTDEV_API_KEY'])

result = engine.localize_object(content, target_locale: 'es') do |progress|
  puts "#{progress}% complete"
end

puts result

المعالجة المتزامنة

معالجة الأجزاء بشكل متوازٍ للترجمة الأسرع. يضحي هذا الوضع بتتبع التقدم مقابل السرعة، مما يجعله مثاليًا لأعباء العمل الإنتاجية حيث تكون الإنتاجية أكثر أهمية من تعليقات المستخدم.

require 'lingodotdev'

content = {
  header: { title: 'Welcome', subtitle: 'Get started' },
  body: { intro: 'Learn more', details: 'Full description' },
  footer: { copyright: '2024', contact: 'Email us' }
}

engine = LingoDotDev::Engine.new(api_key: ENV['LINGODOTDEV_API_KEY'])

result = engine.localize_object(
  content,
  target_locale: 'es',
  concurrent: true
)

puts result

بيانات مرجعية

توفير مسارد أو ترجمات سابقة لضمان الاتساق. يتم إرسال البيانات المرجعية مع كل جزء إلى واجهة برمجة التطبيقات، لذا احتفظ بها بحجم معقول. استخدم هذا للمصطلحات التجارية، أو المفردات التقنية، أو الحفاظ على اتساق الترجمة عبر تحديثات المنتج.

require 'lingodotdev'

content = { cta: 'Start your free trial', title: 'Welcome' }

reference = {
  es: { cta: 'Comienza tu prueba gratuita' },
  fr: { cta: 'Commencez votre essai gratuit' }
}

engine = LingoDotDev::Engine.new(api_key: ENV['LINGODOTDEV_API_KEY'])

result = engine.localize_object(
  content,
  target_locale: 'es',
  reference: reference,
  concurrent: true
)

puts result

التكوين

التحكم في سلوك المعالجة الدفعية ونقاط نهاية واجهة برمجة التطبيقات. تقسم مجموعة أدوات التطوير البيانات الكبيرة بناءً على قيود عدد المفاتيح وعدد الكلمات، مما يمنع انتهاء مهلة واجهة برمجة التطبيقات ويحسن الموثوقية لمهام الترجمة الكبيرة.

require 'lingodotdev'

engine = LingoDotDev::Engine.new(
  api_key: ENV['LINGODOTDEV_API_KEY'],
  api_url: 'https://engine.lingo.dev',
  batch_size: 25,              # العناصر لكل دفعة (1-250)
  ideal_batch_item_size: 250   # الكلمات لكل دفعة (1-2500)
)

result = engine.localize_text(
  'Reset your password',
  target_locale: 'es',
  fast: true
)

puts result

يمكنك أيضًا التكوين باستخدام كتلة برمجية:

require 'lingodotdev'

engine = LingoDotDev::Engine.new(api_key: ENV['LINGODOTDEV_API_KEY']) do |config|
  config.batch_size = 50
  config.ideal_batch_item_size = 500
end

result = engine.localize_text('Hello world', target_locale: 'es')
puts result

اكتشاف اللغة

اكتشاف لغة سلسلة نصية. مفيد لتوجيه المحتوى تلقائيًا إلى خط أنابيب الترجمة الصحيح أو التحقق من صحة لغة إدخال المستخدم.

require 'lingodotdev'

engine = LingoDotDev::Engine.new(api_key: ENV['LINGODOTDEV_API_KEY'])

locale = engine.recognize_locale('Guten Morgen')
puts "Detected language: #{locale}"

فحص مفتاح API

التحقق من الحساب الذي يملك مفتاح API. يعيد nil إذا فشلت المصادقة. مفيد لتصحيح مشكلات المصادقة أو عرض معلومات الحساب في أدوات الإدارة.

require 'lingodotdev'

engine = LingoDotDev::Engine.new(api_key: ENV['LINGODOTDEV_API_KEY'])

user = engine.whoami
if user
  puts "Authenticated as: #{user[:email]}"
else
  puts 'Authentication failed'
end

معالجة الأخطاء

تحدد مجموعة أدوات التطوير (SDK) فئات استثناء مخصصة لسيناريوهات الخطأ المختلفة. التمييز بين أخطاء المستخدم (ValidationError) ومشاكل البنية التحتية (ServerError، APIError) لمنطق إعادة المحاولة المناسب.

require 'lingodotdev'

begin
  engine = LingoDotDev::Engine.new(api_key: ENV['LINGODOTDEV_API_KEY'])
  result = engine.localize_text('Hello', target_locale: 'es')
  puts result
rescue LingoDotDev::ValidationError => e
  puts "Invalid parameters or bad request: #{e.message}"
rescue LingoDotDev::AuthenticationError => e
  puts "Authentication error: #{e.message}"
rescue LingoDotDev::ServerError => e
  puts "Server or network error: #{e.message}"
rescue LingoDotDev::APIError => e
  puts "API error: #{e.message}"
rescue LingoDotDev::Error => e
  puts "Error: #{e.message}"
end