/// <summary>
        /// Get resource from <see cref="dictionary"/> by converting <paramref name="key"/> to <see cref="string"/> with <see cref="lineFormat"/>.
        /// </summary>
        /// <param name="key"></param>
        /// <returns>resource or null</returns>
        public LineResourceBytes GetResourceBytes(ILine key)
        {
            byte[] result = null;
            string id     = lineFormat.Print(key);

            // Search dictionary
            if (dictionary.TryGetValue(id, out result))
            {
                return(new LineResourceBytes(key, result, LineStatus.ResolveOkFromAsset));
            }
            else
            {
                return(new LineResourceBytes(key, LineStatus.ResolveFailedNoValue));
            }
        }
 /// <summary>
 /// Build name for key.
 /// </summary>
 /// <param name="key"></param>
 /// <param name="policy">(optional)</param>
 /// <returns>full name string or null</returns>
 public static string Print(this ILine key, ILineFormat policy)
 {
     if (policy == null)
     {
         policy = LineParameterPrinter.Default;
     }
     return(policy.Print(key));
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public ILine GetLine(ILine key)
        {
            string      id      = namePolicy.Print(key);
            CultureInfo culture = null;

            key.TryGetCultureInfo(out culture);
            try
            {
                string value = culture == null?ResourceManager.GetString(id) : ResourceManager.GetString(id, culture);

                if (value == null)
                {
                    return(null);
                }
                IString str = ValueParser.Parse(value);
                return(key.String(str));
            }
            catch (Exception e)
            {
                throw new LocalizationException(id, e);
                //return null;
            }
        }