একাধিক (ইন-হাউস) প্রকল্পগুলির জন্য একটি স্ট্রিং অনুবাদ ডেটাবেস তৈরি করা


9

আমাদের কোম্পানিতে আমাদের বিদ্যমান এমএস-এসকিএল টেবিলের সাথে উইক স্টোরগুলির স্ট্রিং রয়েছে:

Id |     Key     | Language | Value 
 1 | hello-world |  nl-BE   | Hallo Wereld
 2 | hello-world |  en-GB   | Hello World

সিস্টেমে 3 টি ভাষা রয়েছে এবং আমি আশা করি এটি ভবিষ্যতে সর্বাধিক 10 টিতে বাড়বে

এই টেবিলটি একাধিক খুব আলাদা প্রকল্প (প্রায় 60 টি প্রকল্প, বেশিরভাগ ওয়েবসাইট / ওয়েব অ্যাপ্লিকেশন এবং কিছু ওয়েব পরিষেবাদি) দ্বারা পড়া হয়, যে প্রত্যেকে অনুবাদ ডাটাবেসের সাথে একটি ডাটাবেস সংযোগ খোলে, অনুবাদগুলিকে ক্যাশে করে

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

তারা মাঝে মাঝে স্ট্রিংগুলি সংশোধন করে না জেনে তারা এটি দিয়ে 7 টি প্রকল্প ভঙ্গ করছে।

এখন তাদের ঠিক কিছু টাইপ করতে হবে this.Translate("Hello World")এবং সিস্টেমটি বাকিটির যত্ন নেয়।

আমি অবশ্যই তাদেরকে এ জাতীয় কিছুতে বাধ্য করতে পারি this.Translate("Hello World","AwesomeApplication1")তবে মনে হয় এটি অনেকগুলি প্রকল্পের রিফ্যাক্টরিংয়ের জন্য যথেষ্ট প্রয়োজন।

আপনি কীভাবে এই সমাধানটি সরবরাহ করবেন? আপনি কীভাবে দেব হিসাবে অনুবাদে "প্রকল্পের নাম" সরবরাহ করবেন? আপনি এটি ডাটাবেসে কীভাবে সংরক্ষণ করবেন?

গুরুত্বপূর্ণ দ্রষ্টব্য: অনুবাদ পুনরায় ব্যবহার হ'ল কেন্দ্রীভূত ডাটাবেসের পুরো পয়েন্ট, তাই কোনও প্রকল্পে অনুবাদগুলি স্কোপ করে

1|hello-world|nl-BE|Hallo Wereld|MyAwesomeApplicatoin1
5|hello-world|nl-BE|Hallo Wereld!|MyAwesomeApplicatoin2

সত্যিই একটি চেয়েছিলেন বিকল্প নয়।

আমি এই জাতীয় কিছু পছন্দ করব:

1|hello-world|nl-BE|Hallo Wereld|MyAwesomeApplicatoin1,MyAwesomeApplicatoin2

বা কেবলমাত্র নাম টেবিলের মধ্যে রাখার সমতুল্য একটি বিদেশী কী

হালনাগাদ

আমি এখন পর্যন্ত এরকম কিছু নিয়ে এসেছি ডাটাবেসকে স্বাভাবিক করার পরামর্শের ভিত্তিতে:

//this allows me to distinquish if translations where added by developer or by translator

UPDATE2: পাঠ্যের পরিবর্তে edmx এখনো যোগ করেনি। লোকেরা যদি আগ্রহী হয় তবে আমি ডাব্লুসিএফ প্রকল্পটি গিথুব করতে পারি যে আমি এই ধারণাটি মুড়িয়ে দিচ্ছি যাতে অন্যান্য লোকেরা এটি পরীক্ষা করে ব্যবহার করতে পারে।


নরমালাইজেশন জন্য Ty। ভোট দিয়েছেন কি এবং ক। আমি বিশ্বাস করি, একটি বসন্ত জাভা গিথুব সাহায্য করবে।
tgkprog

উত্তর:


5

প্রাথমিক নোট # 1: অনুবাদগুলি কীভাবে এই মুহুর্তে রক্ষণাবেক্ষণ করা হচ্ছে তা আপনি আমাদের বলছেন না

প্রাথমিক নোট # 2: আপনার ডাটাবেসটি স্বাভাবিক করা হয়নি ized আপনি যেই সমাধান নিতে যাচ্ছেন, প্রথমে আপনার ডাটাবেসকে সাধারণ করুন । আপনি যদি এখন এটি না করেন তবে আপনি ভয়াবহ রক্ষণাবেক্ষণের সমস্যায় পরে যাবেন

এই আমি কি করতে হবে।

  1. আপনার অনুবাদ কলটি পুনরায় লিখুন যাতে এটি কোনও প্রোগ্রাম আইডি সার্ভারে ফিরে আসে

  2. ব্যাক এন্ড অনুবাদক স্ট্রিংটি ডাটাবেস টেবিলের মধ্যে উপস্থিত থাকলে এটি উপস্থিত না থাকলে এবং প্রোগ্রাম আইডি দিয়ে ট্যাগ করে দেবে

  3. স্ট্রিংটি ইতিমধ্যে বিদ্যমান থাকলে প্রোগ্রাম আইডিটি মূল প্রোগ্রাম আইডির সাথে মিলে যায় যা স্ট্রিংটি তৈরি হয়েছিল। যদি তা না হয় তবে একটি বিরোধের বিজ্ঞপ্তিটি ফিরিয়ে দিন।

প্রকারভেদ:

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

  • আপনি ডিবিতে স্ট্রিং ব্যবহার করা সমস্ত প্রোগ্রামের আইডি সংরক্ষণ করতে চাইতে পারেন, যাতে আপনি জানেন যে কোন প্রোগ্রামগুলির মধ্যে বিরোধ রয়েছে।

  • আপনি প্রতিটি স্বতন্ত্র ভাষায় এই 'মালিকানা' চিন্তাকে প্রসারিত করতে পারেন: একজন ব্যক্তি ইংরেজি করতে পারেন, অন্য ডাচ।

  • আপনার ডেটাবেসটি স্বাভাবিক হয়ে গেলে আপনি "প্রোগ্রাম এ ভাষা ভাষায় 1,2,3; বি 3 এবং 5 তে থাকে" এর মতো জটিলতা যুক্ত করেন

আমি আপনাকে একটি পৃথক 'অনুবাদ রক্ষণাবেক্ষণ' প্রোগ্রাম লেখার পরামর্শ দিচ্ছি যা আপনাকে অনুবাদগুলি অনুপস্থিত দেখায় etc.


1
আমি আপনার ধারণার উপর ভিত্তি করে আমার প্রশ্ন আপডেট করেছি
এমভিশন

5

যেহেতু তারা একটি 'এটি' রেফারেন্স করছে ... আপনি প্রকল্পের নামটি একবার 'এটি'র জন্য নির্ধারণ করতে পারেন (উদাহরণস্বরূপ কনস্ট্রাক্টারের মাধ্যমে) এবং অনুবাদ ফাংশনগুলিতে ইন্টারফেস কোডারদের জন্য পরিবর্তন করতে পারে না। হুডের নীচে, এটি কেবলমাত্র ডাটাবেস ক্যোয়ারীতে প্রকল্পের নাম যুক্ত করে। বিকল্পভাবে, আপনি নিজের নামে প্রকল্পের নাম জানার একটি উপায় 'এটি' সরবরাহ করতে পারেন। এটি আপনার ক্লাসগুলি কীভাবে কাঠামোগত করা যায় তার উপর নির্ভর করে।

সঞ্চয়ের জন্য, আপনি এর মতো কিছু করতে পারেন:

1 ! hello-world ! nl-EN ! Hello World  ! *
2 ! hello-world ! nl-EN ! Howdy, World ! CowboyApp
3 ! hello-world ! nl-EN ! Arrgh        ! PirateApp

সমস্ত অ্যাপ্লিকেশনগুলিতে একটি সাধারণ অনুবাদ প্রয়োগ করতে একটি ওয়াইল্ড কার্ড ব্যবহার করুন তবে আপনি যখন কোনও নির্দিষ্ট অ্যাপের জন্য কোনও অনুবাদকে ওভাররাইড করতে চান তবে নির্দিষ্ট অ্যাপ্লিকেশনটির নাম। এটি সদৃশগুলি সর্বনিম্নে নামিয়ে রাখবে।

কোন প্রোগ্রামটি কোন অনুবাদগুলি ব্যবহার করছে তা দেখতে আপনি এখন এটি জানতে পারবেন - আপনি যদি সেই তথ্যটি নিজেই না যেতে চান এবং ম্যানুয়ালি সেই তথ্যটি জড়ো করতে চান না, আপনি অনুবাদ অনুরোধগুলিতে লগ করতে পারেন।


এটিকে 'এই' শ্রেণিতে স্থানান্তরিত করার ধারণাটি আমার কাছে ভাল বলে মনে হচ্ছে, আমি মনে করি আমি প্রকল্পের নামটি ওয়েব / অ্যাপ.config ফাইলটিতে সরিয়ে নিয়ে যাব এবং সেখান থেকে এটি পড়ব। আপনি কি মনে করেন যে ওয়াইল্ড কার্ড / প্রকল্প-নামগুলির ধারণাটি 4000 টি অনুবাদ হিসাবে এমন কোনও কিছুর জন্য পরিমাপযোগ্য?
এমভিভিশন

3
বর্ধিতকরণ হিসাবে, ডাটাবেস বা ডিবিএল-তে একটি ট্রিগার যুক্ত করা যেতে পারে যা যখনই কোনও অনুবাদকৃত শব্দটি পড়া হয় তখন "সাবস্ক্রাইবড প্রোগ্রামগুলি" কলাম আপডেট করে।

কিভাবে ডাটাবেস ট্রিগার প্রকল্পের নাম জানতে পারে? (আমরা সত্তা ফ্রেমওয়ার্ক 4 ব্যবহার করছি)
এমভিভিশন

@ মুভিশন আমি দেখতে চাই না কেন - ভলিউম কোনও ইস্যুতে বেশি হওয়া উচিত নয়। যদি অ্যাপ্লিকেশন-সংক্রান্ত প্রচুর অনুবাদগুলি কেবল অ্যাপের নাম সন্নিবেশ করানো হয় তবে আপনি ধ্রুবকগুলিও কমানোর জন্য ধ্রুবকগুলি ব্যবহার করতে পারেন।
গ্র্যান্ডমাস্টারবি

এনভিএম আমি ভুল বুঝেছি। হ্যাঁ একটি ট্রিগার করতে পারে, এবং পড়ার সময় সেই স্টাফ
ট্রটটি

1

আপনার সমস্ত প্রকল্প যদি সি # তে লিখিত থাকে এবং সমস্ত অনুবাদক কলগুলি এ জাতীয় দেখায়

this.Translate("hello-world")

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

আপনার প্রোগ্রামের আসল কাঠামোর উপর নির্ভর করে বিকল্প হিসাবে আপনার সমাবেশগুলির আইএল কোড থেকে সেই তথ্যটি বের করা সহজ হতে পারে। আমি কিছুটা আগে খুব অনুরূপ কিছু করেছি অনুবাদগুলির উদ্দেশ্যেও, সমাবেশগুলি পার্স করার জন্য এই উদাহরণ কোডটি ব্যবহার করে ।


আমি এই জাতীয় সমাধান পছন্দ করতাম। তবে এই নতুন সিস্টেমটির সাথে প্রযোজনায় যাওয়ার আগে সমস্ত projects০ টি প্রকল্পের (কিছুটা আমারও নয়) পুরোপুরি পরীক্ষা করা দরকার। প্রকল্পের নামটি কলিং কোডে স্থানান্তরিত করার প্রস্তাবিত সমাধানটি ভাল কাজ করে এবং অনেক কম ঝামেলা সৃষ্টি করবে, যাইহোক ধন্যবাদ!
এমভিভিশন

1
@ মভিশন: আমি মনে করি বিপরীতটি সত্য। আপনি যদি রান সময় অনুবাদগুলির জন্য প্রকল্পের নামটি নির্ধারণ করেন তবে আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনার সমস্ত 60 টি প্রকল্পের জন্য প্রতিটি অনুবাদ সহ প্রতিটি ওয়েব পৃষ্ঠা একবারে কল করতে হবে যাতে আপনি সেগুলি লগইন করেছেন তা নিশ্চিত করার জন্য। উত্স বা সমাবেশগুলি স্থিতিশীলভাবে স্ক্যান করা যাইহোক, আপনাকে কোনও পরীক্ষার প্রয়োজন বা সম্পূর্ণ সিস্টেম চালনা ছাড়াই একটি সম্পূর্ণ তালিকা দেয়।
ডক ব্রাউন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.