আমি কখন ugettext_lazy ব্যবহার করব?


141

Ugettext ব্যবহার এবং অনুবাদগুলির ugettext_lazyজন্য আমার একটি প্রশ্ন আছে । আমি শিখেছি যে মডেলগুলিতে আমার ব্যবহার করা উচিত ugettext_lazy, যখন ভিউ টেক্সটে। তবে অন্য কোন জায়গা আছে, যেখানে আমার ugettext_lazyখুব ব্যবহার করা উচিত ? ফর্ম সংজ্ঞা সম্পর্কে কি? তাদের মধ্যে কোনও পারফরম্যান্সের পার্থক্য রয়েছে?

সম্পাদনা করুন: এবং আরও একটি জিনিস। কখনও কখনও, পরিবর্তে ugettext_lazy, ugettext_noopব্যবহৃত হয়। ডকুমেন্টেশন হিসাবে বলা হয়েছে যে, ugettext_noopস্ট্রিংগুলি কেবল অনুবাদের জন্য চিহ্নিত করা হয়েছে এবং ব্যবহারকারীর কাছে প্রদর্শন করার আগে সর্বশেষতম মায়ের স্তরে অনুবাদ করা হয়েছে, তবে আমি এখানে কিছুটা বিভ্রান্ত হয়েছি, কি এটির মতো নয় ugettext_lazy? আমার পক্ষে এখনও সিদ্ধান্ত নেওয়া শক্ত, যা আমার মডেলগুলি এবং ফর্মগুলিতে ব্যবহার করা উচিত।

উত্তর:


197

ugettext() বনাম ugettext_lazy()

ফর্ম বা মডেলগুলির মতো সংজ্ঞাগুলিতে আপনার ব্যবহার করা উচিত ugettext_lazyকারণ এই সংজ্ঞাগুলির কোডটি কেবল একবার কার্যকর করা হয় (বেশিরভাগই জাঙ্গোর শুরুতে); ugettext_lazyস্ট্রিংগুলি অলস ফ্যাশনে অনুবাদ করে যার অর্থ, উদাহরণস্বরূপ। প্রতিবার আপনি যখন কোনও মডেলের কোনও বৈশিষ্ট্যের নাম অ্যাক্সেস করবেন স্ট্রিংটি নতুনভাবে অনুবাদ করা হবে - যা পুরোপুরি অর্থপূর্ণ হয় কারণ আপনি জাঙ্গো শুরু হওয়ার পর থেকে বিভিন্ন ভাষায় এই মডেলটির দিকে তাকিয়ে থাকতে পারেন!

মতামত এবং অনুরূপ ফাংশন কলগুলিতে আপনি ugettextসমস্যা ছাড়াই ব্যবহার করতে পারেন , কারণ যতবার দেখা ugettextহবে তাকে নতুনভাবে কার্যকর করা হবে, সুতরাং আপনি সর্বদা অনুরোধের উপযুক্ত উপযুক্ত অনুবাদ পাবেন!

সংক্রান্ত ugettext_noop()

ব্রাইস তার উত্তরে যেমন ইঙ্গিত করেছেন, এই ফাংশনটি একটি স্ট্রিংটিকে অনুবাদ হিসাবে নিষ্কাশনযোগ্য হিসাবে চিহ্নিত করে তবে অনিচ্ছাকৃত স্ট্রিংটি ফিরিয়ে দেয়। এটি দুটি জায়গায় স্ট্রিংটি ব্যবহারের জন্য দরকারী - অনুবাদ এবং অনূদিত। নিম্নলিখিত উদাহরণটি দেখুন:

import logging
from django.http import HttpResponse
from django.utils.translation import ugettext as _, ugettext_noop as _noop

def view(request):
    msg = _noop("An error has occurred")
    logging.error(msg)
    return HttpResponse(_(msg))

16
আমার মতে জাঙ্গোর ডকুমেন্টেশনের ব্যাখ্যার চেয়ে এটি আরও বোধগম্য। ধন্যবাদ @ বার্নহার্ড
উত্কু

14
ধন্যবাদ! Ugettext_lazy ব্যবহার না করার সময় এটি ব্যাখ্যা করাও সহায়ক হবে , যেমন এটি এমন জিনিসগুলিতে যখন পাস করা হয় যা "" স্থান, স্ট্রিং কনকেন্টেশন এবং অন্যদের মতো স্ট্রিংয়ের প্রত্যাশা করে; একটি অলস প্রক্সি বস্তু এই ক্ষেত্রে কাজ করবে না। অন্যথায় এই উত্তরটি বোঝায় যে আপনি কেবলমাত্র ugettext_lazy ব্যবহার করে সর্বদা সুরক্ষিত থাকেন।
মুরুনি

4
@ মৃুনি এই কেসগুলি কম গুরুত্ব দেয় কারণ চুপচাপ ভুল ভাষার অনুবাদটি ফিরিয়ে না দিয়ে আপনি যদি এগুলি করেন তবে তারা আপনাকে একটি ত্রুটি দেবে। এছাড়াও, আপনি ugettext_lazy দিয়ে "" স্থানটি ব্যবহার করতে পারেন, ফলাফলের জন্য আপনাকে কেবল str () কল করতে হবে যেমন lazytext = ugettext_lazy ('হ্যালো') এবং তারপরে পরে str (lazytext) ব্যবহার করুন place স্থান।
ফাবস্প্রো

1
msg = "An error has occurred"; logging.error(msg);return HttpResponse(_(msg))? why need বাইরে ?না থাকলে কী হবে? জ্যাঙ্গো _noopস্ট্রিংয়ের অনুবাদটির দরকার পড়বে না?
ওয়েজহংটু

1
অনুবাদ চলকগুলিতে কাজ করে। আবার, এখানে একটি অভিন্ন উদাহরণ ডক্স , তবে কেন _noop?
ওয়েজহংটু

17

_নুপের একটি দুর্দান্ত ব্যবহার হ'ল আপনি যখন বিকাশকারীদের জন্য ইংরেজিতে কোনও বার্তা লগ করতে চান তবে অনুবাদকৃত স্ট্রিং দর্শকের কাছে উপস্থাপন করুন। এর একটি উদাহরণ http://blog.bessas.me/posts/used-gettext-in-django/ এ রয়েছে


4
লিঙ্কটি নষ্ট হয়েছে ...
নলজোক

5

অলস সংস্করণ স্ট্রিংয়ের পরিবর্তে প্রক্সি অবজেক্ট দেয় এবং কিছু পরিস্থিতিতে এটি প্রত্যাশার মতো কাজ করে না। উদাহরণ স্বরূপ:

def get(self, request, format=None):
   search_str = request.GET.get('search', '')
   data = self.search(search_str)
   lst = []
   lst.append({'name': ugettext_lazy('Client'), 'result': data})
   return HttpResponse(json.dumps(lst), content_type='application/json')

ব্যর্থ হবে কারণ খুব শেষ লাইনটি জেএসএন-তে lst অবজেক্টকে সিরিয়ালাইজ করার চেষ্টা করবে এবং "ক্লায়েন্ট" এর স্ট্রিংয়ের পরিবর্তে এটির প্রক্সি অবজেক্ট থাকবে। প্রক্সি অবজেক্টটি জসন-এ সিরিয়ালাইজযোগ্য নয়।


2
এই ক্ষেত্রে আপনার ugettext ব্যবহার করা উচিত।
সুদীপ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.