برای جمع‌آوری آن --- تمرین کنید

در این تمرین، می‌خواهید یک ویژگی کاملاً جدید Chromium را اضافه کنید و همه چیزهایی را که قبلاً یاد گرفته‌اید جمع آوری کنید.

خلاصه‌ای از مدیریت محصول

جامعه‌ای از pixyها کشف شده است که در یک جنگل بارانی دور افتاده زندگی می کنند. مهم است که Chromium برای pixyها را در اسرع وقت به آنها تحویل دهیم.

لازمه کار این است که تمام stringهای رابط کاربری Chromium به زبان Pixie ترجمه شوند.

زمانی برای منتظر ماندن برای ترجمه‌های مناسب وجود ندارد، اما خوشبختانه زبان pixie بسیار نزدیک به انگلیسی است و به نظر می‌رسد که Rust crate ای وجود دارد که ترجمه را انجام می‌دهد.

در واقع، شما قبلا آن crate را در تمرین قبلی وارد کردید.

(بدیهی است که ترجمه های واقعی Chrome نیاز به دقت و تلاش باورنکردنی دارند. این مورد را ارسال نکنید!)

گام‌ها

ResourceBundle::MaybeMangleLocalizedString را تغییر دهید تا همه stringها را قبل از نمایش یکپارچه کند. در این build خاص Chromium، بدون در نظر گرفتن تنظیمات mangle_localized_strings_ همیشه باید این کار را انجام دهد.

اگر همه این تمرین‌ها را درست انجام داده‌اید، به شما تبریک می‌گوییم، باید Chrome را برای pixies ایجاد می‌کردید!

Chromium UI screenshot with uwu language
Students will likely need some hints here. Hints include:
  • ‏ UTF16 در مقابل UTF8. دانش‌آموزان باید بدانند که stringهای Rust همیشه UTF8 هستند و احتمالاً تصمیم خواهند گرفت که بهتر است تبدیل را در سمت C++ با استفاده از base::UTF16ToUTF8 انجام دهند و دوباره برگردند.
  • اگر دانش‌آموزان تصمیم بگیرند که تبدیل را در سمت Rust انجام دهند، باید [String::from_utf16](https://doc.rust-lang.org/std/string/struct.String.html#method را در نظر بگیرند. مدیریت خطا را در نظر بگیرید و در نظر داشته باشید که کدام نوع های پشتیبانی شده از CXX می توانند تعداد زیادی از u16 ها را منتقل کنند.
  • دانش‌آموزها ممکن است مرز C++/Rust را به روش های مختلف طراحی کنند، به عنوان مثال. گرفتن و برگرداندن stringها بر اساس مقدار، یا گرفتن یک مرجع قابل تغییر به یک string. اگر از یک مرجع قابل تغییر استفاده شود، CXX احتمالاً به دانش‌آموز می‌گوید که باید از Pin استفاده کند. ممکن است لازم باشد توضیح دهید Pin چه می‌کند و سپس توضیح دهید که چرا CXX به آن برای ارجاع‌های قابل تغییر به داده‌های C++ نیاز دارد: پاسخ این است که داده‌های C++ را نمی‌توان مانند داده‌های Rust جابه‌جا کرد، زیرا ممکن است حاوی نشانگرهای خودارجاعی (self-referential pointers) باشد.
  • هدف C++ حاوی ResourceBundle::MaybeMangleLocalizedString باید به هدف rust_static_library وابسته باشد. دانش‌آموز احتمالاً از قبل این کار را انجام داده است.
  • هدف rust_static_library باید به //third_party/rust/uwuify/v0_2:lib وابسته باشد.