এনএসলোক্যালাইজড স্ট্রিং ব্যবহার করে সেরা অনুশীলন


140

আমি (অন্য সকলের মতো) NSLocalizedStringআমার অ্যাপ্লিকেশন স্থানীয়করণ করতে ব্যবহার করছি ।

দুর্ভাগ্যক্রমে, বেশ কয়েকটি "ত্রুটি" রয়েছে (অগত্যা এনএসলোক্যালাইজড স্ট্রিংয়েরই দোষ নয়), সহ

  • এক্সকোডে স্ট্রিংয়ের জন্য কোনও অটোকম্প্লেশন নেই। এটি কেবল ত্রুটি-প্রবণই নয়, ক্লান্তিকরও কাজ করে।
  • আপনি হয়ত স্ট্রিংটির নতুন সংজ্ঞা দিতে পারেন কারণ আপনি ইতিমধ্যে একটি সমমানের স্ট্রিংটি জানেন না (যেমন "দয়া করে পাসওয়ার্ড লিখুন" বনাম "প্রথমে পাসওয়ার্ড দিন")
  • একইভাবে স্বতঃপূরণ-ইস্যুতে, আপনাকে মন্তব্যগুলির স্ট্রিংগুলি "মনে রাখতে হবে" / কপিপাইস্ট করতে genstringহবে , অন্যথায় এক স্ট্রিংয়ের জন্য একাধিক মন্তব্যে শেষ হবে
  • genstringইতিমধ্যে কিছু স্ট্রিং স্থানীয়করণের পরে আপনি যদি ব্যবহার করতে চান তবে আপনার পুরাতন স্থানীয়করণটি হারাতে না পারা উচিত।
  • আপনার পুরো প্রকল্পটি একই স্ট্রিংগুলি ছড়িয়ে ছিটিয়ে রয়েছে। উদাহরণস্বরূপ, আপনি NSLocalizedString(@"Abort", @"Cancel action")সর্বত্র ব্যবহার করেছেন এবং তারপরে কোড পর্যালোচনা কোডটিকে NSLocalizedString(@"Cancel", @"Cancel action")আরও সুসংগত করার জন্য স্ট্রিংটির নাম পরিবর্তন করতে বলে।

আমি যা করি (এবং এসও-তে কিছু অনুসন্ধানের পরে আমি অনেক লোক এটি করতে পেরেছিলাম) এর একটি পৃথক strings.hফাইল থাকতে হবে যেখানে আমি #defineসমস্ত স্থানীয়করণ-কোড করি। উদাহরণ স্বরূপ

// In strings.h
#define NSLS_COMMON_CANCEL NSLocalizedString(@"Cancel", nil)
// Somewhere else
NSLog(@"%@", NSLS_COMMON_CANCEL);

এটি মূলত কোড-সমাপ্তি, ভেরিয়েবলের নামগুলি পরিবর্তনের জন্য একক জায়গা (সুতরাং আর জেনস্ট্রিংয়ের দরকার নেই) এবং অটো-রিফ্যাক্টরের একটি অনন্য কীওয়ার্ড সরবরাহ করে। যাইহোক, এটি সম্পূর্ণরূপে #defineবিবৃতিগুলির সাথে সমাপ্তির মূল্যে আসে যা সহজাতভাবে কাঠামোগত হয় না (যেমন লোকস্ট্রিং.কমন.ক্যান্সেল বা এর মতো কিছু)।

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


আমি এটি আপনার মতো প্রায় একই রকম করি। তবে আমি স্থানীয়করণের বিভিন্ন সমস্যার জন্য বিভিন্ন স্ট্রিং ফাইল তৈরি করতে (যেমন নিয়ামক, মডেল, ইত্যাদি) এবং একটি প্রাথমিক ডিফল্ট মান তৈরি করতে এনএসলোক্যালাইজড স্ট্রিংউইথডিফল্টভ্যালু ম্যাক্রো ব্যবহার করছি।
আনকা

দেখে মনে হচ্ছে xcode6 এর স্থানীয়করণে রফতানি একটি শিরোনাম ফাইলে ম্যাক্রো হিসাবে সংজ্ঞায়িত স্ট্রিংগুলি ধরে না। কেউ কি আমাকে নিশ্চিত করতে বা বলতে পারে যে আমি কী অনুপস্থিত হতে পারি? ধন্যবাদ ...!
জডস্টার

@ জুডস্টার, নতুন তহবিল সম্পাদক-> স্থানীয়করণের জন্য রফতানি করেও তা নিশ্চিত করতে পারেন, এটি শিরোনামের ফাইলটিতে উঠবে না
রেড

উত্তর:


100

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

স্ট্রিং ফাইল আপডেট করা হচ্ছে

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

আপনার স্ট্রিং নামকরণ

আপনি যদি NSLocalizedStringবিজ্ঞাপন হিসাবে ব্যবহার করেন:

NSLocalizedString(@"Cancel or continue?", @"Cancel notice message when a download takes too long to proceed");

আপনি আপনার কোডের অন্য অংশে একই স্ট্রিংটি সংজ্ঞায়িত করতে পারেন, যা একই ইংরেজি শব্দটির সাথে মতবিরোধ হতে পারে বিভিন্ন প্রসঙ্গে বিভিন্ন অর্থ হতে পারে ( OKএবং Cancelমনে রাখবেন)। এজন্য আমি সর্বদা একটি মডিউল-নির্দিষ্ট উপসর্গ এবং একটি খুব সুনির্দিষ্ট বিবরণ সহ অর্থহীন সমস্ত ক্যাপ স্ট্রিং ব্যবহার করি:

NSLocalizedString(@"DOWNLOAD_CANCEL_OR_CONTINUE", @"Cancel notice window title when a download takes too long to proceed");

বিভিন্ন জায়গায় একই স্ট্রিং ব্যবহার করে

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

আমি আশা করি আপনি এই টিপস সহ কোকো স্থানীয়করণের সাথে আরও উত্পাদনশীল হবেন!


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

তোমাকে অসংখ্য ধন্যবাদ. স্থানীয়করণ একটি ক্লান্তিকর প্রক্রিয়া, সঠিক সরঞ্জাম এবং কর্মপ্রবাহ থাকা একটি পার্থক্য তৈরি করে।
এনডিফ্রেড

17
আমি কখনই বুঝতে পারি নি যে গেটেক্সটাইল স্টাইলের স্থানীয়করণ কার্যাবলী কোনও অনুবাদকে কী হিসাবে ব্যবহার করে। আপনার মূল পাঠ্য পরিবর্তন হলে কী হবে? আপনার কী পরিবর্তন এবং আপনার সমস্ত স্থানীয় ফাইলগুলি কীগুলির জন্য পুরানো পাঠ্যটি ব্যবহার করছে। এটা আমার কাছে কখনই বোধগম্য হয়নি। আমি সর্বদা "home_button_text" এর মতো কী ব্যবহার করেছি যাতে এগুলি অনন্য এবং কখনও পরিবর্তন হয় না। আমার সমস্ত লোকালাইজেবল.স্ট্রিংস ফাইলগুলি বিশ্লেষণ করতে এবং স্থিতিশীল পদ্ধতি সহ একটি শ্রেণি ফাইল উত্পন্ন করার জন্য আমি একটি বাশ স্ক্রিপ্টও লিখেছি যা উপযুক্ত স্ট্রিং লোড করবে। এটি আমাকে কোড সমাপ্তি দেয়। একদিন আমি এটি উত্স খুলতে পারে।
মাইক ওয়েলার

2
আমি মনে করি আপনি genstringsনা মানে gestring
হিরোশি

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

31

এক্সকোডে স্ট্রিংগুলির জন্য অটোকম্প্লেশন হিসাবে, আপনি https://github.com/questbeat/Lin চেষ্টা করতে পারেন ।


3
এটি আসলে বেশ আশ্চর্যজনক। ম্যাক্রো তৈরি করার দরকার নেই।
বিউ নওভেল

1
পৃষ্ঠা পাওয়া যায় নি_
জুয়ানমি

1
@ জুয়ানমি নিহত লিঙ্কটি উল্লেখ করার জন্য ধন্যবাদ। আমি লিথটি গিথুব url দিয়ে প্রতিস্থাপন করেছি।
হিরোশি

24

এনডিফ্রেডের সাথে সম্মত হন তবে আমি এটি যুক্ত করতে চাই:

দ্বিতীয় প্যারামিটারটি ... ডিফল্ট মান হিসাবে ব্যবহার করা যায় !!

(এনএসলোক্যালাইজড স্ট্রিং উইথডুফল্টভ্যালু জেনস্ট্রিংয়ের সাথে সঠিকভাবে কাজ করে না, এজন্যই আমি এই প্রস্তাবটি প্রস্তাব করেছি)

এখানে আমার কাস্টম বাস্তবায়ন যা এনএসলোক্যালাইজড স্ট্রিং ব্যবহার করে যা মন্তব্যকে ডিফল্ট মান হিসাবে ব্যবহার করে:

ঘ। আপনার প্রাক সংকলিত শিরোনামে (.pch ফাইল), 'এনএসলোক্যালাইজড স্ট্রিং' ম্যাক্রোর নতুন সংজ্ঞা দিন:

// cutom NSLocalizedString that use macro comment as default value
#import "LocalizationHandlerUtil.h"

#undef NSLocalizedString
#define NSLocalizedString(key,_comment) [[LocalizationHandlerUtil singleton] localizedString:key  comment:_comment]

২. স্থানীয়করণ হ্যান্ডলার বাস্তবায়নের জন্য একটি শ্রেণি তৈরি করুন

#import "LocalizationHandlerUtil.h"

@implementation LocalizationHandlerUtil

static LocalizationHandlerUtil * singleton = nil;

+ (LocalizationHandlerUtil *)singleton
{
    return singleton;
}

__attribute__((constructor))
static void staticInit_singleton()
{
    singleton = [[LocalizationHandlerUtil alloc] init];
}

- (NSString *)localizedString:(NSString *)key comment:(NSString *)comment
{
    // default localized string loading
    NSString * localizedString = [[NSBundle mainBundle] localizedStringForKey:key value:key table:nil];

    // if (value == key) and comment is not nil -> returns comment
    if([localizedString isEqualToString:key] && comment !=nil)
        return comment;

    return localizedString;
}

@end

3. এটি ব্যবহার করুন!

আপনার অ্যাপ বিল্ড পর্বগুলিতে আপনি একটি রান স্ক্রিপ্ট যুক্ত করেছেন তা নিশ্চিত করুন যাতে আপনার স্থানীয়করণযোগ্য str স্ট্রিং ফাইল প্রতিটি বিল্ডে আপডেট করা হবে, অর্থাত্ আপনার স্থানীয়করণে নতুন স্ট্রিং যুক্ত করা হবে str স্ট্রিংস ফাইলটিতে:

আমার বিল্ড ফেজ স্ক্রিপ্টটি একটি শেল স্ক্রিপ্ট:

Shell: /bin/sh
Shell script content: find . -name \*.m | xargs genstrings -o MyClassesFolder

সুতরাং আপনি যখন নিজের কোডটিতে এই নতুন লাইনটি যুক্ত করবেন:

self.title = NSLocalizedString(@"view_settings_title", @"Settings");

তারপরে একটি বিল্ড সম্পাদন করুন, আপনার। / লোকালাইজেবল.স্প্রিপ্ট ফাইলটিতে এই নতুন লাইন থাকবে:

/* Settings */
"view_settings_title" = "view_settings_title";

এবং যেহেতু 'ভিউ_সেটিংস_টাইটেল' এর জন্য কী == মান, তাই কাস্টম লোকালাইজড স্ট্রিংহ্যান্ডলার মন্তব্যটি প্রত্যাবর্তন করবে, অর্থাৎ 'সেটিংস "

Voilà :-)


এআরসি ত্রুটিগুলি পাওয়া, নির্বাচকদের 'স্থানীয়করণের জন্য কোনও পরিচিত পদ্ধতি নয়: মন্তব্য: :(
मंगেশ

আমি মনে করি এটির কারণ স্থানীয়করণহ্যান্ডলার ইউটিএল অনুপস্থিত। আমি কোডটি আবার খুঁজে পাচ্ছি না ... কেবল স্থানীয়করণ হ্যান্ডলার ইউটি.এল.এক হেডার ফাইলটি তৈরি করার চেষ্টা করুন এবং এটি ঠিক হওয়া উচিত
পাস্কাল

আমি ফাইল তৈরি করেছি। আমি মনে করি এটি ফোল্ডার পাথ সমস্যার কারণে হয়েছে।
মঙ্গেশ

3

সুইফটে আমি নিম্নলিখিতটি ব্যবহার করছি, উদাহরণস্বরূপ, এই ক্ষেত্রে বোতামটির জন্য "হ্যাঁ":

NSLocalizedString("btn_yes", value: "Yes", comment: "Yes button")

value:ডিফল্ট পাঠ্য মানের জন্য নোটের ব্যবহারটি নোট করুন । প্রথম প্যারামিটারটি অনুবাদ আইডি হিসাবে কাজ করে। value:প্যারামিটারটি ব্যবহার করার সুবিধাটি হ'ল ডিফল্ট পাঠ্যটি পরে পরিবর্তন করা যেতে পারে তবে অনুবাদ আইডি একই থাকে। লোকালাইজেবল.স্ট্রিংস ফাইল থাকবে"btn_yes" = "Yes";

যদি value:প্যারামিটারটি ব্যবহার না করা হয় তবে প্রথম প্যারামিটারটি উভয়ের জন্যই ব্যবহৃত হবে: অনুবাদ আইডির জন্য এবং ডিফল্ট পাঠ্য মানের জন্যও। লোকালাইজেবল.স্ট্রিংস ফাইলটিতে অন্তর্ভুক্ত থাকবে "Yes" = "Yes";। লোকালাইজেশন ফাইলগুলি পরিচালনা করার এই ধরণটি অদ্ভুত বলে মনে হয়। বিশেষত যদি অনুবাদকৃত পাঠ্য দীর্ঘ হয় তবে আইডিটিও দীর্ঘ। যখনই ডিফল্ট পাঠ্যের মানটির কোনও অক্ষর পরিবর্তিত হয়, তখন অনুবাদ আইডিও পরিবর্তিত হয়। যখন বাহ্যিক অনুবাদ সিস্টেমগুলি ব্যবহৃত হয় তখন এটি সমস্যার দিকে নিয়ে যায়। অনুবাদ আইডি পরিবর্তন করা নতুন অনুবাদ পাঠ্য যুক্ত হিসাবে বোঝা যায় যা সর্বদা পছন্দসই নাও হতে পারে।


2

আমি একাধিক ভাষায় লোকালাইজেবল.স্ট্রিংগুলি বজায় রাখতে সহায়তা করার জন্য একটি স্ক্রিপ্ট লিখেছিলাম। যদিও এটি অটোমোપ્লেশনে সহায়তা করে না এটি। মার্জ করতে সহায়তা করে। কমান্ড ব্যবহার করে ফাইলগুলি স্ট্রিং করুন:

merge_strings.rb ja.lproj/Localizable.strings en.lproj/Localizable.strings

আরও তথ্যের জন্য দেখুন: https://github.com/hiroshi/ নিম_Stings

আপনারা কেউ কেউ এটিকে দরকারী মনে করেন আশা করি।


2

কেউ যদি একটি সুইফ্ট সমাধান খুঁজছেন। আপনি আমার সমাধানটি আমি এখানে একসাথে রেখেছি তা পরীক্ষা করতে চাইতে পারেন: সুইফটি লোকালাইজেশন

সেটআপের কয়েকটি পদক্ষেপের সাথে আপনার গুগল স্প্রেডশিটে একটি খুব নমনীয় স্থানীয়করণ (মন্তব্য, কাস্টম রঙ, হাইলাইট, ফন্ট, একাধিক পত্রক এবং আরও অনেক কিছু) থাকবে।

সংক্ষেপে, পদক্ষেপগুলি হ'ল: গুগল স্প্রেডশিট -> সিএসভি ফাইল -> স্থানীয়করণযোগ্য.স্ট্রিং

তদ্ব্যতীত, এটি লোকালাইজেবলস.সুইফ্ট, এমন একটি কাঠামো তৈরি করে যা আপনার জন্য কী পুনরুদ্ধার এবং ডিকোডিংয়ের ইন্টারফেসের মতো কাজ করে (আপনি কী থেকে স্ট্রিংকে ডিকোড করার জন্য ম্যানুয়ালি একটি উপায় উল্লেখ করতে হবে)।

কেন এই মহান?

  1. সমস্ত জায়গাগুলিতে আপনার আর একটি প্লেইন স্ট্রিং হিসাবে চাবি লাগবে না।
  2. সংকলনের সময় ভুল কীগুলি সনাক্ত করা হয়।
  3. এক্সকোড স্বয়ংসম্পূর্ণ করতে পারে।

এমন কোনও সরঞ্জাম রয়েছে যখন আপনার স্থানীয়করণযোগ্য কীটি স্বয়ংক্রিয়ভাবে পূর্ণ করতে পারে। প্রকৃত ভেরিয়েবলের উল্লেখটি নিশ্চিত করবে যে এটি সর্বদা একটি বৈধ কী, অন্যথায় এটি সংকলন করবে না।

// It's defined as computed static var, so it's up-to-date every time you call. 
// You can also have your custom retrieval method there.

button.setTitle(Localizables.login.button_title_login, forState: .Normal)

প্রকল্পটি শীটগুলিকে রূপান্তর করতে গুগল অ্যাপ স্ক্রিপ্ট ব্যবহার করে -> সিএসভি এবং পাইথন স্ক্রিপ্ট সিএসভি ফাইলগুলিতে রূপান্তর করতে -> লোকালাইজেবল.স্ট্রিংস কী সম্ভব তা জানতে আপনি এই উদাহরণের শীটটিতে একটি তাত্ক্ষণিক নজর রাখতে পারেন।


1

আইওএস 7 এবং এক্সকোড 5 দিয়ে আপনার 'স্থানীয়করণ.স্ট্রিংস' পদ্ধতিটি এড়ানো উচিত এবং নতুন 'বেস স্থানীয়করণ' পদ্ধতিটি ব্যবহার করা উচিত। কিছুটা টিউটোরিয়াল রয়েছে যদি আপনি 'বেস লোকালাইজেশন' এর জন্য গুগল করেন

অ্যাপল ডক: বেস স্থানীয়করণ


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

নতুন পদ্ধতির লিঙ্ক?
হাইপারবোলে

1
ইমো বেস লোকাইজেশন পদ্ধতিটি মূল্যহীন। গতিশীল স্ট্রিংগুলির জন্য আপনাকে এখনও অন্য লোকেশন ফাইলগুলি রাখতে হবে এবং এটি আপনার স্ট্রিংগুলি প্রচুর ফাইলের মধ্যে ছড়িয়ে রাখে। নিবস / স্টোরিবোর্ডের ভিতরে থাকা স্ট্রিংগুলি স্থানীয়করণযোগ্য কীগুলিতে স্বয়ংক্রিয়ভাবে স্থানীয়করণ করা যায় some কিছু লিব যেমন github.com/AliSoftware/OHAutoNIBi18n
রাফায়েল

0
#define PBLocalizedString(key, val) \

[[NSBundle mainBundle] localizedStringForKey:(key) value:(val) table:nil]

0

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

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

NSLocalizedString\(@(".*?")\s*,\s*nil\) 

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

এখানে স্ক্রিপ্ট আসে, আপনার কেবল সত্যই অংশ 3 প্রয়োজন। বাকিগুলি এখান থেকে আসে এমনটি আরও সহজে দেখতে হয়:

// Part 1. Get keys from one of the Localizable.strings
perl -ne 'print "$1\n" if /^\s*(".+")\s*=/' myapp/fr.lproj/Localizable.strings

// Part 2. Get keys from the source code
grep -n -h -Eo -r  'NSLocalizedString\(@(".*?")\s*,\s*nil\)' ./ | perl -ne 'print "$1\n" if /NSLocalizedString\(@(".+")\s*,\s*nil\)/'

// Part 3. Get Part 1 and 2 together.

comm -2 -3 <(grep -n -h -Eo -r  'NSLocalizedString\(@(".*?")\s*,\s*nil\)' ./ | perl -ne 'print "$1\n" if /NSLocalizedString\(@(".+")\s*,\s*nil\)/' | sort | uniq) <(perl -ne 'print "$1\n" if /^\s*(".+")\s*=/' myapp/fr.lproj/Localizable.strings | sort) | uniq >> fr-localization-delta.txt

আউটপুট ফাইলে এমন কীগুলি রয়েছে যা কোডে পাওয়া গেছে, তবে স্থানীয়করণযোগ্য strস্ট্রিংস ফাইলে নেই। এখানে একটি নমুনা দেওয়া হল:

"MPH"
"Map Direction"
"Max duration of a detailed recording, hours"
"Moving ..."
"My Track"
"New Trip"

অবশ্যই আরও পোলিশ করা যায়, তবে ভেবেছিলাম ভাগ করে নিই।

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