Update indexproo.html
Browse files- indexproo.html +144 -66
indexproo.html
CHANGED
@@ -1313,6 +1313,25 @@
|
|
1313 |
.error-meaning {
|
1314 |
border-right-color: #ef4444;
|
1315 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1316 |
</style>
|
1317 |
</head>
|
1318 |
<body class="bg-gray-50">
|
@@ -1762,6 +1781,12 @@
|
|
1762 |
</button>
|
1763 |
</div>
|
1764 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
1765 |
</main>
|
1766 |
</div>
|
1767 |
|
@@ -2254,7 +2279,7 @@
|
|
2254 |
}
|
2255 |
|
2256 |
/* =====================================
|
2257 |
-
دالة عرض شرح الخطأ - محسنة
|
2258 |
===================================== */
|
2259 |
function showErrorExplanation(errorType, errorText, explanation) {
|
2260 |
const popup = document.getElementById('errorPopup');
|
@@ -3016,7 +3041,7 @@
|
|
3016 |
// السماح بوقت للمعالجة بين الطلبات
|
3017 |
await new Promise(resolve => setTimeout(resolve, 200));
|
3018 |
}
|
3019 |
-
|
3020 |
// إعداد الملخص النهائي
|
3021 |
const totalErrors = totalNumberErrors + totalMissingErrors + totalMeaningErrors;
|
3022 |
if (totalErrors === 0) {
|
@@ -3027,16 +3052,16 @@
|
|
3027 |
if (totalMissingErrors > 0) addError(`- ${totalMissingErrors} نص مفقود`, 'warning');
|
3028 |
if (totalMeaningErrors > 0) addError(`- ${totalMeaningErrors} اختلاف في المعنى`, 'warning');
|
3029 |
}
|
3030 |
-
|
3031 |
// تجهيز العرض الكلاسيكي
|
3032 |
displayClassicView(sourceText, targetText);
|
3033 |
-
|
3034 |
// تجهيز العرض المقسم
|
3035 |
displaySegmentedView();
|
3036 |
-
|
3037 |
// تجهيز العرض التفاعلي
|
3038 |
setupInteractiveView();
|
3039 |
-
|
3040 |
} catch (error) {
|
3041 |
console.error('Error during analysis:', error);
|
3042 |
addError('حدث خطأ أثناء التحليل: ' + error.message, 'error');
|
@@ -3274,20 +3299,23 @@
|
|
3274 |
|
3275 |
// برومبت محسن للتحليل
|
3276 |
const prompt = `قارن النص المصدر والنص الهدف التاليين، وحدد بدقة:
|
3277 |
-
1. اختلافات الأرقام: ضع الرقم المختلف بين علامتي < >
|
3278 |
2. النصوص المفقودة: ضع النص المفقود في الترجمة بين علامتي __ __
|
3279 |
3. اختلافات المعنى: ضع النص الذي تغير معناه بين علامتي [MEANING] [/MEANING]
|
3280 |
|
3281 |
-
اعتبر الأرقام بمختلف أنظمتها (العربية والهندية والإنجليزية) متطابقة إذا كانت تمثل نفس الرقم.
|
|
|
|
|
3282 |
قم بتحليل كل جملة على حدة وتحديد الاختلافات بدقة.
|
3283 |
-
|
3284 |
لكل اختلاف، قدم شرحاً موجزاً للخطأ والتصحيح المقترح.
|
3285 |
|
3286 |
-
النص المصدر:
|
3287 |
${sourceText}
|
3288 |
|
3289 |
-
|
3290 |
-
${targetText}
|
|
|
3291 |
|
3292 |
const payload = {
|
3293 |
model: "deepseek-chat",
|
@@ -3483,32 +3511,57 @@
|
|
3483 |
|
3484 |
// إضافة مستمعي الأحداث للنصوص المحددة
|
3485 |
setTimeout(() => {
|
3486 |
-
document.querySelectorAll('.
|
3487 |
element.addEventListener('click', function() {
|
3488 |
-
|
3489 |
-
|
3490 |
-
|
3491 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3492 |
let explanation = '';
|
3493 |
-
|
3494 |
-
if (
|
3495 |
-
explanation =
|
3496 |
-
} else if (
|
3497 |
-
explanation =
|
|
|
|
|
3498 |
} else {
|
3499 |
-
explanation =
|
3500 |
}
|
3501 |
-
|
3502 |
-
showErrorExplanation(errorType,
|
3503 |
});
|
3504 |
});
|
3505 |
}, 100);
|
3506 |
}
|
3507 |
|
3508 |
/* =====================================
|
3509 |
-
دالة تمييز النص - محسنة
|
3510 |
===================================== */
|
3511 |
function applyHighlights(originalText, targetText, analysisOutput) {
|
|
|
|
|
|
|
3512 |
// تطبيق تمييز للنص المفقود تماما والمفقود جزئيا
|
3513 |
const enhancedSourceText = highlightMissingText(originalText, targetText);
|
3514 |
|
@@ -3517,50 +3570,51 @@
|
|
3517 |
const missingMatches = Array.from(analysisOutput.matchAll(/__(.*?)__/g)).map(m => m[1].trim());
|
3518 |
const meaningMatches = Array.from(analysisOutput.matchAll(/\[MEANING\](.*?)\[\/MEANING\]/g)).map(m => m[1].trim());
|
3519 |
|
3520 |
-
// تقسيم النص الأصلي إلى جمل
|
3521 |
-
const sentences = splitIntoSentences(enhancedSourceText);
|
3522 |
-
|
3523 |
// معالجة كل جملة على حدة وتطبيق التحديد
|
3524 |
-
const
|
3525 |
let hasError = false;
|
3526 |
let highlightedSentence = sentence;
|
3527 |
-
|
|
|
3528 |
// تحديد اختلافات الأرقام
|
3529 |
-
|
3530 |
if (sentence.includes(phrase)) {
|
3531 |
const regex = new RegExp(escapeRegExp(phrase), 'g');
|
3532 |
highlightedSentence = highlightedSentence.replace(regex, `<span class="highlight-number" data-error-type="number" data-explanation="تأكد من صحة الرقم في النص الهدف وتطابقه مع النص المصدر">${phrase}</span>`);
|
3533 |
hasError = true;
|
|
|
3534 |
}
|
3535 |
-
}
|
3536 |
|
3537 |
// تحديد النصوص المفقودة
|
3538 |
-
|
3539 |
if (sentence.includes(phrase)) {
|
3540 |
const regex = new RegExp(escapeRegExp(phrase), 'g');
|
3541 |
highlightedSentence = highlightedSentence.replace(regex, `<span class="highlight-missing" data-error-type="missing" data-explanation="أضف النص المفقود إلى الترجمة للحفاظ على اكتمال المعنى">${phrase}</span>`);
|
3542 |
hasError = true;
|
|
|
3543 |
}
|
3544 |
-
}
|
3545 |
|
3546 |
// تحديد اختلافات المعنى
|
3547 |
-
|
3548 |
if (sentence.includes(phrase)) {
|
3549 |
const regex = new RegExp(escapeRegExp(phrase), 'g');
|
3550 |
highlightedSentence = highlightedSentence.replace(regex, `<span class="highlight-meaning" data-error-type="meaning" data-explanation="راجع الترجمة للتأكد من نقل المعنى الصحيح دون تحريف">${phrase}</span>`);
|
3551 |
hasError = true;
|
|
|
3552 |
}
|
3553 |
-
}
|
3554 |
|
3555 |
// إذا كان هناك خطأ، قم بتمييز الجملة كاملة
|
3556 |
if (hasError) {
|
3557 |
-
return `<span class="sentence-with-error">${highlightedSentence}</span>`;
|
3558 |
}
|
3559 |
|
3560 |
return highlightedSentence;
|
3561 |
-
});
|
3562 |
|
3563 |
-
return
|
3564 |
}
|
3565 |
|
3566 |
/* =====================================
|
@@ -3699,23 +3753,47 @@
|
|
3699 |
|
3700 |
// إضافة مستمعي الأحداث للتحديدات
|
3701 |
setTimeout(() => {
|
3702 |
-
document.querySelectorAll('.segment-source .
|
3703 |
element.addEventListener('click', function() {
|
3704 |
-
|
3705 |
-
|
3706 |
-
|
3707 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3708 |
let explanation = '';
|
3709 |
-
|
3710 |
-
if (
|
3711 |
-
explanation =
|
3712 |
-
} else if (
|
3713 |
-
explanation =
|
|
|
|
|
3714 |
} else {
|
3715 |
-
explanation =
|
3716 |
}
|
3717 |
-
|
3718 |
-
showErrorExplanation(errorType,
|
3719 |
});
|
3720 |
});
|
3721 |
}, 100);
|
@@ -4042,14 +4120,14 @@
|
|
4042 |
}
|
4043 |
}
|
4044 |
|
4045 |
-
// الحصول على توصية مخصصة لكل نوع اختلاف
|
4046 |
function getRecommendationForDiff(diff) {
|
4047 |
if (diff.type === 'number') {
|
4048 |
-
return '
|
4049 |
} else if (diff.type === 'missing') {
|
4050 |
-
return '
|
4051 |
} else if (diff.type === 'meaning') {
|
4052 |
-
return '
|
4053 |
}
|
4054 |
return '';
|
4055 |
}
|
@@ -4092,7 +4170,7 @@
|
|
4092 |
numberMatches.forEach(match => {
|
4093 |
numberErrors.push({
|
4094 |
text: match[1],
|
4095 |
-
explanation: '
|
4096 |
});
|
4097 |
});
|
4098 |
|
@@ -4100,7 +4178,7 @@
|
|
4100 |
missingMatches.forEach(match => {
|
4101 |
missingErrors.push({
|
4102 |
text: match[1],
|
4103 |
-
explanation: '
|
4104 |
});
|
4105 |
});
|
4106 |
|
@@ -4108,7 +4186,7 @@
|
|
4108 |
meaningMatches.forEach(match => {
|
4109 |
meaningErrors.push({
|
4110 |
text: match[1],
|
4111 |
-
explanation: '
|
4112 |
});
|
4113 |
});
|
4114 |
|
@@ -4124,12 +4202,12 @@
|
|
4124 |
if (paragraph.length > 100) {
|
4125 |
completelyMissing.push({
|
4126 |
text: paragraph.substring(0, 100) + '...',
|
4127 |
-
explanation: 'هذا النص مفقود
|
4128 |
});
|
4129 |
} else {
|
4130 |
completelyMissing.push({
|
4131 |
text: paragraph,
|
4132 |
-
explanation: 'هذا النص مفقود
|
4133 |
});
|
4134 |
}
|
4135 |
}
|
@@ -4316,9 +4394,9 @@
|
|
4316 |
توصيات للتحسين
|
4317 |
</h4>
|
4318 |
<ul class="list-disc pr-8 text-sm text-green-700 space-y-1">
|
4319 |
-
${numberErrors.length > 0 ? '<li
|
4320 |
-
${missingErrors.length > 0 ? '<li
|
4321 |
-
${meaningErrors.length > 0 ? '<li
|
4322 |
<li>استخدم وضع العرض المقسم للتعديل الدقيق للنصوص.</li>
|
4323 |
</ul>
|
4324 |
</div>`;
|
@@ -4581,7 +4659,7 @@
|
|
4581 |
// إضافة التذييل
|
4582 |
wordContent += `
|
4583 |
<div class="footer">
|
4584 |
-
تم إنشاء هذا التقرير تلقائيًا بواسطة نظام المراجع الذكي -
|
4585 |
</div>
|
4586 |
</body>
|
4587 |
</html>`;
|
|
|
1313 |
.error-meaning {
|
1314 |
border-right-color: #ef4444;
|
1315 |
}
|
1316 |
+
|
1317 |
+
/* حقوق الملكية - جديد */
|
1318 |
+
.copyright {
|
1319 |
+
text-align: center;
|
1320 |
+
padding: 15px 0;
|
1321 |
+
font-size: 0.9rem;
|
1322 |
+
color: #6b7280;
|
1323 |
+
border-top: 1px solid #e5e7eb;
|
1324 |
+
margin-top: 40px;
|
1325 |
+
}
|
1326 |
+
|
1327 |
+
.copyright a {
|
1328 |
+
color: #3b82f6;
|
1329 |
+
text-decoration: none;
|
1330 |
+
}
|
1331 |
+
|
1332 |
+
.copyright a:hover {
|
1333 |
+
text-decoration: underline;
|
1334 |
+
}
|
1335 |
</style>
|
1336 |
</head>
|
1337 |
<body class="bg-gray-50">
|
|
|
1781 |
</button>
|
1782 |
</div>
|
1783 |
</div>
|
1784 |
+
|
1785 |
+
<!-- حقوق الملكية - إضافة جديدة -->
|
1786 |
+
<footer class="copyright">
|
1787 |
+
<p>جميع الحقوق محفوظة لشركة فاست برو للبرمجيات والذكاء الاصطناعي © <span id="currentYear"></span></p>
|
1788 |
+
<script>document.getElementById('currentYear').textContent = new Date().getFullYear();</script>
|
1789 |
+
</footer>
|
1790 |
</main>
|
1791 |
</div>
|
1792 |
|
|
|
2279 |
}
|
2280 |
|
2281 |
/* =====================================
|
2282 |
+
دالة عرض شرح الخطأ - محسنة لتكون أكثر ودية
|
2283 |
===================================== */
|
2284 |
function showErrorExplanation(errorType, errorText, explanation) {
|
2285 |
const popup = document.getElementById('errorPopup');
|
|
|
3041 |
// السماح بوقت للمعالجة بين الطلبات
|
3042 |
await new Promise(resolve => setTimeout(resolve, 200));
|
3043 |
}
|
3044 |
+
|
3045 |
// إعداد الملخص النهائي
|
3046 |
const totalErrors = totalNumberErrors + totalMissingErrors + totalMeaningErrors;
|
3047 |
if (totalErrors === 0) {
|
|
|
3052 |
if (totalMissingErrors > 0) addError(`- ${totalMissingErrors} نص مفقود`, 'warning');
|
3053 |
if (totalMeaningErrors > 0) addError(`- ${totalMeaningErrors} اختلاف في المعنى`, 'warning');
|
3054 |
}
|
3055 |
+
|
3056 |
// تجهيز العرض الكلاسيكي
|
3057 |
displayClassicView(sourceText, targetText);
|
3058 |
+
|
3059 |
// تجهيز العرض المقسم
|
3060 |
displaySegmentedView();
|
3061 |
+
|
3062 |
// تجهيز العرض التفاعلي
|
3063 |
setupInteractiveView();
|
3064 |
+
|
3065 |
} catch (error) {
|
3066 |
console.error('Error during analysis:', error);
|
3067 |
addError('حدث خطأ أثناء التحليل: ' + error.message, 'error');
|
|
|
3299 |
|
3300 |
// برومبت محسن للتحليل
|
3301 |
const prompt = `قارن النص المصدر والنص الهدف التاليين، وحدد بدقة:
|
3302 |
+
1. اختلافات الأرقام: ضع الرقم المختلف بين علامتي < > مع الكلمة السابقة والكلمة اللاحقة أو الجملة كاملة
|
3303 |
2. النصوص المفقودة: ضع النص المفقود في الترجمة بين علامتي __ __
|
3304 |
3. اختلافات المعنى: ضع النص الذي تغير معناه بين علامتي [MEANING] [/MEANING]
|
3305 |
|
3306 |
+
اعتبر الأرقام بمختلف أنظمتها (العربية والهندية والإنجليزية) متطابقة إذا كانت تمثل نفس الرقم.
|
3307 |
+
الجمل عادةً تكون من 20 إلى 300 كلمة. النصوص عبارة عن نص سورس ونص تاجرت واحد أصلي والثاني ترجمته.
|
3308 |
+
استخراج النصوص المفقودة حيث يوجد في المصدر جملة أو فقرة أو كلمة (بالعربي أو الإنجليزي) وفي النص المقابل لا يوجد ما يعادلها في المعنى بأي لغة.
|
3309 |
قم بتحليل كل جملة على حدة وتحديد الاختلافات بدقة.
|
3310 |
+
|
3311 |
لكل اختلاف، قدم شرحاً موجزاً للخطأ والتصحيح المقترح.
|
3312 |
|
3313 |
+
النص المصدر:
|
3314 |
${sourceText}
|
3315 |
|
3316 |
+
النص الهدف:
|
3317 |
+
${targetText}
|
3318 |
+
`;
|
3319 |
|
3320 |
const payload = {
|
3321 |
model: "deepseek-chat",
|
|
|
3511 |
|
3512 |
// إضافة مستمعي الأحداث للنصوص المحددة
|
3513 |
setTimeout(() => {
|
3514 |
+
document.querySelectorAll('.sentence-with-error').forEach(element => {
|
3515 |
element.addEventListener('click', function() {
|
3516 |
+
// الحصول على النص الكامل للجملة
|
3517 |
+
const sentenceText = this.textContent;
|
3518 |
+
|
3519 |
+
// تحديد نوع الخطأ من خلال الفئات داخل الجملة
|
3520 |
+
let errorType = 'general';
|
3521 |
+
let errorText = sentenceText;
|
3522 |
+
|
3523 |
+
// البحث عن الخطأ المحدد داخل الجملة
|
3524 |
+
const numberHighlight = this.querySelector('.highlight-number');
|
3525 |
+
const missingHighlight = this.querySelector('.highlight-missing');
|
3526 |
+
const meaningHighlight = this.querySelector('.highlight-meaning');
|
3527 |
+
|
3528 |
+
if (numberHighlight) {
|
3529 |
+
errorType = 'number';
|
3530 |
+
errorText = numberHighlight.textContent;
|
3531 |
+
} else if (missingHighlight) {
|
3532 |
+
errorType = 'missing';
|
3533 |
+
errorText = missingHighlight.textContent;
|
3534 |
+
} else if (meaningHighlight) {
|
3535 |
+
errorType = 'meaning';
|
3536 |
+
errorText = meaningHighlight.textContent;
|
3537 |
+
}
|
3538 |
+
|
3539 |
+
// إعداد شرح أكثر ودية
|
3540 |
let explanation = '';
|
3541 |
+
|
3542 |
+
if (errorType === 'number') {
|
3543 |
+
explanation = `يا صديقي، لاحظت وجود خطأ في الأرقام في هذه الجملة. <br><br>الرقم "${errorText}" في النص المصدر لا يتطابق مع النص الهدف. يرجى التحقق من صحة الرقم والتأكد من تطابقه في كلا النصين.`;
|
3544 |
+
} else if (errorType === 'missing') {
|
3545 |
+
explanation = `يا صديقي، هناك نص مفقود في الترجمة! <br><br>النص "${errorText}" موجود في المصدر ولكن لا يوجد ما يقابله في النص الهدف. يرجى إضافة هذا النص المفقود للحفاظ على اكتمال المعنى.`;
|
3546 |
+
} else if (errorType === 'meaning') {
|
3547 |
+
explanation = `يا صديقي، يبدو أن هناك اختلاف في المعنى! <br><br>في الجملة "${sentenceText}" النص الذي في المصدر قد تم ترجمته بمعنى مختلف عما هو مقصود. تحتاج إلى مراجعة ترجمة "${errorText}" للتأكد من نقل المعنى الصحيح.`;
|
3548 |
} else {
|
3549 |
+
explanation = `يا صديقي، هناك خطأ في هذه الجملة: "${sentenceText}"<br><br>يرجى مراجعة الترجمة للتأكد من دقة المعنى والتطابق بين النصين.`;
|
3550 |
}
|
3551 |
+
|
3552 |
+
showErrorExplanation(errorType, sentenceText, explanation);
|
3553 |
});
|
3554 |
});
|
3555 |
}, 100);
|
3556 |
}
|
3557 |
|
3558 |
/* =====================================
|
3559 |
+
دالة تمييز النص - محسنة لتمييز الجمل الكاملة
|
3560 |
===================================== */
|
3561 |
function applyHighlights(originalText, targetText, analysisOutput) {
|
3562 |
+
// تقسيم النص الأصلي إلى جمل
|
3563 |
+
const sentences = splitIntoSentences(originalText);
|
3564 |
+
|
3565 |
// تطبيق تمييز للنص المفقود تماما والمفقود جزئيا
|
3566 |
const enhancedSourceText = highlightMissingText(originalText, targetText);
|
3567 |
|
|
|
3570 |
const missingMatches = Array.from(analysisOutput.matchAll(/__(.*?)__/g)).map(m => m[1].trim());
|
3571 |
const meaningMatches = Array.from(analysisOutput.matchAll(/\[MEANING\](.*?)\[\/MEANING\]/g)).map(m => m[1].trim());
|
3572 |
|
|
|
|
|
|
|
3573 |
// معالجة كل جملة على حدة وتطبيق التحديد
|
3574 |
+
const highlightedText = sentences.map((sentence, index) => {
|
3575 |
let hasError = false;
|
3576 |
let highlightedSentence = sentence;
|
3577 |
+
let errorType = '';
|
3578 |
+
|
3579 |
// تحديد اختلافات الأرقام
|
3580 |
+
for (const phrase of numberMatches) {
|
3581 |
if (sentence.includes(phrase)) {
|
3582 |
const regex = new RegExp(escapeRegExp(phrase), 'g');
|
3583 |
highlightedSentence = highlightedSentence.replace(regex, `<span class="highlight-number" data-error-type="number" data-explanation="تأكد من صحة الرقم في النص الهدف وتطابقه مع النص المصدر">${phrase}</span>`);
|
3584 |
hasError = true;
|
3585 |
+
errorType = 'number';
|
3586 |
}
|
3587 |
+
}
|
3588 |
|
3589 |
// تحديد النصوص المفقودة
|
3590 |
+
for (const phrase of missingMatches) {
|
3591 |
if (sentence.includes(phrase)) {
|
3592 |
const regex = new RegExp(escapeRegExp(phrase), 'g');
|
3593 |
highlightedSentence = highlightedSentence.replace(regex, `<span class="highlight-missing" data-error-type="missing" data-explanation="أضف النص المفقود إلى الترجمة للحفاظ على اكتمال المعنى">${phrase}</span>`);
|
3594 |
hasError = true;
|
3595 |
+
errorType = errorType || 'missing';
|
3596 |
}
|
3597 |
+
}
|
3598 |
|
3599 |
// تحديد اختلافات المعنى
|
3600 |
+
for (const phrase of meaningMatches) {
|
3601 |
if (sentence.includes(phrase)) {
|
3602 |
const regex = new RegExp(escapeRegExp(phrase), 'g');
|
3603 |
highlightedSentence = highlightedSentence.replace(regex, `<span class="highlight-meaning" data-error-type="meaning" data-explanation="راجع الترجمة للتأكد من نقل المعنى الصحيح دون تحريف">${phrase}</span>`);
|
3604 |
hasError = true;
|
3605 |
+
errorType = errorType || 'meaning';
|
3606 |
}
|
3607 |
+
}
|
3608 |
|
3609 |
// إذا كان هناك خطأ، قم بتمييز الجملة كاملة
|
3610 |
if (hasError) {
|
3611 |
+
return `<span class="sentence-with-error" data-error-id="${index}" data-error-type="${errorType}" data-sentence-number="${index+1}">${highlightedSentence}</span>`;
|
3612 |
}
|
3613 |
|
3614 |
return highlightedSentence;
|
3615 |
+
}).join(' ');
|
3616 |
|
3617 |
+
return highlightedText;
|
3618 |
}
|
3619 |
|
3620 |
/* =====================================
|
|
|
3753 |
|
3754 |
// إضافة مستمعي الأحداث للتحديدات
|
3755 |
setTimeout(() => {
|
3756 |
+
document.querySelectorAll('.segment-source .sentence-with-error').forEach(element => {
|
3757 |
element.addEventListener('click', function() {
|
3758 |
+
// الحصول على النص الكامل للجملة
|
3759 |
+
const sentenceText = this.textContent;
|
3760 |
+
|
3761 |
+
// تحديد نوع الخطأ من خلال الفئات داخل الجملة
|
3762 |
+
let errorType = 'general';
|
3763 |
+
let errorSpecificText = '';
|
3764 |
+
|
3765 |
+
// البحث عن الخطأ المحدد داخل الجملة
|
3766 |
+
const numberHighlight = this.querySelector('.highlight-number');
|
3767 |
+
const missingHighlight = this.querySelector('.highlight-missing');
|
3768 |
+
const meaningHighlight = this.querySelector('.highlight-meaning');
|
3769 |
+
|
3770 |
+
if (numberHighlight) {
|
3771 |
+
errorType = 'number';
|
3772 |
+
errorSpecificText = numberHighlight.textContent;
|
3773 |
+
} else if (missingHighlight) {
|
3774 |
+
errorType = 'missing';
|
3775 |
+
errorSpecificText = missingHighlight.textContent;
|
3776 |
+
} else if (meaningHighlight) {
|
3777 |
+
errorType = 'meaning';
|
3778 |
+
errorSpecificText = meaningHighlight.textContent;
|
3779 |
+
}
|
3780 |
+
|
3781 |
+
const sentenceNumber = this.getAttribute('data-sentence-number');
|
3782 |
+
|
3783 |
+
// إعداد شرح أكثر ودية
|
3784 |
let explanation = '';
|
3785 |
+
|
3786 |
+
if (errorType === 'number') {
|
3787 |
+
explanation = `يا صديقي، لاحظت وجود خطأ في الأرقام في الجملة رقم ${sentenceNumber} هذه. <br><br>الرقم "${errorSpecificText}" في النص المصدر لا يتطابق مع النص الهدف. تحتاج لتصحيح الرقم في الترجمة.`;
|
3788 |
+
} else if (errorType === 'missing') {
|
3789 |
+
explanation = `يا صديقي، هناك نص مفقود في الترجمة في الجملة رقم ${sentenceNumber}! <br><br>النص "${errorSpecificText}" موجود في المصدر ولكن لا يوجد ما يقابله في النص الهدف. يرجى إضافة هذا النص المفقود للحفاظ على اكتمال المعنى.`;
|
3790 |
+
} else if (errorType === 'meaning') {
|
3791 |
+
explanation = `يا صديقي، يبدو أن هناك اختلاف في المعنى في الجملة رقم ${sentenceNumber}! <br><br>النص "${errorSpecificText}" في المصدر تمت ترجمته بشكل مختلف عما هو مقصود. تحتاج إلى مراجعة الترجمة للتأكد من دقتها.`;
|
3792 |
} else {
|
3793 |
+
explanation = `يا صديقي، هناك خطأ في هذه الجملة رقم ${sentenceNumber}: "${sentenceText}"<br><br>يرجى مراجعة الترجمة للتأكد من دقة المعنى والتطابق بين النصين.`;
|
3794 |
}
|
3795 |
+
|
3796 |
+
showErrorExplanation(errorType, sentenceText, explanation);
|
3797 |
});
|
3798 |
});
|
3799 |
}, 100);
|
|
|
4120 |
}
|
4121 |
}
|
4122 |
|
4123 |
+
// الحصول على توصية مخصصة لكل نوع اختلاف - محسنة لتكون أكثر ودية
|
4124 |
function getRecommendationForDiff(diff) {
|
4125 |
if (diff.type === 'number') {
|
4126 |
+
return 'يا صديقي، يبدو أن هناك خطأ في الرقم. في النص المصدر يظهر الرقم بشكل مختلف عما هو في النص الهدف. تأكد من تطابق الأرقام في النصين واستخدام نفس الصيغة.';
|
4127 |
} else if (diff.type === 'missing') {
|
4128 |
+
return 'يا صديقي، هناك نص مفقود في الترجمة! تأكد من إضافة هذا النص لأنه موجود في المصدر ويحتوي على معلومات مهمة للمحافظة على اكتمال المعنى.';
|
4129 |
} else if (diff.type === 'meaning') {
|
4130 |
+
return 'يا صديقي، هناك اختلاف في المعنى بين النصين. النص في المصدر يقول شيئًا مختلفًا عما تمت ترجمته. راجع هذا الجزء للتأكد من دقة الترجمة ونقل المعنى الصحيح.';
|
4131 |
}
|
4132 |
return '';
|
4133 |
}
|
|
|
4170 |
numberMatches.forEach(match => {
|
4171 |
numberErrors.push({
|
4172 |
text: match[1],
|
4173 |
+
explanation: 'يا صديقي، الرقم في النص المصدر يختلف عن الرقم في النص الهدف. يجب التأكد من تطابق الأرقام في كلا النصين.'
|
4174 |
});
|
4175 |
});
|
4176 |
|
|
|
4178 |
missingMatches.forEach(match => {
|
4179 |
missingErrors.push({
|
4180 |
text: match[1],
|
4181 |
+
explanation: 'يا صديقي، هذا النص موجود في المصدر ولكنه مفقود في الترجمة. يجب إضافته للحفاظ على اكتمال المعنى.'
|
4182 |
});
|
4183 |
});
|
4184 |
|
|
|
4186 |
meaningMatches.forEach(match => {
|
4187 |
meaningErrors.push({
|
4188 |
text: match[1],
|
4189 |
+
explanation: 'يا صديقي، هذا النص تم ترجمته بمعنى مختلف عما هو في النص الأصلي. تحتاج إلى مراجعة الترجمة للتأكد من نقل المعنى الصحيح.'
|
4190 |
});
|
4191 |
});
|
4192 |
|
|
|
4202 |
if (paragraph.length > 100) {
|
4203 |
completelyMissing.push({
|
4204 |
text: paragraph.substring(0, 100) + '...',
|
4205 |
+
explanation: 'يا صديقي، هذا النص مفقود تمامًا في الترجمة. النص الأصلي يحتوي على هذه المعلومات المهمة التي تحتاج إلى إضافتها.'
|
4206 |
});
|
4207 |
} else {
|
4208 |
completelyMissing.push({
|
4209 |
text: paragraph,
|
4210 |
+
explanation: 'يا صديقي، هذا النص مفقود تمامًا في الترجمة. النص الأصلي يحتوي على هذه المعلومات المهمة التي تحتاج إلى إضافتها.'
|
4211 |
});
|
4212 |
}
|
4213 |
}
|
|
|
4394 |
توصيات للتحسين
|
4395 |
</h4>
|
4396 |
<ul class="list-disc pr-8 text-sm text-green-700 space-y-1">
|
4397 |
+
${numberErrors.length > 0 ? '<li>يا صديقي، راجع الأرقام في النص وتأكد من تطابقها بين النص المصدر والترجمة.</li>' : ''}
|
4398 |
+
${missingErrors.length > 0 ? '<li>يا صديقي، هناك نصوص مفقودة تحتاج إلى إضافتها في الترجمة للحفاظ على اكتمال المحتوى.</li>' : ''}
|
4399 |
+
${meaningErrors.length > 0 ? '<li>يا صديقي، هناك بعض الاختلافات في المعنى. صحح ترجمة العبارات التي تم تغيير معناها.</li>' : ''}
|
4400 |
<li>استخدم وضع العرض المقسم للتعديل الدقيق للنصوص.</li>
|
4401 |
</ul>
|
4402 |
</div>`;
|
|
|
4659 |
// إضافة التذييل
|
4660 |
wordContent += `
|
4661 |
<div class="footer">
|
4662 |
+
تم إنشاء هذا التقرير تلقائيًا بواسطة نظام المراجع الذكي - جميع الحقوق محفوظة لشركة فاست برو للبرمجيات والذكاء الاصطناعي © ${new Date().getFullYear()}
|
4663 |
</div>
|
4664 |
</body>
|
4665 |
</html>`;
|