Urdu public pages, batch 2 (#2): auth, errors, map, FAQ, similar poems, people pages, page titles

- translate remaining public views and page-model strings (titles, messages, relation names)
- Urdu stopword list for word-frequency stats (replaces Persian list)
- error pages: drop list of alternative Ganjoor services

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Anas Rashid 2026-10-05 00:22:09 +02:00
parent eb0a353cf2
commit 020b010483
40 changed files with 306 additions and 318 deletions

View File

@ -2,7 +2,7 @@
@model DiwanRazor.Pages.LoginModel @model DiwanRazor.Pages.LoginModel
@{ @{
Layout = null; Layout = null;
ViewData["Title"] = "ورود کاربر"; ViewData["Title"] = "داخلہ";
} }
<!DOCTYPE html> <!DOCTYPE html>
@ -33,11 +33,11 @@
</td> </td>
</tr> </tr>
<tr> <tr>
<td><input type="submit" name="submit" id="submit" class="pagebutton font-size-2em background-green width-100per padding-bottom-50px" value="خروج از حساب کاربری" /></td> <td><input type="submit" name="submit" id="submit" class="pagebutton font-size-2em background-green width-100per padding-bottom-50px" value="اکاؤنٹ سے خروج" /></td>
</tr> </tr>
<tr> <tr>
<td> <td>
<a role="button" class="pagebutton" href="/">برگشت به دیوان</a> <a role="button" class="pagebutton" href="/">دیوان پر واپس جائیں</a>
</td> </td>
</tr> </tr>
</table> </table>
@ -51,30 +51,30 @@
<table> <table>
<tr> <tr>
<td> <td>
<span class="inputlabel">پست الکترونیکی: </span> <span class="inputlabel">ای میل: </span>
</td> </td>
<td> <td>
<input type="email" asp-for="LoginViewModel.Username" placeholder="پست الکترونیکی" /> <input type="email" asp-for="LoginViewModel.Username" placeholder="ای میل" />
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<span class="inputlabel">گذرواژه: </span> <span class="inputlabel">پاس ورڈ: </span>
</td> </td>
<td> <td>
<input type="password" asp-for="LoginViewModel.Password" id="password" placeholder="گذرواژه" /> <input type="password" asp-for="LoginViewModel.Password" id="password" placeholder="پاس ورڈ" />
</td> </td>
</tr> </tr>
<tr> <tr>
<td colspan="2"><input type="submit" name="submit" id="submit" style="direction:rtl;text-align:center" class="pagebutton font-size-2em background-green width-100per padding-bottom-50px" value="ورود" /></td> <td colspan="2"><input type="submit" name="submit" id="submit" style="direction:rtl;text-align:center" class="pagebutton font-size-2em background-green width-100per padding-bottom-50px" value="داخل ہوں" /></td>
</tr> </tr>
<tr> <tr>
<td><a role="button" class="pagebutton" href="/signup">نام‌نویسی</a></td> <td><a role="button" class="pagebutton" href="/signup">رکنیت</a></td>
<td><a role="button" class="pagebutton" href="/resetpassword">فراموشی گذرواژه</a></td> <td><a role="button" class="pagebutton" href="/resetpassword">پاس ورڈ بھول گئے</a></td>
</tr> </tr>
<tr> <tr>
<td colspan="2"> <td colspan="2">
<a role="button" class="pagebutton" href="/">برگشت به دیوان</a> <a role="button" class="pagebutton" href="/">دیوان پر واپس جائیں</a>
</td> </td>
</tr> </tr>

View File

@ -23,7 +23,7 @@
@if (Model.LoggedIn) @if (Model.LoggedIn)
{ {
<div class="background-red color-white"> <div class="background-red color-white">
<p>شما پیشتر وارد شده‌اید! برای طی فرایند فراموشی گذرواژه خارج شوید.</p> <p>آپ پہلے سے داخل ہیں! پاس ورڈ کی بازیابی کے لیے پہلے خروج کریں.</p>
</div> </div>
} }
else else
@ -38,7 +38,7 @@
<td class="noborder" colspan="2"> <td class="noborder" colspan="2">
<div class="notice width-100per"> <div class="notice width-100per">
<p> <p>
لطفاً پست الکترونیکی را که با آن نام‌نویسی کرده‌اید وارد کنید: براہِ کرم وہ ای میل لکھیں جس سے آپ نے رکنیت لی تھی:
</p> </p>
</div> </div>
@ -47,19 +47,19 @@
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder"> <td class="noborder">
<span class="inputlabel">پست الکترونیکی: </span> <span class="inputlabel">ای میل: </span>
</td> </td>
<td class="noborder"> <td class="noborder">
<input type="email" asp-for="ForgotPasswordViewModel.Email" class="signupemail" placeholder="پست الکترونیکی" /> <input type="email" asp-for="ForgotPasswordViewModel.Email" class="signupemail" placeholder="ای میل" />
</td> </td>
</tr> </tr>
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder"> <td class="noborder">
<span class="inputlabel">تصویر امنیتی:</span> <span class="inputlabel">حفاظتی تصویر:</span>
</td> </td>
<td class="noborder"> <td class="noborder">
<img src="@Model.CaptchaImageUrl" alt="تصویر امنیتی" width="100" /> <img src="@Model.CaptchaImageUrl" alt="حفاظتی تصویر" width="100" />
<input type="hidden" asp-for="ForgotPasswordViewModel.ClientAppName" /> <input type="hidden" asp-for="ForgotPasswordViewModel.ClientAppName" />
<input type="hidden" asp-for="ForgotPasswordViewModel.Language" /> <input type="hidden" asp-for="ForgotPasswordViewModel.Language" />
<input type="hidden" asp-for="ForgotPasswordViewModel.CallbackUrl" /> <input type="hidden" asp-for="ForgotPasswordViewModel.CallbackUrl" />
@ -71,7 +71,7 @@
<td class="noborder" colspan="2"> <td class="noborder" colspan="2">
<div class="notice width-100per"> <div class="notice width-100per">
<p> <p>
تصویر امنیتی بالا کمک می‌کند بین کاربران واقعی و رباتها و برنامه‌های کامپیوتری تمایز قائل شویم. لطفاً عددی را که در تصویر امنیتی بالا می‌بینید در کادر زیر وارد کنید: اوپر کی حفاظتی تصویر حقیقی صارفین اور خودکار پروگراموں میں فرق کرنے میں مدد دیتی ہے۔ براہِ کرم تصویر میں نظر آنے والا عدد نیچے کے خانے میں لکھیں:
</p> </p>
</div> </div>
</td> </td>
@ -79,15 +79,15 @@
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder"> <td class="noborder">
<span class="inputlabel">عدد تصویر امنیتی: </span> <span class="inputlabel">حفاظتی تصویر کا عدد: </span>
</td> </td>
<td class="noborder"> <td class="noborder">
<input asp-for="ForgotPasswordViewModel.CaptchaValue" class="signupemail" placeholder="عدد تصویر امنیتی" /> <input asp-for="ForgotPasswordViewModel.CaptchaValue" class="signupemail" placeholder="حفاظتی تصویر کا عدد" />
</td> </td>
</tr> </tr>
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder" colspan="2"><input type="submit" name="submit" id="submit" class="pagebutton font-size-2em background-green width-100per padding-bottom-50px" value="ادامه" /></td> <td class="noborder" colspan="2"><input type="submit" name="submit" id="submit" class="pagebutton font-size-2em background-green width-100per padding-bottom-50px" value="جاری رکھیں" /></td>
</tr> </tr>
</table> </table>
@ -105,27 +105,27 @@
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder"> <td class="noborder">
<span class="inputlabel">رمز دریافتی:</span> <span class="inputlabel">موصولہ کوڈ:</span>
</td> </td>
<td class="noborder"> <td class="noborder">
<input asp-for="Secret" class="signupemail" placeholder="رمز دریافتی" /> <input asp-for="Secret" class="signupemail" placeholder="موصولہ کوڈ" />
</td> </td>
</tr> </tr>
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder" colspan="2"> <td class="noborder" colspan="2">
<div class="notice width-100per"> <div class="notice width-100per">
<p>لطفاً پست الکترونیکی خود را بررسی کنید. در صورتی که نشانی پست الکترونیکی خود را درست وارد کرده باشید نامه‌ای از دیوان دریافت کرده‌اید که حاوی یک رمز است. </p> <p>براہِ کرم اپنی ای میل دیکھیں۔ اگر پتا درست لکھا تھا تو دیوان کی طرف سے ایک کوڈ والی ای میل آئی ہوگی. </p>
<p>رمز دریافتی را در کادر بالا وارد کرده، روی «ادامه» بزنید.</p> <p>موصولہ کوڈ اوپر کے خانے میں لکھ کر «جاری رکھیں» دبائیں.</p>
<p><span class="red-color">تذکر:</span> ممکن است نامه به پوشهٔ اسپم منتقل شده باشد.</p> <p><span class="red-color">یاد دہانی:</span> ممکن ہے ای میل اسپام فولڈر میں چلی گئی ہو.</p>
</div> </div>
</td> </td>
</tr> </tr>
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder"><a role="button" class="pagebutton" href="/resetpassword">مرحلهٔ قبل</a></td> <td class="noborder"><a role="button" class="pagebutton" href="/resetpassword">پچھلا مرحلہ</a></td>
<td class="noborder"><input type="submit" name="submit" id="submit" class="pagebutton font-size-2em background-green width-100per padding-bottom-50px" value="ادامه" /></td> <td class="noborder"><input type="submit" name="submit" id="submit" class="pagebutton font-size-2em background-green width-100per padding-bottom-50px" value="جاری رکھیں" /></td>
</tr> </tr>
</table> </table>
@ -144,26 +144,26 @@
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder" colspan="2"> <td class="noborder" colspan="2">
<div class="notice width-100per"> <div class="notice width-100per">
<p>گذرواژهٔ جدیدی برای خود تعیین کنید:</p> <p>نیا پاس ورڈ مقرر کریں:</p>
</div> </div>
</td> </td>
</tr> </tr>
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder"> <td class="noborder">
<span class="inputlabel">گذرواژه: </span> <span class="inputlabel">پاس ورڈ: </span>
</td> </td>
<td class="noborder"> <td class="noborder">
<input asp-for="ResetPasswordViewModel.Password" id="password" class="signupemail" autocomplete="new-password" placeholder="گذرواژه" /> <input asp-for="ResetPasswordViewModel.Password" id="password" class="signupemail" autocomplete="new-password" placeholder="پاس ورڈ" />
</td> </td>
</tr> </tr>
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder"> <td class="noborder">
<span class="inputlabel">تکرار گذرواژه: </span> <span class="inputlabel">پاس ورڈ دوبارہ: </span>
</td> </td>
<td class="noborder"> <td class="noborder">
<input asp-for="ResetPasswordViewModel.PasswordConfirmation" class="signupemail" autocomplete="new-password" placeholder="تکرار گذرواژه" /> <input asp-for="ResetPasswordViewModel.PasswordConfirmation" class="signupemail" autocomplete="new-password" placeholder="پاس ورڈ دوبارہ" />
</td> </td>
</tr> </tr>
@ -172,14 +172,14 @@
<input type="hidden" asp-for="ResetPasswordViewModel.Email" /> <input type="hidden" asp-for="ResetPasswordViewModel.Email" />
<input type="hidden" asp-for="ResetPasswordViewModel.Secret" /> <input type="hidden" asp-for="ResetPasswordViewModel.Secret" />
<div class="notice width-100per"> <div class="notice width-100per">
<p>گذرواژه باید دست کم شامل <span class="red-color"><strong>۶</strong></span> حرف باشد و از ترکیبی از <span class="red-color"><strong>اعداد و حروف انگلیسی</strong></span> تشکیل شده باشد.</p> <p>پاس ورڈ میں کم از کم <span class="red-color"><strong>۶</strong></span> حروف ہوں اور یہ <span class="red-color"><strong>اعداد اور انگریزی حروف</strong></span> کے امتزاج سے بنا ہو.</p>
<p>حروف و اعداد نباید تکراری باشند و وجود <span class="red-color"><strong>حداقل یک عدد</strong></span> و <span class="red-color"><strong>یک حرف کوچک انگلیسی</strong></span> در گذرواژه الزامی است.</p> <p>حروف اور اعداد مکرر نہ ہوں اور <span class="red-color"><strong>کم از کم ایک عدد</strong></span> و <span class="red-color"><strong>ایک چھوٹا انگریزی حرف</strong></span> پاس ورڈ میں لازمی ہے.</p>
</div> </div>
</td> </td>
</tr> </tr>
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder" colspan="2"><input type="submit" name="submit" class="pagebutton font-size-2em background-green width-100per padding-bottom-50px" id="submit" value="ادامه" /></td> <td class="noborder" colspan="2"><input type="submit" name="submit" class="pagebutton font-size-2em background-green width-100per padding-bottom-50px" id="submit" value="جاری رکھیں" /></td>
</tr> </tr>
</table> </table>

View File

@ -61,16 +61,16 @@ namespace DiwanRazor.Pages
ViewData["TrackingScript"] = Configuration["TrackingScript"] != null && string.IsNullOrEmpty(Request.Cookies["Token"]) ? Configuration["TrackingScript"].Replace("loggedon", "") : Configuration["TrackingScript"]; ViewData["TrackingScript"] = Configuration["TrackingScript"] != null && string.IsNullOrEmpty(Request.Cookies["Token"]) ? Configuration["TrackingScript"].Replace("loggedon", "") : Configuration["TrackingScript"];
if (PhaseSendEmail) if (PhaseSendEmail)
{ {
ViewData["Title"] = "دیوان » فراموشی گذرواژه » ورود ایمیل"; ViewData["Title"] = "دیوان » پاس ورڈ بھول گئے » ای میل";
} }
else else
if (PhaseSendEmail) if (PhaseSendEmail)
{ {
ViewData["Title"] = "دیوان » فراموشی گذرواژه » ورود رمز دریافتی در ایمیل"; ViewData["Title"] = "دیوان » پاس ورڈ بھول گئے » موصولہ کوڈ";
} }
else else
{ {
ViewData["Title"] = "دیوان » فراموشی گذرواژه » مرحلهٔ نهایی"; ViewData["Title"] = "دیوان » پاس ورڈ بھول گئے » آخری مرحلہ";
} }
} }
@ -90,7 +90,7 @@ namespace DiwanRazor.Pages
ForgotPasswordViewModel = new UnverifiedSignUpViewModel() ForgotPasswordViewModel = new UnverifiedSignUpViewModel()
{ {
ClientAppName = "وبگاه دیوان", ClientAppName = "دیوان ویب سائٹ",
Language = "ur-PK", Language = "ur-PK",
CallbackUrl = $"{Configuration["SiteUrl"]}/resetpassword" CallbackUrl = $"{Configuration["SiteUrl"]}/resetpassword"
}; };
@ -192,7 +192,7 @@ namespace DiwanRazor.Pages
if (ResetPasswordViewModel.Password != ResetPasswordViewModel.PasswordConfirmation) if (ResetPasswordViewModel.Password != ResetPasswordViewModel.PasswordConfirmation)
{ {
LastError = "گذرواژه و تکرار آن یکی نیستند."; LastError = "پاس ورڈ اور اس کی تکرار ایک جیسے نہیں.";
_FillViewData(); _FillViewData();
return Page(); return Page();
} }
@ -215,7 +215,7 @@ namespace DiwanRazor.Pages
LoginViewModel loginViewModel = new LoginViewModel() LoginViewModel loginViewModel = new LoginViewModel()
{ {
ClientAppName = "وبگاه دیوان", ClientAppName = "دیوان ویب سائٹ",
Language = "ur-PK", Language = "ur-PK",
Username = postViewModel.Email, Username = postViewModel.Email,
Password = postViewModel.Password Password = postViewModel.Password

View File

@ -24,7 +24,7 @@
@if (Model.LoggedIn) @if (Model.LoggedIn)
{ {
<div class="background-red color-white"> <div class="background-red color-white">
<p>شما پیشتر نام‌نویسی کرده‌اید!</p> <p>آپ پہلے سے رکن ہیں!</p>
</div> </div>
} }
else else
@ -36,10 +36,10 @@
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder"> <td class="noborder">
<span class="inputlabel">پست الکترونیکی: </span> <span class="inputlabel">ای میل: </span>
</td> </td>
<td class="noborder"> <td class="noborder">
<input type="email" asp-for="SignUpViewModel.Email" class="signupemail" placeholder="پست الکترونیکی" /> <input type="email" asp-for="SignUpViewModel.Email" class="signupemail" placeholder="ای میل" />
</td> </td>
</tr> </tr>
@ -47,7 +47,7 @@
<td class="noborder" colspan="2"> <td class="noborder" colspan="2">
<div class="notice width-100per"> <div class="notice width-100per">
<p> <p>
برای نام‌نویسی در دیوان نیاز به یک ایمیل دارید. فرایند نام‌نویسی با ارسال یک رمز به ایمیل (پست الکترونیکی) شما ادامه پیدا می‌کند و اگر ایمیلتان درست نباشد یا به آن دسترسی نداشته باشید نمی‌توانید در دیوان نام‌نویسی کنید. دیوان کی رکنیت کے لیے ای میل درکار ہے۔ رکنیت کا عمل آپ کی ای میل پر ایک کوڈ بھیج کر آگے بڑھتا ہے؛ اگر ای میل درست نہ ہو یا آپ کو اس تک رسائی نہ ہو تو رکنیت ممکن نہیں.
</p> </p>
</div> </div>
</td> </td>
@ -55,10 +55,10 @@
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder"> <td class="noborder">
<span class="inputlabel">تصویر امنیتی:</span> <span class="inputlabel">حفاظتی تصویر:</span>
</td> </td>
<td class="noborder"> <td class="noborder">
<img src="@Model.CaptchaImageUrl" alt="تصویر امنیتی" width="100" /> <img src="@Model.CaptchaImageUrl" alt="حفاظتی تصویر" width="100" />
<input type="hidden" asp-for="SignUpViewModel.ClientAppName" /> <input type="hidden" asp-for="SignUpViewModel.ClientAppName" />
<input type="hidden" asp-for="SignUpViewModel.Language" /> <input type="hidden" asp-for="SignUpViewModel.Language" />
<input type="hidden" asp-for="SignUpViewModel.CallbackUrl" /> <input type="hidden" asp-for="SignUpViewModel.CallbackUrl" />
@ -70,7 +70,7 @@
<td class="noborder" colspan="2"> <td class="noborder" colspan="2">
<div class="notice width-100per"> <div class="notice width-100per">
<p> <p>
تصویر امنیتی بالا کمک می‌کند بین کاربران واقعی و رباتها و برنامه‌های کامپیوتری تمایز قائل شویم. لطفاً عددی را که در تصویر امنیتی بالا می‌بینید در کادر زیر وارد کنید: اوپر کی حفاظتی تصویر حقیقی صارفین اور خودکار پروگراموں میں فرق کرنے میں مدد دیتی ہے۔ براہِ کرم تصویر میں نظر آنے والا عدد نیچے کے خانے میں لکھیں:
</p> </p>
</div> </div>
@ -79,26 +79,26 @@
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder"> <td class="noborder">
<span class="inputlabel">عدد تصویر امنیتی: </span> <span class="inputlabel">حفاظتی تصویر کا عدد: </span>
</td> </td>
<td class="noborder"> <td class="noborder">
<input asp-for="SignUpViewModel.CaptchaValue" class="signupemail" placeholder="عدد تصویر امنیتی" /> <input asp-for="SignUpViewModel.CaptchaValue" class="signupemail" placeholder="حفاظتی تصویر کا عدد" />
</td> </td>
</tr> </tr>
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder" colspan="2"><input type="submit" name="submit" id="submit" class="pagebutton font-size-2em background-green width-100per padding-bottom-50px" value="ادامه" /></td> <td class="noborder" colspan="2"><input type="submit" name="submit" id="submit" class="pagebutton font-size-2em background-green width-100per padding-bottom-50px" value="جاری رکھیں" /></td>
</tr> </tr>
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder" colspan="2"> <td class="noborder" colspan="2">
<div class="background-red color-white"><p>@Model.LastError</p></div> <div class="background-red color-white"><p>@Model.LastError</p></div>
<div class="notice width-100per"> <div class="notice width-100per">
<p>لطفاً به نکات زیر توجه کنید:</p> <p>براہِ کرم ان نکات پر دھیان دیں:</p>
<p>۱. اگر پیشتر در گنجینهٔ دیوان یا پیشخان خوانشگران دیوان نام‌نویسی کرده‌اید می‌توانید با همان اطلاعات کاربری در دیوان وارد شوید و نیاز به و امکان نام‌نویسی مجدد با همان ایمیل را ندارید. </p> <p>۱. اگر آپ پہلے سے دیوان کے رکن ہیں تو انہی معلومات سے داخل ہوں؛ اسی ای میل سے دوبارہ رکنیت ممکن نہیں. </p>
<p>۲. برای مطالعهٔ اشعار نیازی به نام‌نویسی ندارید. نام‌نویسی برای درج حاشیه و مشارکت در سایت مورد نیاز است.</p> <p>۲. اشعار پڑھنے کے لیے رکنیت ضروری نہیں؛ حاشیہ لکھنے اور سائٹ میں حصہ لینے کے لیے رکنیت درکار ہے.</p>
<p>۳. دیوان اطلاعاتی راجع به این که شما با نام کاربری خود چه صفحاتی را مطالعه می‌کنید جمع آوری نمی‌کند. برای اطمینان مفاد صفحهٔ <a href="/privacy">حریم خصوصی</a> را مطالعه بفرمایید.</p> <p>۳. دیوان یہ معلومات جمع نہیں کرتا کہ آپ اپنے اکاؤنٹ سے کون سے صفحات پڑھتے ہیں۔ اطمینان کے لیے <a href="/privacy">رازداری</a> کا صفحہ پڑھ لیں.</p>
<p>۴. بعد از نام‌نویسی امکان حذف حساب کاربری خود را دارید. با این کار اطلاعات خاص شما مثل حاشیه‌ها و خوانش‌ها حذف می‌شود و مشارکت‌های شما مثل ویرایش‌ها و ... به نام کاربر سیستم دیوان ثبت می‌شود.</p> <p>۴. رکنیت کے بعد آپ اپنا اکاؤنٹ حذف کر سکتے ہیں؛ اس سے آپ کے حاشیے اور قرأتیں حذف ہو جائیں گی اور ترامیم جیسی شراکتیں دیوان کے نظامی صارف کے نام منتقل ہو جائیں گی.</p>
</div> </div>
</td> </td>
</tr> </tr>
@ -117,26 +117,26 @@
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder"> <td class="noborder">
<span class="inputlabel">رمز دریافتی:</span> <span class="inputlabel">موصولہ کوڈ:</span>
</td> </td>
<td class="noborder"> <td class="noborder">
<input asp-for="Secret" class="signupemail" placeholder="رمز دریافتی" /> <input asp-for="Secret" class="signupemail" placeholder="موصولہ کوڈ" />
</td> </td>
</tr> </tr>
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder" colspan="2"> <td class="noborder" colspan="2">
<div class="notice width-100per"> <div class="notice width-100per">
<p>لطفاً پست الکترونیکی خود را بررسی کنید. در صورتی که نشانی پست الکترونیکی خود را درست وارد کرده باشید نامه‌ای از دیوان دریافت کرده‌اید که حاوی یک رمز است. </p> <p>براہِ کرم اپنی ای میل دیکھیں۔ اگر پتا درست لکھا تھا تو دیوان کی طرف سے ایک کوڈ والی ای میل آئی ہوگی. </p>
<p>رمز دریافتی را در کادر بالا وارد کرده، روی «ادامه» بزنید.</p> <p>موصولہ کوڈ اوپر کے خانے میں لکھ کر «جاری رکھیں» دبائیں.</p>
<p><span class="red-color">تذکر:</span> ممکن است نامه به پوشهٔ اسپم منتقل شده باشد.</p> <p><span class="red-color">یاد دہانی:</span> ممکن ہے ای میل اسپام فولڈر میں چلی گئی ہو.</p>
</div> </div>
</td> </td>
</tr> </tr>
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder"><a role="button" class="pagebutton" href="/signup">مرحلهٔ قبل</a></td> <td class="noborder"><a role="button" class="pagebutton" href="/signup">پچھلا مرحلہ</a></td>
<td class="noborder"><input type="submit" name="submit" id="submit" class="pagebutton font-size-2em background-green width-100per padding-bottom-50px" value="ادامه" /></td> <td class="noborder"><input type="submit" name="submit" id="submit" class="pagebutton font-size-2em background-green width-100per padding-bottom-50px" value="جاری رکھیں" /></td>
</tr> </tr>
</table> </table>
@ -161,28 +161,28 @@
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder"> <td class="noborder">
<span class="inputlabel">نام خانوادگی: </span> <span class="inputlabel">خاندانی نام: </span>
</td> </td>
<td class="noborder"> <td class="noborder">
<input asp-for="FinalViewModel.SurName" class="rtl-right width-100per" placeholder="نام خانوادگی" /> <input asp-for="FinalViewModel.SurName" class="rtl-right width-100per" placeholder="خاندانی نام" />
</td> </td>
</tr> </tr>
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder"> <td class="noborder">
<span class="inputlabel">گذرواژه: </span> <span class="inputlabel">پاس ورڈ: </span>
</td> </td>
<td class="noborder"> <td class="noborder">
<input asp-for="FinalViewModel.Password" id="password" class="signupemail" placeholder="گذرواژه" /> <input asp-for="FinalViewModel.Password" id="password" class="signupemail" placeholder="پاس ورڈ" />
</td> </td>
</tr> </tr>
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder"> <td class="noborder">
<span class="inputlabel">تکرار گذرواژه: </span> <span class="inputlabel">پاس ورڈ دوبارہ: </span>
</td> </td>
<td class="noborder"> <td class="noborder">
<input asp-for="FinalViewModel.PasswordConfirmation" class="signupemail" placeholder="تکرار گذرواژه" /> <input asp-for="FinalViewModel.PasswordConfirmation" class="signupemail" placeholder="پاس ورڈ دوبارہ" />
</td> </td>
</tr> </tr>
@ -191,14 +191,14 @@
<input type="hidden" asp-for="FinalViewModel.Email" /> <input type="hidden" asp-for="FinalViewModel.Email" />
<input type="hidden" asp-for="FinalViewModel.Secret" /> <input type="hidden" asp-for="FinalViewModel.Secret" />
<div class="notice width-100per"> <div class="notice width-100per">
<p>گذرواژه باید دست کم شامل <span class="red-color"><strong>۶</strong></span> حرف باشد و از ترکیبی از <span class="red-color"><strong>اعداد و حروف انگلیسی</strong></span> تشکیل شده باشد.</p> <p>پاس ورڈ میں کم از کم <span class="red-color"><strong>۶</strong></span> حروف ہوں اور یہ <span class="red-color"><strong>اعداد اور انگریزی حروف</strong></span> کے امتزاج سے بنا ہو.</p>
<p>حروف و اعداد نباید تکراری باشند و وجود <span class="red-color"><strong>حداقل یک عدد</strong></span> و <span class="red-color"><strong>یک حرف کوچک انگلیسی</strong></span> در گذرواژه الزامی است.</p> <p>حروف اور اعداد مکرر نہ ہوں اور <span class="red-color"><strong>کم از کم ایک عدد</strong></span> و <span class="red-color"><strong>ایک چھوٹا انگریزی حرف</strong></span> پاس ورڈ میں لازمی ہے.</p>
</div> </div>
</td> </td>
</tr> </tr>
<tr class="nobackground"> <tr class="nobackground">
<td class="noborder" colspan="2"><input type="submit" name="submit" id="submit" class="pagebutton font-size-2em background-green width-100per padding-bottom-50px" value="ادامه" /></td> <td class="noborder" colspan="2"><input type="submit" name="submit" id="submit" class="pagebutton font-size-2em background-green width-100per padding-bottom-50px" value="جاری رکھیں" /></td>
</tr> </tr>
</table> </table>

View File

@ -59,16 +59,16 @@ namespace DiwanRazor.Pages
ViewData["TrackingScript"] = Configuration["TrackingScript"] != null && string.IsNullOrEmpty(Request.Cookies["Token"]) ? Configuration["TrackingScript"].Replace("loggedon", "") : Configuration["TrackingScript"]; ViewData["TrackingScript"] = Configuration["TrackingScript"] != null && string.IsNullOrEmpty(Request.Cookies["Token"]) ? Configuration["TrackingScript"].Replace("loggedon", "") : Configuration["TrackingScript"];
if (SignupPhase1) if (SignupPhase1)
{ {
ViewData["Title"] = "دیوان » نام‌نویسی » ورود ایمیل"; ViewData["Title"] = "دیوان » رکنیت » ای میل";
} }
else else
if (SignupVerifyEmailPhase) if (SignupVerifyEmailPhase)
{ {
ViewData["Title"] = "دیوان » نام‌نویسی » ورود رمز دریافتی در ایمیل"; ViewData["Title"] = "دیوان » رکنیت » موصولہ کوڈ";
} }
else else
{ {
ViewData["Title"] = "دیوان » نام‌نویسی » مرحلهٔ نهایی"; ViewData["Title"] = "دیوان » رکنیت » آخری مرحلہ";
} }
} }
public async Task<IActionResult> OnGetAsync() public async Task<IActionResult> OnGetAsync()
@ -87,7 +87,7 @@ namespace DiwanRazor.Pages
SignUpViewModel = new UnverifiedSignUpViewModel() SignUpViewModel = new UnverifiedSignUpViewModel()
{ {
ClientAppName = "وبگاه دیوان", ClientAppName = "دیوان ویب سائٹ",
Language = "ur-PK", Language = "ur-PK",
CallbackUrl = $"{Configuration["SiteUrl"]}/signup" CallbackUrl = $"{Configuration["SiteUrl"]}/signup"
}; };
@ -123,7 +123,7 @@ namespace DiwanRazor.Pages
LastError = JsonConvert.DeserializeObject<string>(await response.Content.ReadAsStringAsync()); LastError = JsonConvert.DeserializeObject<string>(await response.Content.ReadAsStringAsync());
if(LastError == null) if(LastError == null)
{ {
LastError = "لطفاً ایمیل خود و عدد تصویر امنیتی را به درستی وارد کنید."; LastError = "براہِ کرم اپنی ای میل اور حفاظتی تصویر کا عدد درست لکھیں.";
} }
response = await _httpClient.GetAsync($"{APIRoot.Url}/api/users/captchaimage"); response = await _httpClient.GetAsync($"{APIRoot.Url}/api/users/captchaimage");
@ -202,7 +202,7 @@ namespace DiwanRazor.Pages
if (FinalViewModel.Password != FinalViewModel.PasswordConfirmation) if (FinalViewModel.Password != FinalViewModel.PasswordConfirmation)
{ {
LastError = "گذرواژه و تکرار آن یکی نیستند."; LastError = "پاس ورڈ اور اس کی تکرار ایک جیسے نہیں.";
_FillViewData(); _FillViewData();
return Page(); return Page();
} }
@ -227,7 +227,7 @@ namespace DiwanRazor.Pages
LoginViewModel loginViewModel = new LoginViewModel() LoginViewModel loginViewModel = new LoginViewModel()
{ {
ClientAppName = "وبگاه دیوان", ClientAppName = "دیوان ویب سائٹ",
Language = "ur-PK", Language = "ur-PK",
Username = postViewModel.Email, Username = postViewModel.Email,
Password = postViewModel.Password Password = postViewModel.Password

View File

@ -78,7 +78,7 @@ namespace DiwanRazor.Pages
} }
else else
{ {
LastError = "لطفاً از دیوان خارج و مجددا به آن وارد شوید."; LastError = "براہِ کرم دیوان سے خروج کر کے دوبارہ داخل ہوں.";
} }
} }

View File

@ -2,7 +2,7 @@
@model DiwanRazor.Pages.ContribsModel @model DiwanRazor.Pages.ContribsModel
@{ @{
Layout = "_Layout"; Layout = "_Layout";
ViewData["Title"] = "دیوان » مشارکت‌های کاربران"; ViewData["Title"] = "دیوان » صارفین کی شراکتیں";
} }
@section Head { @section Head {
<script src="/js/chart.js"></script> <script src="/js/chart.js"></script>
@ -24,28 +24,28 @@ else
<div id="maincnt"> <div id="maincnt">
<div class="poem"> <div class="poem">
<h2> <h2>
<a href="/contribs">مشارکت‌های کاربران</a> <a href="/contribs">صارفین کی شراکتیں</a>
</h2> </h2>
<p> <p>
این آمارها نشانگر آن بخش از مشارکت‌های کاربران در دیوان است که از طریق نام‌نویسی و به شکل مستقیم انجام شده و پوشش‌دهندهٔ همهٔ این مشارکت‌ها نیست. برای مشاهدهٔ گونه‌های دیگر مشارکت کاربران -بعضاً در حجم‌های بزرگتر- صفحات <a href="/sources">منابع</a>، <a href="/donate">حمایت‌های مالی</a> و همینطور تازه‌های دیوان و <a href="https://github.com/ganjoor/">گیتهاب دیوان</a> را ببینید. یہ اعداد صرف رکنیت کے ذریعے براہِ راست کی گئی شراکتیں دکھاتے ہیں، تمام شراکتیں نہیں۔ دیگر شراکتوں کے لیے صفحات <a href="/sources">مآخذ</a>، <a href="/donate">مالی معاونت</a> اور <a href="https://github.com/ganjoor/">دیوان کا کوڈ</a> دیکھیں.
</p> </p>
<p> <p>
در آمارهای زیر تعداد روز مشارکت نشانگر یک بازهٔ زمانی نیست بلکه نشانگر تعداد روزهایی است که در آن مشارکت صورت گرفته که ممکن است کوچکتر از فاصلهٔ شروع مشارکت تا روز جاری باشد. آمارها به شکل روزانه به‌روز می‌شوند و از این جهت ممکن است یک روز عقب‌تر از آمار واقعی باشند. نیچے کے اعداد میں شراکت کے دن کوئی مدت نہیں بلکہ ان دنوں کی تعداد ہے جن میں شراکت ہوئی۔ اعداد روزانہ تازہ ہوتے ہیں اس لیے ایک دن پیچھے ہو سکتے ہیں.
</p> </p>
<div class="poemtab" id="tab-items"> <div class="poemtab" id="tab-items">
<div class="poemtablinks" id="poemcorrections"><a role="button" class="actionlink" onclick="loadContributions('poemcorrections')">ویرایش‌های متن</a></div> <div class="poemtablinks" id="poemcorrections"><a role="button" class="actionlink" onclick="loadContributions('poemcorrections')">متن کی ترامیم</a></div>
<div class="poemtablinks" id="sectioncorrections"><a role="button" class="actionlink" onclick="loadContributions('sectioncorrections')">ویرایش‌های قطعات</a></div> <div class="poemtablinks" id="sectioncorrections"><a role="button" class="actionlink" onclick="loadContributions('sectioncorrections')">حصوں کی ترامیم</a></div>
<div class="poemtablinks" id="catcorrections"><a role="button" class="actionlink" onclick="loadContributions('catcorrections')">ویرایش‌های بخش‌ها</a></div> <div class="poemtablinks" id="catcorrections"><a role="button" class="actionlink" onclick="loadContributions('catcorrections')">زمروں کی ترامیم</a></div>
<div class="poemtablinks" id="suggestedsongs"><a role="button" class="actionlink" onclick="loadContributions('suggestedsongs')">ترانه‌های مرتبط</a></div> <div class="poemtablinks" id="suggestedsongs"><a role="button" class="actionlink" onclick="loadContributions('suggestedsongs')">متعلقہ گیت</a></div>
<div class="poemtablinks" id="quoteds"><a role="button" class="actionlink" onclick="loadContributions('quoteds')">مشق شعر</a></div> <div class="poemtablinks" id="quoteds"><a role="button" class="actionlink" onclick="loadContributions('quoteds')">مشقِ سخن</a></div>
<div class="poemtablinks" id="discussions"><a role="button" class="actionlink" onclick="loadContributions('discussions')">حاشیه‌ها</a></div> <div class="poemtablinks" id="discussions"><a role="button" class="actionlink" onclick="loadContributions('discussions')">حاشیے</a></div>
<div class="poemtablinks" id="recitations"><a role="button" class="actionlink" onclick="loadContributions('recitations')">خوانش‌ها</a></div> <div class="poemtablinks" id="recitations"><a role="button" class="actionlink" onclick="loadContributions('recitations')">قرأتیں</a></div>
<div class="poemtablinks" id="museumlinks"><a role="button" class="actionlink" onclick="loadContributions('museumlinks')">ارتباطات گنجینه</a></div> <div class="poemtablinks" id="museumlinks"><a role="button" class="actionlink" onclick="loadContributions('museumlinks')">عجائب خانے کے روابط</a></div>
<div class="poemtablinks" id="pinterestlinks"><a role="button" class="actionlink" onclick="loadContributions('pinterestlinks')">تصاویر خارجی</a></div> <div class="poemtablinks" id="pinterestlinks"><a role="button" class="actionlink" onclick="loadContributions('pinterestlinks')">بیرونی تصاویر</a></div>
<div class="poemtablinks" id="poetspeclines"><a role="button" class="actionlink" onclick="loadContributions('poetspeclines')">نکات چهره‌ها</a></div> <div class="poemtablinks" id="poetspeclines"><a role="button" class="actionlink" onclick="loadContributions('poetspeclines')">شعرا کے نکات</a></div>
<div class="poemtablinks" id="poetpix"><a role="button" class="actionlink" onclick="loadContributions('poetpix')">چهره‌ها</a></div> <div class="poemtablinks" id="poetpix"><a role="button" class="actionlink" onclick="loadContributions('poetpix')">تصاویر</a></div>
<div class="poemtablinks" id="usernotes"><a role="button" class="actionlink" onclick="loadContributions('usernotes')">یادداشت‌های گنجینه</a></div> <div class="poemtablinks" id="usernotes"><a role="button" class="actionlink" onclick="loadContributions('usernotes')">عجائب خانے کے نوٹ</a></div>
<div class="poemtablinks" id="users"><a role="button" class="actionlink" onclick="loadContributions('users')">کاربران</a></div> <div class="poemtablinks" id="users"><a role="button" class="actionlink" onclick="loadContributions('users')">صارفین</a></div>
</div> </div>
<div id="days-placeholder"> <div id="days-placeholder">
</div> </div>

View File

@ -34,20 +34,19 @@ namespace DiwanRazor.Pages
public partial class DiwanPageModel : LoginPartialEnabledPageModel public partial class DiwanPageModel : LoginPartialEnabledPageModel
{ {
/// <summary> /// <summary>
/// Persian stop words excluded from category word-count listings when remStopWords is /// Urdu stop words excluded from category word-count listings when remStopWords is
/// requested. /// requested (diwan: replaces upstream's Persian list).
/// </summary> /// </summary>
private static readonly HashSet<string> _persianStopWords = new HashSet<string> private static readonly HashSet<string> _urduStopWords = new HashSet<string>
{ {
"و", "از", "که", "به", "در", "را", "ز", "است", "می", "این", "چون", "بود", "ای", "تا", "چو", "و", "اور", "کا", "کی", "کے", "کو", "نے", "سے", "میں", "پر", "تک", "ہے", "ہیں", "تھا", "تھی",
"هر", "با", "چه", "شد", "بی", "خود", "گفت", "نیست", "نه", "گر", "کند", "اگر", "کرد", "باشد", "تھے", "ہو", "ہوا", "ہوئی", "ہوئے", "گا", "گی", "گے", "یہ", "وہ", "اس", "ان", "جو", "جس", "جن",
"هم", "روی", "شود", "یک", "دو", "وی", "اندر", "پیش", "آمد", "دارد", "کن", "یا", "همی", "آید", "کہ", "کیا", "کیوں", "کب", "جب", "تب", "اب", "یاں", "واں", "یہاں", "وہاں", "نہ", "نہیں", "مت", "بھی",
"کرده", "نمی", "کز", "هست", "ام", "کی", "بهر", "فی", "چنین", "پای", "ها", "اند", "ی", "گردد", "ہی", "تو", "اک", "ایک", "کچھ", "سب", "ہر", "کوئی", "کسی", "کر", "کرے", "کرتا", "دیا", "لیا", "رہا",
"داد", "چنان", "کنم", "نبود", "گشت", "دیگر", "باید", "دگر", "چند", "همچو", "شده", "بد", "زان", "رہی", "رہے", "مجھ", "مجھے", "ہم", "تم", "تجھ", "تجھے", "آپ", "میرا", "میری", "میرے", "مرا", "مری", "مرے",
"پی", "مگر", "آنکه", "رفت", "کنی", "برد", "بدان", "ست", "ازین", "دید", "وز", "گوید", "کجا", "تیرا", "تیری", "تیرے", "ترا", "تری", "ترے", "اپنا", "اپنی", "اپنے", "ہمارا", "ہماری", "ہمارے", "تمہارا", "تمہاری", "تمہارے",
"دهد", "گه", "درین", "آخر", "دارم", "خواهد", "نیز", "های", "چرا", "راست", "کان", "رو", "نباشد", "پہ", "سا", "سی", "جیسے", "ایسا", "ایسی", "ایسے", "یا", "مگر", "لیکن", "پھر", "اگر", "گر", "جوں", "کہیں",
"بر", "من", "آن", "تو", "او", "ما", "شما", "مرا", "ار", "داری", "بیا", "همه", "گو", "مکن", "زد", "یوں", "ہائے", "اے",
"گفتم",
}; };
private readonly PoetCacheService _poetCache; private readonly PoetCacheService _poetCache;
@ -447,7 +446,7 @@ namespace DiwanRazor.Pages
/// </summary> /// </summary>
public string getAudioDesc(PublicRecitationViewModel recitation, bool contributionLink = false) public string getAudioDesc(PublicRecitationViewModel recitation, bool contributionLink = false)
{ {
string audiodesc = "به خوانش "; string audiodesc = "قرأت ";
if (!string.IsNullOrEmpty(recitation.AudioArtistUrl)) if (!string.IsNullOrEmpty(recitation.AudioArtistUrl))
{ {
audiodesc += $"<a href='{recitation.AudioArtistUrl}'>{recitation.AudioArtist}</a>"; audiodesc += $"<a href='{recitation.AudioArtistUrl}'>{recitation.AudioArtist}</a>";
@ -473,7 +472,7 @@ namespace DiwanRazor.Pages
if (contributionLink) if (contributionLink)
{ {
audiodesc += "<br /> <small>می‌خواهید شما بخوانید؟ <a href='http://ava.ganjoor.net/about/'>اینجا</a> را ببینید.</small>"; audiodesc += "<br /> <small>کیا آپ پڑھنا چاہیں گے؟ <a href='http://ava.ganjoor.net/about/'>یہاں</a> دیکھیں.</small>";
} }
return audiodesc; return audiodesc;
@ -1137,7 +1136,7 @@ namespace DiwanRazor.Pages
}; };
Response.Cookies.Append("KeepHistory", $"{false}", cookieOption); Response.Cookies.Append("KeepHistory", $"{false}", cookieOption);
} }
return new OkObjectResult(res.KeepTrack && res.LastVisit != null ? $"از این صفحه آخرین بار {res.LastVisit.ToFriendlyPersianDateTextify()} و در مجموع {res.TotalVisits.ToPersianNumbers()} بار بازدید کرده‌ام." : ""); return new OkObjectResult(res.KeepTrack && res.LastVisit != null ? $"اس صفحے کو آخری بار {res.LastVisit.ToFriendlyPersianDateTextify()} اور مجموعی طور پر {res.TotalVisits.ToPersianNumbers()} بار دیکھا." : "");
}); });
} }
@ -1200,7 +1199,7 @@ namespace DiwanRazor.Pages
var quoteds = JArray.Parse(await response.Content.ReadAsStringAsync()).ToObject<List<DiwanQuotedPoemViewModel>>(); var quoteds = JArray.Parse(await response.Content.ReadAsStringAsync()).ToObject<List<DiwanQuotedPoemViewModel>>();
if (!quoteds.Any()) if (!quoteds.Any())
{ {
return BadRequest("مورد دیگری یافت نشد."); return BadRequest("مزید کچھ نہیں ملا.");
} }
if (quoteds.Any(q => q.ChosenForMainList)) if (quoteds.Any(q => q.ChosenForMainList))
@ -1331,7 +1330,7 @@ namespace DiwanRazor.Pages
if (remStopWords) if (remStopWords)
{ {
wordCounts = wordCounts.Where(w => !_persianStopWords.Contains(w.Word)).Take(100).ToArray(); wordCounts = wordCounts.Where(w => !_urduStopWords.Contains(w.Word)).Take(100).ToArray();
} }
return new _CategoryWordsCountPartialModel() return new _CategoryWordsCountPartialModel()
@ -1350,7 +1349,7 @@ namespace DiwanRazor.Pages
var res = await _GetCategoryWordCountsAsync(catId, poetId, remStopWords); var res = await _GetCategoryWordCountsAsync(catId, poetId, remStopWords);
if (res == null) if (res == null)
{ {
return BadRequest("خطا در دسترسی به شمارش واژگان"); return BadRequest("الفاظ کی گنتی تک رسائی میں خرابی");
} }
return Partial("~/Pages/Partials/DiwanPage/_CategoryWordsCountPartial.cshtml", res); return Partial("~/Pages/Partials/DiwanPage/_CategoryWordsCountPartial.cshtml", res);
@ -1415,7 +1414,7 @@ namespace DiwanRazor.Pages
counts.Insert(0, new CategoryWordCount() counts.Insert(0, new CategoryWordCount()
{ {
Word = "* تعداد کل", Word = "* کل تعداد",
Count = counts.Sum(c => c.Count), Count = counts.Sum(c => c.Count),
RowNmbrInCat = 0, RowNmbrInCat = 0,
}); });

View File

@ -28,7 +28,7 @@ namespace DiwanRazor.Pages
/// Message shown whenever an action requiring a session couldn't prepare an authenticated /// Message shown whenever an action requiring a session couldn't prepare an authenticated
/// client (expired/missing cookies). /// client (expired/missing cookies).
/// </summary> /// </summary>
protected const string NotLoggedInMessage = "لطفاً از دیوان خارج و مجددا به آن وارد شوید."; protected const string NotLoggedInMessage = "براہِ کرم دیوان سے خروج کر کے دوبارہ داخل ہوں.";
/// <summary> /// <summary>
/// HttpClient instance for unauthenticated/public calls (injected, shared/pooled by the DI /// HttpClient instance for unauthenticated/public calls (injected, shared/pooled by the DI

View File

@ -2,7 +2,7 @@
@model ErrorModel @model ErrorModel
@{ @{
Layout = null; Layout = null;
ViewData["Title"] = "خطای پیش‌بینی نشده"; ViewData["Title"] = "غیر متوقع خرابی";
} }
<!DOCTYPE html> <!DOCTYPE html>
@ -64,31 +64,25 @@
<h1><a href="/" title="دیوان"><img src="/image/gdap.png" alt="دیوان" style="width:auto;margin:auto;" /></a></h1> <h1><a href="/" title="دیوان"><img src="/image/gdap.png" alt="دیوان" style="width:auto;margin:auto;" /></a></h1>
</div> </div>
<h1 class="text-danger">خطای پیش‌بینی نشده</h1> <h1 class="text-danger">غیر متوقع خرابی</h1>
<h2 class="text-danger">متأسفانه نمایش صفحهٔ مد نظر شما با خطا مواجه شد.</h2> <h2 class="text-danger">افسوس، مطلوبہ صفحہ دکھاتے ہوئے خرابی پیش آئی.</h2>
<p>اگر این خطا با تازه‌سازی صفحه رفع نشد ممکن است سرور دیوان دچار کمبود منابع شده باشد یا اشکالی پیش آمده باشد که رسیدگی به آن تا ساعاتی دیگر میسر نباشد. در این صورت می‌توانید از وبگاههای جایگزین یا موارد پیشنهادی زیر استفاده کنید:</p> <p>اگر صفحہ دوبارہ لوڈ کرنے سے بھی یہ خرابی دور نہ ہو تو ممکن ہے دیوان کے سرور پر بوجھ ہو یا کوئی مسئلہ ہو جسے حل ہونے میں کچھ وقت لگے۔ براہِ کرم کچھ دیر بعد دوبارہ کوشش کریں:</p>
<div class="century"><strong>وبگاه قدیمی دیوان</strong></div>
<div class="century">دریافت دیوان رومیزی</div>
<div class="century"><a href="http://pozh.org/saaghar/">دریافت ساغر</a></div>
<div class="century">نرم‌افزارهای اندرویدی سازگار با دیوان</div>
<div class="century">نرم‌افزارهای سازگار با دیوان برای آیفون و آی‌پد</div>
<div class="century"><a href="https://github.com/ganjoor/">نرم‌افزارهای بازمتن دیوان</a></div>
@if (Model.ShowRequestId) @if (Model.ShowRequestId)
{ {
<p> <p>
<strong>شناسهٔ درخواست:</strong> <code>@Model.RequestId</code> <strong>درخواست کی شناخت:</strong> <code>@Model.RequestId</code>
</p> </p>
} }
<h3>جزئیات خطا برای پیگیری برنامه‌نویس</h3> <h3>پروگرامر کے لیے خرابی کی تفصیل</h3>
<h4>پیغام خطا:</h4> <h4>خرابی کا پیغام:</h4>
<p style="direction:ltr;color:red"> <p style="direction:ltr;color:red">
@ViewData["Exception"] @ViewData["Exception"]
</p> </p>
<h4>مسیر خطا:</h4> <h4>خرابی کا راستہ:</h4>
<pre> <pre>
<code style="direction:ltr" class="stacktrace" data-bind="text: content"> <code style="direction:ltr" class="stacktrace" data-bind="text: content">

View File

@ -21,7 +21,7 @@ else
<div id="maincnt"> <div id="maincnt">
<div class="poem"> <div class="poem">
<h2> <h2>
<a href="/faq">پرسش‌های متداول</a> <a href="/faq">عام سوالات</a>
</h2> </h2>
@if (Model.Question != null) @if (Model.Question != null)
{ {
@ -47,8 +47,8 @@ else
{ {
<div class="related-images-frame" id="item-@item.Id"> <div class="related-images-frame" id="item-@item.Id">
<div class="century"> <div class="century">
@item.Question <a role="button" title="جمع شود / باز شود" class="cursor-pointer" onclick="switch_section('item-section-@item.Id', 'item-collapse-button-@item.Id')"><i class="notranslate info-buttons collapse_circle_down" id="item-collapse-button-@item.Id"></i></a> @item.Question <a role="button" title="سمیٹیں / کھولیں" class="cursor-pointer" onclick="switch_section('item-section-@item.Id', 'item-collapse-button-@item.Id')"><i class="notranslate info-buttons collapse_circle_down" id="item-collapse-button-@item.Id"></i></a>
<a role="button" title="نشانی این پرسش" class="cursor-pointer" href="/faq?id=@item.Id"><i class="notranslate info-buttons copylink-icon"></i></a> <a role="button" title="اس سوال کا ربط" class="cursor-pointer" href="/faq?id=@item.Id"><i class="notranslate info-buttons copylink-icon"></i></a>
</div> </div>
<div id="item-section-@item.Id" style="display:none"> <div id="item-section-@item.Id" style="display:none">
<div class="diwan-comment"> <div class="diwan-comment">

View File

@ -33,7 +33,7 @@ namespace DiwanRazor.Pages
return maintenanceResult; return maintenanceResult;
} }
ViewData["Title"] = $"دیوان » پرسش‌های متداول"; ViewData["Title"] = $"دیوان » عام سوالات";
InitializeCommonPageState(); InitializeCommonPageState();
var (poetsOk, poets, poetsError) = await _poetCache.GetPoetsAsync(EditorCacheBypass); var (poetsOk, poets, poetsError) = await _poetCache.GetPoetsAsync(EditorCacheBypass);
@ -52,7 +52,7 @@ namespace DiwanRazor.Pages
LastError = await ReadErrorMessageAsync(response); LastError = await ReadErrorMessageAsync(response);
if (string.IsNullOrEmpty(LastError)) if (string.IsNullOrEmpty(LastError))
{ {
LastError = $"خطا در دریافت اطلاعات پرسش مد نظر - کد خطا = {response.StatusCode}"; LastError = $"سوال کی معلومات لانے میں خرابی - خرابی کا کوڈ = {response.StatusCode}";
} }
return Page(); return Page();
} }

View File

@ -11,12 +11,12 @@ else
{ {
<div class="up-modal-familytree"> <div class="up-modal-familytree">
<h2> <h2>
تبارنامهٔ @(string.IsNullOrEmpty(Model.RootPerson.FamilyTreeCaption) ? Model.RootPerson.Name : Model.RootPerson.FamilyTreeCaption) شجرۂ @(string.IsNullOrEmpty(Model.RootPerson.FamilyTreeCaption) ? Model.RootPerson.Name : Model.RootPerson.FamilyTreeCaption)
<a href="javascript:void(0)" onclick="PersonWindow.open(@Model.RootPerson.Id)" class="up-btn up-btn--ghost up-btn--sm">مشاهدهٔ اطلاعات این شخصیت</a> <a href="javascript:void(0)" onclick="PersonWindow.open(@Model.RootPerson.Id)" class="up-btn up-btn--ghost up-btn--sm">اس شخصیت کی معلومات دیکھیں</a>
</h2> </h2>
<p class="up-hint"><small> <p class="up-hint"><small>
برای مشاهدهٔ توضیحات هر شخصیت، روی آن کلیک کنید. برای پیمایش نمودار آن را با ماوس بکشید و با غلتک ماوس بزرگ/کوچک کنید. کسی شخصیت کی تفصیل کے لیے اس پر کلک کریں۔ خاکے کو ماؤس سے کھینچیں اور ماؤس کے پہیے سے بڑا/چھوٹا کریں۔
این نمودار محدود به فرزندان این شخصیت نیست؛ تمام خویشاوندان به‌هم‌پیوسته (از جمله نیاکان و خانوادهٔ همسر) را نشان می‌دهد. یہ خاکہ صرف اولاد تک محدود نہیں؛ تمام جڑے ہوئے رشتہ دار (بشمول آبا و اجداد اور سسرال) دکھاتا ہے.
</small></p> </small></p>
<div id="familytree-container" style="position:relative;width:100%;height:65vh;border:1px solid #d8cdb8;border-radius:6px;overflow:hidden;background:#faf7f0;"> <div id="familytree-container" style="position:relative;width:100%;height:65vh;border:1px solid #d8cdb8;border-radius:6px;overflow:hidden;background:#faf7f0;">

View File

@ -53,7 +53,7 @@ namespace DiwanRazor.Pages
RootPerson = JsonConvert.DeserializeObject<DiwanRelatedPerson>(await personResponse.Content.ReadAsStringAsync()); RootPerson = JsonConvert.DeserializeObject<DiwanRelatedPerson>(await personResponse.Content.ReadAsStringAsync());
if (RootPerson == null) if (RootPerson == null)
{ {
LastError = "شخصیتی با این کد پیدا نشد."; LastError = "اس کوڈ کی کوئی شخصیت نہیں ملی.";
return Page(); return Page();
} }

View File

@ -23,12 +23,12 @@ else
<div class="sitem actionbox"> <div class="sitem actionbox">
<div class="related-images-frame padding-20px"> <div class="related-images-frame padding-20px">
<form method="get" id="searchcommentsform"> <form method="get" id="searchcommentsform">
<input type="text" name="w" id="w" class="width-100per" value="@Model.Query" placeholder="جستجو در @Model.Title" /> <input type="text" name="w" id="w" class="width-100per" value="@Model.Query" placeholder="تلاش: @Model.Title" />
@if (Model.Profile != null) @if (Model.Profile != null)
{ {
<input type="hidden" id="userid" name="userid" value="@Model.Profile.Id" /> <input type="hidden" id="userid" name="userid" value="@Model.Profile.Id" />
} }
<input type="submit" class="width-100per margin-top-5px" value="جستجو در @Model.Title" /> <input type="submit" class="width-100per margin-top-5px" value="تلاش: @Model.Title" />
</form> </form>
</div><!-- related-images-frame --> </div><!-- related-images-frame -->
</div> <!-- sitem actionbo --> </div> <!-- sitem actionbo -->
@ -41,7 +41,7 @@ else
@if (Model.Profile != null) @if (Model.Profile != null)
{ {
<div class="text-align-center"> <div class="text-align-center">
<small><a href="/hashieha">همهٔ حاشیه‌ها</a></small> <small><a href="/hashieha">تمام حاشیے</a></small>
</div> </div>
<div id="profile"> <div id="profile">
<p> <p>
@ -58,7 +58,7 @@ else
} }
</p> </p>
<p> <p>
<small>تاریخ پیوستن: <strong>@RMuseum.Services.Implementation.LanguageUtils.FormatDate(Model.Contributions.CreateDate)</strong></small> <small>شمولیت کی تاریخ: <strong>@RMuseum.Services.Implementation.LanguageUtils.FormatDate(Model.Contributions.CreateDate)</strong></small>
</p> </p>
@if (!string.IsNullOrEmpty(Model.Profile.Bio)) @if (!string.IsNullOrEmpty(Model.Profile.Bio))
@ -96,90 +96,90 @@ else
<table> <table>
<tr> <tr>
<th colspan="2"> <th colspan="2">
<span class="align-center">آمار مشارکت‌ها:</span> <span class="align-center">شراکتوں کے اعداد:</span>
</th> </th>
</tr> </tr>
@if (Model.Contributions.Comments > 0) @if (Model.Contributions.Comments > 0)
{ {
<tr> <tr>
<td><p>حاشیه‌ها:</p></td> <td><p>حاشیے:</p></td>
<td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.Comments)</p></td> <td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.Comments)</p></td>
</tr> </tr>
} }
@if(Model.Contributions.PoemCorrections > 0) @if(Model.Contributions.PoemCorrections > 0)
{ {
<tr> <tr>
<td><p>ویرایش‌های تأیید شده:</p></td> <td><p>منظور شدہ ترامیم:</p></td>
<td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.PoemCorrections)</p></td> <td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.PoemCorrections)</p></td>
</tr> </tr>
} }
@if (Model.Contributions.SectionCorrections > 0) @if (Model.Contributions.SectionCorrections > 0)
{ {
<tr> <tr>
<td><p>ویرایش‌های قطعات تأیید شده:</p></td> <td><p>حصوں کی منظور شدہ ترامیم:</p></td>
<td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.SectionCorrections)</p></td> <td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.SectionCorrections)</p></td>
</tr> </tr>
} }
@if (Model.Contributions.CatCorrections > 0) @if (Model.Contributions.CatCorrections > 0)
{ {
<tr> <tr>
<td><p>ویرایش‌های بخش‌های تأیید شده:</p></td> <td><p>زمروں کی منظور شدہ ترامیم:</p></td>
<td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.CatCorrections)</p></td> <td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.CatCorrections)</p></td>
</tr> </tr>
} }
@if (Model.Contributions.SuggestedSongs > 0) @if (Model.Contributions.SuggestedSongs > 0)
{ {
<tr> <tr>
<td><p>ترانه‌های مرتبط تأیید شده:</p></td> <td><p>منظور شدہ متعلقہ گیت:</p></td>
<td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.SuggestedSongs)</p></td> <td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.SuggestedSongs)</p></td>
</tr> </tr>
} }
@if (Model.Contributions.QuotedPoems > 0) @if (Model.Contributions.QuotedPoems > 0)
{ {
<tr> <tr>
<td><p>مشق‌های پیشنهادی تأیید شده:</p></td> <td><p>منظور شدہ مشقِ سخن:</p></td>
<td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.QuotedPoems)</p></td> <td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.QuotedPoems)</p></td>
</tr> </tr>
} }
@if (Model.Contributions.Recitations > 0) @if (Model.Contributions.Recitations > 0)
{ {
<tr> <tr>
<td><p>خوانش‌های تأیید شده:</p></td> <td><p>منظور شدہ قرأتیں:</p></td>
<td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.Recitations)</p></td> <td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.Recitations)</p></td>
</tr> </tr>
} }
@if (Model.Contributions.MuseumLinks > 0) @if (Model.Contributions.MuseumLinks > 0)
{ {
<tr> <tr>
<td><p>ارتباطات پیشنهادی گنجینه:</p></td> <td><p>عجائب خانے کے تجویز کردہ روابط:</p></td>
<td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.MuseumLinks)</p></td> <td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.MuseumLinks)</p></td>
</tr> </tr>
} }
@if (Model.Contributions.PinterestLinks > 0) @if (Model.Contributions.PinterestLinks > 0)
{ {
<tr> <tr>
<td><p>ارتباطات پیشنهادی تصاویر خارجی:</p></td> <td><p>بیرونی تصاویر کے تجویز کردہ روابط:</p></td>
<td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.PinterestLinks)</p></td> <td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.PinterestLinks)</p></td>
</tr> </tr>
} }
@if (Model.Contributions.PoetSpecLines > 0) @if (Model.Contributions.PoetSpecLines > 0)
{ {
<tr> <tr>
<td><p>نکات پیشنهادی دربارهٔ چهرهٔ سخنوان:</p></td> <td><p>شعرا کے بارے میں تجویز کردہ نکات:</p></td>
<td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.PoetSpecLines)</p></td> <td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.PoetSpecLines)</p></td>
</tr> </tr>
} }
@if (Model.Contributions.PoetPictures > 0) @if (Model.Contributions.PoetPictures > 0)
{ {
<tr> <tr>
<td><p>تصاویر چهرهٔ پیشنهادی:</p></td> <td><p>تجویز کردہ تصاویر:</p></td>
<td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.PoetPictures)</p></td> <td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.PoetPictures)</p></td>
</tr> </tr>
} }
@if (Model.Contributions.PublicUserNotes > 0) @if (Model.Contributions.PublicUserNotes > 0)
{ {
<tr> <tr>
<td><p>یادداشت‌های عمومی گنجینه:</p></td> <td><p>عجائب خانے کے عمومی نوٹ:</p></td>
<td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.PublicUserNotes)</p></td> <td><p>@RMuseum.Services.Implementation.LanguageUtils.FormatMoney(Model.Contributions.PublicUserNotes)</p></td>
</tr> </tr>
} }
@ -190,7 +190,7 @@ else
} }
@if (Model.Comments.Count == 0) @if (Model.Comments.Count == 0)
{ {
<p>حاشیه‌ای با مشخصات مورد نظر شما پیدا نشد.</p> <p>مطلوبہ حاشیہ نہیں ملا.</p>
} }
else else
foreach (var comment in Model.Comments) foreach (var comment in Model.Comments)
@ -206,15 +206,15 @@ else
<a href="/hashieha/?userid=@comment.UserId">@comment.AuthorName</a> <a href="/hashieha/?userid=@comment.UserId">@comment.AuthorName</a>
} }
<small> <small>
در @comment.CommentDate.ToFriendlyPersianDateTextify() میں @comment.CommentDate.ToFriendlyPersianDateTextify()
@if (comment.InReplyTo != null) @if (comment.InReplyTo != null)
{ {
<text> <text>
@(" ")در پاسخ به @comment.InReplyTo.AuthorName @(" ")جواب میں: @comment.InReplyTo.AuthorName
</text> </text>
} }
</small> </small>
@(" ")دربارهٔ <a href="@comment.Poem.UrlSlug#comment-@comment.Id">@comment.Poem.Title</a>: @(" ")بارے میں <a href="@comment.Poem.UrlSlug#comment-@comment.Id">@comment.Poem.Title</a>:
</p> </p>
@if (comment.CoupletIndex != -1) @if (comment.CoupletIndex != -1)
{ {

View File

@ -111,7 +111,7 @@ namespace DiwanRazor.Pages
var filterUserId = Request.Query["userid"]; var filterUserId = Request.Query["userid"];
string url = $"{APIRoot.Url}/api/diwan/comments?PageNumber={pageNumber}&PageSize=20"; string url = $"{APIRoot.Url}/api/diwan/comments?PageNumber={pageNumber}&PageSize=20";
Title = "حاشیه‌ها"; Title = "حاشیے";
HomeLink = "/hashieha"; HomeLink = "/hashieha";
if (!string.IsNullOrEmpty(filterUserId)) if (!string.IsNullOrEmpty(filterUserId))
{ {
@ -135,9 +135,9 @@ namespace DiwanRazor.Pages
Contributions = JsonConvert.DeserializeObject<UserContributionsViewModel>(await responseContributions.Content.ReadAsStringAsync()); Contributions = JsonConvert.DeserializeObject<UserContributionsViewModel>(await responseContributions.Content.ReadAsStringAsync());
ViewData["Title"] = $"دیوان » حاشیه‌گذاری‌های {Profile.NickName}"; ViewData["Title"] = $"دیوان » حاشیے: {Profile.NickName}";
Title = $"حاشیه‌گذاری‌های {Profile.NickName}"; Title = $"حاشیے: {Profile.NickName}";
HomeLink = $"/hashieha?userid={filterUserId}"; HomeLink = $"/hashieha?userid={filterUserId}";
if (!string.IsNullOrEmpty(Request.Cookies["Token"])) if (!string.IsNullOrEmpty(Request.Cookies["Token"]))
@ -183,7 +183,7 @@ namespace DiwanRazor.Pages
if (paginationMetadata.totalPages > 1) if (paginationMetadata.totalPages > 1)
{ {
if (pageNumber > 1) if (pageNumber > 1)
ViewData["Title"] += $" - صفحهٔ {pageNumber.ToPersianNumbers()}"; ViewData["Title"] += $" - صفحہ {pageNumber.ToPersianNumbers()}";
htmlText = $"<div>{Environment.NewLine}"; htmlText = $"<div>{Environment.NewLine}";

View File

@ -41,7 +41,7 @@ namespace DiwanRazor.Pages
LoggedIn = !string.IsNullOrEmpty(Request.Cookies["Token"]); LoggedIn = !string.IsNullOrEmpty(Request.Cookies["Token"]);
if(!LoggedIn) if(!LoggedIn)
{ {
LastError = $"برای پیشنهاد تصاویر مرتبط با اشعار لازم است ابتدا با نام کاربری خود وارد دیوان شوید. </p><p><a href=\"/login/?redirect={RelatedImageSuggestionModel.DiwanUrl}\")>ورود به دیوان</a>"; LastError = $"اشعار سے متعلق تصاویر تجویز کرنے کے لیے پہلے دیوان میں داخل ہوں. </p><p><a href=\"/login/?redirect={RelatedImageSuggestionModel.DiwanUrl}\")>دیوان میں داخلہ</a>";
} }
else else
if (Request.Query["final"] == "1") if (Request.Query["final"] == "1")
@ -74,7 +74,7 @@ namespace DiwanRazor.Pages
} }
else else
{ {
LastError = "لطفاً از دیوان خارج و مجددا به آن وارد شوید."; LastError = "براہِ کرم دیوان سے خروج کر کے دوبارہ داخل ہوں.";
} }
} }
} }

View File

@ -13,19 +13,19 @@
{ {
<div class="notice"> <div class="notice">
<p> <p>
از آنجا که شما با شبکهٔ داخلی اطلاعات ایران وصل شده‌اید در حال مشاهدهٔ یک نسخهٔ آفلاین از دیوان هستید. آپ دیوان کا آف لائن نسخہ دیکھ رہے ہیں.
</p> </p>
<p> <p>
این یک نسخهٔ آفلاین با اطلاعات قدیمی از سایت دیوان است که برای ایرانیان داخل کشور که اینترنتشان قطع است در دسترس قرار گرفته است. یہ دیوان کا پرانی معلومات والا آف لائن نسخہ ہے.
</p> </p>
<p> <p>
بعضی امکاناتِ نیازمند اینترنت حذف شده و برخی قابلیتها نیز ممکن است به درستی کار نکند. انٹرنیٹ پر منحصر کچھ سہولتیں ہٹا دی گئی ہیں اور کچھ شاید ٹھیک کام نہ کریں.
</p> </p>
<p> <p>
امکانات نام‌نویسی و درج حاشیه نیز در آن غیرفعال است. اگر می‌توانید جایی اطلاعاتی وارد کنید انتظار ذخیرهٔ آن را به طور دائم نداشته باشید. رکنیت اور حاشیہ لکھنے کی سہولت بند ہے؛ یہاں درج کی گئی کوئی بھی چیز محفوظ نہیں رہے گی.
</p> </p>
<p> <p>
نسخهٔ به‌روز دیوان روی اینترنت تا پایان قطعی اینترنت در ایران برای آی.پی‌های خارج از ایران در دسترس است. دیوان کا تازہ نسخہ انٹرنیٹ پر دستیاب ہے.
</p> </p>
</div> </div>
} }

View File

@ -93,7 +93,7 @@ namespace DiwanRazor.Pages
} }
catch catch
{ {
LastError = "خطا در دسترسی به وب سرویس دیوان"; LastError = "دیوان کی ویب سروس تک رسائی میں خرابی";
return false; return false;
} }
} }

View File

@ -8,9 +8,9 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="ur-PK" dir="rtl"> <html lang="ur-PK" dir="rtl">
<head> <head>
<title>نقشهٔ دیوان</title> <title>دیوان کا نقشہ</title>
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="سخنوران و نویسندگان دیوان روی نقشهٔ جغرافیایی" /> <meta name="description" content="دیوان کے شعرا اور ادیب جغرافیائی نقشے پر" />
<meta charset="utf-8" /> <meta charset="utf-8" />
<link href="~/css/p8.css" asp-append-version="true" rel="stylesheet" type="text/css" /> <link href="~/css/p8.css" asp-append-version="true" rel="stylesheet" type="text/css" />
<partial name="_DiwanHead" /> <partial name="_DiwanHead" />
@ -154,7 +154,7 @@
<div class="century" id="rangeText"></div> <div class="century" id="rangeText"></div>
<div> <div>
<p> <p>
نقشهٔ خاستگاه سخن‌سرایان <a href="/" style="text-decoration:none">دیوان</a> شعرا کی جائے پیدائش کا نقشہ <a href="/" style="text-decoration:none">دیوان</a>
</p> </p>
</div> </div>
</div> </div>

View File

@ -54,7 +54,7 @@ namespace DiwanRazor.Pages
new DiwanCenturyViewModel() new DiwanCenturyViewModel()
{ {
Id = 0, Id = 0,
Name = "همهٔ اعصار", Name = "تمام ادوار",
ShowInTimeLine = true, ShowInTimeLine = true,
Poets = await _PreparePoets() Poets = await _PreparePoets()
} }

View File

@ -107,7 +107,7 @@ namespace DiwanRazor.Pages
Poets = await _PreparePoets(); Poets = await _PreparePoets();
} }
ViewData["Title"] = Poet == null ? "پیشنهاد تصویر برای سخنوران" : $"پیشنهاد تصویر برای {Poet.Nickname}"; ViewData["Title"] = Poet == null ? "شعرا کے لیے تصویر تجویز کریں" : $"تصویر تجویز کریں: {Poet.Nickname}";
return Page(); return Page();
} }
@ -129,7 +129,7 @@ namespace DiwanRazor.Pages
{ {
if (string.IsNullOrEmpty(contents)) if (string.IsNullOrEmpty(contents))
{ {
return Task.FromResult(SpecLineErrorPartial("متن خالی است.")); return Task.FromResult(SpecLineErrorPartial("متن خالی ہے."));
} }
return WithSecureClientAsync(async secureClient => return WithSecureClientAsync(async secureClient =>
@ -164,13 +164,13 @@ namespace DiwanRazor.Pages
public async Task<IActionResult> OnPostAsync(PoetPhotoSuggestionUploadModel Upload) public async Task<IActionResult> OnPostAsync(PoetPhotoSuggestionUploadModel Upload)
{ {
if (string.IsNullOrEmpty(Upload.Title)) if (string.IsNullOrEmpty(Upload.Title))
LastError = "عنوان خالی است."; LastError = "عنوان خالی ہے.";
else else
if (string.IsNullOrEmpty(Upload.Description)) if (string.IsNullOrEmpty(Upload.Description))
LastError = "توضیح خالی است."; LastError = "وضاحت خالی ہے.";
else else
if (Upload.Image == null) if (Upload.Image == null)
LastError = "تصویر انتخاب نشده است."; LastError = "تصویر منتخب نہیں.";
else else
// Kept as its own using/PrepareClient block rather than WithSecureClientAsync: this // Kept as its own using/PrepareClient block rather than WithSecureClientAsync: this
// handler needs to fall through to OnGetAsync() regardless of outcome (success, // handler needs to fall through to OnGetAsync() regardless of outcome (success,

View File

@ -15,7 +15,7 @@ namespace DiwanRazor.Pages
public string getAudioDesc(PublicRecitationViewModel recitation, bool contributionLink = false) public string getAudioDesc(PublicRecitationViewModel recitation, bool contributionLink = false)
{ {
string audiodesc = "به خوانش "; string audiodesc = "قرأت ";
if (!string.IsNullOrEmpty(recitation.AudioArtistUrl) && recitation.AudioArtistUrl.StartsWith("http")) if (!string.IsNullOrEmpty(recitation.AudioArtistUrl) && recitation.AudioArtistUrl.StartsWith("http"))
{ {
audiodesc += $"<a href='{recitation.AudioArtistUrl}'>{recitation.AudioArtist}</a>"; audiodesc += $"<a href='{recitation.AudioArtistUrl}'>{recitation.AudioArtist}</a>";
@ -27,12 +27,12 @@ namespace DiwanRazor.Pages
if (!string.IsNullOrEmpty(recitation.AudioSrc) && !string.IsNullOrEmpty(recitation.AudioSrcUrl) && recitation.AudioSrcUrl.StartsWith("http")) if (!string.IsNullOrEmpty(recitation.AudioSrc) && !string.IsNullOrEmpty(recitation.AudioSrcUrl) && recitation.AudioSrcUrl.StartsWith("http"))
{ {
audiodesc += $" نقل از <a href='{recitation.AudioSrcUrl}'>{recitation.AudioSrc}</a>"; audiodesc += $" منقول از <a href='{recitation.AudioSrcUrl}'>{recitation.AudioSrc}</a>";
} }
if (contributionLink) if (contributionLink)
{ {
audiodesc += "<br> <small>می‌خواهید شما بخوانید؟ <a href='http://ava.ganjoor.net/about/'>اینجا</a> را ببینید.</small>"; audiodesc += "<br> <small>کیا آپ پڑھنا چاہیں گے؟ <a href='http://ava.ganjoor.net/about/'>یہاں</a> دیکھیں.</small>";
} }
return audiodesc; return audiodesc;

View File

@ -34,7 +34,7 @@ namespace DiwanRazor.Pages
{ {
get get
{ {
return IsBookmarked ? "حذف نشان" : "نشان کردن"; return IsBookmarked ? "نشان ہٹائیں" : "نشان لگائیں";
} }
} }

View File

@ -36,7 +36,7 @@ namespace DiwanRazor.Pages
{ {
get get
{ {
return CatId == 0 ? "دیوان" : "این بخش"; return CatId == 0 ? "دیوان" : "یہ حصہ";
} }
} }

View File

@ -22,7 +22,7 @@ namespace DiwanRazor.Pages
{ {
get get
{ {
return InReplyTo == null ? "نوشته" : "پاسخ داده"; return InReplyTo == null ? "لکھا" : "جواب دیا";
} }
} }
public bool Bookmarked { get; set; } public bool Bookmarked { get; set; }

View File

@ -15,7 +15,7 @@ namespace DiwanRazor.Pages
{ {
get get
{ {
return Whole ? "دیوان" : "این بخش"; return Whole ? "دیوان" : "یہ حصہ";
} }
} }
} }

View File

@ -10,32 +10,32 @@
else else
{ {
<div class="up-modal-explorer"> <div class="up-modal-explorer">
<h2>کاوش در شخصیت‌ها</h2> <h2>شخصیات کی تلاش</h2>
@if (Model.FamilyTreeRoots != null && Model.FamilyTreeRoots.Count > 0) @if (Model.FamilyTreeRoots != null && Model.FamilyTreeRoots.Count > 0)
{ {
<h3>تبارنامه‌ها</h3> <h3>شجرے</h3>
<ul> <ul>
@foreach (var root in Model.FamilyTreeRoots) @foreach (var root in Model.FamilyTreeRoots)
{ {
<li> <li>
<a href="javascript:void(0)" onclick="PersonWindow.open(@root.Id)">@root.FamilyTreeCaption</a> <a href="javascript:void(0)" onclick="PersonWindow.open(@root.Id)">@root.FamilyTreeCaption</a>
<small>(@root.Name)</small> <small>(@root.Name)</small>
— <a href="javascript:void(0)" onclick="FamilyTreeWindow.open(@root.Id)"><small>نمایش نمودار</small></a> — <a href="javascript:void(0)" onclick="FamilyTreeWindow.open(@root.Id)"><small>خاکہ دکھائیں</small></a>
</li> </li>
} }
</ul> </ul>
} }
<h3>شبکهٔ روابط همهٔ شخصیت‌ها</h3> <h3>تمام شخصیات کے روابط کا جال</h3>
<p class="up-hint"><small> <p class="up-hint"><small>
روی یک گره کلیک کنید تا فقط ارتباط‌های همان شخص برجسته شود (کلیک دوباره برای بازگشت)؛ روی نام یک شخصیت (زیر گره یا در جدول) کلیک کنید تا اطلاعات کامل او باز شود. کسی گرہ پر کلک کریں تاکہ صرف اسی شخص کے روابط نمایاں ہوں (واپسی کے لیے دوبارہ کلک کریں)؛ کسی شخصیت کے نام پر کلک کریں تو اس کی مکمل معلومات کھل جائیں گی۔
برای پیمایش نمودار آن را با ماوس بکشید و با غلتک ماوس بزرگ/کوچک کنید. خاکے کو ماؤس سے کھینچیں اور ماؤس کے پہیے سے بڑا/چھوٹا کریں.
</small></p> </small></p>
<div style="margin-bottom:10px;"> <div style="margin-bottom:10px;">
<input type="text" id="pge-search" placeholder="جستجوی نام شخصیت..." style="width:240px;" /> <input type="text" id="pge-search" placeholder="شخصیت کا نام تلاش کریں..." style="width:240px;" />
<a role="button" id="pge-reset" class="up-btn up-btn--ghost up-btn--sm">نمایش همه</a> <a role="button" id="pge-reset" class="up-btn up-btn--ghost up-btn--sm">سب دکھائیں</a>
</div> </div>
<div id="pge-legend" class="pg-legend"></div> <div id="pge-legend" class="pg-legend"></div>
@ -50,10 +50,10 @@ else
<table class="up-table"> <table class="up-table">
<thead> <thead>
<tr> <tr>
<th>شخص اول</th> <th>پہلا شخص</th>
<th>نوع ارتباط</th> <th>رشتے کی نوعیت</th>
<th>شخص دوم</th> <th>دوسرا شخص</th>
<th>یادداشت</th> <th>نوٹ</th>
</tr> </tr>
</thead> </thead>
<tbody id="pge-table-body"></tbody> <tbody id="pge-table-body"></tbody>

View File

@ -15,13 +15,13 @@ else
@Model.Person.Name @Model.Person.Name
@if (Model.LoggedIn) @if (Model.LoggedIn)
{ {
<a href="/User/SuggestPersonEdit?id=@Model.Person.Id" class="up-icon-btn" title="پیشنهاد ویرایش این نامبرده" aria-label="پیشنهاد ویرایش این نامبرده">✎</a> <a href="/User/SuggestPersonEdit?id=@Model.Person.Id" class="up-icon-btn" title="اس شخصیت میں ترمیم تجویز کریں" aria-label="اس شخصیت میں ترمیم تجویز کریں">✎</a>
} }
</h2> </h2>
@if (!string.IsNullOrEmpty(Model.Person.FamilyTreeCaption)) @if (!string.IsNullOrEmpty(Model.Person.FamilyTreeCaption))
{ {
<p><strong>تبارنامه: @Model.Person.FamilyTreeCaption</strong></p> <p><strong>شجرہ: @Model.Person.FamilyTreeCaption</strong></p>
} }
@if (Model.Person.BirthYearInLHijri != 0 || Model.Person.DeathYearInLHijri != 0) @if (Model.Person.BirthYearInLHijri != 0 || Model.Person.DeathYearInLHijri != 0)
@ -29,11 +29,11 @@ else
<p> <p>
@if (Model.Person.BirthYearInLHijri != 0) @if (Model.Person.BirthYearInLHijri != 0)
{ {
<text>تولد: @Model.Person.BirthYearInLHijri.ToPersianNumbers() (قمری) @(Model.Person.ValidBirthDate ? "" : "- تخمینی")</text> <text>ولادت: @Model.Person.BirthYearInLHijri.ToPersianNumbers() (ہجری) @(Model.Person.ValidBirthDate ? "" : "- تخمینی")</text>
} }
@if (Model.Person.DeathYearInLHijri != 0) @if (Model.Person.DeathYearInLHijri != 0)
{ {
<text> — وفات: @Model.Person.DeathYearInLHijri.ToPersianNumbers() (قمری) @(Model.Person.ValidDeathDate ? "" : "- تخمینی")</text> <text> — وفات: @Model.Person.DeathYearInLHijri.ToPersianNumbers() (ہجری) @(Model.Person.ValidDeathDate ? "" : "- تخمینی")</text>
} }
</p> </p>
} }
@ -45,17 +45,17 @@ else
@if (!string.IsNullOrEmpty(Model.Person.WikiUrl)) @if (!string.IsNullOrEmpty(Model.Person.WikiUrl))
{ {
<p><a href="@Model.Person.WikiUrl" target="_blank" rel="noopener">صفحهٔ ویکی‌پدیا</a></p> <p><a href="@Model.Person.WikiUrl" target="_blank" rel="noopener">ویکیپیڈیا صفحہ</a></p>
} }
@if (Model.RelationRows.Count > 0) @if (Model.RelationRows.Count > 0)
{ {
<h3> <h3>
خویشاوندان رشتہ دار
<a href="javascript:void(0)" onclick="FamilyTreeWindow.open(@Model.Person.Id)" class="up-btn up-btn--ghost up-btn--sm">نمایش نمودار تبارنامه</a> <a href="javascript:void(0)" onclick="FamilyTreeWindow.open(@Model.Person.Id)" class="up-btn up-btn--ghost up-btn--sm">شجرے کا خاکہ دکھائیں</a>
@if (Model.LoggedIn) @if (Model.LoggedIn)
{ {
<a href="/User/SuggestNewPersonRelation?personId=@Model.Person.Id" class="up-btn up-btn--ghost up-btn--sm">افزودن خویشاوند جدید</a> <a href="/User/SuggestNewPersonRelation?personId=@Model.Person.Id" class="up-btn up-btn--ghost up-btn--sm">نیا رشتہ دار شامل کریں</a>
} }
</h3> </h3>
<ul> <ul>
@ -69,7 +69,7 @@ else
} }
@if (Model.LoggedIn) @if (Model.LoggedIn)
{ {
<a href="/User/SuggestPersonRelationEdit?relationId=@row.RelationId" class="up-icon-btn" title="پیشنهاد ویرایش/حذف این نسبت" aria-label="پیشنهاد ویرایش/حذف این نسبت">✎</a> <a href="/User/SuggestPersonRelationEdit?relationId=@row.RelationId" class="up-icon-btn" title="ترمیم تجویز کریں/یہ رشتہ ہٹائیں" aria-label="ترمیم تجویز کریں/یہ رشتہ ہٹائیں">✎</a>
} }
</li> </li>
} }
@ -78,18 +78,18 @@ else
else if (Model.LoggedIn) else if (Model.LoggedIn)
{ {
<h3> <h3>
خویشاوندان رشتہ دار
<a href="/User/SuggestNewPersonRelation?personId=@Model.Person.Id" class="up-btn up-btn--ghost up-btn--sm">افزودن خویشاوند جدید</a> <a href="/User/SuggestNewPersonRelation?personId=@Model.Person.Id" class="up-btn up-btn--ghost up-btn--sm">نیا رشتہ دار شامل کریں</a>
</h3> </h3>
} }
@if (Model.AffiliationRows.Count > 0) @if (Model.AffiliationRows.Count > 0)
{ {
<h3> <h3>
وابستگی‌های غیرخویشاوندی غیر خاندانی وابستگیاں
@if (Model.LoggedIn) @if (Model.LoggedIn)
{ {
<a href="/User/SuggestNewPersonRelation?personId=@Model.Person.Id" class="up-btn up-btn--ghost up-btn--sm">افزودن وابستگی جدید</a> <a href="/User/SuggestNewPersonRelation?personId=@Model.Person.Id" class="up-btn up-btn--ghost up-btn--sm">نئی وابستگی شامل کریں</a>
} }
</h3> </h3>
<ul> <ul>
@ -103,7 +103,7 @@ else
} }
@if (Model.LoggedIn) @if (Model.LoggedIn)
{ {
<a href="/User/SuggestPersonRelationEdit?affiliationId=@row.AffiliationId" class="up-icon-btn" title="پیشنهاد ویرایش/حذف این وابستگی" aria-label="پیشنهاد ویرایش/حذف این وابستگی">✎</a> <a href="/User/SuggestPersonRelationEdit?affiliationId=@row.AffiliationId" class="up-icon-btn" title="ترمیم تجویز کریں/یہ وابستگی ہٹائیں" aria-label="ترمیم تجویز کریں/یہ وابستگی ہٹائیں">✎</a>
} }
</li> </li>
} }
@ -112,14 +112,14 @@ else
else if (Model.LoggedIn) else if (Model.LoggedIn)
{ {
<h3> <h3>
وابستگی‌های غیرخویشاوندی غیر خاندانی وابستگیاں
<a href="/User/SuggestNewPersonRelation?personId=@Model.Person.Id" class="up-btn up-btn--ghost up-btn--sm">افزودن وابستگی جدید</a> <a href="/User/SuggestNewPersonRelation?personId=@Model.Person.Id" class="up-btn up-btn--ghost up-btn--sm">نئی وابستگی شامل کریں</a>
</h3> </h3>
} }
@if (Model.Poems != null && Model.Poems.Length > 0) @if (Model.Poems != null && Model.Poems.Length > 0)
{ {
<h3>اشعار برچسب‌خورده با این نامبرده</h3> <h3>اس شخصیت سے نشان زدہ اشعار</h3>
<ul> <ul>
@foreach (var tag in Model.Poems) @foreach (var tag in Model.Poems)
{ {
@ -133,7 +133,7 @@ else
} }
@if (!string.IsNullOrEmpty(tag.Note)) @if (!string.IsNullOrEmpty(tag.Note))
{ {
<p class="up-hint"><small>یادداشت: @tag.Note</small></p> <p class="up-hint"><small>نوٹ: @tag.Note</small></p>
} }
</li> </li>
} }
@ -142,7 +142,7 @@ else
} }
else else
{ {
<p><small>هنوز شعری با این نامبرده برچسب‌گذاری نشده است.</small></p> <p><small>ابھی کسی شعر میں اس شخصیت کی نشاندہی نہیں ہوئی.</small></p>
} }
</div> </div>
} }

View File

@ -51,7 +51,7 @@ namespace DiwanRazor.Pages
public int RelationId { get; set; } public int RelationId { get; set; }
/// <summary> /// <summary>
/// the other person's role relative to the subject (e.g. "فرزند", "پدر/مادر", "نیا") /// the other person's role relative to the subject (e.g. "اولاد", "والد/والدہ", "جدّ")
/// </summary> /// </summary>
public string Label { get; set; } public string Label { get; set; }
public int OtherPersonId { get; set; } public int OtherPersonId { get; set; }
@ -85,14 +85,14 @@ namespace DiwanRazor.Pages
switch (r.RelationType) switch (r.RelationType)
{ {
case PersonRelationType.Parent: case PersonRelationType.Parent:
return r.SubjectIsPerson1 ? "فرزند" : "پدر/مادر"; return r.SubjectIsPerson1 ? "اولاد" : "والد/والدہ";
case PersonRelationType.Sibling: case PersonRelationType.Sibling:
return "خواهر/برادر"; return "بہن/بھائی";
case PersonRelationType.Spouse: case PersonRelationType.Spouse:
return "همسر"; return "شریکِ حیات";
case PersonRelationType.Ancestor: case PersonRelationType.Ancestor:
var word = r.SubjectIsPerson1 ? "نواده" : "نیا"; var word = r.SubjectIsPerson1 ? "نسل" : "جدّ";
return r.DegreeHint != null ? $"{word} (فاصلهٔ {r.DegreeHint} نسل)" : word; return r.DegreeHint != null ? $"{word} (فاصلہ {r.DegreeHint} پشت)" : word;
default: default:
return r.RelationType.ToString(); return r.RelationType.ToString();
} }
@ -105,21 +105,21 @@ namespace DiwanRazor.Pages
new System.Collections.Generic.Dictionary<PersonAffiliationType, string>() new System.Collections.Generic.Dictionary<PersonAffiliationType, string>()
{ {
{ PersonAffiliationType.Minister, "وزیرِ" }, { PersonAffiliationType.Minister, "وزیرِ" },
{ PersonAffiliationType.Advisor, "مشاورِ" }, { PersonAffiliationType.Advisor, "مشیرِ" },
{ PersonAffiliationType.Courtier, "درباریِ" }, { PersonAffiliationType.Courtier, "درباریِ" },
{ PersonAffiliationType.Patron, "حامیِ" }, { PersonAffiliationType.Patron, "سرپرستِ" },
{ PersonAffiliationType.Ally, "متحدِ" }, { PersonAffiliationType.Ally, "حلیفِ" },
{ PersonAffiliationType.Rival, "رقیبِ" }, { PersonAffiliationType.Rival, "رقیبِ" },
{ PersonAffiliationType.Servant, "خدمتکارِ" }, { PersonAffiliationType.Servant, "خادمِ" },
{ PersonAffiliationType.Companion, "همراهِ" }, { PersonAffiliationType.Companion, "رفیقِ" },
{ PersonAffiliationType.Successor, "جانشینِ" }, { PersonAffiliationType.Successor, "جانشینِ" },
{ PersonAffiliationType.Panegyrized, "مدح‌گویِ" }, { PersonAffiliationType.Panegyrized, "مداحِ" },
{ PersonAffiliationType.Satirized, "هجوگویِ" }, { PersonAffiliationType.Satirized, "ہجو گوئے" },
{ PersonAffiliationType.MilitaryCommander, "سردارِ" }, { PersonAffiliationType.MilitaryCommander, "سردارِ" },
{ PersonAffiliationType.Champion, "پهلوانِ" }, { PersonAffiliationType.Champion, "پہلوانِ" },
{ PersonAffiliationType.Contemporary, "هم‌عصرِ" }, { PersonAffiliationType.Contemporary, "ہم عصرِ" },
{ PersonAffiliationType.Killer, "قاتلِ" }, { PersonAffiliationType.Killer, "قاتلِ" },
{ PersonAffiliationType.Other, "دارای نسبتی (به یادداشت نگاه کنید) با" }, { PersonAffiliationType.Other, "سے نسبت رکھتا تھا (نوٹ دیکھیں):" },
}; };
private static bool IsSymmetricAffiliation(PersonAffiliationType t) => private static bool IsSymmetricAffiliation(PersonAffiliationType t) =>
@ -140,7 +140,7 @@ namespace DiwanRazor.Pages
Person = JsonConvert.DeserializeObject<DiwanRelatedPerson>(await personResponse.Content.ReadAsStringAsync()); Person = JsonConvert.DeserializeObject<DiwanRelatedPerson>(await personResponse.Content.ReadAsStringAsync());
if (Person == null) if (Person == null)
{ {
LastError = "شخصیتی با این کد پیدا نشد."; LastError = "اس کوڈ کی کوئی شخصیت نہیں ملی.";
return Page(); return Page();
} }
@ -171,8 +171,8 @@ namespace DiwanRazor.Pages
AffiliationRows.Add(new PersonAffiliationDisplayRow() AffiliationRows.Add(new PersonAffiliationDisplayRow()
{ {
AffiliationId = a.Id, AffiliationId = a.Id,
SentenceBeforeOtherName = subjectServes ? $"این شخصیت {roleWord} " : "", SentenceBeforeOtherName = subjectServes ? $"یہ شخصیت {roleWord} " : "",
SentenceAfterOtherName = subjectServes ? " بود" : $" {roleWord} این شخصیت بود", SentenceAfterOtherName = subjectServes ? " تھا" : $" {roleWord} یہ شخصیت تھی",
OtherPersonId = a.OtherPersonId, OtherPersonId = a.OtherPersonId,
OtherPersonName = a.OtherPersonName, OtherPersonName = a.OtherPersonName,
Note = a.Note, Note = a.Note,

View File

@ -34,13 +34,13 @@ else
@if (Model.Quotes.Count == 0 && Model.ClaimedQuotes.Count == 0) @if (Model.Quotes.Count == 0 && Model.ClaimedQuotes.Count == 0)
{ {
<p>نقل قولی یافت نشد.</p> <p>کوئی اقتباس نہیں ملا.</p>
} }
else else
{ {
@if(Model.ClaimedQuotes.Count > 0) @if(Model.ClaimedQuotes.Count > 0)
{ {
<div class="century">موارد منتسب به شاعران دیگر</div> <div class="century">دیگر شعرا سے منسوب</div>
<ol> <ol>
@foreach (var quotedPoem in Model.ClaimedQuotes) @foreach (var quotedPoem in Model.ClaimedQuotes)
@ -76,7 +76,7 @@ else
</ol> </ol>
<br class="clear-both" /> <br class="clear-both" />
<div class="century">نقل قول‌های دیگر</div> <div class="century">دیگر اقتباسات</div>
} }

View File

@ -80,7 +80,7 @@ namespace DiwanRazor.Pages
} }
ClaimedQuotes = JArray.Parse(await responseClaimedQuotes.Content.ReadAsStringAsync()).ToObject<List<DiwanQuotedPoemViewModel>>(); ClaimedQuotes = JArray.Parse(await responseClaimedQuotes.Content.ReadAsStringAsync()).ToObject<List<DiwanQuotedPoemViewModel>>();
ViewData["Title"] = Poet == null ? "نقل قول‌های شاعران" : $"نقل قول‌ها و شعرهای مرتبط {Poet.Nickname}"; ViewData["Title"] = Poet == null ? "شعرا کے اقتباسات" : $"اقتباسات اور متعلقہ اشعار {Poet.Nickname}";
return Page(); return Page();
} }

View File

@ -76,7 +76,7 @@ namespace DiwanRazor.Pages
} }
else else
{ {
LastError = "شعری انتخاب نشده است."; LastError = "کوئی شعر منتخب نہیں.";
} }
return Page(); return Page();

View File

@ -109,7 +109,7 @@ namespace DiwanRazor.Pages
else else
{ {
Recitation = JsonConvert.DeserializeObject<PublicRecitationViewModel>(await response.Content.ReadAsStringAsync()); Recitation = JsonConvert.DeserializeObject<PublicRecitationViewModel>(await response.Content.ReadAsStringAsync());
RecitationInfo = $"{Recitation.AudioTitle} به خوانش {Recitation.AudioArtist}"; RecitationInfo = $"{Recitation.AudioTitle} قرأت {Recitation.AudioArtist}";
var pageUrlResponse = await _httpClient.GetAsync($"{APIRoot.Url}/api/diwan/pageurl?id={Recitation.PoemId}"); var pageUrlResponse = await _httpClient.GetAsync($"{APIRoot.Url}/api/diwan/pageurl?id={Recitation.PoemId}");
if (!pageUrlResponse.IsSuccessStatusCode) if (!pageUrlResponse.IsSuccessStatusCode)
@ -220,7 +220,7 @@ namespace DiwanRazor.Pages
if (string.IsNullOrEmpty(Report.ReasonText)) if (string.IsNullOrEmpty(Report.ReasonText))
{ {
LastError = "مشکل مشخص نشده است. "; LastError = "مسئلہ متعین نہیں. ";
return Page(); return Page();
} }
@ -228,7 +228,7 @@ namespace DiwanRazor.Pages
if (string.IsNullOrEmpty(Report.ReasonText)) if (string.IsNullOrEmpty(Report.ReasonText))
{ {
LastError = "مشکل مشخص نشده است. "; LastError = "مسئلہ متعین نہیں. ";
return Page(); return Page();
} }
@ -253,7 +253,7 @@ namespace DiwanRazor.Pages
} }
else else
{ {
LastError = "لطفاً از دیوان خارج و مجددا به آن وارد شوید."; LastError = "براہِ کرم دیوان سے خروج کر کے دوبارہ داخل ہوں.";
} }
} }

View File

@ -107,7 +107,7 @@ namespace DiwanRazor.Pages
AlternativeSearchPhraseDescription = ""; AlternativeSearchPhraseDescription = "";
if (Quoted) if (Quoted)
{ {
AlternativeSearchPhraseDescription = "راضی نشدید؟! "; AlternativeSearchPhraseDescription = "مطمئن نہیں؟! ";
bool needsComma = false; bool needsComma = false;
var splitteds = Query.Replace("\"", "").Split(' '); var splitteds = Query.Replace("\"", "").Split(' ');
for (int sp = 0; sp < splitteds.Length - 1; sp++) for (int sp = 0; sp < splitteds.Length - 1; sp++)
@ -119,12 +119,12 @@ namespace DiwanRazor.Pages
needsComma = true; needsComma = true;
} }
AlternativeSearchPhraseDescription += $" و «{splitteds[splitteds.Length - 1]}»"; AlternativeSearchPhraseDescription += $" و «{splitteds[splitteds.Length - 1]}»";
AlternativeSearchPhraseDescription += " را بدون لحاظ کردن ترتیب واژگان جستجو کنید."; AlternativeSearchPhraseDescription += " کو الفاظ کی ترتیب کے بغیر تلاش کریں.";
} }
else else
if (Query.Contains(" ")) if (Query.Contains(" "))
{ {
AlternativeSearchPhraseDescription = $"راضی نشدید؟! عبارت «{Query}» را به طور دقیق جستجو کنید."; AlternativeSearchPhraseDescription = $"مطمئن نہیں؟ عبارت «{Query}» کو بالکل اسی طرح تلاش کریں.";
} }
PoetId = string.IsNullOrEmpty(Request.Query["author"]) ? 0 : int.Parse(Request.Query["author"]); PoetId = string.IsNullOrEmpty(Request.Query["author"]) ? 0 : int.Parse(Request.Query["author"]);
@ -175,22 +175,22 @@ namespace DiwanRazor.Pages
{ {
if (CatFullTitle != "") if (CatFullTitle != "")
{ {
ViewData["Title"] = $"دیوان » نتایج جستجو برای {Query} در بخش {CatFullTitle}"; ViewData["Title"] = $"دیوان » تلاش کے نتائج: {Query} حصے میں {CatFullTitle}";
} }
else else
{ {
ViewData["Title"] = $"دیوان » نتایج جستجو برای {Query} در آثار {poetName?.Name}"; ViewData["Title"] = $"دیوان » تلاش کے نتائج: {Query} کلام میں: {poetName?.Name}";
} }
} }
else else
{ {
if (!string.IsNullOrEmpty(Query)) if (!string.IsNullOrEmpty(Query))
{ {
ViewData["Title"] = $"دیوان » نتایج جستجو برای {Query}"; ViewData["Title"] = $"دیوان » تلاش کے نتائج: {Query}";
} }
else else
{ {
ViewData["Title"] = $"دیوان » جستجو"; ViewData["Title"] = $"دیوان » تلاش";
} }
} }
@ -215,7 +215,7 @@ namespace DiwanRazor.Pages
if (pageNumber > 1) if (pageNumber > 1)
{ {
ViewData["Title"] += $" - صفحهٔ {pageNumber.ToPersianNumbers()}"; ViewData["Title"] += $" - صفحہ {pageNumber.ToPersianNumbers()}";
} }
HttpResponseMessage searchQueryResponse = null; HttpResponseMessage searchQueryResponse = null;

View File

@ -67,15 +67,15 @@
<div class="sitem actionbox"> <div class="sitem actionbox">
<div class="related-images-frame"> <div class="related-images-frame">
<form method="get" id="simiform"> <form method="get" id="simiform">
<label for="a" class="width-100per">سخنور:</label> <label for="a" class="width-100per">شاعر:</label>
<script> <script>
function syncInputs(){ function syncInputs(){
document.getElementById('poets-search').value = document.getElementById('fake-poet-search').value; document.getElementById('poets-search').value = document.getElementById('fake-poet-search').value;
doSearchInRhythmsCombo('poets-search', 'a'); doSearchInRhythmsCombo('poets-search', 'a');
} }
</script> </script>
<input class="width-100per" type="text" id="fake-poet-search" placeholder="جستجوی سخنور" oninput="syncInputs()" autocomplete="off" size="50" /> <input class="width-100per" type="text" id="fake-poet-search" placeholder="شاعر تلاش کریں" oninput="syncInputs()" autocomplete="off" size="50" />
<input type="hidden" id="poets-search" placeholder="جستجوی سخنور" list="inputPoets" autocomplete="off" size="50" /> <input type="hidden" id="poets-search" placeholder="شاعر تلاش کریں" list="inputPoets" autocomplete="off" size="50" />
<datalist id="inputPoets"> <datalist id="inputPoets">
@if (Model.Poets != null) @if (Model.Poets != null)
@foreach (var poet in Model.Poets) @foreach (var poet in Model.Poets)
@ -87,11 +87,11 @@
@{ @{
if (Model.PoetId != 0) if (Model.PoetId != 0)
{ {
<option value="0">در آثار همهٔ سخنوران</option> <option value="0">تمام شعرا کے کلام میں</option>
} }
else else
{ {
<option value="0" selected>در آثار همهٔ سخنوران</option> <option value="0" selected>تمام شعرا کے کلام میں</option>
} }
if (Model.Poets != null) if (Model.Poets != null)
@ -111,8 +111,8 @@
} }
</select> </select>
<label for="v" class="width-100per">وزن:</label> <label for="v" class="width-100per">بحر:</label>
<input class="width-100per" type="text" id="select-search" placeholder="جستجوی وزن" oninput="doSearchInRhythmsCombo('select-search', 'v')" list="inputRhythms" autocomplete="off" size="50" /> <input class="width-100per" type="text" id="select-search" placeholder="بحر تلاش کریں" oninput="doSearchInRhythmsCombo('select-search', 'v')" list="inputRhythms" autocomplete="off" size="50" />
<datalist id="inputRhythms"> <datalist id="inputRhythms">
@if (Model.RhythmsByVerseCount != null) @if (Model.RhythmsByVerseCount != null)
@foreach (var rhythm in Model.RhythmsByVerseCount) @foreach (var rhythm in Model.RhythmsByVerseCount)
@ -125,21 +125,21 @@
{ {
if (Model.Metre == rhythm.Rhythm) if (Model.Metre == rhythm.Rhythm)
{ {
<option value="@rhythm.Rhythm" selected>@(rhythm.Rhythm == "" ? "هیچکدام" : rhythm.Rhythm == "null" ? "وزن‌یابی نشده" : rhythm.Rhythm)</option> <option value="@rhythm.Rhythm" selected>@(rhythm.Rhythm == "" ? "کوئی نہیں" : rhythm.Rhythm == "null" ? "بحر متعین نہیں" : rhythm.Rhythm)</option>
} }
else else
{ {
<option value="@rhythm.Rhythm">@(rhythm.Rhythm == "" ? "هیچکدام" : rhythm.Rhythm == "null" ? "وزن‌یابی نشده" : rhythm.Rhythm)</option> <option value="@rhythm.Rhythm">@(rhythm.Rhythm == "" ? "کوئی نہیں" : rhythm.Rhythm == "null" ? "بحر متعین نہیں" : rhythm.Rhythm)</option>
} }
} }
</select> </select>
<label for="g" class="width-100per">قافیه:</label> <label for="g" class="width-100per">قافیہ:</label>
<input type="text" name="g" id="g" class="width-100per" value="@Model.Rhyme" placeholder="حروف قافیه" /> <input type="text" name="g" id="g" class="width-100per" value="@Model.Rhyme" placeholder="حروفِ قافیہ" />
<label for="v" class="width-100per">زبان غالب:</label> <label for="v" class="width-100per">غالب زبان:</label>
<select id="l" name="l" class="width-100per"> <select id="l" name="l" class="width-100per">
@foreach (var language in Model.Languages) @foreach (var language in Model.Languages)
@ -156,7 +156,7 @@
} }
</select> </select>
<label for="f" class="width-100per">قالب شعر:</label> <label for="f" class="width-100per">صنفِ سخن:</label>
<select id="f" name="f" class="width-100per"> <select id="f" name="f" class="width-100per">
@foreach (var poemFormat in System.Enum.GetValues(typeof(RMuseum.Models.Diwan.DiwanPoemFormat))) @foreach (var poemFormat in System.Enum.GetValues(typeof(RMuseum.Models.Diwan.DiwanPoemFormat)))
@ -165,11 +165,11 @@
{ {
if (RMuseum.Models.Diwan.DiwanPoemFormat.Unknown == Model.Format) if (RMuseum.Models.Diwan.DiwanPoemFormat.Unknown == Model.Format)
{ {
<option value="@((int)poemFormat)" selected>همهٔ قالب‌ها</option> <option value="@((int)poemFormat)" selected>تمام اصناف</option>
} }
else else
{ {
<option value="@((int)poemFormat)">همهٔ قالب‌ها</option> <option value="@((int)poemFormat)">تمام اصناف</option>
} }
} }
else else
@ -187,13 +187,13 @@
} }
</select> </select>
<label for="c1" class="width-100per">حداقل تعداد ابیات:</label> <label for="c1" class="width-100per">اشعار کی کم از کم تعداد:</label>
<input type="number" name="c1" id="c1" class="width-100per" value="@Model.CoupletCountsFrom" placeholder="حداقل تعداد ابیات" /> <input type="number" name="c1" id="c1" class="width-100per" value="@Model.CoupletCountsFrom" placeholder="اشعار کی کم از کم تعداد" />
<label for="c2" class="width-100per">حداکثر تعداد ابیات:</label> <label for="c2" class="width-100per">اشعار کی زیادہ سے زیادہ تعداد:</label>
<input type="number" name="c2" id="c2" class="width-100per" value="@Model.CoupletCountsTo" placeholder="حداکثر تعداد ابیات" /> <input type="number" name="c2" id="c2" class="width-100per" value="@Model.CoupletCountsTo" placeholder="اشعار کی زیادہ سے زیادہ تعداد" />
<label class="width-100per">کلیدواژه (جستجو در کل صفحهٔ شعر، برای جستجوی بهتر از <a href="/search?s=@Model.Query">صفحهٔ جستجو</a> استفاده کنید):</label> <label class="width-100per">کلیدی لفظ (پورے صفحے میں تلاش؛ بہتر تلاش کے لیے <a href="/search?s=@Model.Query">تلاش کا صفحہ</a> استعمال کریں):</label>
<input type="text" name="s" id="s" class="width-100per" value="@Model.Query" placeholder="کلیدواژه" /> <input type="text" name="s" id="s" class="width-100per" value="@Model.Query" placeholder="کلیدی لفظ" />
@if (Model.ExactSearch) @if (Model.ExactSearch)
{ {
<input type="hidden" name="es" id="es" value="1" /> <input type="hidden" name="es" id="es" value="1" />
@ -202,15 +202,15 @@
@if (Model.CatId != 0) @if (Model.CatId != 0)
{ {
<div class="width-100per"> <div class="width-100per">
تنها در بخش <a href="@Model.CatFullUrl">@Model.CatFullTitle</a> صرف اس حصے میں <a href="@Model.CatFullUrl">@Model.CatFullTitle</a>
</div> </div>
} }
<input type="submit" class="width-100per margin-top-5px" value="اعمال ورودی‌ها" /> <input type="submit" class="width-100per margin-top-5px" value="شرائط لاگو کریں" />
@if (Model.CanEdit) @if (Model.CanEdit)
{ {
<a onclick="redirectToTransferMeter()" class="pagebutton" role="button">انتقال وزن</a> <a onclick="redirectToTransferMeter()" class="pagebutton" role="button">بحر منتقل کریں</a>
} }
</form> </form>
@ -231,14 +231,14 @@
@if (Model.Poems == null) @if (Model.Poems == null)
{ {
<div class="sitem"> <div class="sitem">
<p>لطفاً اطلاعات ورودی برای ابیات مد نظر را وارد کنید.</p> <p>براہِ کرم مطلوبہ اشعار کی معلومات درج کریں.</p>
</div> </div>
} }
else else
if (Model.Poems.Count == 0) if (Model.Poems.Count == 0)
{ {
<div class="sitem"> <div class="sitem">
<p>شعری با مشخصات مورد نظر شما پیدا نشد.</p> <p>مطلوبہ شعر نہیں ملا.</p>
</div> </div>
} }
else else
@ -254,12 +254,12 @@
@Html.Raw(poem.HtmlText) @Html.Raw(poem.HtmlText)
</div> </div>
<div> <div>
@($"{(poem.CoupletsCount ?? 0).ToPersianNumbers()} بیت") @($"{(poem.CoupletsCount ?? 0).ToPersianNumbers()} شعر")
</div> </div>
<div class="poet"> <div class="poet">
<img src="@($"{DiwanRazor.APIRoot.InternetUrl}{poem.Category.Poet.ImageUrl}")" alt="@($"{poem.Category.Poet.Nickname}")" /> <img src="@($"{DiwanRazor.APIRoot.InternetUrl}{poem.Category.Poet.ImageUrl}")" alt="@($"{poem.Category.Poet.Nickname}")" />
<a role="button" onclick="deletePoetFromSearch(@poem.Category.Poet.Id, '@(poem.Category.Poet.Nickname)')" class="actionlink" title="حذف @($"{poem.Category.Poet.Nickname}") از نتایج"><i class="notranslate noindent-info-button close-button"></i></a> <a role="button" onclick="deletePoetFromSearch(@poem.Category.Poet.Id, '@(poem.Category.Poet.Nickname)')" class="actionlink" title="ہٹائیں @($"{poem.Category.Poet.Nickname}") نتائج سے"><i class="notranslate noindent-info-button close-button"></i></a>
</div> </div>
<div class="spacer">&nbsp;</div> <div class="spacer">&nbsp;</div>
@ -267,7 +267,7 @@
<div> <div>
@if (Model.LoggedIn) @if (Model.LoggedIn)
{ {
<a href="/User/Section?poemId=@poem.Id&index=@poem.SectionIndex" role="button" class="cursor-pointer" title="ویرایش"> <a href="/User/Section?poemId=@poem.Id&index=@poem.SectionIndex" role="button" class="cursor-pointer" title="ترمیم">
<div class="circled-number"> <div class="circled-number">
<i class="notranslate noindent-info-button edit-poem-button"></i> <i class="notranslate noindent-info-button edit-poem-button"></i>
</div> </div>
@ -278,7 +278,7 @@
<table> <table>
<tr> <tr>
<td> <td>
<label for="select-search-@poem.Id-@poem.SectionIndex">جستجوی وزن:</label><br /> <label for="select-search-@poem.Id-@poem.SectionIndex">بحر تلاش کریں:</label><br />
<input type="text" id="select-search-@poem.Id-@poem.SectionIndex" value="" oninput="doSearchInRhythmsCombo('select-search-@poem.Id-@poem.SectionIndex', 'rhythm-new-@poem.Id-@poem.SectionIndex')" list="inputRhythms-@poem.Id-@poem.SectionIndex" autocomplete="off" size="50" /> <input type="text" id="select-search-@poem.Id-@poem.SectionIndex" value="" oninput="doSearchInRhythmsCombo('select-search-@poem.Id-@poem.SectionIndex', 'rhythm-new-@poem.Id-@poem.SectionIndex')" list="inputRhythms-@poem.Id-@poem.SectionIndex" autocomplete="off" size="50" />
<datalist id="inputRhythms-@poem.Id-@poem.SectionIndex"> <datalist id="inputRhythms-@poem.Id-@poem.SectionIndex">
@if (Model.RhythmsByVerseCount != null) @if (Model.RhythmsByVerseCount != null)
@ -292,12 +292,12 @@
</tr> </tr>
<tr> <tr>
<td> <td>
<label for="rhythm-new-@poem.Id-@poem.SectionIndex">وزن انتخاب شده:</label> <label for="rhythm-new-@poem.Id-@poem.SectionIndex">منتخب بحر:</label>
<br /> <br />
<select id="rhythm-new-@poem.Id-@poem.SectionIndex" name="rhythm-new-@poem.Id-@poem.SectionIndex"> <select id="rhythm-new-@poem.Id-@poem.SectionIndex" name="rhythm-new-@poem.Id-@poem.SectionIndex">
@foreach (var rhythm in Model.RhythmsAlphabetically) @foreach (var rhythm in Model.RhythmsAlphabetically)
{ {
<option value="@rhythm.Rhythm">@(rhythm.Rhythm == "" ? "هیچکدام" : rhythm.Rhythm == "null" ? "وزن‌یابی نشده" : rhythm.Rhythm)</option> <option value="@rhythm.Rhythm">@(rhythm.Rhythm == "" ? "کوئی نہیں" : rhythm.Rhythm == "null" ? "بحر متعین نہیں" : rhythm.Rhythm)</option>
} }
</select> </select>
@ -305,7 +305,7 @@
</tr> </tr>
<tr> <tr>
<td> <td>
<a role="button" id="savecorrections-@poem.Id-@poem.SectionIndex" style="cursor:pointer;width:100%;color:white;background-color:green;display:block" onclick="sendSectionMetreSuggection(@poem.Id, @poem.SectionIndex)">ذخیره</a> <a role="button" id="savecorrections-@poem.Id-@poem.SectionIndex" style="cursor:pointer;width:100%;color:white;background-color:green;display:block" onclick="sendSectionMetreSuggection(@poem.Id, @poem.SectionIndex)">محفوظ کریں</a>
</td> </td>
</tr> </tr>
</table> </table>
@ -322,7 +322,7 @@
@Html.Raw(Model.PagingToolsHtml) @Html.Raw(Model.PagingToolsHtml)
<div class="spacer">&nbsp;</div> <div class="spacer">&nbsp;</div>
<div> <div>
تعداد کل نتایج: @Model.PaginationMetadata.totalCount.ToPersianNumbers() کل نتائج: @Model.PaginationMetadata.totalCount.ToPersianNumbers()
</div> </div>
} }

View File

@ -236,14 +236,14 @@ namespace DiwanRazor.Pages
if (!anyParamsGiven) if (!anyParamsGiven)
{ {
ViewData["Title"] = $"دیوان » شعر‌ها یا ابیات مشابه"; ViewData["Title"] = $"دیوان » ملتی جلتی تخلیقات";
return Page(); return Page();
} }
string title = "شعرها یا ابیات "; string title = "اشعار ";
if (PoetId != 0) if (PoetId != 0)
{ {
@ -255,7 +255,7 @@ namespace DiwanRazor.Pages
} }
if (!string.IsNullOrEmpty(Metre)) if (!string.IsNullOrEmpty(Metre))
{ {
title += $"با وزن «{Metre}»"; title += $"بحر: «{Metre}»";
} }
if (!string.IsNullOrEmpty(Rhyme)) if (!string.IsNullOrEmpty(Rhyme))
@ -268,7 +268,7 @@ namespace DiwanRazor.Pages
{ {
title += $"با"; title += $"با";
} }
title += $" حروف قافیهٔ «{Rhyme}»"; title += $" حروفِ قافیہ: «{Rhyme}»";
} }
@ -277,23 +277,23 @@ namespace DiwanRazor.Pages
var langModel = Languages.Where(l => l.Code == Language).FirstOrDefault(); var langModel = Languages.Where(l => l.Code == Language).FirstOrDefault();
if (langModel != null) if (langModel != null)
{ {
title += $" با زبان غالب «{langModel.Name}»"; title += $" غالب زبان: «{langModel.Name}»";
} }
} }
if (Format != DiwanPoemFormat.Unknown) if (Format != DiwanPoemFormat.Unknown)
{ {
title += $" در قالب شعری «{DiwanPoemFormatConvertor.GetString(Format)}»"; title += $" صنف: «{DiwanPoemFormatConvertor.GetString(Format)}»";
} }
if (CoupletCountsFrom != 0) if (CoupletCountsFrom != 0)
{ {
title += $" حداقل تعداد ابیات «{CoupletCountsFrom.ToPersianNumbers()}»"; title += $" اشعار کی کم از کم تعداد «{CoupletCountsFrom.ToPersianNumbers()}»";
} }
if (CoupletCountsTo != 0) if (CoupletCountsTo != 0)
{ {
title += $" حداکثر تعداد ابیات «{CoupletCountsTo.ToPersianNumbers()}»"; title += $" اشعار کی زیادہ سے زیادہ تعداد «{CoupletCountsTo.ToPersianNumbers()}»";
} }
if (CatId != 0) if (CatId != 0)
@ -316,7 +316,7 @@ namespace DiwanRazor.Pages
} }
CatFullTitle += " " + cat.Cat.Title; CatFullTitle += " " + cat.Cat.Title;
title += $" در بخش {CatFullTitle}"; title += $" حصے میں {CatFullTitle}";
} }
} }
else else
@ -327,7 +327,7 @@ namespace DiwanRazor.Pages
if (!string.IsNullOrEmpty(Query)) if (!string.IsNullOrEmpty(Query))
{ {
title += $" شامل کلیدواژهٔ «{Query}»"; title += $" کلیدی لفظ: «{Query}»";
} }
List<int> exceptPoetId = new List<int>(); List<int> exceptPoetId = new List<int>();
@ -377,7 +377,7 @@ namespace DiwanRazor.Pages
{ {
authorParam += $"&amp;c={CatId}"; authorParam += $"&amp;c={CatId}";
} }
title += $" - صفحهٔ {pageNumber.ToPersianNumbers()}"; title += $" - صفحہ {pageNumber.ToPersianNumbers()}";
if (PaginationMetadata.currentPage > 3) if (PaginationMetadata.currentPage > 3)
{ {
htmlText += $"<a href=\"/simi/?v={Uri.EscapeDataString(Metre)}&amp;g={Uri.EscapeDataString(Rhyme)}&amp;page=1{authorParam}&amp;l={Language}&amp;f={(int)Format}&amp;c1={CoupletCountsFrom}&amp;c2={CoupletCountsTo}{exceptUrl}\"><div class=\"circled-number\">۱</div></a> …"; htmlText += $"<a href=\"/simi/?v={Uri.EscapeDataString(Metre)}&amp;g={Uri.EscapeDataString(Rhyme)}&amp;page=1{authorParam}&amp;l={Language}&amp;f={(int)Format}&amp;c1={CoupletCountsFrom}&amp;c2={CoupletCountsTo}{exceptUrl}\"><div class=\"circled-number\">۱</div></a> …";
@ -419,7 +419,7 @@ namespace DiwanRazor.Pages
if (string.IsNullOrEmpty(rhythm)) if (string.IsNullOrEmpty(rhythm))
{ {
return new BadRequestObjectResult("وزن انتخاب نشده"); return new BadRequestObjectResult("بحر منتخب نہیں");
} }
var sectionResponse = await secureClient.GetAsync($"{APIRoot.Url}/api/diwan/sections/{poemId}"); var sectionResponse = await secureClient.GetAsync($"{APIRoot.Url}/api/diwan/sections/{poemId}");
@ -439,7 +439,7 @@ namespace DiwanRazor.Pages
if (null != JsonConvert.DeserializeObject<DiwanPoemSectionCorrectionViewModel>(await correctionResponse.Content.ReadAsStringAsync())) if (null != JsonConvert.DeserializeObject<DiwanPoemSectionCorrectionViewModel>(await correctionResponse.Content.ReadAsStringAsync()))
{ {
return new BadRequestObjectResult("شما پیشتر پیشنهادی تصحیحی برای این قطع ثبت کرده‌اید."); return new BadRequestObjectResult("آپ اس حصے کے لیے پہلے ہی تصحیح تجویز کر چکے ہیں.");
} }
DiwanPoemSectionCorrectionViewModel correction = new DiwanPoemSectionCorrectionViewModel() DiwanPoemSectionCorrectionViewModel correction = new DiwanPoemSectionCorrectionViewModel()

View File

@ -2,7 +2,7 @@
@{ @{
Layout = null; Layout = null;
ViewData["Title"] = "یافت می‌نشود ..."; ViewData["Title"] = "نہیں ملا ...";
} }
<!DOCTYPE html> <!DOCTYPE html>
@ -25,11 +25,11 @@
<h1><a href="/" title="دیوان"><img src="/image/gdap.png" alt="دیوان" style="width:auto;margin:auto;" /></a></h1> <h1><a href="/" title="دیوان"><img src="/image/gdap.png" alt="دیوان" style="width:auto;margin:auto;" /></a></h1>
</div> </div>
<h1 class="text-danger">یافت می‌نشود ....</h1> <h1 class="text-danger">نہیں ملا ....</h1>
<p class="text-danger"> <p class="text-danger">
صفحه یا شعر مورد نظر شما در این مجموعه وجود ندارد. مطلوبہ صفحہ یا شعر اس ذخیرے میں موجود نہیں.
</p> </p>
</body> </body>

View File

@ -2,7 +2,7 @@
@{ @{
Layout = null; Layout = null;
ViewData["Title"] = "در حال به‌روز رسانی ..."; ViewData["Title"] = "تازہ کاری جاری ہے ...";
} }
<!DOCTYPE html> <!DOCTYPE html>
@ -26,19 +26,14 @@
<h1><a href="/" title="دیوان"><img src="/image/gdap.png" alt="دیوان" style="width:auto;margin:auto;" /></a></h1> <h1><a href="/" title="دیوان"><img src="/image/gdap.png" alt="دیوان" style="width:auto;margin:auto;" /></a></h1>
</div> </div>
<h1 class="text-danger">دیوان در حال به روزرسانی است</h1> <h1 class="text-danger">دیوان کی تازہ کاری جاری ہے</h1>
<img src="~/image//maintenancemode.jpg" alt="در حال به‌روزرسانی" /> <img src="~/image//maintenancemode.jpg" alt="تازہ کاری جاری ہے" />
<p class="text-danger"> <p class="text-danger">
دیوان در حال به‌روزرسانی است. لطفاً لحظاتی دیگر مجدداً تلاش کنید. دیوان کی تازہ کاری جاری ہے۔ براہِ کرم کچھ دیر بعد دوبارہ کوشش کریں.
</p> </p>
<div class="century">دریافت دیوان رومیزی</div>
<div class="century"><a href="http://pozh.org/saaghar/">دریافت ساغر</a></div>
<div class="century">نرم‌افزارهای اندرویدی سازگار با دیوان</div>
<div class="century">نرم‌افزارهای سازگار با دیوان برای آیفون و آی‌پد</div>
<div class="century"><a href="https://github.com/ganjoor/">نرم‌افزارهای بازمتن دیوان</a></div>
</body> </body>
</html> </html>

View File

@ -32,7 +32,7 @@
<a class="cursor-pointer" role="button" onclick="window.location.reload()">ایک اور شعر</a> <a class="cursor-pointer" role="button" onclick="window.location.reload()">ایک اور شعر</a>
</p> </p>
<p> <p>
برای مطالعهٔ متن کامل شعر روی نام سخنور بزنید. مکمل شعر پڑھنے کے لیے شاعر کے نام پر کلک کریں.
</p> </p>
<p> <p>
</p> </p>