স্ট্রিং রিসোর্সগুলি কেন কোডের অভ্যন্তরে সাধারণত বহিরাগত থাকে না?


18

সাধারণত অনেক প্ল্যাটফর্মে আমি আমার স্ট্রিং রিসোর্সগুলি একটি .resx বা .xML ফাইলে লিখছি এবং তারপরে আমি কিছু প্ল্যাটফর্ম-নির্ভর পন্থা ব্যবহার করে সেগুলি পেয়ে যাচ্ছি।

অর্থাৎ iOS এ, আমি তাদের মাধ্যমে পেয়ে করছি NSBundle.MainBundle, এবং ব্যবহার করে Context.ResourcesAndroid এর উপর।

এই পদ্ধতির সুবিধা কী কী এবং কেন এটি কোডে সরাসরি অ্যাক্সেসযোগ্য নয়, সুতরাং, উদাহরণস্বরূপ:

  1. ক্রস প্ল্যাটফর্ম প্রকল্পে, কোনও প্ল্যাটফর্ম কোনও সংহত না করে সরাসরি এটি অ্যাক্সেস করতে পারে।

  2. সম্পদগুলি ভালভাবে নির্মিত বা না করা সম্পর্কে বিল্ডিংয়ের সময় কোনও উদ্বেগ নেই।

  3. কোডার বহুভাষ্য হ্যান্ডলিংয়ের মতো কার্যকারিতা ব্যবহার করতে পারে

দীর্ঘ গল্প সংক্ষিপ্ত: স্ট্রিং সংস্থানগুলি সেভাবে কাঠামোবদ্ধ হওয়ার কারণ কী?

[সম্পাদনা]

ধরা যাক যে আমার ফাইলটি অন্য প্রকল্পের মধ্যে ভাগ করা একটি "মূল" প্রকল্পের অংশ। (একটি পিসিএল, ক্রস-প্ল্যাটফর্ম প্রকল্প ফাইল কাঠামো সম্পর্কে চিন্তা করুন))

এবং ধরুন যে আমার ফাইলটি .resx / .xML ফাইলের সাথে সম্পূর্ণরূপে অনুরূপ, (আমি এক্সএমএল সমর্থিত নই, দুঃখিত!): প্যারামিটারগুলি প্যারামিট্রেস

সুতরাং, এটি মূলত একটি কাস্টম এক্সএমএল, যেখানে আপনি সঠিক স্ট্রিংটি পেতে কী / ভাষার দিকে নির্দেশ করেন।

আপনি যেমন কোনও অ্যাপের অভ্যন্তরে যে কোনও অ্যাক্সেসযোগ্য ফাইল যুক্ত করেন এবং পিসিএল ব্যবহার করে কোডিং স্ট্রিংয়ের সংস্থানগুলি অ্যাক্সেস করার জন্য সিস্টেমটি ঠিক তেমনই ফাইলটির আবেদনের অংশ হয়ে যায়। এটি কি অ্যাপ্লিকেশনগুলিতে একটি ওভারহেড যুক্ত করবে?



6
না, আমার উদ্বেগগুলি আন্তর্জাতিকীকরণ সম্পর্কে নয়, বরং আর্কিটেকচার এবং ক্রস-প্ল্যাটফর্ম সম্পর্কে, দুঃখিত।
লিয়ন পেল্টিয়ের

1
এই প্রশ্নটি যেকোন ধরণের সংস্থায় সাধারণীকরণ করা যায়, এমনকি এমনকি স্থানীয়করণ / আন্তর্জাতিকীকরণের স্বাচ্ছন্দ্যেও aside কোনও ধরণের সংস্থানকে কোড থেকে আলাদা রাখার সুবিধা কী কী? চিত্র বা অডিও ফাইলগুলি সাধারণত বাইনারি স্ট্রিং হিসাবে উত্সে এনকোড হয় না কেন? (ডেটা ইউআরআই অবশ্যই উপস্থিত রয়েছে তবে বড় ফাইলগুলির জন্য সাধারণত অবৈধ হয়)। অন্যরা ইতিমধ্যে কিছু বেশ ভাল উত্তর সরবরাহ করেছে, তবে আমি কেবল এটি চিহ্নিত করতে চেয়েছিলাম যে ব্যবহারকারী-পঠনযোগ্য স্ট্রিংগুলি কেবলমাত্র সংস্থানীয় প্রকার নয় যা বহিরাগত হওয়ার ফলে কোনও উপকার লাভ করে।
জ্যাব

উত্তর:


38

স্থানীয়করণ এবং আন্তর্জাতিকীকরণ,

স্ট্রিংগুলি বহিরাগত রাখার ফলে তাদের পুনরায় কম্পাইল করার প্রয়োজন ছাড়াই (পড়ুন: অনুবাদিত) পরিবর্তন করার অনুমতি দেয় (কেবলমাত্র একটি রিলিংক, এবং সর্বোত্তমভাবে একটি নতুন ফোল্ডারে ফেলে দেওয়া)।


এই পুনরায় সংযোগ বনাম রিকম্পাইল একটি ভাল কারণ, ধন্যবাদ।
লিয়ন পেলেটিয়ার

2
তবুও একমাত্র ব্যক্তি যিনি প্রশ্নটি বুঝতে পেরেছিলেন।
লিয়ন পেলেটিয়ার

3
@ratchetfreak খুব তাড়াতাড়ি এটি গ্রহণ করা খারাপ ফর্ম (কয়েক ঘন্টা মধ্যে অবশ্যই গণনা করা হয়।) বুদবুদ অন্যান্য উত্তর জন্য সময় দেয় না। এটি সহজ, এবং সঠিক এবং সঠিক ... তবে কেউ আগামীকাল (বা আগামী মাসের জন্য এই বিষয়ে আরও ভাল, আরও বিস্তারিত উত্তর আনতে পারে)।
ওয়ার্নারসিডি

3
অতিরিক্ত: কোনও এক্সএমএল ফাইল সম্পাদনা করা কোনও অনুবাদকের পক্ষে ঠিক হতে পারে, তবে তাদের আসল কোডের কাছাকাছি যেতে দেবেন না ...
দারখোগ 20

এখন প্রশ্নটি হল: "এই উত্তরটি কী এখনও ব্যাখ্যা করা ভাষার জন্য প্রয়োগ হয়?" আমি জিজ্ঞাসা করছি কারণ কোনও সংযোগ বা পুনরায় সংশোধন হবে না।
টমাস এডিং

10

আপনার যদি এমন কোনও ফাইল থাকে যা কেবল স্ট্রিংয়ের সংস্থান রাখে তবে আপনি কোনও সংস্থান-সংস্থাকে এই জাতীয় সংস্থান ফাইলটি দিতে এবং অনুবাদ পেতে পারেন। আমি অনুমান করতে পারি যে আপনি যদি কোনও ল্যাপারসনকে কিছু অনুবাদ করার জন্য প্রচুর কোডফিল দিতে হয় (তবে আপনার কোডটি কারও কাছে দিতে চাইছেন না) যদি আপনি কতটা কষ্ট পেতে পারেন তা আপনি কল্পনা করতে পারেন।


2
ভাল, প্রকল্পের মধ্যে অন্তর্ভুক্ত করা একটি ফাইল এবং একটি সংস্থান ফাইলের মধ্যে কোনও পার্থক্য নেই। সমস্যা নেই।
লিয়ন পেল্টিয়ের

আমি কোডগুলিতে সরাসরি সংস্থানগুলি অন্তর্ভুক্ত করার বিষয়ে এবং তারপরে প্রোগ্রামের ভিতরে সমস্ত কিছু পরিচালনা করার বিষয়ে কথা বলছি, সুতরাং এটি আরও পিসিএল / ক্রস-প্ল্যাটফর্ম বান্ধব।
লিয়ন পেল্টিয়ের

2
যদি আপনার সমস্ত স্ট্রিং রিসোর্স (ডিকশনারি ফিক্সিটন বা এর মতো কিছু) সহ একটি "কোড" ফাইল থাকে এবং এর মধ্যে কিছুই না থাকে তবে মূলত এটির তুলনায় মূলত একটি রিসোর্স ফাইল (তবে একক প্ল্যাটফর্মের জন্য একটি উদাহরণ, যেমন, অ্যান্ড্রয়েড করবে না) যেকোন উদ্দেশ্য-সি কোড নিন)। এটিতে অন্য কোড রয়েছে বা বাহ্যিক অনুবাদ পাওয়ার চেয়ে এটি যদি বেশ কয়েকটি ফাইলে বিভক্ত হয় তবে তা আরও শক্ত। ক্রস প্ল্যাটফর্ম ভিউতে, এক্সএমএলের মতো একটি পাঠ্য-বিন্যাসের সুবিধা রয়েছে যে আপনি যে কোনও ভাষা / প্ল্যাটফর্মে পড়তে এবং ব্যবহার করতে পারবেন (তবে আপনাকে এটি কিছুটা দিতে হবে)
ফ্লোর

7

আন্তর্জাতিকীকরণ / স্থানীয়করণের পাশাপাশি, পাঠ্যের স্ট্রিংগুলিকে আলাদা করে আলাদা করাও একজন প্রুফরিডারকে messages.${LOCALE}সত্যিকারের উত্স কোড ফাইলটি স্পর্শ না করে, বানান / ব্যাকরণ / বিরামচিহ্নগুলিতে বিচ্ছিন্ন করে সংশোধন জমা দিতে দেয় । কোড পরিবর্তনগুলিতে আপনার ব্ল্যাকআউট হতে পারে তবে এই জাতীয় পাঠ্য সংশোধন গ্রহণ করুন। আপনি যদি কোড এবং বার্তা উভয় ক্ষেত্রে একযোগে পরিবর্তনগুলি গ্রহণ করে থাকেন তবে এগুলি পৃথক রাখলে প্যাচগুলি মার্জ করা সহজ হয়, তবে শর্ত থাকে যে প্রুফ রিডার চেক আউট করার সময় কোড পরিবর্তনগুলি বিদ্যমান কোনও বার্তাকে পুনরায় সংজ্ঞা দেয় না messages.en_US

এছাড়াও, এটি কীভাবে বাস্তবায়িত হয়েছে তার উপর নির্ভর করে অ্যাপ্লিকেশনটিকে পুনরায় সংযোগ দেওয়ার প্রয়োজনও হতে পারে না। কোডটি messages.${LOCALE}নির্দিষ্ট বার্তার জন্য সহজভাবে 138 লাইনটি দখল করতে পারে , লাইন নম্বরটি রান টাইমে নির্ধারিত হয়।


0

আপনার ভাষা / প্ল্যাটফর্মটি কেবল স্ট্রিংয়ের স্থানীয়করণ বাস্তবায়নের সিদ্ধান্ত নিয়েছে। স্থানীয়করণের সমস্ত পদ্ধতির অনুবাদগুলি পেতে কোনও ধরণের বাহ্যিক সংস্থান ফাইলের প্রয়োজন। মূল ব্যথা হ'ল আপনি কীভাবে এই সংস্থানগুলি বজায় রাখছেন।

দেখে মনে হচ্ছে আপনার এই রিসোর্স ফাইলগুলি ম্যানুয়ালি বজায় রাখা দরকার যা বেশ বোঝা হতে পারে। এটি বারবার স্ট্রিংগুলি ভাগ করে নেওয়াও জটিল করে তোলে। আপনি যখন কেবল একটি ভাষা শিপিং করছেন তখন এটি করা এবং বোঝা আরও বেশি।

একটি সাধারণ বিকল্প হ'ল সোর্স কোডে অনুবাদযোগ্য স্ট্রিংগুলি চিহ্নিত করার জন্য স্বয়ংক্রিয়ভাবে এই স্ট্রিংগুলি স্ট্যান্ডার্ড পিও ফাইলগুলিতে উত্তোলন করার জন্য জিএনইউ গেটেক্সটেক্স পদ্ধতি যা ক্রস-প্ল্যাটফর্ম এবং ক্রস-ল্যাঙ্গুয়েজে দুর্দান্তভাবে কাজ করে। বিকাশকারী দৃষ্টিকোণ থেকে এটি কোনও দিন এক্সএমএল রিসোর্স ফাইলগুলির ম্যানুয়াল রক্ষণাবেক্ষণকে মারধর করে।

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