এলসি_ * সেট করুন তবে এলসি_এলএল নয়


13

আমি একটি জার্মান (অস্ট্রিয়া) লোকেল (এ 4 পেপারের আকার, 24 ঘন্টা সময়, ইয়ে-মিমি-ডিডি) রাখতে চাই, তবে একটি ইংরেজি ভাষার ব্যবহারকারী ইন্টারফেস (আমি খারাপ অনুবাদ পছন্দ করি না)। আমি অনুভব করেছি যে এটি অর্জনের সঠিক উপায়টি LC_আমার নীচে ভেরিয়েবলগুলি সেট করা .bashrc(দয়া করে আমি ভুল হলে আমাকে সংশোধন করুন):

LC_MESSAGES=en_US.UTF-8
LC_$everythingelse=de_AT.UTF-8

LC_ setting Everythingelse প্রতি একক মান নির্ধারণের পরিবর্তে সেট করার জন্য আরও কি মার্জিত উপায় আছে? এলসি_এলএল সেট করা কোনও বিকল্প নয়, যেহেতু এটি এলসি_মেস্যাগেসের চেয়ে বেশি অগ্রাধিকার গ্রহণ করে:

$ export LC_ALL=de_AT.UTF_8
$ export LC_MESSAGES=en_US.UTF_8
$ echo $LC_MESSAGES
en_US.UTF_8
$ locale | grep LC_MESSAGES
LC_MESSAGES="de_AT.UTF_8"

পিএস: এটি একটি ভাগ করা মেশিন এবং আমি সুডোয়ার নই, সুতরাং সিস্টেম-ওয়াইড সেটিংস পরিবর্তন করা কোনও বিকল্প নয়।

উত্তর:


15

লোকেল সেটিংসের তিনটি সেট রয়েছে:

  • LANG, ফলব্যাক সেটিং, যদি আপনি কোনও বিভাগের জন্য কোনও মান নির্দিষ্ট না করেন। এটি ব্যবহারকারীদের জন্য তাদের লোকালগুলি একটি সহজ উপায়ে ইঙ্গিত করার জন্য অভিযুক্ত ended
  • LC_xxxপ্রতিটি বিভাগের জন্য ( xxxহতে পারে MESSAGES, TIMEইত্যাদি)।
  • LC_ALLসমস্ত সেটিংস ওভাররাইড করে। অ্যাপ্লিকেশনগুলির পক্ষে একটি পরিচিত লোকলে (সাধারণত C, ডিফল্ট লোকেল) কাজ করার জন্য সমস্ত সেটিংসকে ওভাররাইড করার একটি উপায় , সাধারণত যাতে বিভিন্ন কমান্ড পরিচিত ফর্ম্যাটে আউটপুট তৈরি করে।

সুতরাং আপনি সেট করতে পারেন LANG=de_AT.UTF-8এবং LC_MESSAGES=C( Cএটি ডিফল্ট লোকেল এবং এর অর্থ অপরিবর্তিত; বার্তাগুলির জন্য en_USসাধারণত অভিন্ন C)।

তবে, দুটি বিভাগ আছে যেখানে আমি ডিফল্ট পরিবর্তন করার প্রস্তাব দিই না, কারণ এটি প্রচুর প্রোগ্রামগুলি ভেঙে দেয়:

  • LC_COLLATEঅক্ষর সমাহার ক্রম হয়। এটি খুব কার্যকর নয় কারণ এটি কেবল অক্ষরগুলিকে বাছাই করার নির্দেশ দেয়, কীভাবে স্ট্রিংগুলি বাছাই করা যায় তা নয়। সরঞ্জামগুলি সম্বন্ধে জানুন যে সাজানোর কিভাবে স্ট্রিং ব্যবহার করবেন না LC_COLLATE। তদুপরি প্রচুর সরঞ্জাম " [a-z]সমস্ত 26 ASCII ছোট হাতের অক্ষর এবং অন্য কোনও ASCII অক্ষরগুলির সাথে মেলে না" জাতীয় জিনিসগুলি প্রত্যাশা করে , তবে এটি বেশিরভাগ অ-ডিফল্ট লোকালে (চেষ্টা করে echo B | LC_COLLATE=en_US grep '[a-z]') সত্য নয় ।
  • LC_NUMERICকীভাবে সংখ্যা প্রদর্শন করবেন তা নির্দেশ করে। বিশেষত, অনেক ভাষায়, এটি ভাসমান পয়েন্ট সংখ্যাগুলি দশমিক বিন্দুর ,পরিবর্তে ব্যবহার .করে। তবে সংখ্যাগুলি বিশ্লেষণকারী বেশিরভাগ প্রোগ্রামগুলি একটি ফিল্ড বিভাজক হিসাবে প্রত্যাশা করে .এবং আচরণ করে ,

সুতরাং আমি সুপারিশ

  • হয় স্পষ্টভাবে LC_COLLATE=C LC_NUMERIC=_C,
  • অথবা ফাঁকা LANGসেট না এবং শুধুমাত্র দরকারী শ্রেণীর জন্য একটি মান সেট ( LC_MESSAGES, LC_TIME, LC_PAPER, প্লাস LC_CTYPE(যার মান উপর নির্ভর করে পরিবর্তিত হতে পারে আপনার টার্মিনাল))।

G প্লাস LANGUAGEজিএনইউ লিবিসি সহ। আপনি যদি এটি সম্পর্কে না শুনে থাকেন তবে আপনি খুব বেশি মিস করছেন না।


বিস্তারিত উত্তর এবং ব্যাখ্যা জন্য ধন্যবাদ! আমি একটি স্থানীয় এলসি_নুমারিক চেষ্টা করব, যদিও, জার্মান কীবোর্ডগুলির নামপ্যাডের ,পরিবর্তে একটি .(দুর্ভাগ্যক্রমে), সুতরাং একটি বিন্দুর সাথে সংখ্যাগুলি প্রবেশ করা অসুবিধাজনক (এবং বেশিরভাগ অ্যাপ্লিকেশন একটি অ-মানক LC_NUMERIC দিয়ে সুন্দরভাবে কাজ করে বলে মনে হচ্ছে)। আমি আপনার LC_COLLATE উদাহরণটি পুরোপুরি বুঝতে পারি না: আমার সিস্টেমে আপনি যে উদাহরণ দিয়েছেন তা মেলে নাB
হেইনজি


10

Man পৃষ্ঠা লোকেল (7) বলেছেন:

ডিফল্ট লোকেল [...] নিম্নলিখিত পদক্ষেপগুলি ব্যবহার করে নির্ধারিত হয়:

  1. যদি একটি নন-নাল এনভায়রনমেন্ট ভেরিয়েবল LC_ALL থাকে তবে LC_ALL এর মান ব্যবহার করা হবে।

  2. উপরের [এলসি_ *] বিভাগগুলির মধ্যে একটির মতো একই নামের পরিবেশগত পরিবর্তনশীল যদি বিদ্যমান থাকে এবং নন-নাল হয় তবে এর মানটি এই বিভাগের জন্য ব্যবহৃত হয়।

  3. যদি একটি নন-নাল এনভায়রনমেন্ট ভেরিয়েবল LANG থাকে তবে LANG এর মান ব্যবহৃত হবে।

সুতরাং, আপনি LC_ALL এর নিম্ন-অগ্রাধিকার এনালগের এক ধরণের হিসাবে LANG ব্যবহার করতে পারেন: LANG এর মান সেট করুন de_ATএবং LC_MESSAGES এতে en_US:

$ env LC_MESSAGES=en_US.UTF-8 LANG=de_AT.UTF-8 locale | egrep '(MESSAGES|PAPER)'
LC_MESSAGES=en_US.UTF-8
LC_PAPER="de_AT.UTF-8"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.